// ap.js v0.0.1_beta1, Mon Dec 7 14:03 2009
//
// Copyright (c) 2009 Eric Kesterson (http://www.type3studios.com)

var map;
var geocoder;

function load() {
	if (GBrowserIsCompatible()) {
		geocoder = new GClientGeocoder();
		map = new GMap2(document.getElementById('map'));
		map.setUIToDefault();
	}
}

//window.onload=load;
//window.onunload=GUnload;

function load_map() {
	if (GBrowserIsCompatible()) {
		geocoder = new GClientGeocoder();
		map = new GMap2(document.getElementById('map'));
		map.setUIToDefault();
	//	map.addControl(new GLargeMapControl3D());
	//	map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(40.315426,-74.509208), 7);
	}
}

function searchLocations(search_url) {
	var address = document.getElementById('addressInput').value;
	geocoder.getLatLng(address, function(latlng) {
		if (!latlng) {
			alert(address + ' not found');
		} else {
			searchLocationsNear(search_url, latlng);
		}
	});
}

function searchLocationsNear(search_url, center) {
	var radius = document.getElementById('radiusSelect').value;
//	var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
	var searchUrl = search_url + center.lat() + '/' + center.lng() + '/' + radius;
	GDownloadUrl(searchUrl, function(data) {
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName('marker');
		map.clearOverlays();

		var sidebar = document.getElementById('sidebar');
		sidebar.innerHTML = '';
		if (markers.length == 0) {
			sidebar.innerHTML = 'No results found.';
			map.setCenter(new GLatLng(40, -100), 4);
			return;
		}

		var bounds = new GLatLngBounds();
		for (var i = 0; i < markers.length; i++) {
			var name = markers[i].getAttribute('name');
			var address = markers[i].getAttribute('address');
			var distance = parseFloat(markers[i].getAttribute('distance'));
			var phone = markers[i].getAttribute('phone');
			var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
			parseFloat(markers[i].getAttribute('lng')));

			var marker = createMarker(point, name, address, phone);
			map.addOverlay(marker);
			var sidebarEntry = createSidebarEntry(marker, name, address, phone, distance);
			sidebar.appendChild(sidebarEntry);
			bounds.extend(point);
		}
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	});
}

