// JavaScript Document\

/**
* Returns an XMLHttp instance to use for asynchronous
* downloading. This method will never throw an exception, but will
* return NULL if the browser does not support XmlHttp for any reason.
* @return {XMLHttpRequest|Null}
*/
function createXmlHttpRequest() {
 try {
   if (typeof ActiveXObject != 'undefined') {
     return new ActiveXObject('Microsoft.XMLHTTP');
   } else if (window["XMLHttpRequest"]) {
     return new XMLHttpRequest();
   }
 } catch (e) {
   changeStatus(e);
 }
 return null;
};

/**
* This functions wraps XMLHttpRequest open/send function.
* It lets you specify a URL and will call the callback if
* it gets a status code of 200.
* @param {String} url The URL to retrieve
* @param {Function} callback The function to call once retrieved.
*/
function downloadUrl(url, callback) {
 var status = -1;
 var request = createXmlHttpRequest();
 if (!request) {
   return false;
 }

 request.onreadystatechange = function() {
   if (request.readyState == 4) {
     try {
       status = request.status;
     } catch (e) {
       // Usually indicates request timed out in FF.
     }
     if (status == 200) {
       callback(request.responseXML, request.status);
       request.onreadystatechange = function() {};
     }
   }
 }
 request.open('GET', url, true);
 try {
   request.send(null);
 } catch (e) {
   changeStatus(e);
 }
};

/**
 * Parses the given XML string and returns the parsed document in a
 * DOM data structure. This function will return an empty DOM node if
 * XML parsing is not supported in this browser.
 * @param {string} str XML string.
 * @return {Element|Document} DOM.
 */
function xmlParse(str) {
  if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') {
    var doc = new ActiveXObject('Microsoft.XMLDOM');
    doc.loadXML(str);
    return doc;
  }

  if (typeof DOMParser != 'undefined') {
    return (new DOMParser()).parseFromString(str, 'text/xml');
  }

  return createElement('div', null);
}

/**
 * Appends a JavaScript file to the page.
 * @param {string} url
 */
function downloadScript(url) {
  var script = document.createElement('script');
  script.src = url;
  document.body.appendChild(script);
}


var map;
var geocoder;
var markersArray = [];

function initialize() {
	geocoder = new google.maps.Geocoder();
	var myLatlng = new google.maps.LatLng(37.0625, -95.677068);
    var myOptions = {
      zoom: 4,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	map.setCenter(myLatlng);
}

function searchLocations() {
	deleteOverlays();
  var address = document.getElementById('addressInput').value;  
  geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        searchLocationsNear(results[0].geometry.location);
      } else {
        //alert("Geocode was not successful for the following reason: " + status);
		alert("Unable to find the specified address. Please try again.");
      }
    });
}

