//<![CDATA[

// GLOBALS
var map;
var marker;
var point = new GLatLng(40.04443758460856, -95.80078125);
var bounds = new GLatLngBounds();
var activeDiv;

var orangeflag = new GIcon();
orangeflag.image = "http://yardsalead.com/images/map/orangeflag.png";
orangeflag.shadow = "http://yardsalead.com/images/map/orangeflag-shadow.png";
orangeflag.transparent = "http://yardsalead.com/images/map/orangeflag.png";
orangeflag.iconSize = new GSize(35, 35);
orangeflag.shadowSize = new GSize(52, 35);
orangeflag.iconAnchor = new GPoint(0, 30);
orangeflag.infoWindowAnchor = new GPoint(25, 15);
orangeflag.infoShadowAnchor = new GPoint(18, 25);

var yardsaleflag = new GIcon();
yardsaleflag.image = "http://yardsalead.com/images/map/yardsale_flag.png";
yardsaleflag.shadow = "http://yardsalead.com/images/map/shadow.png";
yardsaleflag.transparent = "http://yardsalead.com/images/map/yardsale_flag.png";
yardsaleflag.iconSize = new GSize(30, 30);
yardsaleflag.shadowSize = new GSize(45, 30);
yardsaleflag.iconAnchor = new GPoint(0, 30);
yardsaleflag.infoWindowAnchor = new GPoint(25, 15);
yardsaleflag.infoShadowAnchor = new GPoint(18, 25);

var auctionflag = new GIcon();
auctionflag.image = "http://yardsalead.com/images/map/auction_flag.png";
auctionflag.shadow = "http://yardsalead.com/images/map/shadow.png";
auctionflag.transparent = "http://yardsalead.com/images/map/auction_flag.png";
auctionflag.iconSize = new GSize(30, 30);
auctionflag.shadowSize = new GSize(45, 30);
auctionflag.iconAnchor = new GPoint(0, 30);
auctionflag.infoWindowAnchor = new GPoint(25, 15);
auctionflag.infoShadowAnchor = new GPoint(18, 25);

var estateflag = new GIcon();
estateflag.image = "http://yardsalead.com/images/map/estate_flag.png";
estateflag.shadow = "http://yardsalead.com/images/map/shadow.png";
estateflag.transparent = "http://yardsalead.com/images/map/estate_flag.png";
estateflag.iconSize = new GSize(30, 30);
estateflag.shadowSize = new GSize(45, 30);
estateflag.iconAnchor = new GPoint(0, 30);
estateflag.infoWindowAnchor = new GPoint(25, 15);
estateflag.infoShadowAnchor = new GPoint(18, 25);

var house = new GIcon();
house.image = "http://yardsalead.com/images/map/house.png";
house.shadow = "http://yardsalead.com/images/map/house-shadow.png";
house.iconSize = new GSize(35, 35);
house.shadowSize = new GSize(52, 35);
house.iconAnchor = new GPoint(17, 35);
house.infoWindowAnchor = new GPoint(9, 34);
house.infoShadowAnchor = new GPoint(18, 25);

function load(type) {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));

		map.addControl(new GLargeMapControl());
		map.addControl(new GScaleControl());
		//map.addControl(new GOverviewMapControl());
		
		//map.setCenter(point,6);

		if(type != 'mini') {
			autoGeo();
		} else {
			loadUserXML();
		}

		/*marker = createMarker(point,'location');
		map.addOverlay(marker);

		GEvent.addListener(marker, "dragend", function() {
			var coords = marker.getPoint();
			var lat = coords.y;
			var lng = coords.x;

			updateCoords(lat, lng);
		});*/
	}
}

