
var criterias = ['postcode', 'address', 'dealerName','streetName','productcategory'];

function trim(str){return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');}

function loadingBar(id)
{
var bar=document.getElementById('LoadingbarDiv');
if(id==1 && bar!=null)
bar.style.display="block";
else if(bar!=null)
bar.style.display="none";
}

function getQueryString()
{
var query='';
if(window.location.search!=null)
  query=window.location.search.substring(1);
  return query;
  
}
function checkAddress(obj,level,iden)
{

	var flag='f';
	var j=0;
	if(level>1)
	{
		for(var i=1;i<=4;i++)
		{
			var levelSpan=document.getElementById('s'+iden+i);
			if(levelSpan!=null)
				levelSpan.style.display="none";
		}
	}
	
	for(var i=1;i<level;i++)
	{
		var levelObj=document.getElementById(iden+i);
		var levelSpan=document.getElementById('s'+iden+i);
		if(levelObj!=null && trim(levelObj.value).length<=0 && levelSpan!=null && levelObj.type=='select-one')
		{
			levelSpan.style.display="block";
			j++;
			if(flag=='f')
			{
				levelObj.focus();flag='t';
			}
		}
		else
		{
			if(levelSpan!=null)levelSpan.style.display="none";
		}
	} 
	
	if(j>0)
	{
		var selectLevelObj=document.getElementById(iden+level); 
		if(selectLevelObj!=null )
			selectLevelObj.value='';
	}
	if(flag=='f') 
		showAddress(obj,level,iden);
}

function validateAddress()
{
	var flag='f';
	var r='f';
	
	
	for(var j=0;j<criterias.length;j++)
	{
		for(var i=1;i<=4;i++)
		{
			var obj=document.getElementById(criterias[j]+i);
			var spanObj=document.getElementById('s'+criterias[j]+i);
			var radioObj=document.getElementById('r'+criterias[j]);
			if(radioObj!=null && radioObj.checked && spanObj!=null&&obj!=null && trim(obj.value).length<=0)
			{
				spanObj.style.display="block";
				if(flag=='f')
				{
				 
				  if(obj!=null){obj.focus();flag='t';}
					
				}
			}
			else if(spanObj!=null) 
				spanObj.style.display="none";
			//if(radioObj!=null && !radioObj.checked&&obj!=null)  obj.value='';
		}
	}
	for(var k=0;k<criterias.length;k++)
	{
		var radioObj=document.getElementById('r'+criterias[k]);
		if(radioObj!=null && radioObj.checked)
		{
			r='t';break;
		}
	}
	if(r=='f')
	{
	var selectCriteriaError=document.getElementById('selectCriteriaError');
	if(selectCriteriaError!=null)
	selectCriteriaError.style.display="block";
	}
	
	if(flag=='t' || r=='f')
		return false; 
	else 
		return true;
}

function validateProductCategory()
{

for(var i=1;i<=2;i++)
{
var spanObjM=document.getElementById('mPc'+i);
var spanObjE=document.getElementById('emPc'+i);
var category=document.getElementById('category'+i);
if(spanObjM!=null && spanObjE!=null)
{
if(trim(category.value).length<=0)
{
spanObjE.style.display="block";
return false;
}
else
{
spanObjE.style.display="none";
}

}
}

return true;

}


/* get data for Category dropdowns */
function xmlhttpGet(strURL,span)
{
    var xmlHttpReq = false;
    var self = this;
   
    if (window.XMLHttpRequest)
    {
    	self.xmlHttpReq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    	self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
   
   	loadingBar(1);
    self.xmlHttpReq.open('GET', strURL, true);
	self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	self.xmlHttpReq.onreadystatechange = function()
	{
		if (self.xmlHttpReq.readyState == 4)
		{
			updatepage(self.xmlHttpReq.responseText,span);
			
//			initializeMap();
			dealersDataInitializer.refresh();
			googleMap.showDealers(dealersDataInitializer.getDealers());
			loadingBar(0);
		}
	}
    
    self.xmlHttpReq.send("");
}

/* get data for Category dropdowns */
function xmlhttpDealers(strURL,span)
{
    var xmlHttpReq = false;
    var self = this;
   
    if (window.XMLHttpRequest)
    {
    	self.xmlHttpReq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    	self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
   
   	loadingBar(1);
    self.xmlHttpReq.open('POST', strURL, true);
	self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	self.xmlHttpReq.onreadystatechange = function()
	{
		if (self.xmlHttpReq.readyState == 4)
		{
			updateResultpage(self.xmlHttpReq.responseText,span);
			
//			initializeMap();
			dealersDataInitializer.refresh();
			if (jQuery("#searchresults").hasClass("expanded"))
				expandCollapase1();	
			googleMap.showDealers(dealersDataInitializer.getDealers());
			loadingBar(0);
		}
	}
    
    self.xmlHttpReq.send("");
}


function xmlhttpGetShowCat(strURL,span)
{
    var xmlHttpReq = false;
    var self = this;
   
    if (window.XMLHttpRequest)
    {
    	self.xmlHttpReq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    	self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
   
   	loadingBar(1);
    self.xmlHttpReq.open('GET', strURL, true);
	self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	self.xmlHttpReq.onreadystatechange = function()
	{
		if (self.xmlHttpReq.readyState == 4)
		{
			updatepage(self.xmlHttpReq.responseText,span);
			loadingBar(0);
		}
	}
    
    self.xmlHttpReq.send("");
}

function updatepage(str,span)
{ 
 
 	var area=document.getElementById(span);
	if(area!=null) 
		area.innerHTML = str; 
		
	
	clearballons();
	   
	
}

function showcat(selectedObj,level,noOfLevels,mandatorylevels)
{
if(level<=noOfLevels)
{
      var cat=selectedObj.value;
      var urlProductCategorySelection=document.getElementById('urlProductCategorySelection');
      var url=urlProductCategorySelection.innerHTML;
      url=url+'&productCategory='+cat+'&level='+level+'&noOfLevels='+noOfLevels+'&mandatorylevels='+mandatorylevels;
      var type=document.getElementById('type');
		if(type!=null)	
		   url=url+'&type='+type.innerHTML;
      //alert(url)
      
 xmlhttpGetShowCat(url,level);
  }
}



/* get data for Address dropdown*/
function showAddress(obj,level,iden)
{
	var expObj=document.getElementById(iden+(level+1));
	var urlAddress=document.getElementById('urlAddress');
	var selObjsUrl='';
	if(level==2)
	{
	var selectedObjl1=document.getElementById(iden+'1');
	if(selectedObjl1!=null && selectedObjl1.type=='select-one')
	{
	 selObjsUrl="&selectedObjl1="+selectedObjl1.name+"="+selectedObjl1.value;
	}
	}
	//alert(selObjsUrl);
	
	if(obj!=null && obj.type=='select-one' && trim(obj.value).length>0 && expObj!=null && expObj.type=='select-one' && urlAddress!=null)
	{
		var selObjName=obj.name;
		var selObjval=obj.value;
		var expObjName=expObj.name;
		url=urlAddress.innerHTML;
		url=url+'&selObjName='+obj.name
			+'&selObjval='+selObjval+'&expObjName='+expObjName+'&level='+level;
			
		var formObj;
	
	   for(var k=0;k<criterias.length;k++)
	   {
		var radioObj=document.getElementById('r'+criterias[k]);
		if(radioObj!=null && radioObj.checked)
		{
		    //alert(criterias[k]);
			 formObj=document.getElementById(criterias[k]);
		}
		}
		if(formObj!=null)
		 url=url+'&radioType='+formObj.radioType.value;
		
		var type=document.getElementById('type');
		if(type!=null)	
		   url=url+'&type='+type.innerHTML;
		   if(trim(selObjsUrl).length>0)
		   {
		   url=url+selObjsUrl;
		   }
			//alert(url);
		xmlhttpGetAddress(url,expObj);
	}
	
	for(var i=level+1;i<=4;i++)
	{
		var selObj=document.getElementById(iden+i);
		if(selObj!=null)
		{
			selObj.value='';
			selObj.options.length=1; 
		}
	}
}


function xmlhttpGetAddress(strURL,expObj)
{
    var xmlHttpReq = false;
    var self = this;
    
    if (window.XMLHttpRequest)
    {
    	self.xmlHttpReq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    	self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
     loadingBar(1);
    self.xmlHttpReq.open('GET', strURL, true);
	self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	self.xmlHttpReq.onreadystatechange = function()
	{
		if (self.xmlHttpReq.readyState == 4)
		{
			updateAddress(self.xmlHttpReq.responseText,expObj);
			loadingBar(0);
		}
	}
    self.xmlHttpReq.send("");
}


function updateAddress(str,expObj)
{
	//alert(str);
	var opts=str.split(',');
	expObj.options.length=1; 
		
	for(var i=0;i<opts.length;i++) 
	{
		var optsValues=opts[i].split('=');
		var val=optsValues[0]; var dis=optsValues[1];
		if(val!=null && trim(val).length>0 && dis!=null && trim(dis).length>0)
		expObj.options[i+1]=new Option(dis,val);
	}

	
	
}

/* GoogleMap search */
function formSubmit()
{
	
	var formObj;
	if(validateAddress() && validateProductCategory())
	{
	for(var k=0;k<criterias.length;k++)
	{
		var radioObj=document.getElementById('r'+criterias[k]);
		if(radioObj!=null && radioObj.checked)
		{
		    //alert(criterias[k]);
			 formObj=document.getElementById(criterias[k]);
		}
		else
		{
		 var formName=document.getElementById(criterias[k]);
		 if(formName!=null)
		 {
		 for(j=0;j<formName.elements.length;++j) 
	     {			
			if(formName.elements[j].value!=null && formName.elements[j].name !='radioType' )
			{
			  formName.elements[j].value='';
			}
			
			
		
		 }
		 
		 var iden=criterias[k];
		 for(var i=2;i<=4;i++)
	     {
		 var selObj=document.getElementById(iden+i);
		 if(selObj!=null && selObj.options!=null)
		 {
			selObj.value='';
			//selObj.options.length=1; 
		 }
		 
	     } //close for
		 
		 }
		 }
		
	}
		
		 var urlShowDealerShops=document.getElementById('urlShowDealerShops');
         var url=urlShowDealerShops.innerHTML;
         var type=document.getElementById('type');
		if(type!=null)	
		   url=url+'&type='+type.innerHTML;
		//alert(url);
				
		if(site!=null && site=='hp_en_AU_i')
		{
		 //alert(0);
		O_searchVariablesTrack(formObj);
		}
		else
		{
		 //alert(1);
		 O_searchVariablesTrackRegional(formObj);
		}
		
		xmlhttpPost(url,formObj,'resultArea')
	}
}


function getDealersFor(query)
{
	 var urlShowDealerShops=document.getElementById('urlShowDealerShops');
     var url=urlShowDealerShops.innerHTML + query ;
	 xmlhttpDealers(url,'resultArea')
}


function xmlhttpPost(strURL,formName,span) 
{
 	var xmlHttpReq = false;
    var self = this;

    if (window.XMLHttpRequest) 
    {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) 
    {
		self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
   loadingBar(1);
    self.xmlHttpReq.open('POST', strURL, true);
	self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	self.xmlHttpReq.onreadystatechange = function() 
	{
	    if (self.xmlHttpReq.readyState == 4) 
	    {
	        
       		updateResultpage(self.xmlHttpReq.responseText,span);
       		//initializeMap();
			dealersDataInitializer.refresh();
			if (jQuery("#searchresults").hasClass("expanded"))
				expandCollapase1();			
			googleMap.showDealers(dealersDataInitializer.getDealers());
			loadingBar(0);
			
        }
	}
    self.xmlHttpReq.send(getquerystring(formName));
}

function updateResultpage(str,span)
{ 
	var searchresults=document.getElementById('searchresults');
	if(searchresults!=null) 
		searchresults.style.display="block";
		var noresults=document.getElementById('noresults');	
	  // if(noresults!=null){ 	noResults();alert(noresults.innerHTML);}

	var routeMap = document.getElementById('route');
	if(routeMap != null) 
		routeMap.style.display = 'none';
	

 	var area=document.getElementById(span);
	if(area!=null) 
		area.innerHTML = str; 
		
		var noresults=document.getElementById('noresults');
	if(noresults!=null) noResults();
	else showResults();
	
	clearballons();
	   
	
}
	
function getquerystring(formName) 
{
    var qstr = "";
   
	for(j=0;j<formName.elements.length;++j) 
	{
		if(formName.elements[j].type=='radio' )
	 	{
			if(formName.elements[j].checked)
			qstr += formName.elements[j].name + "=" + escape(trim(formName.elements[j].value)) + "&";
		}
		else if(formName.elements[j].type=='checkbox' )
		{
			if(formName.elements[j].checked)
			qstr += formName.elements[j].name + "=" + escape(trim(formName.elements[j].value)) + "&";
		}
		else if(formName.elements[j].name != "")
		{
		
			if(formName.elements[j].value!=null && trim(formName.elements[j].value).length>0)
			{
				val = (trim(formName.elements[j].value));
				EscVal = specialCharEscape(val);
				qstr += formName.elements[j].name + "=" + EscVal + "&";
			}
		}
    }
    for(var i=1;i<4;i++)
    {
     var cat= document.getElementById('category'+i)
     if(cat!=null && trim(cat.value).length>0)
     qstr += cat.name + "=" + escape(trim(cat.value)) + "&";
    }
     var catModel= document.getElementById('categorymodel');
     if(catModel!=null && trim(catModel.value).length>0)
     qstr += "category4=" + escape(trim(catModel.value)) + "&";
	if(qstr != "")
		qstr = qstr.substr(0, qstr.length - 1);
        //alert(qstr);
       
        return qstr;
}


function specialCharEscape(htmlval)
{
	htmlval = htmlval.replaceAll("*", "%2A");
	htmlval = htmlval.replaceAll("+", "%2B");
	htmlval = htmlval.replaceAll("-", "%2D");
	htmlval = htmlval.replaceAll(".", "%2E");
	htmlval = htmlval.replaceAll("/", "%2F");
	htmlval = htmlval.replaceAll("@", "%40");
	/*
	htmlval = htmlval.replaceAll("_", "%2B");
	*/	
	return htmlval;
}

String.prototype.replaceAll = function(s1, s2) 
{ 
	return this.split(s1).join(s2); 
}



/* expand collapse */
function expandCollapase1()
{

	if (jQuery("#searchresults").hasClass("expanded"))
	{
	    var images=document.getElementsByName('ballon');
	    if(images!=null)
	    {
	    	for(var i=0;i<images.length;i++) 
	    		images[i].style.display="block";
	    }
		jQuery("#searchresults").removeClass("expanded");
		jQuery("#searchresults p.expand a").html("Expand panel");
		jQuery("#searchresults p.expand a").removeClass("collapse");
		jQuery(this).css("background-position","100% 0px");
	}
	else
	{
	    var images=document.getElementsByName('ballon');
	    if(images!=null)
	    {   
	    	for(var i=0;i<images.length;i++) 
	    		images[i].style.display="none";
	    }
		jQuery("#searchresults").addClass("expanded");
		jQuery("#searchresults p.expand a").html("Collapse panel");
		jQuery("#searchresults p.expand a").addClass("collapse");
		jQuery(this).css("background-position","100% -31px");
	}
}


function expandCollapase2()
{
	if (jQuery("#searchresults").hasClass("expanded"))
	{
	    var images=document.getElementsByName('ballon');
	    if(images!=null){   for(var i=0;i<images.length;i++) images[i].style.display="block";}
		jQuery("#searchresults").removeClass("expanded");
		jQuery(this).html("Expand panel");
		jQuery(this).removeClass("collapse");
		jQuery("#searchresults a.pointers").css("background-position","100% 0px");
	}
	else
	{
	    var images=document.getElementsByName('ballon');
	    if(images!=null){   for(var i=0;i<images.length;i++) images[i].style.display="none";}
		jQuery("#searchresults").addClass("expanded");
		jQuery(this).html("Collapse panel");
		jQuery(this).addClass("collapse");
		jQuery("#searchresults a.pointers").css("background-position","100% -31px");
	}
}


function clearballons()
{

	if (jQuery("#searchresults").hasClass("expanded"))
	{
		 var images=document.getElementsByName('ballon');
		 //alert(images.length);
		 if(images!=null)
		 { 
		 	for(var i=0;i<images.length;i++)
			{
				//alert(i);
 				images[i].style.display="none";
 			}
 		}
	}
}

function getPropertyFromJSON(object, property)
{
	var value;
	if(object != null)
	{
		if(value != null)
			return value;
		for (var key in object) {
			var type = typeof object[key];
			if(key == property)
				return object[key];
			else if(type != 'string' && type != 'number' && type != 'boolean')
				value = this.getPropertyFromJSON(object[key], property);
				
			if(value !=  null)
				break;	
				
		}
	}
	return value;
}


var GoogleMap = Class.create();
GoogleMap.prototype = {
	
	initialize: function(latitude, longitude, zoom){
		this.map;
		this.geocoder = new GClientGeocoder();
		if(countryCode != null)
			this.geocoder.setBaseCountryCode(countryCode);
		this.geoCodeCache = new GGeocodeCache();
		this.geocoder.setCache(this.geoCodeCache);
		this.directionsPanel = document.getElementById('innerContent');
		this.directions;		
		this.latitude = latitude;
		this.longitude = longitude;
		this.currentMouseLat;
		this.currentMouseLng;
		this.zoom = zoom;
		this.markers = new Array();
		this.dealers = new Array();
		this.showingSearch = 0;
		this.initMap();
	},
	
	initMap: function(){
		var self = this;
		if (GBrowserIsCompatible()) 
		{
			var mapDiv = document.getElementById("googleMap");
			if(mapDiv != null){
			    this.map = new GMap2(mapDiv);
			    this.map.enableScrollWheelZoom();
//			    this.map.enableGoogleBar();
			    this.map.setCenter(new GLatLng(this.latitude, this.longitude), this.zoom);
			    
				//var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
				//var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,10));
				//var topLeft = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,10));
				var bottomLeft = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(10,10));

       			this.map.addControl(new GSmallMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,10)));
				this.map.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(50,10)));
				
				this.directions = new GDirections(this.map, this.directionsPanel);
				
				GEvent.addListener(this.map, "zoomend", function(oldLevel, newLevel) {
					if(newLevel == 10){
						if(self.showingSearch == 0){
							self.geocoder.setViewport(self.map.getBounds());
							self.geocoder.getLocations(new GLatLng(self.currentMouseLat, self.currentMouseLng), function(response) {
								if (!response || response.Status.code != 200) {
									alert('No Response from Google Servers.');
								}
								else {
									place = response.Placemark[0];
									
									var state = getPropertyFromJSON(place.AddressDetails, 'AdministrativeAreaName');
									var postalCode = getPropertyFromJSON(place.AddressDetails, 'PostalCodeNumber');
									/*var state = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
									if(place.AddressDetails.Country.AdministrativeArea != null 
										&& place.AddressDetails.Country.AdministrativeArea.Locality != null
										&& place.AddressDetails.Country.AdministrativeArea.Locality.PostalCode != null)
									var postalCode = place.AddressDetails.Country.AdministrativeArea.Locality.PostalCode.PostalCodeNumber;*/
									if(state != null && postalCode != null)
										getDealersFor('&postCode=' + postalCode + '&reg_state_prov=' + state + '&radioType=postcode');
									
									/*
									var state = self.getPropertyFromJSON(place, 'AdministrativeAreaName');
									var postalCode = self.getPropertyFromJSON(place, 'PostalCodeNumber');
									var suburb= self.getPropertyFromJSON(place, 'LocalityName');
									if(state != null && postalCode != null)
										getDealersFor('&postCode=' + postalCode + '&reg_state_prov=' + state + '&radioType=postcode');
									else if(state != null && suburb != null){
										getDealersFor('&city=' + suburb + '&reg_state_prov=' + state + '&radioType=address');
									}
									*/
								}
							});		
						}	
					}
				});
				
				GEvent.addListener(self.map, "addoverlay", function(overlay) {
					if(self.dealers != null && self.dealers.length != self.markers.length){
						var latLangBounds = self.map.getBounds();
						latLangBounds.extend(overlay.getLatLng());
						var zoom = self.map.getBoundsZoomLevel(latLangBounds);
						self.map.setCenter(latLangBounds.getCenter(), (zoom <= 13 ? zoom : 12));
					}
				});
				
				GEvent.addListener(self.map, "mousemove", function(latLng) {
					self.currentMouseLat = latLng.lat();
					self.currentMouseLng = latLng.lng();
				});
				
		    }
	  	}
	},
	
	unload: function(){
		GUnload();
	},
	
	showDealers: function(dealers){
		var self = this;
		var i = 0;	
		self.dealers = dealers;
		
		if(dealers == null || dealers.length == 0)
		{
			self.map.clearOverlays();
			self.map.setCenter(new GLatLng(this.latitude, this.longitude), this.zoom);
		}
		
		if(dealers.length > 0){
			self.showingSearch = 1;
			self.map.clearOverlays();
			self.markers = new Array();
			self.map.setCenter(new GLatLng(dealers[0].latitude, dealers[0].longitude), 12);
		}
		
		for(i = 0; i < dealers.length; i++){
			var dealer = dealers[i];
			self.showDealer(dealer, i);
		}

		//self.map.panBy(new GSize(-200,0));	
	},

	showDealer: function(dealer, counter){
		var address = dealer.shopAddress+", "+dealer.city+", "+dealer.state +" "+dealer.postalCode + ', ' + countryCode;
		var self = this;
		// Added for india Googlemap
		if(dealer.checkGeocodes!=null && dealer.checkGeocodes=='yes')
		{
		       
		       var blueIcon = new GIcon(G_DEFAULT_ICON);
				blueIcon.image = dealer.image;
				blueIcon.iconSize = new GSize(31,29);
				markerOptions = { icon:blueIcon };
				var point = new GLatLng(dealer.latitude, dealer.longitude);
				var marker = new GMarker(point, markerOptions);
			 	GEvent.addListener(marker, "click", function() {
			 	 	//Added for omniture tracking
			 	 	O_shopNameTrack(dealer.customerNo+'.'+dealer.shopType+'.'+dealer.shopName,'ballon')
			 	 	marker.openInfoWindowHtml(dealer.infowWindow);
				});
				self.map.addOverlay(marker);
				if(self.markers[counter] != null){
					self.markers[counter].hide();
					self.map.removeOverlay(self.markers[counter]);
				}
				self.markers[counter] = marker;
				if(self.dealers.length == 1){
			 	 	marker.openInfoWindowHtml(dealer.infowWindow);
				}
		}
		else
		{
		
		self.geocoder.getLatLng(address, function(response) {
			if (!response || response == null) {
				var blueIcon = new GIcon(G_DEFAULT_ICON);
				blueIcon.image = dealer.image;
				blueIcon.iconSize = new GSize(31,29);
				markerOptions = { icon:blueIcon };
				var point = new GLatLng(dealer.latitude, dealer.longitude);
				var marker = new GMarker(point, markerOptions);
			 	GEvent.addListener(marker, "click", function() {
			 	 	//Added for omniture tracking
			 	 	O_shopNameTrack(dealer.customerNo+'.'+dealer.shopType+'.'+dealer.shopName,'ballon')
			 	 	marker.openInfoWindowHtml(dealer.infowWindow);
				});
				self.map.addOverlay(marker);
				if(self.markers[counter] != null){
					self.markers[counter].hide();
					self.map.removeOverlay(self.markers[counter]);
				}
				self.markers[counter] = marker;
				if(self.dealers.length == 1){
			 	 	marker.openInfoWindowHtml(dealer.infowWindow);
				}
			}
			else {
				if(response.lat() != null && response.lng() != null){
					dealer.latitude = response.lat();
					dealer.longitude = response.lng();				
					var blueIcon = new GIcon(G_DEFAULT_ICON);
					blueIcon.image = dealer.image;
					blueIcon.iconSize = new GSize(31,29);
					markerOptions = { icon:blueIcon };
					var point = new GLatLng(dealer.latitude, dealer.longitude);
					var marker = new GMarker(point, markerOptions);
				 	GEvent.addListener(marker, "click", function() {
				 	//Added below funtion for omniture tracking
				 	O_shopNameTrack(dealer.customerNo+'.'+dealer.shopType+'.'+dealer.shopName,'ballon')
				 	marker.openInfoWindowHtml(dealer.infowWindow);
					});
					self.map.addOverlay(marker);
					if(self.markers[counter] != null){
						self.markers[counter].hide();
						self.map.removeOverlay(self.markers[counter]);
					}
					self.markers[counter] = marker;
					if(self.dealers.length == 1){
				 	 	marker.openInfoWindowHtml(dealer.infowWindow);
					}
				}
			}
		});
		}
		
		
	},

	zoomInto:function (dealerNumber){
		var self = this;
		var dealers = self.dealers;
		if(dealers.length >= dealerNumber - 1){
			var dealer = dealers[dealerNumber - 1];
			var marker = self.markers[dealerNumber - 1];
			marker.openInfoWindowHtml(dealer.infowWindow);
			//self.map.setCenter(new GLatLng(dealer.latitude, dealer.longitude), 15);
			self.map.panTo(new GLatLng(dealer.latitude, dealer.longitude));
			self.map.panBy(new GSize(-225,150));
			
			//self.map.panDirection(-1, -1) 
		}
	},
	
	changeBubble :function(counter){
		var info;
		var spanObj=document.getElementById('bubble'+counter); 
		if(spanObj!=null) {      
			info = spanObj.innerHTML;
		}
		var marker = this.markers[counter - 1];
		marker.openInfoWindowHtml(info);
	},
	
	showRoute : function(inden, address, counter){
		var self = this;
		self.directions.clear();
		self.directionsPanel.innetHTML = '';
	
		GEvent.addListener(self.directions, "addoverlay", function() {
			var searchResults = document.getElementById('searchresults');
			searchResults.style.display = 'none';
			self.customizeDirectionspanel();
		    var routeMap = document.getElementById('route');
			routeMap.style.display = 'inline';
			
		});
		
		var toAddress = document.getElementById('postcode1'+counter); 
		var fromAddress = document.getElementById('postcode2'+counter); 
		
		//alert(toAddress.value);
		//alert(fromAddress.value);
		
		
		var marker = this.markers[counter - 1];
		var dealer = this.dealers[counter - 1];
		marker.closeInfoWindow();	
		
		// OMNITURE TRACKING CODE SNIPPET 
		
		if(toAddress != null && toAddress.value != null && toAddress.value != ''){
			var _toAddress = toAddress.value;
			var _fromAddress = dealer.shopAddress+", "+dealer.city+", "+dealer.state +" "+dealer.postalCode + ', ' + countryCode;
			//alert('1.'+_fromAddress+'::'+_toAddress);
			O_rootTrack(_fromAddress,_toAddress);
		}
		else{
			var _toAddress = dealer.shopAddress+", "+dealer.city+", "+dealer.state +" "+dealer.postalCode + ', ' + countryCode;
			var _fromAddress = fromAddress.value;
			//alert('2.'+_fromAddress+'::'+_toAddress);
			O_rootTrack(_fromAddress,_toAddress);
						
		}
		
		if(toAddress != null && toAddress.value != null && toAddress.value != ''){
			var address = toAddress.value;
			self.geocoder.getLatLng(address, function(response) {
				if (!response || response == null) {
					
				}
				else if(response.lat() != null && response.lng() != null){	
					var points = new Array();
					points[0] = marker.getLatLng().lat() + ','+ marker.getLatLng().lng();
					//alert(points[0]);
					points[1] = response.lat() + ','+ response.lng();
					//alert(points[1]);
					self.directions.loadFromWaypoints(points);
				}
			});	
		}
		else{
			var address = fromAddress.value;
			self.geocoder.getLatLng(address, function(response) {
				if (!response || response == null) {
					
				}
				else if(response.lat() != null && response.lng() != null){	
					var points = new Array();
					points[0] = response.lat() + ','+ response.lng();
					//alert(points[0]);
					points[1] = marker.getLatLng().lat() + ','+ marker.getLatLng().lng();	
					//alert(points[1]+"-----");				
					self.directions.loadFromWaypoints(points);
				}
			});			
		}
		
		
	},
	
	customizeDirectionspanel: function(){
	//alert(1);
		var fromMarker = this.directions.getMarker(0);
		var toMarker = this.directions.getMarker(1);
	
		fromMarker.setImage('/HP/images/dealer/ballons/icon-dd-play-trans.png');	
		toMarker.setImage('/HP/images/dealer/ballons/icon-dd-stop-trans.png');
		
		fromMarker.getIcon().image = '/HP/images/dealer/ballons/icon-dd-play-trans.png';	
		toMarker.getIcon().image = '/HP/images/dealer/ballons/icon-dd-stop-trans.png';

		fromMarker.show();
		toMarker.show();
				
		this.customPanel(this.map, 'googleMap.map', this.directions, document.getElementById('innerContent'));
	},
	
	
	customPanel: function(map, mapname, dirn, div) {
    	var html = "";
        function waypoint(point, type, address) {
          var target = '"' + mapname +".showMapBlowup(new GLatLng("+point.toUrlValue(6)+"))"  +'"';
          html += '<table style="border: 1px solid silver; margin: 10px 0px; background-color: rgb(238, 238, 238); border-collapse: collapse; color: rgb(0, 0, 0);">';
          html += '  <tr style="cursor: pointer;" onclick='+target+'>';
          html += '    <td style="padding: 4px 15px 0px 5px; vertical-align: middle; width: 20px;">';
          html += '      <img src="/HP/images/dealer/ballons/icon-dd-' +type+ '-trans.png">'
          html += '    <\/td>';
          html += '    <td style="vertical-align: middle; width: 100%;">';
          html +=        address;
          html += '    <\/td>';
          html += '  <\/tr>';
          html += '<\/table>';
        }

        function routeDistance(dist) {
          html += '<div style="text-align: right; padding-bottom: 0.3em;">' + dist + '<\/div>';
        }      

        function detail(point, num, description, dist) {
          var target = '"' + mapname+".showMapBlowup(new GLatLng("+point.toUrlValue(6)+"))"  +'"';
          html += '<table style="margin: 0px; padding: 0px; border-collapse: collapse;">';
          html += '  <tr style="cursor: pointer;" onclick='+target+'>';
          html += '    <td style="border-top: 1px solid rgb(205, 205, 205); margin: 0px; padding: 0.3em 3px; vertical-align: top; text-align: right;">';
          html += '      <a href="javascript:void(0)"> '+num+'. <\/a>';
          html += '    <\/td>';
          html += '    <td style="border-top: 1px solid rgb(205, 205, 205); margin: 0px; padding: 0.3em 3px; vertical-align: top; width: 100%;">';
          html +=        description;
          html += '    <\/td>';
          html += '    <td style="border-top: 1px solid rgb(205, 205, 205); margin: 0px; padding: 0.3em 3px 0.3em 0.5em; vertical-align: top; text-align: right;">';
          html +=        dist;
          html += '    <\/td>';
          html += '  <\/tr>';
          html += '<\/table>';
        }

        function copyright(text) {
          html += '<div style="font-size: 0.86em;">' + text + "<\/div>";
        }
        
        for (var i=0; i<dirn.getNumRoutes(); i++) {
          if (i==0) {
            var type="play";
          } else {
            var type="pause";
          }
          var route = dirn.getRoute(i);
          var geocode = route.getStartGeocode();
          var point = route.getStep(0).getLatLng();
          waypoint(point, type, geocode.address);
          routeDistance(route.getDistance().html+" (about "+route.getDuration().html+")");

          for (var j=0; j<route.getNumSteps(); j++) {
            var step = route.getStep(j);
            detail(step.getLatLng(), j+1, step.getDescriptionHtml(), step.getDistance().html);
          }
        }
        
        var geocode = route.getEndGeocode();
        var point = route.getEndLatLng();
        waypoint(point, "stop", geocode.address);
                 
        copyright(dirn.getCopyrightsHtml());
        div.innerHTML = html;

    }, 
	
	
	getLatLang: function(address){
		var latLang;
		self.geocoder.getLatLng(address, function(response) {
			if (!response || response == null) {
				
			}
			else if(response.lat() != null && response.lng() != null){
				latLang = new GLatLng(response.lat(), response.lng(), false);
			}
		});	
		return latlang;	
	}
}

var Dealer = Class.create();
Dealer.prototype = {
	initialize: function(){
		var interfaceId;
		var customerNo;
		var shopType;
		var shopName;
		var shopAddress;
		var city;
		var state;
		var postalCode;
		var countryCode;
		var phone;
		var fax;
		var latitude;
		var longitude;;
		var image;
		var infowWindow;
		var checkGeocodes;
	}
}

var googleMap;

function initializeMap(){
	googleMap = new GoogleMap(centerLatitude, centerLongitude, zoom);
	checkIfDealersAvailable();
}

function checkIfDealersAvailable(){
	dealersDataInitializer.refresh();
	googleMap.showDealers(dealersDataInitializer.getDealers());
	if(dealersDataInitializer.dealers.length > 0){
		var searchResults = document.getElementById('searchresults');
		searchResults.style.display = 'block';
	}
}

var DealersDataInitializer = Class.create();
DealersDataInitializer.prototype = {

	initialize: function(){
		this.dealers;
	},

	getDealers: function(){
	
		if(this.dealers == null){
			this.refresh();
		}
		return this.dealers;
	},
	
	refresh: function(){
		var spanObj;
		this.dealers = new Array();
		for(var i=1; i<=pageSize; i++)
		{
			var dealer = new Dealer();
			var isDataThere = false;
			
			spanObj=document.getElementById('customerNo'+i);
			if(spanObj!=null){
				dealer.customerNo=spanObj.innerHTML;
				isDataThere = true;
			}	
			
			spanObj=document.getElementById('shopType'+i);
			if(spanObj!=null){
				dealer.shopType=spanObj.innerHTML;
				isDataThere = true;
			}	
			
			spanObj=document.getElementById('shopName'+i); 
			if(spanObj!=null){        
				dealer.shopName=spanObj.innerHTML;
				isDataThere = true;
			}
			
			spanObj=document.getElementById('shopAddress'+i); 
			if(spanObj!=null){        
				dealer.shopAddress=spanObj.innerHTML;
				isDataThere = true;
			}
			
			spanObj=document.getElementById('postalCode'+i); 
			if(spanObj!=null) {     
				dealer.postalCode=spanObj.innerHTML;
				isDataThere = true;
			}	

			spanObj=document.getElementById('city'+i); 
			if(spanObj!=null) {     
				dealer.city=spanObj.innerHTML;
				isDataThere = true;
			}	

			spanObj=document.getElementById('state'+i); 
			if(spanObj!=null) {     
				dealer.state=spanObj.innerHTML;
				isDataThere = true;
			}	

			spanObj=document.getElementById('phone'+i); 
			if(spanObj!=null) {          
				dealer.phone=spanObj.innerHTML;
				isDataThere = true;
			}	
			
			spanObj=document.getElementById('fax'+i); 
			if(spanObj!=null){             
				dealer.fax=spanObj.innerHTML;
				isDataThere = true;
			}	
			
			spanObj=document.getElementById('shopTypeImage'+i); 
			if(spanObj!=null){  
				dealer.image=spanObj.innerHTML;
				isDataThere = true;
			}	
			
			spanObj=document.getElementById('latitude'+i); 
			if(spanObj!=null){        
				dealer.latitude=spanObj.innerHTML;
				isDataThere = true;
			}	
				
			spanObj=document.getElementById('longitude'+i); 
			if(spanObj!=null) {      
				dealer.longitude=spanObj.innerHTML;
				isDataThere = true;
			}	

			spanObj=document.getElementById('bubble'+i); 
			if(spanObj!=null) {      
				dealer.infowWindow=spanObj.innerHTML;
				isDataThere = true;
			}
			spanObj=document.getElementById('checkGeocodes'+i); 
			if(spanObj!=null) {      
				dealer.checkGeocodes=spanObj.innerHTML;
				isDataThere = true;
			}		

			if(isDataThere)
				this.dealers[i-1] = dealer;
		}
	}

}

var dealersDataInitializer = new DealersDataInitializer();
