////////////////////////////////////////////
//
//	BEGIN GLOBAL FUNCTIONS
//
////////////////////////////////////////////

String.prototype.trim = function() {
return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,"");
}

String.prototype.fulltrim = function() {
return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,"").replace(/\s+/g," ");
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_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=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function highlight(element, hexValue) {
	element.style.backgroundColor = hexValue;
	element.style.cursor = "pointer";
}

function unhighlight(element, hexValue) {
	element.style.backgroundColor = hexValue;
	element.style.cursor = "default";
}

function outline(element) {
	element.style.border = "2px solid #FF0000";
	element.style.cursor = "pointer";
}

function unOutline(element) {
	element.style.border = "none";
	element.style.cursor = "default";
}

function round(number,X) {
	// rounds number to X decimal places, defaults to 2
	X = (!X ? 2 : X);
	X=0
		return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}

function moveToBottom(id) {
	if(!id)
		return;
	
	if(typeof id != 'string')
		id = id.id;
	var obj = $(id);
	
	try {
		if(arguments.length == 2) {
			if(typeof arguments[1] == 'string')
				var topPx = $(arguments[1]).getSize().y;
		}
		else
			var topPx = window.getScrollHeight();
		
		obj.setStyle('top', topPx + 'px');
		
		if(arguments.length == 1)
			setTimeout("moveToBottom('" + id + "', true)", 500); // obj.setStyle('top', topPx + 'px');
	}
	catch(ex) { }
	
	//setTimeout("moveToBottom('" + id + "', " + window.getScrollHeight() + ")", 100);
	/*window.addEvent('resize', function() {
		$(id).setStyle('top', window.getScrollHeight() + 'px');
	});*/
}


function moveToBottom_new(id) {
	if(typeof id != 'string')
		id = id.id;
	var obj = $(id);
	
	var topPx = window.getScrollHeight();
	
	if(arguments.length == 2) {
		if(window.getScrollHeight() != arguments[1]) {
			var topPx = window.getScrollHeight();
			obj.setStyle('top', topPx + 'px');
		}
	}
	else
		obj.setStyle('top', topPx + 'px');
	
	setTimeout("moveToBottom('" + id + "', " + window.getScrollHeight() + ")", 100);
	/*window.addEvent('resize', function() {
		$(id).setStyle('top', window.getScrollHeight() + 'px');
	});*/
}

function fisherYates (myArray) {
	var i = myArray.length;
  	if ( i == 0 )
		return false;
	
  	while ( --i ) {
     		var j = Math.floor( Math.random() * ( i + 1 ) );
     		var tempi = myArray[i];
     		var tempj = myArray[j];
     		myArray[i] = tempj;
     		myArray[j] = tempi;
   	}
}


