
var startZoom = 15;
var count = 0;
var geocoder = new GClientGeocoder();
var existingMarkers = {};
var points;
var side_bar_html = "";
var icon = makeIcon('http://labs.google.com/ridefinder/images/','mm_20_blue.png','mm_20_shadow.png');
var mTabView;
var spoint;
var scount;


YAHOO.namespace ("wantedTable"); 

function westPanControl() {
        }

westPanControl.prototype = new GControl();

        westPanControl.prototype.initialize = function(map) {
                var container = document.createElement("div");
                var panDiv = document.createElement("div");
                this.setButtonStyle_(panDiv);
                container.appendChild(panDiv);
                panDiv.innerHTML = '<img src="http://www.google.com/mapfiles/west-mini.png" alt="Pan west" />'; 
                GEvent.addDomListener(panDiv, "click", function() {
                        map.panBy(new GSize(200,0));
                        });
                        map.getContainer().appendChild(container);
                        return container;
                }

                westPanControl.prototype.getDefaultPosition = function() {
                return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(15, 20));
                }

westPanControl.prototype.setButtonStyle_ = function(button) {
button.style.color = "#000000";
button.style.border = "none";
button.style.padding = "0px";
button.style.marginBottom = "1px";
button.style.width = "2em";
button.style.cursor = "pointer";
}

function  northPanControl() {
        }

northPanControl.prototype = new GControl();

        northPanControl.prototype.initialize = function(map) {
                var container = document.createElement("div");
                var panDiv = document.createElement("div");
                this.setButtonStyle_(panDiv);
                container.appendChild(panDiv);
                panDiv.innerHTML = '<img src="http://www.google.com/mapfiles/north-mini.png" alt="Pan north" />'; 
                GEvent.addDomListener(panDiv, "click", function() {
                        map.panBy(new GSize(0,200));
                        });
                        map.getContainer().appendChild(container);
                        return container;
                }

                northPanControl.prototype.getDefaultPosition = function() {
                return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(30, 5));
                }

northPanControl.prototype.setButtonStyle_ = function(button) {
button.style.color = "#000000";
button.style.border = "none";
button.style.padding = "0px";
button.style.marginBottom = "1px";
button.style.width = "2em";
button.style.cursor = "pointer";
}

function eastPanControl() {
        }

eastPanControl.prototype = new GControl();

        eastPanControl.prototype.initialize = function(map) {
                var container = document.createElement("div");
                var panDiv = document.createElement("div");
                this.setButtonStyle_(panDiv);
                container.appendChild(panDiv);
                panDiv.innerHTML = '<img src="http://www.google.com/mapfiles/east-mini.png" alt="Pan east" />'; 
                GEvent.addDomListener(panDiv, "click", function() {
                        map.panBy(new GSize(-200,0));
                        });
                        map.getContainer().appendChild(container);
                        return container;
                }

                eastPanControl.prototype.getDefaultPosition = function() {
                return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(45, 20));
                }

eastPanControl.prototype.setButtonStyle_ = function(button) {
button.style.color = "#000000";
button.style.border = "none";
button.style.padding = "0px";
button.style.marginBottom = "1px";
button.style.width = "2em";
button.style.cursor = "pointer";
}

function southPanControl() {
        }

southPanControl.prototype = new GControl();

        southPanControl.prototype.initialize = function(map) {
                var container = document.createElement("div");
                var panDiv = document.createElement("div");
                this.setButtonStyle_(panDiv);
                container.appendChild(panDiv);
                panDiv.innerHTML = '<img src="http://www.google.com/mapfiles/south-mini.png" alt="Pan south" />'; 
                GEvent.addDomListener(panDiv, "click", function() {
                        map.panBy(new GSize(0,-200));
                        });
                        map.getContainer().appendChild(container);
                        return container;
                }

                southPanControl.prototype.getDefaultPosition = function() {
                return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(30, 35));
                }

southPanControl.prototype.setButtonStyle_ = function(button) {
button.style.color = "#000000";
button.style.border = "none";
button.style.padding = "0px";
button.style.marginBottom = "1px";
button.style.width = "2em";
button.style.cursor = "pointer";
}

function shareMap() {
var sendmail = document.getElementById("semail").value;
var recemail = document.getElementById("remail").value;

if (validateEmail(sendmail)==0) {
        alert(sendmail + " Doesn't look like a valid e-mail address");
        document.getElementById("semail").focus();
        return false;
        }
else if (validateEmail(recemail)==0) {
        alert(recemail + " Doesn't look like a valid e-mail address");
        document.getElementById("remail").focus();
        }
else {
        var lat = map.getCenter().lat();
        var lng = map.getCenter().lng();
        var murl = "mshare.php?f=" + recemail + "&t=" + sendmail + "&lat=" + lat + "&lng=" + lng + '&d=' + d;
        var request = GXmlHttp.create();
        request.open('GET', murl, true);
        request.onreadystatechange = function() {
                if (request.readyState == 4) {
                        var responder = request.responseText;
                        document.getElementById("sentMail").innerHTML = responder;
                                        
                        }
                }

        request.send(null);
        }
}

