var ROOT = '';
var map = null;
var apiurl = 'http://api.shoplocal.com/lexus/2010.2/JSON/GetLocalOffers.aspx?campaignid=9291441cb370c454';
var appxml = ROOT+'/lexus/LexusSearchSubmitXML.do?dealerlocator.pmaDealersOnly=false&application=LexusApp&radius=50&brandId=2&searchType=zipcode&zipCode=';
var appxmlFind = ROOT+'/lexus/LexusSearchSubmitXML.do?dealerlocator.pmaDealersOnly=false&application=LexusApp&radius=500&brandId=2&searchType=zipcode&zipCode=';
var defaultCopy = "Contact your Lexus dealer to schedule a test drive.";
var radius="50";

var exp = new Date();                                   
exp.setTime(exp.getTime() + (1000 * 60 * 60 * 24 * 30)); 

var GenericOverlay = new genericOverlay();
var enlarge = ROOT+'/_includes/overlays/map.html';
var numOffers=0;

try{Shadowbox.init({ language: 'en', skipSetup: true });}catch(err){}

if (!qsVars) {
	var qsVars = new Array();
	var queryString = location.search;
	if (queryString) {
		var qsdata = queryString.slice(1,queryString.length);
		var qsvalues = qsdata.split("&");
		for (i=0; i < qsvalues.length; i++) {
			var qsvaluepair = qsvalues[i].split("=");
			qsVars[qsvaluepair[0]] = qsvaluepair[1];
		}
	}
}

function show(x){ document.getElementById(x).className='show'; }
function hide(x){ document.getElementById(x).className='hide'; }

function checkFlag(){
	if(qsVars['offers']=="on"){
		document.getElementById('OFFERS').setAttribute("class", "boxon");
		document.getElementById('DEALERS').setAttribute("class", "boxoff");
	}
}

function showOffer(model,x){
	document.getElementById(model+'Offers').className += ' hide';
	document.getElementById(model+'OfferDetails').className = document.getElementById(model+'OfferDetails').className.replace(/ hide/g,'');
	document.getElementById(model+'OfferDetails').innerHTML=document.getElementById(x).innerHTML;
}

function closeOffer(model,x){
	document.getElementById(model+'Offers').className = document.getElementById(model+'Offers').className.replace(/ hide/g,'');
	document.getElementById(model+'OfferDetails').className += ' hide';
}

function loadJSON(url) {
	var headID = document.getElementsByTagName("head")[0];         
	var newScript = document.createElement('script');
	newScript.type = 'text/javascript';
	newScript.src = url;
	headID.appendChild(newScript);
}

function loadModel(feed){
	var node,offerClass,description;
	var Offer='';
	var otherOffers=0;
	try{
		var offerCount=feed.content.collection.data.length;
		if(!offerCount){ 
			node = feed.content.collection.data;
			if(node.type!="CPO"){ 
				Offer += createOffer(modelid,0,node);
				if(node.otherOffers=="1"){ otherOffers++; }
				numOffers=1;
			}
		}else{
			for(j=0; j<offerCount; j++){
				node = feed.content.collection.data[j];
				if(node.type!="CPO"){ 
					Offer += createOffer(modelid,j,node);
					if(node.otherOffers=="1"){ otherOffers++; }
					numOffers++;
				}
			}
		}
	} catch (err) {
		Offer = createDefault();
	}
	
	//Write offers into feed div
	document.getElementById(modelid+'Offers').innerHTML=Offer;
	//Reveal other offers link if there are other offers
	if(otherOffers>0){document.getElementById('seeAll').style.display='block';}
	//rest the heights of the divs to level them out
	resetDivs();
}

function loadCPO(feed){
	var node,offerClass,description;
	var Offer='';
	var otherOffers=0;
	try {
		var offerCount=feed.content.collection.data.length;
		if(!offerCount){ 
			node = feed.content.collection.data;
			if(node.type=="CPO"){ 
				Offer += createOffer(modelid,0,node); 
				if(node.otherOffers=="1"){ otherOffers++; }
				numOffers=1;
			}
		}else{
			for(j=0; j<offerCount; j++){
				node = feed.content.collection.data[j];
				if(node.type=="CPO"){ 
					Offer += createOffer(modelid,j,node);
					if(node.otherOffers=="1"){ otherOffers++; }
					numOffers++;
				}
			}
		}
		if(numOffers==0){ Offer = createDefault(); }
	} catch(err) {
		Offer = createDefault();
	}
	
	//Write offers into feed div
	document.getElementById('cpoOffers').innerHTML=Offer;
	//Reveal other offers link if there are other offers
	if(otherOffers>0){document.getElementById('seeAll').style.display='block';}
	//rest the heights of the divs to level them out
	
	resetDivs();
}

function createDefault(){
	baker("*Empty API Feed");
	var Offer='';
	Offer += '<div id="offer0" class="offer Default">';
	Offer += '<div class="offerInfo">';
	Offer += '<span class="offerDescriptionLong">'+defaultCopy+'</span>';
	Offer += '</div>';
	Offer += '</div>';
	return Offer;
}

