
DS = function() {

  var $D = YAHOO.util.Dom;
  var $E = YAHOO.util.Event;
  var $A = YAHOO.util.Anim;
  var $M = YAHOO.util.Motion;
  var $ = $D.get;

  var gMap;

  var addToMap = function(el) {

    var geocoder = new GClientGeocoder();

    var address = el.getElementsByTagName('address')[0].getElementsByTagName('span');
    var str_address = '';
    var title = '<div class="map-dialog">'+el.innerHTML+'</div>';

    for(var i = 1; i < address.length; i++) {
      if($D.hasClass(address[i], 'lat')) {
        var lat = address[i].innerHTML;
      } else if($D.hasClass(address[i], 'lon')) {
        var lon = address[i].innerHTML;
      } else {
        str_address += address[i].innerHTML+' ';
      }
    }

    if(lat != '0.0000000000' && lon != '0.0000000000') {
      var point = new GLatLng(lat, lon);
      DS.gMap.setCenter(point, 13);
      var marker = new GMarker(point);
      DS.gMap.addOverlay(marker);
      marker.openInfoWindowHtml(title);
    } else {
      geocoder.getLatLng(
        str_address,
        function(point) {
          if (!point) {
            alert('Sorry, "'+str_address+'" was not found in Google Maps.');
          } else {
            DS.gMap.setCenter(point, 13);
            var marker = new GMarker(point);
            GEvent.addListener(marker, "click", function() {
              marker.openInfoWindowHtml(title);
            });
            DS.gMap.addOverlay(marker);
            marker.openInfoWindowHtml(title);
          }
        }
      );
    }
  };

  return {
    gMap: gMap,

    init: function() {

      if($('addresses')) {

        var els = $('addresses').getElementsByTagName('li');
        var l = Math.ceil(els.length / 3);
        var col1 = document.createElement('ul');
        var col2 = document.createElement('ul');
        var col3 = document.createElement('ul');
        $D.addClass([col1, col2, col3], 'resultset');

        for(var i = 0; i < els.length; i++) {
          if(i < l) {
            col1.appendChild(els[i].cloneNode(true));
          } else if (i < (l * 2)) {
            col2.appendChild(els[i].cloneNode(true));
          } else if (i < (l * 3)) {
            col3.appendChild(els[i].cloneNode(true));
          }
        }

        var orig = $('addresses').getElementsByTagName('ul')[0];
        $('addresses').replaceChild(col1, orig);
        $('addresses').appendChild(col2);
        $('addresses').appendChild(col3);

        var gDialog = new YAHOO.widget.Dialog("gmap",
          { 
            draggable: false,
            height : "484px",
            width : "645px",
            fixedcenter : true,
            visible : false,
            modal: true,
            close: false,
            underlay: false,
            easing: YAHOO.util.Easing.easeBothStrong
          }
        );
        
        var dialogHead = document.createElement('div');
        var dialogClose = document.createElement('a');
        var dialogH1 = document.createElement('h1');
        dialogClose.id = 'gDialog-close';
        dialogClose.innerHTML = 'close';
        $D.addClass(dialogHead, 'photoViewer-header');
        $D.addClass(dialogClose, 'photoViewer-close');
        dialogHead.appendChild(dialogH1);
        dialogHead.appendChild(dialogClose);
        
        var dialogBody = document.createElement('div');
        var dialogMap = document.createElement('div');
        $D.addClass(dialogBody, 'photoViewer-imageCont');
        dialogMap.id = 'gDialog-map';
        dialogBody.appendChild(dialogMap);

        gDialog.setHeader(dialogHead);
        gDialog.setBody(dialogBody);

        gDialog.render(document.body);

        $D.addClass('gDialog', 'photoViewer-viewer');
        $D.addClass('gDialog_mask', 'photoViewer-mask');
        
        $E.on('gDialog-close', 'click', function(e) {
          $E.stopEvent(e);
          gDialog.hide();
        });

        $E.on($('addresses').getElementsByTagName('li'), 'click', function(e) {
          $E.stopEvent(e);
          DS.gMap = new GMap2(document.getElementById("gDialog-map"));
          var mapTypeControl = new GMapTypeControl();
          var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
          var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,10));
          DS.gMap.addControl(mapTypeControl, topRight);
          DS.gMap.addControl(new GLargeMapControl());

          var near = $D.getElementsByClassName(this.className, 'li', 'addresses');
          for(var i = 1; i < near.length; i++) {
            if(near[i] != this) {
              addToMap(near[i]);
            }
          }
          addToMap(this);

          gDialog.show();

        });
        
      }



    }

  }


}();

YAHOO.util.Event.onContentReady('content', DS.init);