function validateEmail(email) {
        var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
        if(reg.test(email) == false) {
        return 0;
        }
return 1;
}

function checkAddress() {
        var address = document.getElementById("address").value;
        address+= ', Wilmington, NC';
        geocoder.getLocations(
                address,
                function(response) {
			if (response.Status.code != 200) {
                        document.getElementById("uAddress").innerHTML = "Google couldn't find " + address + ". Try again.";
                        }

			else {
				place = response.Placemark[0];
				}
			if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName != "Wilmington") {
				document.getElementById("uAddress").innerHTML = "Google couldn't find " + address + ". Try again.";
                        }

			else {
                        document.getElementById("uAddress").innerHTML = "Centering on " + address + ".";
                        map.setCenter(new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]), startZoom);
                        updateMarkers2();
                        }
                });
                
        }

function init() {
        map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
        var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(200,300));
        pos.apply(document.getElementById("waiting_icon"));
        map.getContainer().appendChild(document.getElementById("waiting_icon")); 
        updateMarkers1();
        var ovcontrol = new GOverviewMapControl(new GSize(200,200));
        map.addControl(ovcontrol);
        map.addControl(new westPanControl());
        map.addControl(new northPanControl());
        map.addControl(new eastPanControl());
        map.addControl(new southPanControl());
        map.addControl(new GMapTypeControl());
	map.disableDoubleClickZoom();
        GEvent.addListener(map,'zoomend',function() {
                updateMarkers2();
        });
        GEvent.addListener(map,'move',function() {
                if (count == 0) {
                        document.getElementById("tab1").innerHTML = "Loading markers ...";
                        }

        });
        GEvent.addListener(map,'moveend',function() {
                if (count == 0) {
                        updateMarkers2();
                        }
                count = 0;
        });
        (function() {
                mTabView = new YAHOO.widget.TabView('mtabs');
                })();

        (function() {
                var tabView = new YAHOO.widget.TabView('wtabs');
                })();

}

function myclick(k) {
		GEvent.trigger(existingMarkers[k], "click");
        }
function makeIcon (iconURL, iconImage, iconShadow) {
        
        iconImage = iconURL + iconImage;
        iconShadow = iconURL + iconShadow;
        var icon = new GIcon();
        icon.image  = iconImage;
        icon.iconSize = new GSize(12,20);
        icon.shadow = iconShadow;
        icon.shadowSize = new GSize(22,20);
        icon.iconAnchor = new GPoint(7,18);
        icon.infoWindowAnchor = new GPoint(10,3);
        return icon;
        }  

function updateMarkers1() {

        document.getElementById("waiting_icon").style.visibility="visible";
        var mapBounds = map.getBounds();
        var request = GXmlHttp.create();
        var requestpage = 'data.php' + '?d=' + d;
        request.open('GET', requestpage, true);
        request.onreadystatechange = function() {
                if (request.readyState == 4) {
                        document.getElementById("waiting_icon").style.visibility="hidden";
                        var jscript = request.responseText;
                        eval(jscript);
                        for (i in points) {
                                if (points[i].lat>0) {
                                        var point = new GLatLng(points[i].lat,points[i].lng);
                                        if(!existingMarkers[i] && mapBounds.contains(point)) {
                                                existingMarkers[i] = createMarker(point,points[i].id,points[i].address,points[i].time,points[i].date,icon);
                                                document.getElementById("tab1").innerHTML += "<a href=\"javascript:myclick('" + i + "')\">" + points[i].address + '<\/a><br>';
                                        
                                                map.addOverlay(existingMarkers[i]);
                                        }
                                }
                        }
                }
        }

        request.send(null);
}
function updateMarkers2() {

        var mapBounds = map.getBounds();

        for(k in existingMarkers) {
                if(!mapBounds.contains(existingMarkers[k].getPoint())) {
                        map.removeOverlay(existingMarkers[k]);
                        delete existingMarkers[k];
                }
        }
        for (k in points) {
                if (points[k].lat>0) {
                        var latlng = new GLatLng(points[k].lat,points[k].lng);
                        if (!existingMarkers[k] && mapBounds.contains(latlng)) {
                                var icon = makeIcon('http://labs.google.com/ridefinder/images/','mm_20_blue.png','mm_20_shadow.png');
                                existingMarkers[k] = createMarker(latlng,points[k].id,points[k].address,points[k].time,points[k].date,icon);
                                map.addOverlay(existingMarkers[k]);
                        }
                }
        }
        side_bar_html = "";
        document.getElementById("tab1").innerHTML = side_bar_html;
        for (i in existingMarkers) {
                side_bar_html += "<a href=\"javascript:myclick('" + i + "')\">" + points[i].address + '<\/a><br>';
                }
        document.getElementById("tab1").innerHTML = side_bar_html;
	if(scount == 1 && existingMarkers[spoint]) {
		scount=0;
		GEvent.trigger(existingMarkers[spoint], "click");
		}
}