function createOffer(model,x,node){
	var Offer='';
	var description;
	var detailsTag='2270.3';
	var isDefault=false;
	try{ modelid } catch(err){ detailsTag='2268.3'; }
	
	offerClass = node.offerType.replace(/ /g,"");
	
	Offer += '<div id="offer'+x+'" class="offer '+offerClass+'">';
	Offer += '<a href="javascript:closeOffer(\''+model+'\',\'hide\')" class="close"><img src="http://www.lexus.com/lexus-share/images/gallery/btn_CloseBlkOv.gif" alt="close" /></a>';
	Offer += '<div class="offerInfo">';
	
	var OfferEmailSubject,OfferEmailBody;
	OfferEmailSubject = '?subject=Check Out This Lexus Offer';
	OfferEmailBody = '&body='+node.offerCategory;
	OfferEmailBody += '\n'+node.modelYear+' '+node.vehicle.modelDisplayName+' '+node.modelDescription1+' '+node.modelDescription2+' '+node.modelDescription3+'\n';
			
	if(offerClass=="Default"){
		Offer += '<span class="offerDescriptionLong">' + node.offerDefault + '</span>';
		isDefault=true;
	} else if(offerClass=="CashBack"){
		description = node.offerDescriptionLong; if(!node.offerDescriptionLong){ description = node.offerDescriptionShort; }
		
		Offer += '<span class="offerType">'+ node.offerCategory + '</span>';
		Offer += '<div class="line1">';
			Offer += '<span class="modelYear">'+ node.modelYear + '</span>';
			Offer += '<span class="modelDisplayName">'+ node.vehicle.modelDisplayName + '</span>';
			Offer += '<span class="modelDescription1">'+ node.modelDescription1 + '</span>';
			Offer += '<span class="modelDescription2">'+ node.modelDescription2 + '</span>';
			Offer += '<span class="modelDescription3">'+ node.modelDescription3 + '</span>';
		Offer += '</div>';
		//Offer += '<div class="line2">';
		//Offer += '<span class="offerAmount">'+ node.offerAmount + '</span>';
		//Offer += '<span class="offerAmountQualifier">'+ node.offerAmountQualifier + '</span>';
		//Offer += '<span class="offerTerm">'+ node.offerTerm + '</span>';
		//Offer += '<span class="offerTermQualifier">'+ node.offerTermQualifier + '</span>';
		//Offer += '</div>';
		//Offer += '<div class="line3">';
		//Offer += '<span class="downPayment">'+ node.downPayment + '</span>';
		//Offer += '<span class="downPaymentQualifier">'+ node.downPaymentQualifier + '</span>';
		//Offer += '</div>';
		Offer += '<span class="additionalOffer">' + node.additionalOffer + '</span>';
		Offer += '<span class="offerDescriptionLong">' + description + '</span>';
		
		OfferEmailBody += '\n'+node.additionalOffer;
		OfferEmailBody += '\n\n'+description;
	} else if (offerClass=="Lease") {
		description = node.offerDescriptionLong; if(!node.offerDescriptionLong){ description = node.offerDescriptionShort; }
		
		Offer += '<span class="offerType">'+ node.offerCategory + '</span>';
		if(window.location.toString().toLowerCase().indexOf('cpo')==-1 ){
			Offer += '<div class="line1">';
				Offer += '<span class="modelYear">'+ node.modelYear + '</span>';
				Offer += '<span class="modelDisplayName">'+ node.vehicle.modelDisplayName + '</span>';
				Offer += '<span class="modelDescription1">'+ node.modelDescription1 + '</span>';
				Offer += '<span class="modelDescription2">'+ node.modelDescription2 + '</span>';
				Offer += '<span class="modelDescription3">'+ node.modelDescription3 + '</span>';
			Offer += '</div>';
		}
		Offer += '<div class="line2">';
		Offer += '<span class="offerAmount">'+ node.offerAmount + '</span>';
		Offer += '<span class="offerAmountQualifier">'+ node.offerAmountQualifier + '</span>';
		Offer += '<span class="offerTerm">'+ node.offerTerm + '</span>';
		if(node.offerTermQualifier){ Offer += '<span class="offerTermQualifier">'+ node.offerTermQualifier + '</span>'; }
		else { Offer += '<span class="offerTermQualifier">'+ node.offerTermPostQualifier + '</span>'; }
		Offer += '</div>';
		Offer += '<div class="line3">';
		Offer += '<span class="downPayment">'+ node.downPayment + '</span>';
		Offer += '<span class="downPaymentQualifier">'+ node.downPaymentQualifier + '</span>';
		Offer += '</div>';
		Offer += '<span class="additionalOffer">' + node.additionalOffer + '</span>';
		Offer += '<span class="offerDescriptionLong">' + description + '</span>';
		
		OfferEmailBody += '\n'+node.offerAmount+' '+node.offerAmountQualifier+' '+node.offerTerm+' '+node.offerTermQualifier;
		OfferEmailBody += '\n\n'+node.downPayment+' '+node.downPaymentQualifier;
		OfferEmailBody += '\n\n'+node.additionalOffer;
		OfferEmailBody += '\n\n'+description;
	} else if (offerClass=="Maintenance") {
		description = node.offerDescriptionLong; if(!node.offerDescriptionLong){ description = node.offerDescriptionShort; }
		
		Offer += '<span class="offerType">'+ node.offerCategory + '</span>';
		Offer += '<div class="line1">';
			Offer += '<span class="modelYear">'+ node.modelYear + '</span>';
			Offer += '<span class="modelDisplayName">'+ node.vehicle.modelDisplayName + '</span>';
			Offer += '<span class="modelDescription1">'+ node.modelDescription1 + '</span>';
			Offer += '<span class="modelDescription2">'+ node.modelDescription2 + '</span>';
			Offer += '<span class="modelDescription3">'+ node.modelDescription3 + '</span>';
		Offer += '</div>';
		Offer += '<span class="additionalOffer">' + node.additionalOffer + '</span>';
		Offer += '<span class="offerDescriptionLong">' + description + '</span>';
		
		OfferEmailBody += '\n'+node.additionalOffer;
		OfferEmailBody += '\n\n'+description;
	} else if (offerClass=="MSRP") {
		description = node.offerDescriptionLong; if(!node.offerDescriptionLong){ description = node.offerDescriptionShort; }
		
		Offer += '<span class="offerType">'+ node.offerCategory + '</span>';
		Offer += '<div class="line1">';
			Offer += '<span class="modelYear">'+ node.modelYear + '</span>';
			Offer += '<span class="modelDisplayName">'+ node.vehicle.modelDisplayName + '</span>';
			Offer += '<span class="modelDescription1">'+ node.modelDescription1 + '</span>';
			Offer += '<span class="modelDescription2">'+ node.modelDescription2 + '</span>';
			Offer += '<span class="modelDescription3">'+ node.modelDescription3 + '</span>';
		Offer += '</div>';
		Offer += '<div class="line2">';
		Offer += '<span class="downPaymentQualifier">'+ node.downPaymentQualifier + '</span>';
		Offer += '<span class="offerAmount">'+ node.offerAmount + '</span>';
		Offer += '<span class="offerAmountQualifier">MSRP</span>';
		//Offer += '<span class="offerTerm">'+ node.offerTerm + '</span>';
		//Offer += '<span class="offerTermQualifier">'+ node.offerTermQualifier + '</span>';
		Offer += '</div>';
		//Offer += '<div class="line3">';
		//Offer += '<span class="downPayment">'+ node.downPayment + '</span>';
		//Offer += '</div>';
		//Offer += '<span class="additionalOffer">' + node.additionalOffer + '</span>';
		Offer += '<span class="offerDescriptionLong">' + description + '</span>';
		
		OfferEmailBody += '\n'+node.downPaymentQualifier;
		OfferEmailBody += '\n'+node.offerAmount+' MSRP';
		OfferEmailBody += '\n'+node.additionalOffer;
		OfferEmailBody += '\n\n'+description;
	} else if (offerClass=="Financing") {
		description = node.offerDescriptionLong; if(!node.offerDescriptionLong){ description = node.offerDescriptionShort; }
		Offer += '<span class="offerType">'+ node.offerCategory + '</span>';
		if(window.location.toString().toLowerCase().indexOf('cpo')==-1 ){
			Offer += '<div class="line1">';
				Offer += '<span class="modelYear">'+ node.modelYear + '</span>';
				Offer += '<span class="modelDisplayName">'+ node.vehicle.modelDisplayName + '</span>';
				Offer += '<span class="modelDescription1">'+ node.modelDescription1 + '</span>';
				Offer += '<span class="modelDescription2">'+ node.modelDescription2 + '</span>';
				Offer += '<span class="modelDescription3">'+ node.modelDescription3 + '</span>';
			Offer += '</div>';
		}
		Offer += '<div class="line2">';
		Offer += '<span class="offerAmount">'+ node.offerAmount + '</span>';
		Offer += '<span class="offerAmountQualifier">'+ node.offerAmountQualifier + '</span>';
		Offer += '</div>';
		Offer += '<div class="line3">';
		if(node.OfferTermPreQualifier){ Offer += '<span class="offerTermQualifier">'+node.OfferTermPreQualifier+'</span>'; }
		else{ Offer += '<span class="offerTermQualifier">Financing up to</span>'; }
		Offer += '<span class="offerTerm">'+ node.offerTerm + '</span>';
		if(node.offerTermPostQualifier){ Offer += '<span class="offerTermQualifier">'+ node.offerTermPostQualifier + '</span>'; }
		else{ Offer += '<span class="offerTermQualifier">'+ node.offerTermQualifier + '</span>'; }
		Offer += '</div>';
		Offer += '<span class="additionalOffer">' + node.additionalOffer + '</span>';
		Offer += '<span class="offerDescriptionLong">' + description + '</span>';
		
		OfferEmailBody += '\n'+node.offerAmount+' APR';
		OfferEmailBody += '\n\n'+node.additionalOffer;
		OfferEmailBody += '\n\n'+description;
	} else if (offerClass=="TestDrive") {
		description = node.offerDescriptionLong; if(!node.offerDescriptionLong){ description = node.offerDescriptionShort; }
		
		Offer += '<span class="offerType">'+ node.offerCategory + '</span>';
		Offer += '<div class="line1">';
			Offer += '<span class="modelYear">'+ node.modelYear + '</span>';
			Offer += '<span class="modelDisplayName">'+ node.vehicle.modelDisplayName + '</span>';
			Offer += '<span class="modelDescription1">'+ node.modelDescription1 + '</span>';
			Offer += '<span class="modelDescription2">'+ node.modelDescription2 + '</span>';
			Offer += '<span class="modelDescription3">'+ node.modelDescription3 + '</span>';
		Offer += '</div>';
		Offer += '<span class="additionalOffer">' + node.additionalOffer + '</span>';
		Offer += '<span class="offerDescriptionLong">' + description + '</span>';
		
		OfferEmailBody += '\n'+node.additionalOffer;
		OfferEmailBody += '\n\n'+description;
	} else {
		description = node.offerDescriptionLong; if(!node.offerDescriptionLong){ description = node.offerDescriptionShort; }
		
		Offer += '<span class="offerType">'+ node.offerCategory + '</span>';
		Offer += '<div class="line1">';
			Offer += '<span class="modelYear">'+ node.modelYear + '</span>';
			Offer += '<span class="modelDisplayName">'+ node.vehicle.modelDisplayName + '</span>';
			Offer += '<span class="modelDescription1">'+ node.modelDescription1 + '</span>';
			Offer += '<span class="modelDescription2">'+ node.modelDescription2 + '</span>';
			Offer += '<span class="modelDescription3">'+ node.modelDescription3 + '</span>';
		Offer += '</div>';
		Offer += '<span class="additionalOffer">' + node.additionalOffer + '</span>';
		Offer += '<span class="offerDescriptionLong">' + description + '</span>';
		
		OfferEmailBody += '\n'+node.additionalOffer;
		OfferEmailBody += '\n\n'+description;
	}
	
	OfferEmailBody += '\n\n'+node.offerDisclaimer;
	OfferEmailBody += '\n\nVisit http://www.YourLexusDealer.com For More Infromation';
	
	Offer += '</div>';
	if(node.offerDisclaimer!=""){
		Offer += '<div class="disclaimer">';
		Offer += '<span class="offerDisclaimer">' + node.offerDisclaimer + '</span>';
		if(!isDefault){
			Offer += '<div id="offerLinks">';
			Offer += '<a href="mailto:'+OfferEmailSubject+encodeURI(OfferEmailBody)+'" class="dirLink">Email Offer</A> | <a href="javascript:window.print()" class="dirLink">Print Offer</a>';
			Offer += '</div>';
		}
		Offer += '</div>';
		Offer += '<a href="javascript:fireTag(\''+ detailsTag +'\');showOffer(\''+model+'\',\'offer'+x+'\')" class="details">*OFFER DETAILS</a>';
	}
	Offer += '</div>';
	
	return Offer;
}