function createMarker(point, name, id, type, address, city, state, zip, dateArray, timeStartArray, timeEndArray, phone, email, url, categories) {
	var header = '<div style="margin:0 10px 0 0;padding:3px 0;font-weight:bold;border-bottom:1px solid #6699CC;color:#000;">'+type+'</div>';
	var address = '<div>'+address+', '+city+', '+state+' '+zip+'</div>';
	var day = '<div style="float:left;"><strong>Day:</strong>';
	for(var i=1;i<=dateArray.length-1;i++) {
		day += '<br />'+dateArray[i]+' - '+timeStartArray[i]+' - '+timeEndArray[i];
	}
	day += '</div>';
	var categories = '<div style="float:left;"><strong>Categories:</strong>&nbsp;'+categories+'</div>';

	var links = '<a href="'+url+'" title="View Details" class="no_dec"><img src="/images/view_details.gif" width="110" height="20" alt="View Details" style="float:none;" /></a>';
	links += '&nbsp;<a href="/portfolio/add/location_id/'+id+'" title="Add to portfolio" class="no_dec" style=""><img src="/images/add-2-folio.gif" width="110" height="20" alt="Add to Portfolio" style="float:none;" /></a>';
	var clear = '<div style="clear:both;width:10px;height:10px;"></div>';

	var container = '<div style="width:300px;">';
	var content = container + header + clear + address + clear + day + clear + categories + clear + links + '</div>';

	//marker.bindInfoWindowHtml(content);
	
	var icon;
	switch(type) {
		case 'Yard Sale':
			icon = yardsaleflag;
			break;
		case 'Auction':
			icon = auctionflag;
			break;
		case 'Estate Sale':
			icon = estateflag;
			break;
		default:
			icon = yardsaleflag;
	}
	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(content);
	});
	map.addOverlay(marker);
	return marker;
}

function getQueryVariable(variable) {
	var query = parent.document.URL;
	var vars = query.split("/");
	for (var i=0;i<vars.length;i++) {
		if (vars[i] == variable) {
			return vars[i+1];
		}
	}

	return null;
}

function autoGeo() {
	var geocoder = new GClientGeocoder();

	var address = getQueryVariable("address");
	var city = getQueryVariable("city");
	var state = getQueryVariable("state");
	var zip = getQueryVariable("zip");

	if(address == null && city == null && state == null && zip == null) return;

	if(address == null) address = '';
	if(city == null) city = '';
	if(state == null) state = '';
	city = city + state;
	if(city != '' && state != '') city = city + ', ' + state;

	if(zip == null) zip = '';

	address = address + ' ' + city + ' ' + zip;

	geocoder.getLatLng(address, function(point) {
		if(!point) {
			geocoder.getLatLng(zip, function(point) {
				if(!point) {
					alert("Your address could not be found!");
				} else {
					marker = new GMarker(point, house);
					setTimeout("map.addOverlay(marker)",0);
					addPoint(point);
					recenter(point);
					loadXML(point.lat(), point.lng());
				}});
		} else {
			marker = new GMarker(point, house);
			//marker.setLatLng(point);
			setTimeout("map.addOverlay(marker)",0);
			addPoint(point);
			recenter(point);
			//alert(point.lat() + '\n' + point.lng());
			loadXML(point.lat(), point.lng());
		}
	});
}

function loadUserXML() {
        var url = "/map/xmlUser";

        GDownloadUrl(url, function(data, responseCode) {
                var xml = GXml.parse(data);
                var infos = xml.documentElement.getElementsByTagName("info");
                var stateid = infos[0].getAttribute("stateid");
                var lat = infos[0].getAttribute("lat");
                var lng = infos[0].getAttribute("lng");

                point = new GLatLng(lat, lng);
                map.setCenter(point, 11);
		marker = new GMarker(point, house);
		map.addOverlay(marker);
                loadXML(lat, lng);
		addPoint(point);
		recenter(point);
        });
}