function createMarker(point,id,address,time,date,icon) {
        var marker = new GMarker(point,{draggable:true,bouncy:false,autoPan:true,title:address,icon:icon});
        GEvent.addListener(marker, 'click', function() {
                count=1;
                map.savePosition();
                var markerHTML = "<div id=\"iWindow\" style=\"font: 12px Gill Sans, sans-serif; overflow:auto; width: 225px; height: 100px\"><table width=223><tbody><tr><td><strong>" + address + "<\/strong><br/>"
                + time + "<br />" + date + "<br />Case #: " + id + "<\/td><\/tr><\/tbody><\/table><\/div>";
                marker.openInfoWindowHtml(markerHTML);
        });
        GEvent.addListener(marker, 'infowindowclose',
        function() {
                map.returnToSavedPosition();
        });
        return marker;
}


YAHOO.util.Event.addListener(window, "load", function() {
            YAHOO.wantedTable.ClientPagination = new function() {
                var myColumnDefs = [
                {key:"address", label:"Address",sortable:true},
                {key:"off_date", label:"Date",formatter:"date", sortable:true, sortOptions:{defaultOrder:"desc"}},
                {key:"off_time", label:"Time",sortable:false},
                {key:"id", label:"Case #",sortable:true}
          ];

        var searchPage = 'search.php?';
        
          this.myDataSource = new YAHOO.util.DataSource(searchPage);
          this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
          this.myDataSource.responseSchema = {
                resultsList: "records",
                fields: [{key:"address",parser:YAHOO.util.DataSource.parseString}, 
			{key:"off_date",parser:YAHOO.util.DataSource.parseDate}, 			{key:"off_time",parser:YAHOO.util.DataSource.parseString}, 			{key:"id",parser:YAHOO.util.DataSource.parseString}
			 ]
          };

          var oConfigs = {
                    paginated:true,
                    paginator: {
                            pageLinks: 12, // Show links to all pages 

                          rowsPerPage: 10,
                          dropdownOptions: [10,25,50]
                    },
                    initialRequest: ""
          };
          this.myDataTable = new YAHOO.widget.DataTable("dbresults", myColumnDefs,
                 this.myDataSource, oConfigs);
                };
});
var sButton = document.getElementById("sbutton");
function sDB(e) {
getCsv();

                YAHOO.wantedTable.ClientPagination = new function() {
                var myColumnDefs = [
                {key:"address", label:"Address",sortable:true},
                {key:"off_date", label:"Date",formatter:"date", sortable:true, sortOptions:{defaultOrder:"desc"}},
                {key:"off_time", label:"Time", sortable:false},
                {key:"id", label:"Case #",sortable:true}
          ];

        var searchPage = 'search.php?';
        var searchAddress = escape(document.getElementById("dbaddress").value);
        var searchTime = escape(document.getElementById("dbtime").value);
        
        searchPage += '&a=' + searchAddress + '&d=' + searchTime;
        
          this.myDataSource = new YAHOO.util.DataSource(searchPage);
          this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
          this.myDataSource.responseSchema = {
                resultsList: "records",
                fields: [{key:"address",parser:YAHOO.util.DataSource.parseString},
                        {key:"off_date",parser:YAHOO.util.DataSource.parseDate},                        {key:"off_time",parser:YAHOO.util.DataSource.parseString},                        {key:"id",parser:YAHOO.util.DataSource.parseString}
                         ]
          };

          var oConfigs = {
                    paginated:true,
                    paginator: {
                            pageLinks: 12, // Show links to all pages 

                          rowsPerPage: 10,
                          dropdownOptions: [10,25,50]
                    },
                    initialRequest: ""
          };
          this.myDataTable = new YAHOO.widget.DataTable("dbresults", myColumnDefs,
                 this.myDataSource, oConfigs);
                };
}


function mapThis(lat,lng,point) {
	spoint = point;
	scount = 1;
	rCenterMap(lat,lng);
	mTabView.set('activeIndex',0); 
        }

function rCenterMap(lat,lng) {

map.closeInfoWindow();
	map.setCenter(new GLatLng(lat,lng,startZoom));

//Kludge to get IE to center correctly. *sigh*
	if (navigator.appName == "Microsoft Internet Explorer") {
	      map.panBy(new GSize(100,100));
		}
	}
function getCsv() {
var csvURL = 'http://www.star-newsmedia.com/cr/ta/csv.php?';
var csvParams = 'a=' + escape(document.getElementById("dbaddress").value) + '&d=' + escape(document.getElementById("dbtime").value);
csvURL += csvParams;
csvLink = '<a href="' + csvURL + '">Download these search results to an Excel spreadsheet</a>';
document.getElementById("csvdownload").innerHTML = csvLink;
}

function viewDay() {
var d = document.getElementById("vday").value;
var lat = map.getCenter().lat();
var lng = map.getCenter().lng();
var page = 'http://www.star-newsmedia.com/cr/ta/index.php?';
//var page = 'http://www.starnewsonline.com/section/news4603&';
page += '&lat=' + lat + '&lng=' + lng + '&d=' + d;
document.location = page;
}