function resetDivs(){
	var maxh=0;
	var divs=document.getElementsByClassName('feed');
	
	for(var y=0; y<divs.length; y++){
		for(var x=0; x<divs[y].childNodes.length; x++){
			if(divs[y].childNodes[x].offsetHeight>maxh){ maxh=divs[y].childNodes[x].offsetHeight; }
		}
	}
	for(var y=0; y<divs.length; y++){
		for(var j=0; j<divs[y].childNodes.length; j++){ divs[y].childNodes[j].style.height = (maxh+10)+'px'; }
	}
}

function GetMap(){

	map = new VEMap('myMap');	
	map.SetDashboardSize(VEDashboardSize.Tiny);
  
	//nullify this hide ero function
	VEHideVEShapeERO = function(){};
	
	currentVE_ElementID = "";
	
	//if currentVE_isLocked is true, info boxes won't show on hover
	currentVE_isLocked = false;
	
	// Begin by supressing the onmouseover event. Returning true 
	// from an event handler disables the default Virtual Earth action	
	map.AttachEvent('onmouseover', function(e) {
		MouseShapeHandler(e);
		if(e.elementID && !currentVE_isLocked) {			
			if(!currentVE_ElementID) currentVE_ElementID = e.elementID;	
			if(currentVE_ElementID != e.elementID) ero.oldHide();
			currentVE_ElementID = e.elementID;		
			
			var shape = map.GetShapeByID(e.elementID); 
			if(shape) map.ShowInfoBox(shape);
		} else {
			if(!currentVE_isLocked) ero.oldHide();
		}
		return true; 
	});
	
	//hide the info box if the user mouses out of a pushpin
	map.AttachEvent('onmouseout', function(e) { 
		if(!currentVE_isLocked && e.elementID) {
			ero.oldHide();
		}
		return true; 
	});
	
	// Subscribe to the onclick event and react whenever we get an element id
	map.AttachEvent("onclick", function(e) {
		//if the current pushpin being clicked isn't same as the last, show the info bubble for the new pushpin
		if(e.elementID && e.elementID != currentVE_ElementID) {
			//make sure the infobox gets hidden if it's currently showing
			ero.oldHide();
			
			//show the info bubble for the current pushpin
			var shape = map.GetShapeByID(e.elementID); 
			if(shape) map.ShowInfoBox(shape);
			
			ero.lock();
		} else if(e.elementID == currentVE_ElementID) {
			ero.lock();
		} else {
			ero.unlock();
			ero.oldHide();
		}
		
		return true;
	});
	
	map.LoadMap();	
	
	appxml=appxml.replace('radius=50','radius='+radius);
	var l = new VEShapeLayer();
	var veLayerSpec = new VEShapeSourceSpecification(VEDataType.GeoRSS, appxml+getCookie('YLDZIP'), l);
	map.ImportShapeLayerData(veLayerSpec, OnComplete);
	
	//nullify the default hide function to prevent being maps from hiding the info box
	ero.oldHide = ero.hide;
	ero.hide = function(){}
	ero.unlock = function() {
		currentVE_isLocked = false;
	}
	ero.lock = function() {
		currentVE_isLocked = true;
	}
	
	//if the user uses the mouse wheel, hide the info box
	map.AttachEvent('onmousewheel', function(e) { 
		ero.oldHide();
		ero.unlock();
	});
	
	infoBox = ero.getElement();
	
	//hide the info box if the info box isn't locked and the user mouses out of it 	
	infoBox.onmouseout = function(e) {
		if(mousedOut(this,e)) {
			if(!currentVE_isLocked) {
				ero.oldHide();
			}
		}
	}
	
	//add a close button to the info box
	var closeButton = document.createElement("span");
	closeButton.className = "eroCloseButton";
	closeButton.onclick = function() {
		ero.oldHide();
		ero.unlock();
	}
	infoBox.appendChild(closeButton);	

	//function used to detect if the user clicked outside of the map or info box
	//if so, hide the info box
	hideInfoBox = function(e) {		
		e = e || window.event;
		
		target = (window.event) ? e.srcElement : e.target;
		newTarget = target;
		
		while (!!newTarget && target.nodeName != 'BODY'  && newTarget !== ero.getElement() && newTarget != map.mapelement && newTarget.className != "eroCloseButton")
			newTarget = newTarget.parentNode;
			
		//if the user clicked on the close button, or anywhere outside the info box or map, hide and unlock the info box
		if((newTarget != ero.getElement() && newTarget != map.mapelement)||newTarget.className=="eroCloseButton") {
			ero.oldHide();
			ero.unlock();
		} else {
			ero.lock();
		}
	}
	
	if(window.addEventListener) {
	  window.addEventListener("click",hideInfoBox,false);
	} else if(window.attachEvent) {
	  document.body.attachEvent("onclick",hideInfoBox);
	}
}