function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&\/]"+name+"(=|\/)([^&#\/]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}


////////////////////////////////////////////
//
//	BEGIN EMAIL FUNCTIONS
//
////////////////////////////////////////////

function emailPage(subjectText, bodyText) {
var mail_str = "mailto:?subject=" + subjectText;
mail_str += "&body=" + bodyText;
mail_str += ".  Follow this link: " + location.href;
location.href = mail_str;
}


////////////////////////////////////////////
//
//	BEGIN DOM FUNCTIONS
//
////////////////////////////////////////////

function getElementWidth(element) {
	return element.clientWidth;
}

function getElementHeight(element) {
	return element.clientHeight;
}

////////////////////////////////////////////
//
//	BEGIN WINDOW FUNCTIONS
//
////////////////////////////////////////////


function openWindow(strURL, width, height, scrollbars) {
	var w = 640/3, h = 480/3, cw = w/2, ch = h/2, resizable = 'no', fullscreen = 'no', toolbar = 'no';
	
	if (window.screen) {
		if(width == 0 || height == 0) {
			w = window.outerWidth;
			h = window.outerHeight;
			cw = 0;
			ch = 0;
			resizable = 'yes';
			fullscreen = 'yes';
			toolbar = 'yes';
		}
		else {
		    if(width)
				w = width;
		    else
				w = Math.floor(screen.availWidth * .8);
		    if(height)
				h = height;
		    else
				h = Math.floor(screen.availHeight * .7);
		
		    cw = Math.floor((screen.availWidth-w)/2);
		    ch = Math.floor((screen.availHeight-h)/2);
		}
	}
	
	return window.open(strURL, 'popupWindow', 'fullscreen=' + fullscreen + ',resizable=' + resizable + ', toolbar=' + toolbar + ', location=yes, scrollbars=yes, width='+w+',height='+h+',top='+ch+',left='+cw);
}


function returnWindowWidth() {
	if( typeof( window.innerWidth ) == 'number' )	//Non-IE
		return window.innerWidth;
	else if( document.documentElement && document.documentElement.clientWidth )	//IE 6+ in 'standards compliant mode'
		return document.documentElement.clientWidth;
	else if( document.body && document.body.clientWidth )	//IE 4 compatible
		return document.body.clientWidth;
}


function returnWindowHeight() {
	if( typeof( window.innerHeight ) == 'number' )	// Non-IE
		return window.innerHeight;
	else if( document.documentElement && document.documentElement.clientHeight )	//IE 6+ in 'standards compliant mode'
		return document.documentElement.clientHeight;
	else if( document.body && document.body.clientHeight )	//IE 4 compatible
		return document.body.clientHeight;
}


function returnScrollX() {
  	if( typeof( window.pageYOffset ) == 'number' )	//Netscape compliant
    	return window.pageXOffset;
  	else if( document.body && document.body.scrollLeft )	//DOM compliant
    	return document.body.scrollLeft;
  	else if( document.documentElement && document.documentElement.scrollLeft )	//IE6 standards compliant mode
    	return document.documentElement.scrollLeft;
	else
		return 0;
}


function returnScrollY() {
	if( typeof( window.pageYOffset ) == 'number' )	//Netscape compliant
    	return window.pageYOffset;
  	else if( document.body && document.body.scrollTop )	//DOM compliant
    	return document.body.scrollTop;
  	else if( document.documentElement && document.documentElement.scrollTop )	//IE6 standards compliant mode
    	return document.documentElement.scrollTop;
	else
		return 0;
}


function resizeWindow() {
	if( typeof( window.innerWidth ) == 'number' ) {	// Non-IE
		//First adjust page as much as possible to the width of any items on the page that have a fixed width (td nowrap, img, ...)
		
		//Scroll as much to the right as possible
		self.scrollBy(self.screen.availWidth, 0);
		//Now we can find the amount of pixels the page is scrolled to the right, but beware that you don't stretch the window beyond the right edge of the screen (use Math.min). Do -24 because IE only gives the inner width of the window, and doesn't take into account the scrollbars
		self.resizeBy(Math.min(document.body.scrollLeft, self.screen.availWidth - document.body.clientWidth - self.screenLeft - 24), 0)
		
		//Now scroll down as much as possible
		self.scrollBy(0, self.screen.availHeight);
		//Do the same thing as with the width, again make sure that you don't stretch the window beyond the bottom of your sceen
		self.resizeBy(0, Math.min(document.body.scrollTop, self.screen.availHeight - document.body.clientHeight - self.screenTop - 24))
	}
	else {	// Netscape-compatible
		self.scrollBy(self.screen.availWidth, 0);
		
		//Netscape uses different variables..., no need for -24, because self.outerWidth takes into account the complete width of the window
		self.resizeBy(Math.min(self.pageXOffset, self.screen.availWidth - self.outerWidth - self.screenX), 0)
		
		self.scrollBy(0, self.screen.availHeight);
		//Again different variables...
		self.resizeBy(0, Math.min(self.pageYOffset, self.screen.availHeight - self.outerHeight - self.screenY))
	}
	
	//Finish off by scrolling back to the top left of the window
	self.scrollTo(0,0);
}


function mouseIsInsideElement(e, el) {
	var topCoords = el.getCoordinates();
	var topLeft = topCoords.left;
	var topRight = topCoords.left + topCoords.width;
	var topTop = topCoords.top;
	var topBottom = topCoords.top + topCoords.height;
	if((e.page.x >= topLeft && e.page.x <= topRight
            && e.page.y >= topTop && e.page.y <= topBottom))
		return true;
	else
		return false;
}


////////////////////////////////////////////
//
//	BEGIN INVENTORY FUNCTIONS
//
////////////////////////////////////////////

var currentDiv;
var currentRowID;
var evt;
var offX = 10;
var offY = 10;
var curColor;
var helperIFrame;
var useHelperFrame = true;
var inv_initialized;
var loadingImage;

var HELPER_IFRAME_ID = "IFrmHelper";


function showInventoryWaiting() {
	var waitDiv = new Element('div', { 'styles': { 'position':'absolute', 'top':'0px', 'left':'0px', 'width':window.getScrollWidth() + 'px', 'height':window.getScrollHeight() + 'px', 'zIndex':'100001', 'backgroundColor':'#999999', 'visibility':'visible' } });
	waitDiv.setOpacity(0.8);

	var width = 700, height = 300, top = window.getScrollTop() + (window.getHeight() / 2) - 150, left = window.getScrollLeft() + (window.getWidth() / 2) - 350;

	var loadingDiv = new Element('div', { 'styles': { 'position':'absolute', 'backgroundColor':'#FFFFFF', 'width': width + 'px', 'height':height + 'px', 'top': top + 'px', 'left':left + 'px', 'zIndex':'100002', 'visibility':'visible' } });
	loadingDiv.setOpacity(0.8);
	loadingDiv.innerHTML = '<table border="0" cellspacing="0" cellpadding="0" width="100%" height="300"><tr><td align="center" valign="middle"><div id="loadingPlaceholder"></div><br/><br/><span class="arial_18"><strong>Please wait while we perform your search...</strong></span></td></tr></table>';
	
	var iFrameMask = new Element('iframe', { 'styles': { 'position':'absolute', 'backgroundColor':'#FFFFFF', 'width': window.getScrollWidth() + 'px', 'height':window.getScrollHeight() + 'px', 'top': '0px', 'left':'0px', 'zIndex':'100000', 'visibility':'visible', 'border':'0', 'display': 'block' } });
	
	iFrameMask.setAttribute("allowtransparency", "true");
	iFrameMask.src = "javascript:'<html></html>';";
	iFrameMask.setOpacity(0.01);
	
	iFrameMask.injectInside(document.body);
	waitDiv.injectInside(document.body);
	loadingDiv.injectInside(document.body);
	$('loadingImage').setStyle('display', 'inline');
	$('loadingImage').injectInside('loadingPlaceholder');
}

window.addEvent('domready', function() {
	loadingImage = new Asset.image('https://content.captivelead.com/global/inventory/loadingSpinner.gif', {id: 'loadingImage', title: 'loadingSpinner', 'style': 'display:none', onload: function() {loadingImage.setStyle('display','none'); loadingImage.injectInside(document.body);} });
});


// Add dynamic div to the page
function _init(){
	// Creating and adding dynamic iframe to the page source.
	var oBody = document.getElementsByTagName("BODY").item(0);
	if(useHelperFrame) {
		var oHelperIframe = document.createElement("IFRAME");
		oHelperIframe.setAttribute("id", HELPER_IFRAME_ID);
		oHelperIframe.setAttribute("allowtransparency", "true");
		oHelperIframe.setAttribute("frameborder", "0");
		oHelperIframe.style.border = 0;
		oHelperIframe.width = 0;
		oHelperIframe.height = 0;
		oHelperIframe.style.position = "absolute";
		oHelperIframe.src = "javascript:'<html></html>';";
		oBody.appendChild(oHelperIframe);
	}
	
	// Create "click here" div
	var clickHereDiv = document.createElement("div");
	clickHereDiv.setAttribute("id", "_clickHere");
	clickHereDiv.style.backgroundColor = "#FFFFFF";
	clickHereDiv.style.textAlign = "center";
	clickHereDiv.style.width = "150px";
	clickHereDiv.style.height = "20px";
	clickHereDiv.style.visibility = "hidden";
	clickHereDiv.style.position = "absolute";
	clickHereDiv.style.opacity = ".9";
	clickHereDiv.style.filter = "alpha(opacity:90)";
	clickHereDiv.innerHTML = '<span class="arial11" style="color:#FF0000"><strong>Click for Vehicle Details!</strong></span>';
	oBody.appendChild(clickHereDiv);
}

function mouseX(evt) {
	if (!evt)
		evt = window.event;
	
	if (evt.pageX)
		return evt.pageX;
	else if (evt.clientX)
		return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft);
	else return 0;
}

function mouseY(evt) {
	if (!evt)
		evt = window.event;
	
	if (evt.pageY)
		return evt.pageY;
	else if (evt.clientY)
		return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
	else return 0;
}

function showCarPreview(divNum) {
	if(oldDiv)
		oldDiv.visibility = 'hidden';
	
	// Show the new div
	var obj = document.getElementById('div' + divNum).style;
	obj.visibility = 'visible';
	obj.left = (parseInt(mouseX(evt))+offX) + 'px';
	obj.top = (parseInt(mouseY(evt))+offY) + 'px';
	
	oldDiv = obj;
}

function setSelectedRow(rowID) {
	if(inv_initialized) {
		currentRowID = rowID;
		
		currentDiv = document.getElementById('div' + rowID);
		
		curColor = document.getElementById('row' + rowID).style.backgroundColor;
		
		document.getElementById('row' + rowID).style.backgroundColor = '#FFCC00';
	}
}

function resetSelectedRow() {
	if(inv_initialized) {
		if(currentDiv) {
			currentDiv.style.visibility = 'hidden';
			clickHereDiv = document.getElementById("_clickHere");
			if(clickHereDiv)
				clickHereDiv.style.visibility = "hidden";
	
			if(useHelperFrame) {
				var oHelperIframe = document.getElementById(HELPER_IFRAME_ID);
				oHelperIframe.style.visibility = 'hidden';
			}
			
			document.getElementById('row' + currentDiv.id.substring(3, currentDiv.id.length)).style.backgroundColor = curColor;
		}
		else if(currentRowID)
			document.getElementById('row' + currentRowID).style.backgroundColor = curColor;
		
		currentDiv = null;
		currentRowID = null;
	}
}


function setSelectedRowBorder(rowID, color) {
	if(inv_initialized) {
		var tempColor = color;
		
		if(tempColor == null)
			tempColor = '#FF0000';
		
		currentRowID = rowID;
		
		currentDiv = document.getElementById('div' + rowID);
		
		//curColor = document.getElementById('row' + rowID).style.backgroundColor;
		
		document.getElementById('row' + rowID).style.border = '2px solid ' + tempColor;
	}
}

function resetSelectedRowBorder() {
	if(inv_initialized) {
		if(currentDiv) {
			currentDiv.style.visibility = 'hidden';
			
			document.getElementById('row' + currentDiv.id.substring(3, currentDiv.id.length)).style.border = 'none';
		}
		else if(currentRowID)
			document.getElementById('row' + currentRowID).style.border = 'none';
		
		currentDiv = null;
		currentRowID = null;
	}
}

function getCoordinates(evt) {
	if(currentDiv) {
		var xPos = parseInt(mouseX(evt));
		var yPos = parseInt(mouseY(evt));
		var screenAvailWidth = returnWindowWidth();
		var screenAvailHeight = returnWindowHeight();
		var scrollTop = window.getScrollTop();
		var left, top = 0;
		var chOffY = 5;
		var chOffX = 5;
		var clickHereDiv = document.getElementById("_clickHere");
		
		// Calculate the appropriate position, accounting for bleeding
		/*if(xPos + currentDiv.offsetWidth > screenAvailWidth)
			left = xPos - offX - currentDiv.offsetWidth;
		else
			left = xPos + offX;
		
		if(yPos + currentDiv.offsetHeight > screenAvailHeight)	// Below screen bottom
			top = yPos - offY - currentDiv.offsetHeight;
		else
			top = yPos + offY;*/
		/*
		if(top < 0)
			top = yPos + offY - (currentDiv.offsetHeight / 2);
		*/
		/*
		currentDiv.style.left = left + 'px';
		currentDiv.style.top = top + 'px';
		currentDiv.style.zIndex = 10000;*/

		if(xPos + currentDiv.offsetWidth + offX > screenAvailWidth)
			left = xPos - offX - currentDiv.offsetWidth;
		/*else if(xPos - currentDiv.offsetHeight < 0)				// Mouse near left side of screen
			left = xPos + currentDiv.offsetWidth + offX;*/
		else
			left = xPos + offX;
		
		if(yPos + currentDiv.offsetHeight > (screenAvailHeight + scrollTop))	// Below screen bottom
			top = yPos - offY - currentDiv.offsetHeight;
		else if(yPos - currentDiv.offsetHeight <= scrollTop)				// Mouse near top of screen
			top = yPos + offY;
		else
			top = yPos + offY;
		
		currentDiv.style.left = left + 'px';
		currentDiv.style.top = top + 'px';
		currentDiv.style.display = "block";
		currentDiv.style.zIndex = 10000;
	
		// Position click here div
		if(top > yPos)
			clickHereDiv.style.top = top + chOffY + 'px';	// Below mouse cursor
		else
			clickHereDiv.style.top = top + getElementHeight(currentDiv) - chOffY - 20 + 'px';
		
		if(left > xPos)
			clickHereDiv.style.left = left + chOffX + 'px';	// To the right of mouse cursor
		else
			clickHereDiv.style.left = left + getElementWidth(currentDiv) - chOffX - 150 + 'px';
		clickHereDiv.style.zIndex = currentDiv.style.zIndex + 1;
		
		// Show the helper iFrame
		if(useHelperFrame) {
			var oHelperIframe = document.getElementById(HELPER_IFRAME_ID);
			oHelperIframe.style.top = currentDiv.style.top;
			oHelperIframe.style.left = currentDiv.style.left;
		}
		else {
			// We have to hide the form since we can't go the helper frame route
			// Is the div on top of the form?
			var oSearchForm = $('searchForm');
			var coords = oSearchForm.getCoordinates();
			if(top <= (coords.top + coords.height))
				oSearchForm.style.visibility = 'hidden';
			else
				oSearchForm.style.visibility = 'visible';
		}
		
		// Show the new div
		if(currentDiv.style.visibility != 'visible') {
			if(useHelperFrame) {
				oHelperIframe.width = getElementWidth(currentDiv) - 1;
				oHelperIframe.height = getElementHeight(currentDiv) - 1;
				oHelperIframe.style.zIndex = currentDiv.style.zIndex - 1;
			}
			
			currentDiv.style.visibility = 'visible';
			
			if(useHelperFrame)
				oHelperIframe.style.visibility = 'visible';
			
			clickHereDiv.style.visibility = "visible";
		}
	}
}

function setVehicleSearchSortColumn(columnName) {
	if(document.searchForm.sortColumn.value == columnName) {
		if(document.searchForm.sortAscending.value.toLowerCase() == 'false')
			document.searchForm.sortAscending.value = 'true';
		else
			document.searchForm.sortAscending.value = 'false';
	}
	document.searchForm.sortColumn.value = columnName;
}

function inv_trackMouse() { inv_initialized = true; document.onmousemove = getCoordinates; }

// Attach to the onload event
if(typeof(window.addEventListener) != "undefined") {
	window.addEventListener("load", _init, false);
	window.addEventListener("load", inv_trackMouse, false);
} else {
	window.attachEvent("onload", _init);
	window.attachEvent("onload", inv_trackMouse);
}

function preSearch(el) {
	var searchForm = document.searchForm;
	var precedence = el.getAttribute('precedence');
	for(var i = 0; i < searchForm.elements.length; i++) {
		if(searchForm.elements[i].type == 'select-one') {
			var tempPrecedence = searchForm.elements[i].getAttribute('precedence');
			if(tempPrecedence > precedence)
				searchForm.elements[i].selectedIndex = 0;
		}
	}
	document.searchForm.startRow.value='1';
	return true;
}

function calculateLoanTotal(payment, term, rate, downpayment, tradeequity) {

	var P = payment;
	var n = term;
	var r = rate;
	var dp = parseInt(downpayment) + parseInt(tradeequity)
	
	if(rate > 0) {
		var a = 1 + (r/1200);		// [1200P{a^n-1}/r]/(a^n) = L
		var b = Math.pow(a,n);		// {1200P(b-1)/r}/b = L
		var c = b-1;				// {1200P(c)/r}/b = L
		var d = 1200*P;				// {d(c)/r}/b = L
		var e = (d*c)/r;			// (e/b) = L
		var f = e/b;				// f = L
		var g =  (f - 0) +  parseInt(dp);
	}
	else
		var g = (P * n) + parseInt(dp);

	var ret = Math.round(g);
	return ret;
}



//////////////////////////////////////////////////
//
//	BEGIN VEHICLE DETAILS FUNCTIONS
//
//////////////////////////////////////////////////

function ShowPayments(calcNum) {	
	// Principle
	var princ = document.getElementById('principle'+calcNum).value.replace(eval("/["+"$,"+"]/g"),"");
	var downPayment = document.getElementById('down_payment'+calcNum).value.replace(eval("/["+"$,"+"]/g"),"");
	var intr = document.getElementById('interest_rate'+calcNum).value.replace(eval("/["+"$,"+"]/g"),"");
	var term = document.getElementById('loan_term'+calcNum).value;
	
	princ = princ - downPayment;
	
	// Interest rate
	intr = intr / 1200;
	
	// Calculate payments
	var payment = princ * intr / (1 - (Math.pow(1/(1 + intr), term)));
	payment = round(payment,0);
	if(isNaN(payment))
		payment = "";
	
	document.getElementById('est_payment'+calcNum).value = payment;
}


//////////////////////////////////////////////////
//
//	BEGIN FORM FUNCTIONS
//
//////////////////////////////////////////////////

var valid = new Object();

//matches email
valid.emailAddress = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;

// matches phone
//valid.phoneNumber = /^\(?\d{3}\)?(\s|-|\.)\d{3}(\s|-|\.)\d{4}$/;
valid.phoneNumber = /(\.|-| |[0-9a-zA-Z])*/;

// International Phone Number
valid.phoneNumberInternational = /^\d(\d|-){7,20}/;

// Zip/postal code
valid.zipPostalCode = /^(\d{5}|\d{9}|\d{5}-\d{4}|[a-z]\d[a-z]\s*\d[a-z]\d)$/;

// Date xx/xx/xxxx
valid.date = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;

// State/Province Abbreviation
valid.state = /^(AB|AK|AL|AR|AZ|BC|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NB|NC|ND|NH|NJ|NM|NT|NV|NY|OH|OK|ON|OR|PA|PQ|QC|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)$/i;

// Social Security Number
valid.SSN = /^\d{3}\-?\d{2}\-?\d{4}$/;

// Currency
valid.currency = /^(\$)?((\d+)|(\d{1,3})(\,\d{3})*)(\.\d{2,2})?$/;

var errorMessages = new Array();

function disableForm(f) {
	for(var i = 0; i < f.elements.length; i++) {
		if(f.elements[i].name != 'vehicleStockNo')
			f.elements[i].disabled = true;
	}
}

function validateForm(f) {
	var i = 0, fields = f.elements, curField, fieldValue = "";
	
	errorMessages.length = 0;
	
	for(i = 0; i < fields.length; i++) {
		// Get reference to field
		curField = fields[i];
		
		// Get field value
		fieldValue = getFieldValue(curField).trim();
		
		if(curField.getAttribute('required')) {
			if(curField.getAttribute('required').toUpperCase() == 'TRUE') {
				if(fieldValue.length == 0)	// Inform user to enter a value
					errorMessages[errorMessages.length] = 'Please enter a value for ' + curField.title;
				else	// Validate the field value
					validation_validate(curField, fieldValue);
			}
			else {
				// If the field's not required, but the user entered a value, make sure it's correct
				if(fieldValue.length > 0)
					validation_validate(curField, fieldValue);
			}
		}
		else {
			// If the field's not required, but the user entered a value, make sure it's correct
			if(fieldValue.length > 0)
				validation_validate(curField, fieldValue);
		}
	}
	
	if(errorMessages.length > 0) {
		var strErrorMessage = 'The form could not be submitted because of the following errors:\r\n';
		
		for(i = 0; i < errorMessages.length; i++)
			strErrorMessage += errorMessages[i] + '\r\n';
		
		alert(strErrorMessage);
		
		return false;
	}
	else
		return true;
}


function validation_addError(errorText) {
	errorMessages[errorMessages.length] = errorText;
}


function validation_validate(field, fieldValue) {
	// Do we need to validate?
	if(field.getAttribute('validate')) {
		// Yes...validate based on type of validation
		switch(field.getAttribute('validate').trim().toUpperCase()) {
			case 'TEXT':
				break;
			case 'PHONE':
				if(fieldValue.search(valid.phoneNumber) == -1)
					validation_addError('Please enter a valid phone number for ' + field.title);
				
				break;
			case 'EMAIL':
				if(fieldValue.search(valid.emailAddress) == -1)
					validation_addError('Please enter a valid email address for ' + field.title);
				
				break;
			case 'ZIPCODE':
				if(fieldValue.search(valid.zipPostalCode) == -1)
					validation_addError('Please enter a valid zip/postal code for ' + field.title);
				
				break;
			case 'STATE':
				if(fieldValue.search(valid.state) == -1)
					validation_addError('Please enter a valid state for ' + field.title);
				
				break;
			case 'CURRENCY':
				if(fieldValue.search(valid.currency) == -1)
					validation_addError('Please enter a valid dollar amount for ' + field.title);
				
				break;
			case 'SSN':
				if(fieldValue.search(valid.SSN) == -1)
					validation_addError('Please enter a valid social security number for ' + field.title);
				
				break;
			default:
				break;
		}
	}
}


function getFieldValue(field)
{
   switch(field.type)
   {
      case "text" :
      case "textarea" :
      case "password" :
      case "hidden" :
         return field.value;

      case "select-one" :
         var i = field.selectedIndex;
         if (i == -1)   return "";
         else   return (field.options[i].value == "") ? field.options[i].text : field.options[i].value;

      case "select-multiple" :
         var allChecked = new Array();
         for(i = 0; i < field.options.length; i++)
            if(field.options[i].selected)
               allChecked[allChecked.length] = (field.options[i].value == "") ? field.options[i].text : field.options[i].value;
         return allChecked;

      case "button" :
      case "reset" :
      case "submit" :
         return "";

      case "radio" :
      case "checkbox" :
         if (field.checked) { return field.value; } else { return ""; }
      default :
         if(field[0].type == "radio")
         {
            for (i = 0; i < field.length; i++)
               if (field[i].checked)
                  return field[i].value;

            return "";
         }
         else if(field[0].type == "checkbox")
         {
            var allChecked = new Array();
            for(i = 0; i < field.length; i++)
               if(field[i].checked)
                  allChecked[allChecked.length] = field[i].value;

            return allChecked;
         }
         else
            var str = "";
            for (x in field) { str += x + "\n"; }
            alert("I couldn't figure out what type this field is...\n\n" + field.name + ": ???\n\n\n" + str + "\n\nlength = " + field.length);
         break;
   }
   
   return "";
}

////////////////////////////////////////////
//
//	BEGIN FLASH FUNCTIONS
//
////////////////////////////////////////////

//v1.0
//Copyright 2006 Adobe Systems, Inc. All rights reserved.
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '<object ';
  for (var i in objAttrs)
    str += i + '="' + objAttrs[i] + '" ';
  str += '>';
  for (var i in params)
    str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  str += '<embed ';
  for (var i in embedAttrs)
    str += i + '="' + embedAttrs[i] + '" ';
  str += ' ></embed></object>';

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        //args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "id":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}