function searchLocationsNear(center) {
  var radius = document.getElementById('radiusSelect').value;
  var searchUrl = '/fetch.php?action=stores&lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + 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;
    }*/
		
	downloadUrl(searchUrl, function(data) {
      var markers = data.documentElement.getElementsByTagName("marker");
	  
	  var sidebar = document.getElementById('sidebar');
		if (markers.length == 0) {
			sidebar.innerHTML = '<p align="center">No stores found within ' + document.getElementById('radiusSelect').value + ' miles of ' + document.getElementById('addressInput').value + '.</p>';
			map.setCenter(center);
			map.setZoom(10);
			return;
		}
		sidebar.innerHTML = '<div align="center">' + markers.length + ' stores found:</div>';
	
      /*for (var i = 0; i < markers.length; i++) {
        var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
        var marker = createMarker(markers[i].getAttribute("name"), markers[i].getAttribute("address"), latlng);
       }*/
	   
	   var bounds = new google.maps.LatLngBounds();
    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 point = new google.maps.LatLng(parseFloat(markers[i].getAttribute('lat')),
                              parseFloat(markers[i].getAttribute('lng')));

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

/*function createMarker(point, name, address) {
  var marker = new GMarker(point);
  var html = '<b>' + name + '</b> <br/>' + address;
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}*/

function createMarker(name, address, latlng) {
    var marker = new google.maps.Marker({position: latlng, map: map});
	var html = '<b>' + name + '</b> <br/>' + address;
    google.maps.event.addListener(marker, "click", function() {
	  if (typeof(infowindow) != "undefined") {
		  infowindow.close();
	  }
      infowindow = new google.maps.InfoWindow();
	  infowindow.setContent(html);
      infowindow.open(map, this);
    });
	markersArray.push(marker);
    return markersArray[markersArray.length - 1];
  }

function createSidebarEntry(marker, name, address, distance) {
  var div = document.createElement('div');
  div.className = "store_item";
  var html = '<span class="title">' + name + '</span> <br /><span class="address">' + address + '</span> <br />' + '<span class="distance">(' + distance.toFixed(1) + ' miles)</span>' ;
  div.innerHTML = html;
  div.style.cursor = 'pointer';
  div.style.marginBottom = '5px';
  google.maps.event.addDomListener(div, 'click', function() {
    google.maps.event.trigger(marker, 'click');
  });
  google.maps.event.addDomListener(div, 'mouseover', function() {
    div.style.backgroundColor = '#eee';
  });
  google.maps.event.addDomListener(div, 'mouseout', function() {
    div.style.backgroundColor = '#fff';
  });
  return div;
}

// Deletes all markers in the array by removing references to them
function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
}

/*function initialize() {
    var myLatlng = new google.maps.LatLng(37.0625, -95.677068);
    var myOptions = {
      zoom: 4,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	if(navigator.geolocation) {
    browserSupportFlag = true;
    navigator.geolocation.getCurrentPosition(function(position) {
      initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
      map.setCenter(initialLocation);
    }, function() {
      handleNoGeolocation(browserSupportFlag);
    });
	};	
}*/

$.widget( "custom.catcomplete", $.ui.autocomplete, {
	_renderMenu: function( ul, items ) {
		var self = this,
			currentCategory = "";
		$.each( items, function( index, item ) {
			if ( item.category != currentCategory ) {
				ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
				currentCategory = item.category;
			}
			self._renderItem( ul, item );
		});
	}
});

function confirmSubmit()
{
var agree=confirm("Are you sure you wish to do this?");
if (agree)
	return true ;
else
	return false ;
}


function set_style(){
	$('body').css('background-color', '#bcbec0');
	$('#topRgtCnrSdw').css('background-image', 'url(/images/v2/common/top_right_shadow.gif)');
	$('#pgContent').css('background', 'url(/images/v2/common/pg_shadow_rpt.gif) repeat-y right top transparent');
	$('#pgContent').css('background-color', '#FFFFFF');
	$('#pgBtmSdw').css('background', 'url(/images/v2/common/pg_shadow_btm.gif) no-repeat');
	$('#pgBtmSdw').css('background-color', '#bcbec0');
}

$(document).ready(function() {
	
	if($('.jqDataTable').length > 0){
		$('.jqDataTable').dataTable();
	}
	
	//set_style();
	
	if($('.product_group .section_toggle').length > 0){
		$('.product_group .section_toggle').toggle(

                function() {
                    $(this).parent().next("div.product_images").slideUp("slow");
					$(this).html("[+]");
                },

                function() {                   
                    $(this).parent().next("div.product_images").slideDown("slow");
					$(this).html("[-]");

                });   
	}
		
	$( "#header #dp_search #query" ).catcomplete({
		source: '/asearch.php',
		minLength: 3,
		select: function( event, ui ) {
				//$( "#header #dp_search #query" ).val( ui.item.id );
				if (ui.item.sclass == "wholesale"){
					window.location = "/wholesale/item/" + ui.item.id;
				} else {
					window.location = "/shop/item/" + ui.item.id;		
				};
				return false;
			}
	}).data( "catcomplete" )._renderItem = function( ul, item ) {
		return $( "<li></li>" )
			.data( "item.autocomplete", item )
			.append( "<a class=\"" + item.sclass + "\"><img src=\"" + item.icon + "\" align=\"left\" width=\"33\" height=\"33\" style=\"padding:2px 5px 2px 2px;\" /><div style=''>" + item.name + "<br /><em>" + item.icode + "</em></div></a>" )
			.appendTo( ul );
	};
} );

$(window).load(function() {
	//initialize maps
	if($("#map_canvas").length > 0){
		initialize();
	}
} );