function GetShareMap(){
	if(location.search.indexOf('zipCode=')!=-1){ setCookie('YLDZIP',qsVars['zipCode'],exp); }
		
	fireTag('2270.7',{'<zip>':getCookie('YLDZIP')});
	map = new VEMap('myMap');
	map.SetDashboardSize(VEDashboardSize.Tiny);
	map.AttachEvent("onclick",ShapeHandler);
	map.AttachEvent("onmouseover",MouseShareShapeHandler);
	map.m_vemessage.ShowOld = map.m_vemessage.Show;
	
	map.m_vemessage.showInvalidZipDialog = function() {
		document.getElementById('invalidZipDialog').style.display = "block";
		document.getElementById('invalidZipDialogOverlay').style.display = "block";
	}
	
	map.m_vemessage.Show = function(arguments) {
		if(veLayerSpec.Layer.Annotations.length == 0)
			this.showInvalidZipDialog()
		else
			this.ShowOld(arguments);
	}

    map.LoadMap();
	
	var l = new VEShapeLayer();
	var veLayerSpec = new VEShapeSourceSpecification(VEDataType.GeoRSS, appxmlFind+getCookie('YLDZIP'), l);
	
	map.ImportShapeLayerData(veLayerSpec, OnCompleteShare);
	if (document.getElementById('mapEnter'))
		document.getElementById('mapEnter').className='hide';
	if (document.getElementById('enterZip'))
		document.getElementById('enterZip').className='show';
}