function createMarker(point, name, address, phone) {
	var marker = new GMarker(point);
	var directions_url = '<a href="http://maps.google.com/maps?daddr=' + address.replace(/ /g, "+") + '" target="_blank">Get Directions</a>';
	var html = '<b>' + name + '</b> <br/>' + address + '<br/>' + phone +
		'<br />' + directions_url;
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function createSidebarEntry(marker, name, address, phone, distance) {
	var div = document.createElement('div');
	var directions_url = '<a href="http://maps.google.com/maps?daddr=' + address.replace(/ /g, "+") + '" target="_blank">Get Directions</a>';
	var html = '<b>' + name + '</b> (distance: ' + distance.toFixed(1) + ' miles)<br/>' + address + '<br/>' + phone +
		'<br />' + directions_url;;
	div.innerHTML = html;
	div.style.cursor = 'pointer';
	div.style.marginBottom = '5px';
	div.style.backgroundColor = '#fff';
	GEvent.addDomListener(div, 'click', function() {
		GEvent.trigger(marker, 'click');
	});
	GEvent.addDomListener(div, 'mouseover', function() {
		div.style.backgroundColor = '#eee';
	});
	GEvent.addDomListener(div, 'mouseout', function() {
		div.style.backgroundColor = '#fff';
	});
	return div;
}

//used to verify address and retrieve lat/lng when adding locations.
function showAddress(address) {
  geocoder.getLatLng(
	address,
	function(point) {
	  if (!point) {
		alert(address + " not found");
	  } else {
		map.setCenter(point, 13);
		var marker = new GMarker(point);
		map.addOverlay(marker);
		marker.openInfoWindowHtml(address);		
		document.getElementById('loc_lat').value = marker.getPoint().lat();
		document.getElementById('loc_lng').value = marker.getPoint().lng();
	  }
	}
  );
}

function getLatAndLng(address, lat_element, lng_element) {
	geocoder = new GClientGeocoder();
	geocoder.getLatLng(
		address,
		function(point) {
			if (!point) {
				alert(address + " not found");
			} else {
				var marker = new GMarker(point);
				document.getElementById(lat_element).value = marker.getPoint().lat();
				document.getElementById(lng_element).value = marker.getPoint().lng();
			}
		}
	);
}

function replace_value(obj, val) {
	var el = document.getElementById(obj);
	el.value = val;
}

function add_to_inner_html(obj, val) {
	var el = document.getElementById(obj);
	el.innerHTML = el.innerHTML+val;
}

function toggle_open(obj) {
	var el = document.getElementById(obj);
	if ( el.style.display != 'none' ) {
		el.style.display = 'none';
	}
	else {
		el.style.display = '';
	}
}

// AJAX
var xmlhttp

function GetXmlHttpObject()
{
	if (window.XMLHttpRequest)
	{
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	if (window.ActiveXObject)
	{
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}

function stateChanged(id)
{
	if (xmlhttp.readyState==4)
	{
	//	document.getElementById(id).innerHTML=xmlhttp.responseText;
		var textout = xmlhttp.responseText;
		document.write.textout;
	}
}

function ajaxCall(url, loader)
{
	xmlhttp=GetXmlHttpObject();
	if (xmlhttp==null)
	{
		alert ("Browser does not support HTTP Request");
		return false;
	}
	else
	{
		xmlhttp.open("GET",url,true);
		
		xmlhttp.onreadystatechange = function(){	
			
			var load_element = document.getElementById(loader);
		
			if (xmlhttp.readyState == 4){
			
				var res = xmlhttp.responseText;
				load_element.innerHTML = res;
			} else {
				load_element.innerHTML = "loading...";
			}
		}
		
		xmlhttp.send(null);
		return true;
	}
	return false;
}

//for products
function load_thumbs(url,dir,id)
{
	xmlhttp=GetXmlHttpObject();
	if (xmlhttp==null)
	{
		alert ("Browser does not support HTTP Request");
		return false;
	}
	else
	{
		url = url+"admin/ajax_get_products_thumbs/"+id+"/"+dir;
		
		xmlhttp.open("GET",url,true);
		xmlhttp.onreadystatechange = function(){	
			
			var gallery = document.getElementById('thumb_gallery_'+id);
		
			if (xmlhttp.readyState == 4){
			
				var res = xmlhttp.responseText;
				gallery.innerHTML = res;
			} else {
				gallery.innerHTML = "loading...";
			}
		}
		xmlhttp.send(null);
		return true;
	}
	return false;
}

function load_thumbs_select(url,dir,id)
{
	xmlhttp=GetXmlHttpObject();
	if (xmlhttp==null)
	{
		alert ("Browser does not support HTTP Request");
		return false;
	}
	else
	{
		dir = dir+'_'+document.getElementById('selection_'+id).value;
		url = url+"admin/ajax_get_products_thumbs/"+id+"/"+dir;
		
		xmlhttp.open("GET",url,true);
		xmlhttp.onreadystatechange = function(){	
			
			var gallery = document.getElementById('thumb_gallery_'+id);
		
			if (xmlhttp.readyState == 4){
			
				var res = xmlhttp.responseText;
				gallery.innerHTML = res;
			} else {
				gallery.innerHTML = "loading...";
			}
		}
		xmlhttp.send(null);
		return true;
	}
	return false;
}

// for specials
function load_thumbs_specials(url,id)
{
	xmlhttp=GetXmlHttpObject();
	if (xmlhttp==null)
	{
		alert ("Browser does not support HTTP Request");
		return false;
	}
	else
	{
		url = url+"admin/ajax_get_specials_thumbs/"+id;
		
		xmlhttp.open("GET",url,true);
		xmlhttp.onreadystatechange = function(){	
			
			var gallery = document.getElementById('thumb_gallery_'+id);
		
			if (xmlhttp.readyState == 4){
			
				var res = xmlhttp.responseText;
				gallery.innerHTML = res;
			} else {
				gallery.innerHTML = "loading...";
			}
		}
		xmlhttp.send(null);
		return true;
	}
	return false;
}

function save_order(url,series,order)
{
	xmlhttp=GetXmlHttpObject();
	if (xmlhttp==null)
	{
		alert ("Browser does not support HTTP Request");
		return false;
	}
	else
	{
		url = url+"admin/save_order/"+series+"/"+order;
		
		xmlhttp.open("GET",url,true);
		xmlhttp.onreadystatechange = function(){	
			
			var paragraph = document.getElementById(series+'_listNewOrder');
		
			if (xmlhttp.readyState == 4){
				var res = xmlhttp.responseText;
				paragraph.innerHTML = res;
			} else {
				paragraph.innerHTML = "loading...";
			}
		}
		xmlhttp.send(null);
		return true;
	}
	return false;
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

//addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
addLoadEvent(function() {
  /* more code to run on page load */
});
