// ====================================================
// Derived from Lincoln global.js and Mercury global.js 
// All fn's below are shared between both.
// Deals with global nav, plus.
// 9-12-2006
// ====================================================


	// delete a cookie
	function cookieDelete(name, path, domain) {
		/***********************************************************
		Version 1.0
		Date: 03-23-04
		Description: Deletes a cookie
		************************************************************/
		//alert( 'cookieDelete called with: ' + name + ', ' + path + ', ' + domain );
		var value = cookieGet(name);
		if( !path ) { path = '/'; }
		if( !domain ) { domain = ''; }
		if (value != null) {
			document.cookie = name + '=' + ((path) ? '; path=' + path : '') + ((domain) ? '; domain=' + domain : '') + '; expires=Thu, 01-Jan-70 00:00:01 GMT';
		}
		return value;
	}
	// retrieve a cookie
	function cookieGet(name) {
		/***********************************************************
		Version 1.0
		Date: 03-23-04
		Description: Gets a cookie value
		************************************************************/
		//alert( 'cookieGet called with: ' + name );
		var docCookie = document.cookie;
		// find beginning of cookie value in document.cookie
		var prefix = name + "=";
		var start = docCookie.indexOf("; " + prefix);
		if (start == -1) {
			start = docCookie.indexOf(prefix);
			if (start != 0) return null;
		}	else {
			start += 2;
		}	
		var end = docCookie.indexOf(";", start);
		if (end == -1) {
			end = docCookie.length;
		}
		return unescape(docCookie.substring(start + prefix.length, end));
	}
	// set a cookie
	function cookieSet(name, value, daysToKeep, path, domain, secure) {
		/***********************************************************
		Version 1.0
		Date: 03-23-04
		Description: Sets a cookie value
		************************************************************/
		//alert( 'cookieSet called with: ' + name + ', ' + value + ', ' + daysToKeep + ', ' + path + ', ' + domain + ', ' + secure);
		var today = new Date();
		var expires = new Date();
		if( !daysToKeep ) { daysToKeep = 1; }
		expires.setTime(today.getTime() + 3600000*24*daysToKeep);
		if( !path ) { path = '/'; }
		if( !domain ) { domain = ''; }
		if( !secure ) { secure = ''; }
		var tmpCookie = name + '=' + escape(value) + ((expires) ? '; expires=' + expires.toGMTString() : '') + ((path) ? '; path=' + path : '') + ((domain) ? '; domain=' + domain : '') + ((secure) ? '; secure' : '');
		document.cookie = tmpCookie;
	}

	/*********************************************************************
		Version 1.0
		Date: 04-04-06
		Description: Sets zip code cookie
	**********************************************************************/
	function setZipCookie( zipCode ) {
		if((IsNumeric( zipCode )) && (IsZipCode( zipCode ))) {
			cookieDelete('zip', '/', '');
			cookieSet("zip", zipCode, 180, '/');
		}
	}
	
	// image rollover helper function
	function findObj(n, d) { //v4.01
		var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
		d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
		if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
		for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
		if(!x && d.getElementById) x=d.getElementById(n); return x;
	}	
	function getLoc() {
	window.location = "/deadlink.asp"
	}


	// Browser Detect Lite  v2.1
	// http://www.dithered.com/javascript/browser_detect/index.html
	// modified by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)
	//
	// modified by Michael Lovitt to include OmniWeb and Dreamcast
	function navBrowserDetectLite() {
		var ua = navigator.userAgent.toLowerCase(); 
		this.ua = ua;

		// browser name
		this.isGecko     = (ua.indexOf('gecko') != -1);
		this.isMozilla   = (this.isGecko && ua.indexOf("gecko/") + 14 == ua.length);
		this.isNS        = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
		this.isIE        = ( (ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1) ); 
		this.isOpera     = (ua.indexOf("opera") != -1); 
		this.isKonqueror = (ua.indexOf("konqueror") != -1); 
		this.isIcab      = (ua.indexOf("icab") != -1); 
		this.isAol       = (ua.indexOf("aol") != -1); 
		this.isWebtv     = (ua.indexOf("webtv") != -1); 
		this.isOmniweb   = (ua.indexOf("omniweb") != -1);
		this.isDreamcast = (ua.indexOf("dreamcast") != -1);
		this.isSafari	 = (ua.indexOf("safari") != -1);
		
		// spoofing and compatible browsers
		this.isIECompatible = ( (ua.indexOf("msie") != -1) && !this.isIE);
		this.isNSCompatible = ( (ua.indexOf("mozilla") != -1) && !this.isNS && !this.isMozilla);
		
		// browser version
		this.versionMinor = parseFloat(navigator.appVersion); 
		
		// correct version number for NS6+ 
		if (this.isNS && this.isGecko) {
			this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
		}
		
		// correct version number for IE4+ 
		else if (this.isIE && this.versionMinor >= 4) {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
		}
		
		// correct version number for Opera 
		else if (this.isOpera) {
			if (ua.indexOf('opera/') != -1) {
				this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera/') + 6 ) );
			}
			else {
				this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera ') + 6 ) );
			}
		}
		
		// correct version number for Konqueror
		else if (this.isKonqueror) {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
		}
		
		// correct version number for iCab 
		else if (this.isIcab) {
			if (ua.indexOf('icab/') != -1) {
				this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab/') + 6 ) );
			}
			else {
				this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab ') + 6 ) );
			}
		}
		
		// correct version number for WebTV
		else if (this.isWebtv) {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('webtv/') + 6 ) );
		}
		
		this.versionMajor = parseInt(this.versionMinor); 
		this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
		
		// platform
		this.isWin   = (ua.indexOf('win') != -1);
		this.isWin32 = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1) );
		this.isMac   = (ua.indexOf('mac') != -1);
		this.isUnix  = (ua.indexOf('unix') != -1 || ua.indexOf('linux') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
		
		// specific browser shortcuts
		this.isNS4x = (this.isNS && this.versionMajor == 4);
		this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
		this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
		this.isNS4up = (this.isNS && this.versionMinor >= 4);
		this.isNS6x = (this.isNS && this.versionMajor == 6);
		this.isNS6up = (this.isNS && this.versionMajor >= 6);
		
		this.isIE4x = (this.isIE && this.versionMajor == 4);
		this.isIE4up = (this.isIE && this.versionMajor >= 4);
		this.isIE5x = (this.isIE && this.versionMajor == 5);
		this.isIE55 = (this.isIE && this.versionMinor == 5.5);
		this.isIE5up = (this.isIE && this.versionMajor >= 5);
		this.isIE6x = (this.isIE && this.versionMajor == 6);
		this.isIE6up = (this.isIE && this.versionMajor >= 6);
		
		this.isIE4xMac = (this.isIE4x && this.isMac);
	}
	var browser = new navBrowserDetectLite();

	//---------------------------------------------------------------
	// global variables
	
	// if IE5.5+ on win32, then display PNGs with AlphaImageLoader
	if ((browser.isIE55 || browser.isIE6up) && browser.isWin32) {
		var pngAlpha = true;
		var strExt = ".png";
	// else, if the browser can display PNGs normally, then do that. that list includes:
		//     -Gecko Engine: Netscape 6 or Mozilla, Mac or PC
		//     -IE5+ Mac (OpacityObject applies the background image at 100% opacity)
		//     -Opera 6+ PC
		//     -Opera 5+ Mac (Doesn't support dynamically-set background images)
		//     -Opera 6+ Linux 
		//     -Omniweb 3.1+ 
		//     -Icab 1.9+ 
		//     -WebTV 
		//     -Sega Dreamcast
	} else if ((browser.isGecko) || (browser.isIE5up && browser.isMac) || (browser.isOpera && browser.isWin && browser.versionMajor >= 6) || (browser.isOpera && browser.isUnix && browser.versionMajor >= 6) || (browser.isOpera && browser.isMac && browser.versionMajor >= 5) || (browser.isOmniweb && browser.versionMinor >= 3.1) || (browser.isIcab && browser.versionMinor >= 1.9) || (browser.isWebtv) || (browser.isDreamcast)) {
		var pngNormal = true;
		var strExt = ".png";
		// otherwise, we use plain old GIFs
	} else {
		var strExt = ".gif";
	}
	
	var ns = (document.all)?false:true;
	var browserVersion = parseFloat(navigator.appVersion );
	//---------------------------------------------------------------
	function popWindow(winURL, winName, winWidth, winHeight, winScroll, resizeable, toolbar, directories, status, menuBar) { 
		/***********************************************************
		Description: Pops window in the center of client's screen.
		************************************************************/
		if( menuBar == '' ) {
			menuBar = 0
		}
		if( status == '' ) {
			status = 0
		}
		if( directories == '' ) {
			directories = 0
		}
		if( toolbar == '' ) {
			toolbar = 0
		}
		if( resizeable == '' ) {
			resizeable = 0
		}
		if(winScroll == '') {
			winScroll = 0
		}
		if(winWidth == '') {
			winWidth = 800;
		}
		if(winHeight == '') {
			winHeight = 600;
		}
		if(winName == '') {
			winName == 'NewWindow';
		}
		var winLeft = (screen.width - winWidth) / 2;
		var winTop = (screen.height - winHeight) / 2;
		var winProps = 'height='+winHeight+',width='+ winWidth+',top='+winTop+',left='+winLeft+',scrollBars='+winScroll+',resizeable='+resizeable+',toolbar='+toolbar+',directories='+directories+',status='+status+',menuBar='+menuBar;
		var win = window.open(winURL, winName, winProps);
	}
	
	/**************************************************************************
 	swapImage() and swapImage2() can be use in conjuction with
	swapImgRestore() and swapImgRestore2() to perform multiple rollovers
 	for one mouse event and later return either image to its previous state
 	USAGE:
	onMouseOver="swapImage('imgName','','/pathToImageRollover.jpg',1);"
	onMouseOut="swapImgRestore();"
	***************************************************************************/
	// image rollover
	function swapImage() {
	  var i,j=0,x,a=swapImage.arguments; document.sr=new Array; for(i=0;i<(a.length-2);i+=3)
	   if ((x=findObj(a[i]))!=null){document.sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
	}
	// secondary image rollover
	function swapImage2() {
	  var i,j=0,x,a=swapImage2.arguments; document.sr2=new Array; for(i=0;i<(a.length-2);i+=3)
	   if ((x=findObj(a[i]))!=null){document.sr2[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
	}
	// tertiary image rollover
	function swapImage3() {
	  var i,j=0,x,a=swapImage3.arguments; document.sr3=new Array; for(i=0;i<(a.length-2);i+=3)
	   if ((x=findObj(a[i]))!=null){document.sr3[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
	}
	// quarternary image rollover
	function swapImage4() {
	  var i,j=0,x,a=swapImage4.arguments; document.sr4=new Array; for(i=0;i<(a.length-2);i+=3)
	   if ((x=findObj(a[i]))!=null){document.sr4[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
	}
	// image restore
	function swapImgRestore() {
		var i,x,a=document.sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
	}
	// secondary image restore
	function swapImgRestore2() {
		var i,x,a=document.sr2; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
	}
	// tertiary image restore
	function swapImgRestore3() {
		var i,x,a=document.sr3; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
	}
	// quarternary image restore
	function swapImgRestore4() {
		var i,x,a=document.sr4; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
	}
	
	/******************************************************************
	Version 1.0
	Date: 03-23-2004
	Updated: 1-11-2007
	Changed: Uses Regular Expressions instead of looping through each number to check to see if it's numeric.  RegExp is much faster.
	Description: tests to see if all the charecters are numeric
	********************************************************************/
	function IsNumeric(sValue) {
	
	  var reg = new RegExp("[0-9]");
            if (reg.test(sValue)) {
                return true;
            } else { 
                return false;
            }
     
	/*
		var sValidChars = "0123456789";
		var sChar;
		var blnResult = true;
		
		
		
		if (sValue.length == 0) return false;
		for (i = 0; i < sValue.length && blnResult == true; i++)	{
			sChar = sValue.charAt(i);
			if (sValidChars.indexOf(sChar) == -1) {
				blnResult = false;
			}
		}
		return blnResult;
		*/

    }
	/***********************************************************
		Version: 1.0
		Date: 06-05-2005
		Updated: 1-11-2007 
		Changed: Uses Regular Expressions instead of looping through each number to check to see if it's a valid zipcode.  RegExp is much faster.
		Description: Validates a zip code.
	************************************************************/
	function IsZipCode(sZip) {
		if(sZip.length!=5) {
			return false;
		} else {
			var reg = new RegExp("[0-9]");
            if (reg.test(sZip)) {
                return true;
            } else { 
                return false;
            }
		}
            
        /*  Removed for Regular Expressions.

		        for(var i=0; i < sZip.length; i++) {
			        temp = "" + sZip.substring(i, i+1);
			        if (valid.indexOf(temp) == "-1") {
				        return false;
			        }
		        }
		        return true;
        */
	}

function trim(str) {
	str = this != window? this : str;
	return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}



function limitedBrowser() {
	var browserDetect = new navBrowserDetectLite();
	if( browserDetect.isSafari) {
		return true;
	} else {
		return false;
	}
}

function goIncentives( vehicleYear, vehicle ) {
	/* sends user to incentives for the correct vehicle */
	var zipCode = cookieGet( 'zip' );
	if( !zipCode ) { zipCode = ""; }
	document.location = "/shoptools/special_offers.asp?vehicle=" + vehicle + "&year=" + vehicleYear + "&zipcode=" + zipCode;
	return false;
}

// =============================================================================

	var gnavActive = false;
	var gnavCurrent = 'none';
	var gnavOffSwitch;
	function gnavChange(gnavID) {
		// Hide hdr dropdown
		if (hdrCurrent != 'none') {
			if (hdr2Current != 'none') {
				layerHide(hdr2Current);
			}
			layerHide(hdrCurrent);
			swapImgRestore4();
		}
		// Sets global gnav active flag;
		gnavActive = true;
		clearTimeout(gnavOffSwitch);
		// Hides old rollbox and sets global variable before showing new rollbox
		if (gnavCurrent != 'none') {
			layerHide(gnavCurrent);		
		}
		// Sets current rollbox id to global variable, shows new rollbox
		gnavCurrent = gnavID;
		layerShow(gnavCurrent);		
	}
	function gnavHide() {
		if ((gnavCurrent != 'none') && (!gnavActive)) {
			layerHide(gnavCurrent);		
		}
	}
	function gnavOut() {
		gnavActive = false;
		gnavOffSwitch = setTimeout("gnavHide();", 100);
	}
	function gnavOver() {
		gnavActive = true;
	}
	var hdrActive = false;
	var hdrCurrent = 'none';
	var hdrOffSwitch;
	
	function hdrChange(hdrID) {
		swapImgRestore4();
		if( limitedBrowser() != true ) {
			if ((hdr2Current != 'none') && (!hdr2Active)) {
				layerHide(hdr2Current);		
			}
			// Hide gnav rollbox
			if (gnavCurrent != 'none') {
				if (hdr2Current != 'none') {
					layerHide(hdr2Current);
				}
				layerHide(gnavCurrent);		
			}
			// Sets global hdr active flag;
			hdrActive = true;
			clearTimeout(hdrOffSwitch);
			// Hides old dropdown and sets global variable before showing new dropdown
			if (hdrCurrent != 'none') {
				layerHide(hdrCurrent);		
			}
			// Sets current dropdown id to global variable, shows new dropdown
			hdrCurrent = hdrID;
			layerShow(hdrCurrent);
		}
	}
	function hdrHide() {
		if( limitedBrowser() != true ) {
			if ((hdr2Current != 'none') && (!hdr2Active)) {
				layerHide(hdr2Current);		
			}
			if ((hdrCurrent != 'none') && (!hdrActive)) {
				layerHide(hdrCurrent);		
				swapImgRestore4();
			}
		}
	}
	function hdrOut() {
		if( limitedBrowser() != true ) {
			hdrActive = false;
			hdr2Active = false;
			clearTimeout(hdrOffSwitch);
			hdrOffSwitch = setTimeout("hdrHide();", 100);
		}
	}
	function hdrOver() {
		hdrActive = true;
	}
	var hdr2Active = false;
	var hdr2Current = 'none';
	var hdr2OffSwitch;
	function hdr2Change(hdr2ID) {
		// Sets global hdr active flag;
		hdr2Active = true;
		clearTimeout(hdr2OffSwitch);
		// Sets current dropdown id to global variable, shows new dropdown
		hdr2Current = hdr2ID;
		layerShow(hdr2Current);		
	}
	function hdr2Out() {
		hdr2Active = false;
	}
	function hdr2Over() {
		hdrActive = true;
		hdr2Active = true;
	}
	
	// show layer
	function layerShow( layerName ) {
		document.getElementById(layerName).style.visibility='visible';
	}  	
	// hide layer
	function layerHide( layerName ) {
		document.getElementById(layerName).style.visibility='hidden';
	}



	