function GetEnlargedMap(){
	map = new VEMap('myMap');
	map.SetDashboardSize(VEDashboardSize.Tiny);
	map.AttachEvent("onmouseover",MouseShapeHandlerEnlarged);
	map.LoadMap();
	
	appxml=appxml.replace('radius=50','radius='+radius);
	var l = new VEShapeLayer();
	var veLayerSpec = new VEShapeSourceSpecification(VEDataType.GeoRSS, appxml+getCookie('YLDZIP'), l);
	map.ImportShapeLayerData(veLayerSpec, OnComplete);
}

function OnComplete(layer){
	var shapeCount = layer.GetShapeCount();
	
	for (var i = 0; i < shapeCount; i++)
	{
		var shape = layer.GetShapeByIndex(i);
		var icon = "<img src='"+ROOT+"/_images/pin.gif' style='position:relative;left:4px;top:-27px'/>";
		shape.SetCustomIcon(icon);
		if((window.location.toString().indexOf('New_York_City_New_Jersey_Connecticut')!=-1 || parent.location.toString().indexOf('New_York_City_New_Jersey_Connecticut')!=-1) && shape.Title.toString()=='<span class="infoBubble">David McDermott Lexus of New Haven</span>'){shape.Hide();}
		if(shapeCount==1){ 
			var dealer = shape.GetTitle().toString();
			dealer = dealer.replace('<span class="infoBubble">','').replace('</span>','');
			var Description = shape.GetDescription().toString();
			var NewDescription = Description.replace('###800Number###',get800(dealer));
			shape.SetDescription(NewDescription);
			map.ShowInfoBox(shape); 
		}
	}
	if(window.location.toString().indexOf('New_York_City_New_Jersey_Connecticut')!=-1 || parent.location.toString().indexOf('New_York_City_New_Jersey_Connecticut')!=-1){map.SetZoomLevel(8);}
}

function OnCompleteShare(layer){
	if (document.getElementById('mapEnter'))
		document.getElementById('mapEnter').className='show';
	if (document.getElementById('enterZip'))
		document.getElementById('enterZip').className='hide';

	var shapeCount = layer.GetShapeCount();
		
	for (var i = 0; i < shapeCount; i++)
	{
		var shape = layer.GetShapeByIndex(i);
		if(i<2){
			var icon = "<img src='"+ROOT+"/_images/pin.gif' style='position:relative;left:4px;top:-27px'/>";
			shape.SetCustomIcon(icon);
		} else {
			shape.Hide();	
		}
	}
}

function ShapeHandler(e) {
	if (e.elementID != null){
		var shape = map.GetShapeByID(e.elementID);
		var desc = shape.GetDescription();
		desc = desc.split('###800Number###')[0];
		var zip = shape.GetDescription().split('<span class="zipCode">')[1].split('</span><br />')[0];
		if(location.search.indexOf('model=')!=-1){
			var fwd = '/'+findLda(zip)+'/'+qsVars['model']+'/index.html';
		} else if (location.search.indexOf('page=')!=-1) {
			var fwd = '/'+findLda(zip)+'/'+qsVars['page']+'/index.html';
		} else {
			var fwd = '/'+findLda(zip)+'/index.html';
		}
		setCookie('YLDZIP',zip,exp);
		window.location=fwd;
	}
}

function MouseShapeHandler(e){
  if (e.elementID != null)
  {
    var shape = map.GetShapeByID(e.elementID);
    var dealer = shape.GetTitle().toString();
    dealer = dealer.replace('<span class="infoBubble">','').replace('</span>','');
    var Description = shape.GetDescription().toString();
	var NewDescription = Description.replace('###800Number###',get800(dealer));
	shape.SetDescription(NewDescription);
  }
}

function MouseShareShapeHandler(e){
  if (e.elementID != null)
  {
    var shape = map.GetShapeByID(e.elementID);
	var desc = shape.GetDescription();
	desc = desc.split('###800Number###')[0];
	var zip = shape.GetDescription().split('<span class="zipCode">')[1].split('</span><br />')[0];
	if(location.search.indexOf('model=')!=-1){ var fwd = '/'+findLda(zip)+'/'+qsVars['model']+'/index.html'; }else{ var fwd = '/'+findLda(zip)+'/index.html'; }
	shape.SetDescription(desc+'<a href="'+fwd+'" style="position: absolute; top: 0pt; left: 0pt; display: block; width: 100%; height: 230px;" onclick="setCookie(\'YLDZIP\',zip,exp);"></a>');
  }
}

function MouseShapeHandlerEnlarged(e){
  if (e.elementID != null)
  {
    var shape = map.GetShapeByID(e.elementID);
    var dealer = shape.GetTitle().toString();
    dealer = dealer.replace('<span class="infoBubble">','').replace('</span>','');
    var Description = shape.GetDescription().toString();
	var NewDescription = Description.replace('###800Number###',get800(dealer));
	NewDescription = NewDescription.split('<span style="color:#000; margin:15px 0 5px 0; display:block; text-decoration:none; font:bold 12px verdana;">Get Directions:</span>')[0];
	shape.SetDescription(NewDescription);
  }
}

function get800(dealer){
	var dlr = dealer.replace(/ /g,"_").replace(/,/g,"").replace(/\./g,"").replace(/-/g,"_");
	var nb;
	try{ 
		nb = eval('TOLLFREE.'+dlr); 
		return  '('+nb.charAt(0)+nb.charAt(1)+nb.charAt(2)+') '+nb.charAt(3)+nb.charAt(4)+nb.charAt(5)+'-'+nb.charAt(6)+nb.charAt(7)+nb.charAt(8)+nb.charAt(9);
	}
	catch(err){
		return "Error getting number";	
	}
} 