function loadXML(lat, lng) {
	var url = "/map/xmlAddress?lat="+lat+"&lng="+lng;
	
	var dist = getQueryVariable("dist");
	var type = getQueryVariable("type");
	var categories = getQueryVariable("categories");
	var desc = getQueryVariable("desc");
	var start = getQueryVariable("start");
	var end = getQueryVariable("end");
	
	if(dist) url += '&dist='+dist;
	if(type) url += '&type='+type;
	if(categories) url += '&categories='+categories;
	if(desc) url += '&desc='+desc;
	if(start) url += '&start='+start;
	if(end) url+='&end='+end;
	
	GDownloadUrl(url, function(data, responseCode) {
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		var count = 0;
		for (var i = 0; i < markers.length; i++) {
			var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
			
			var id = markers[i].getAttribute("id");
			var type = markers[i].getAttribute("type");
			//var description = markers[i].getAttribute("description");
			var address = markers[i].getAttribute("address");
			var city = markers[i].getAttribute("city");	
			var state = markers[i].getAttribute("state");
			var zip = markers[i].getAttribute("zip");
			var numDates = markers[i].getAttribute("numDates");
			var dateArray = [];
			var timeStartArray = [];
			var timeEndArray = [];
			for(var j=1;j<=numDates;j++) {
				dateArray[j] = markers[i].getAttribute("date"+j);
				timeStartArray[j] = markers[i].getAttribute("timeStart"+j);
				timeEndArray[j] = markers[i].getAttribute("timeEnd"+j);
			}
			/*var sale_start = markers[i].getAttribute("sale_start");
			var sale_end = markers[i].getAttribute("sale_end");
			var time_start = markers[i].getAttribute("time_start");
			var time_end = markers[i].getAttribute("time_end");*/
			var phone = markers[i].getAttribute("phone");
			var email = markers[i].getAttribute("email");
			var url = markers[i].getAttribute("url");
			var categories = markers[i].getAttribute("categories");

			var marker = createMarker(point, i, id, type, address, city, state, zip, dateArray, timeStartArray, timeEndArray, phone, email, url, categories);
			count++;

			addPoint(point);

			var sidebarEntry = createSidebarEntry(marker, address, city, state, type);
			//var sidebarEntry = document.createElement('div');
			document.getElementById('sidebarElements').appendChild(sidebarEntry);
		}
		var text = count + ' Results';
		if(count == 0) text = 'No Results';
		if(count == 1) text = '1 Result';

		document.getElementById('nresults').innerHTML = text;

		// no items found
		var div = document.createElement('div');
		div.className = 'mapListItem';
		div.innerHTML = '<span>No ads were found at this address</span>';
		if(markers.length == 0) document.getElementById('sidebarElements').appendChild(div);

		recenter();
	});
}

function createSidebarEntry(marker, address, city, state, type) {
	var div = document.createElement('div');

	var imgage;
	switch(type) {
		case 'Yard Sale':
			image = 'yardsale_flag.png';
			break;
		case 'Auction':
			image = 'auction_flag.png';
			break;
		case 'Estate Sale':
			image = 'estate_flag.png';
			break;
		default:
			image = 'yardsale_flag.png';
	}

	var html = '<img src="/images/map/'+image+'" width="30" height="30" alt="ad" style="margin-right:8px;" />';
	 html += '<span>'+address+'</span><p>'+city+', '+state+'</p>';
	div.innerHTML = html;
	div.className = 'mapListItem';
	
	GEvent.addDomListener(div, 'click', function() {
		GEvent.trigger(marker, 'click');
		if(activeDiv != null) activeDiv.className = 'mapListItem';
		activeDiv = div;
		div.className = 'mapListItemAlt';
	});
	GEvent.addDomListener(div, 'mouseover', function() {
		//div.style.backgroundColor = '#eee';
		if(div != activeDiv) div.className = 'mapListItemAlt';
	});
	GEvent.addDomListener(div, 'mouseout', function() {
		//div.style.backgroundColor = '#fff';
		if(div != activeDiv)  div.className = 'mapListItem';
	});
	
	return div;
}

function addPoint(point) {
	bounds.extend(point);
}

function recenter(point) {
	//map.setCenter(bounds.getCenter());
	map.setCenter(point);
	//map.setZoom(10);
	map.setZoom(map.getBoundsZoomLevel(bounds)-1);
}

//]]>