function getDealerLink(x,y,z){
	var redirect;
	var tagName;
	if(y=='specials'){
		if(typeof modelid != 'undefined' && modelid!='cpo'){ 
			redirect="ViewSpecials_D?intcta=YLD:View Specials CTA:Specials";
			tagName='View Dealer Specials:CPO Specials';
		} else{ 
			redirect="ViewSpecials_D?section=section2&sectionValue=Pre-Owned%20Vehicle%20Specials&intcta=YLD:View Specials CTA:Specials"; 
			tagName='View Dealer Specials:New Model Specials';
		}
	}else if (y=='website'){
		if(typeof modelid == 'undefined' || !modelid){
			redirect="?intcta=YLD:Visit Website CTA:Model Home Page";
			tagName='View Website:Home Page';
		} else {
			if(typeof modelid != 'undefined' && modelid!='cpo'){ 
				redirect="NewModelsPageDetails?model="+modelid.toLowerCase() + "&intcta=YLD:Visit Website CTA:Model Home Page";
				tagName='View Website:'+modelid+' Page';
			} else {
				redirect="PreOwnedVehicleSearch?intcta=YLD:Visit Website CTA:Model Home Page";	
				tagName='View Website:CPO Page';
			}
		}
	}else{
		if(typeof modelid != 'undefined' && modelid!='cpo'){
			redirect="QuickQuoteForm?model="+modelid.toLowerCase() + "&intcta=YLD:Contact Dealer CTA:New Models PI Form";
			tagName='Contact Dealer:'+ modelid +' Quick Contact Page';
		} else {
			redirect="ContactUsForm?intcta=YLD:Contact Dealer CTA:New Models PI Form";
			tagName='Contact Dealer:Main Contact Page';
		}
	}
	try{ fireTag('2270.6',{'<button_name_and_destination>':tagName,'<market>':ldaid,'<content>':modelid,'<dealer_code>':z}); } 
	catch(err){ 
		try{ fireTag('2270.6',{'<button_name_and_destination>':tagName,'<market>':window.parent.location.toString().split("/")[3],'<content>':window.parent.location.toString().split("/")[4],'<dealer_code>':z}); }
		catch(err){}
	}
	redirect = x+'/'+redirect;
	window.parent.location.href=redirect + getCampaignId();
}

function loadAllModels(feed){
	var Model,node,cat;
	var hasOffers=false;						
	try{
		for(var j=0; j<feed.content.collection.data.length; j++){
			node = feed.content.collection.data[j];
			
			if(node.offerType!="Default" && node.type!="CPO"){
				hasOffers=true;
				if (node.vehicle.model=="IS" || node.vehicle.model=="ES" || node.vehicle.model=="GS" || node.vehicle.model=="LS"){
					cat='Sedans';
				} else if (node.vehicle.model=="ISC" || node.vehicle.model=="SC"){
					cat='Convertibles';
				} else if (node.vehicle.model=="RX" || node.vehicle.model=="GX" || node.vehicle.model=="LX"){
					cat='LuxuryUtility';
				} else if (node.vehicle.model=="GSh" || node.vehicle.model=="RXh" || node.vehicle.model=="LSh" || node.vehicle.model=="HSh" || node.vehicle.model=="CTh"){
					cat='Hybrids';
				}
				if(document.getElementById(cat).innerHTML.indexOf(node.vehicle.modelDisplayName)==-1){
					document.getElementById(cat).className='';
					document.getElementById(cat).innerHTML += '<a href="#'+ node.vehicle.model +'" onclick="fireTag(\'2268.2\',{\'<content>\':\''+ node.vehicle.model +'\'})">'+ node.vehicle.modelDisplayName +'</a>';	
				}
			}
		}
	} catch(err) { baker("*Empty API Feed"); }
	
	if (document.getElementById('loader'))
		document.getElementById('loader').className='hide';
	
	//if there are offers
	if(hasOffers){ 
		//load in the offers
		loadAllOffers(feed); 
	//if there are not offers
	} else { 
		//load in the nooffers view
		hideOffers(feed); 
	}
}

function loadAllOffers(feed){	
	document.getElementById('leftCol').className="";	
	document.getElementById('rightCol').className="";	
	var node;	
	for(var j=0; j<feed.content.collection.data.length; j++){
		node = feed.content.collection.data[j];	
		if(node.offerType!="Default" && node.type!="CPO"){
			document.getElementById(node.vehicle.model).className = document.getElementById(node.vehicle.model).className.replace(/ hide/g,'');
			document.getElementById(node.vehicle.model+'Offers').innerHTML += createOffer(node.vehicle.model,j,node);
			numOffers++;
		}
	}
	resetDivs();
}

function hideOffers(feed){
	var Offer = '<img id="allModelBanner" src="'+ROOT+'/_images/allmodels_nooffers.jpg" width="1000" height="270" style="margin-bottom:10px" />';
	Offer += '<img src="'+ROOT+'/_images/markets/'+ldaimg+'.gif" id="ldaTitle" style="margin-left:40px" />';

	Offer += '<div id="topBox" style="margin-bottom:10px;">';
	Offer += '<div id="search">';
	Offer += '<img id="searchin" src="'+ROOT+'/_images/search.gif" style="padding-top:5px;">';
	Offer += '<div id="searchInput" style="float:left;">';
	Offer += '<form id="market" name="market" method="post" action="index.html" onsubmit="fireTag(\'2270.5\'); return setZipcode(this);" style="float:left">';
	Offer += '<input type="text" name="clientZip" id="clientZip" value="zip code" onblur="this.setAttribute(\'maxlength\', 8); if(this.value==\'\')value=\'zip code\';" onfocus="if(this.value==\'zip code\')value=\'\'; this.setAttribute(\'maxlength\', 5);" maxlength="8" style="float:left; width:100px; margin-top:5px;">';
	Offer += '<input type="image" style="float:left; margin-top:5px; border: 0pt none ; width: 22px; height:17px;" src="/lexus-share/images/nav/bottom/linkbar/btn_search_btn.gif">				';
	Offer += '</form><div id="zipError"></div>';
	Offer += '</div>';
	Offer += '</div>';	
	Offer += '<div style="clear:both"><!-- --></div>';
	Offer += '</div>';

	Offer += '<div id="OFFERS" class="boxoff">';
	Offer += '<div class="heading">OFFERS IN THIS AREA</div>';
	Offer += '<div id="allOffers" class="feed">';
	
	try{ 
		for(var j=0; j<feed.content.collection.data.length; j++){
			node = feed.content.collection.data[j];
			
			if(node.type!="CPO"){
				Offer += createOffer('all',0,node);
				break;
			}
		}	
	} catch(err) {
		Offer += createDefault();
	}
	
	Offer += '</div>';
	Offer += '</div>';
	Offer += '<div id="allOfferDetails" class="offerDetails hide" style="float:left; margin:7px 0 0 15px; padding:5px 15px; width:460px;"></div>';
	Offer += '<div id="directions" class="hide">';
		Offer += '<a href="javascript:toggleDirections(\'hide\')" class="close"><img src="http://www.lexus.com/lexus-share/images/gallery/btn_CloseBlkOv.gif" alt="close" /></a>';
		Offer += '<b>From: </b><span id="dirFrom"></span><br /><br />';
		Offer += '<b>To: </b><span id="dirTitle"></span><br />';
		Offer += '<span id="dirAdd"></span><br />';
		Offer += '<span id="dir800"></span><br /><br />';
		Offer += '<div id="route"></div>';
	Offer += '</div>';
    if (ie6)
		Offer += '<div id="rightCol" style="position:absolute; margin-top:7px; width:459px; height:301px;"></div>';
    else if (ie7)
		Offer += '<div id="rightCol" style="position:absolute; margin-top:7px; right:10px; width:459px; height:301px;"></div>';
    else
		Offer += '<div id="rightCol" style="position:absolute; margin-top:64px; right:10px; width:459px; height:301px;"></div>';

	var tempMap = '<div id="DEALERS" class="boxon">';
	tempMap += '<div class="heading">DEALERS IN THIS AREA</div>';
	tempMap += '<div id="myMap" style="position:relative; width:459px; height:301px;"><!-- MAP --><div class="loading"><img src="/lexus-share/images/gallery/mobile/loading.gif" /></div></div>';
	tempMap += '<img id="rollOver" src="/_images/roll-over.png" />';
	tempMap += '<div id="mapKeys">';
	tempMap += '<a id="enlarge" href="javascript:fireTag(\'2270.4\'); GenericOverlay.launchOverlay(enlarge,600,900);"><img src="/_images/enlarge.gif" /></a>';
	tempMap += '<a id="showDirections" href="javascript:toggleDirections(\'show\')" class="hide"><img src="/_images/showDirections.gif" /></a>';
	tempMap += '<a id="clearDirections" href="javascript:clearRoute();" class="hide"><img src="/_images/clearDirections.gif" /></a>	';
	tempMap += '</div>';
	tempMap += '</div>';

	document.getElementById('contentContainer').innerHTML=Offer+tempMap;
	if (ie6 || ie7)
		document.getElementById('contentContainer').style.height='710px';
	else
		document.getElementById('contentContainer').style.height='630px';
	map = new VEMap('myMap');

	
	map.SetDashboardSize(VEDashboardSize.Tiny);
	map.AttachEvent("onmouseover",MouseShapeHandler);
    map.LoadMap();
	
	var l = new VEShapeLayer();
	var veLayerSpec = new VEShapeSourceSpecification(VEDataType.GeoRSS, '/lexus/LexusSearchSubmitXML.do?dealerlocator.pmaDealersOnly=false&application=LexusApp&radius='+radius+'&brandId=2&searchType=zipcode&zipCode='+getCookie('YLDZIP'), l);
	map.ImportShapeLayerData(veLayerSpec, OnComplete);
}

function onGotRoute(route)
{
   // Unroll route
   var legs     = route.RouteLegs;
   var turns    = "Total distance: " + route.Distance.toFixed(1) + " mi<br />";
   var numTurns = 0;
   var leg      = null;
   var directionsEmailSubject, directionsEmailBody;


   // Get intermediate legs
	for(var i = 0; i < legs.length; i++)
	{
	   // Get this leg so we don't have to derefernce multiple times
	   leg = legs[i];  // Leg is a VERouteLeg object
		  
	   // Unroll each intermediate leg
	   var turn = null;  // The itinerary leg
		  
	   for(var j = 0; j < leg.Itinerary.Items.length; j ++)
	   {
		  turn = leg.Itinerary.Items[j];  // turn is a VERouteItineraryItem object
		  numTurns++;
		  turns += numTurns + ".\t" + turn.Text + " (" + turn.Distance.toFixed(1) + " mi)<br />";
		  
		  //Display any traffic warnings
		  if (turn.Warnings != null) 
		  {
			 for (var k = 0; k < turn.Warnings.length; k++) { 
			 	turns += "\t\t *" + turn.Warnings[k].Text + "<br />"; 
			}
		  }
	   }
	}
	
	emailDir = turns;
	directionsEmailSubject = '?subject=Direction to '+document.getElementById('dirTitle').innerHTML;
	directionsEmailBody = '&body=From: '+document.getElementById('dirFrom').innerHTML;
	directionsEmailBody += '\n\nTo: '+document.getElementById('dirTitle').innerHTML;
	directionsEmailBody += '\n'+document.getElementById('dirAdd').innerHTML;
	directionsEmailBody += '\n'+document.getElementById('dir800').innerHTML;
	directionsEmailBody += '\n\n'+turns.replace(/<br \/>/g,'\n');
	
	turns += '<div id="directionLinks"><a href="mailto:'+encodeURI(directionsEmailSubject)+encodeURI(directionsEmailBody)+'" class="dirLink">Email Directions</a> | <a href="javascript:window.print()" class="dirLink">Print Directions</a></div>';
	
	toggleDirections('show');
	document.getElementById('route').innerHTML = turns;
}

function directions(x){
	document.getElementById('dirFrom').innerHTML = document.getElementById('fromAdd'+x).value;
	document.getElementById('dirTitle').innerHTML = document.getElementById('toName'+x).value;
	document.getElementById('dirAdd').innerHTML = document.getElementById('toAdd'+x).value;
	document.getElementById('dir800').innerHTML = get800(document.getElementById('toName'+x).value);
	var options = new VERouteOptions();
	options.RouteCallback = onGotRoute;
	map.GetDirections([document.getElementById('fromAdd'+x).value, document.getElementById('toAdd'+x).value], options);
}

function toggleDirections(x){
	try{modelid}catch(err){modelid='all';}
	if(x=='show'){
		fireTag('2270.9');
		document.getElementById(modelid+'Offers').className += ' hide';
		if(document.getElementById(modelid+'OfferDetails').className.indexOf('hide')==-1) { document.getElementById(modelid+'OfferDetails').className += ' hide'; }
		document.getElementById('showDirections').className = 'hide';
		document.getElementById('clearDirections').className = 'show';
		document.getElementById('directions').className = 'show';
	} else {
		document.getElementById(modelid+'Offers').className = document.getElementById(modelid+'Offers').className.replace(/ hide/g,'');
		document.getElementById('directions').className = 'hide';
		document.getElementById('showDirections').className = 'show';
	}
}

function clearRoute(){
	toggleDirections('hide');
	GetMap();
	document.getElementById('showDirections').className = 'hide';
	document.getElementById('clearDirections').className = 'hide';
}

function findLda(x){
	var thisMarket="";
	var node;
	
	for(var j=0; j<ZIPBANK.length; j++){
		node = ZIPBANK[j];
		for(var k=0; k<node.zip.length; k++){ if(node.zip[k]==x){ thisMarket=node.yldURL; } }
	}
	return thisMarket;
}

function findLdaZip(){
	var node;
	var found=false;
	
	for(var j=0; j<ZIPBANK.length; j++){
		node = ZIPBANK[j];
		marketname = node.marketName;
		if(node.marketName==ldaid){
			if(node.marketZip){ setCookie('YLDZIP',node.marketZip,exp); }
			else { setCookie('YLDZIP',node.zip[0],exp); }
			if(node.radius){ radius=node.radius; }
		}
	}
}

function validateZIP(field) {
	if(field==""){ return false; }
	var valid = "0123456789";
	for (var i=0; i < field.length; i++) {
	temp = "" + field.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") {
			return false;
		}
		else if (field.length!=5) {
			return false;
		}		
	}
	return true;
}

function setCookie(name, value, expires) {
	document.cookie = name + "=" + escape(value) + "; path=/" + ((expires == null) ? "" : "; expires=" + expires.toGMTString());
}
	
function getCookie (name) {
	var cname = name + "=";               
	var dc = document.cookie;
 
    if (dc.length > 0) {              
		begin = dc.indexOf(cname);       
			if (begin != -1) {           
			begin += cname.length;       
			end = dc.indexOf(";", begin); 
				if (end == -1) end = dc.length;
				return unescape(dc.substring(begin, end));
			} 
		}
	return;
}

function getQueryParamValue(param) {

	var q = document.location.search;

	var detectIndex = q.indexOf(param);

	var endIndex = (q.indexOf("&", detectIndex) != -1) ? q.indexOf("&", detectIndex) : q.length;

	if(q.length > 1 && detectIndex != -1) {

		return q.substring(q.indexOf("=", detectIndex)+1, endIndex);

	} else {

		return "";

	}

}

		
function setZipcode(form,page){   
	var zipStr = form.clientZip.value;
	var zipError = document.getElementById('zipError');
	var tag;
	if(typeof modelid == 'undefined') modelid = "";
	zipError.innerHTML='';
	if (validateZIP(zipStr)){
		setCookie('YLDZIP',zipStr,exp);
		var thisMarket = findLda(zipStr);
		if (thisMarket=="" || thisMarket=="select_dealer"){
			try{ window.location = ROOT+"/select_dealer.html?page="+modelid; }
			catch(err){ window.location = ROOT+"/select_dealer.html"; }
		} else {
			window.location = modelid ? ROOT+"/"+thisMarket+"/"+modelid+"/index.html" : ROOT+"/"+thisMarket+"/index.html";
		}
		if(page=='allmodel'){ tag='2268.4'; }
		else if(page=='model'){ tag='2270.5'; }
		else { tag='2269.3'; }
		fireTag(tag,{'<zip>':zipStr});
	} else {
	   fireTag('2269.2');
	   zipError.innerHTML='<span style="color:#FF0000; font:10px Verdana, Arial, Helvetica, sans-serif;">Please enter a valid US zip code</span>';
	}	
	
	return false;
}

var galleryWindow;
var GalleryManager = new galleryManager();

function galleryManager(){
    this.launchGallery=function(modelId,tab)
    {
        var contentHref=LEXUS_ROOT_ASSET ? LEXUS_ROOT_ASSET+"/lexus-share/gallery/popup.html?launchGallery=true&yldTag=1&model="+modelId : "http://www.lexus.com/lexus-share/gallery/popup.html?launchGallery=true&yldTag=1&model="+modelId;
        if(tab){contentHref+="&tab="+tab;}
         Shadowbox.open({
          player: 'iframe',
          content: contentHref,
          height: 620,
          width: 804,
		  handleOversize: 'none'
     });
    }
}

function genericOverlay(){
	this.launchOverlay=function(src,height,width)
	{
		var contentHref=src+'?model='+modelid+'&radius='+radius;
		var contentHeight=height;
		var contentWidth=width;
		Shadowbox.open({
			player: 'iframe',
			content: contentHref,
			height: contentHeight,
			width: contentWidth
		});
	}
}

function modelLoader() {
	fireTag('2270.1',{"<market>":ldaid,"<content>":modelid});
	var modelData = apiurl+'&GeographyKeys='+ldaid.replace(/\,/,"")+'&productkeys='+modelid+'&callback=loadModel';
	findLdaZip();
	checkFlag();
	loadJSON(modelData);
	GetMap();
	setCampaignId();
}

function cpoLoader(){
	fireTag('2270.1',{"<market>":ldaid,"<content>":"CPO"});
	var modelData = apiurl+'&GeographyKeys='+ldaid.replace(/\,/,"")+'&callback=loadCPO';
	findLdaZip();
	checkFlag();
	loadJSON(modelData);
	GetMap();
	setCampaignId();
}

function allModelsLoader(){
	findLdaZip();
	fireTag('2268.1',{"<market>":ldaid});
	var ldaData = apiurl+'&GeographyKeys='+ldaid.replace(/\,/,"")+'&callback=loadAllModels';
	loadJSON(ldaData);
	setCampaignId(); 
}

