
var PREF = new Object();
var CARS = new Object();
var STATE = new Object();
var RES = new Object();

var delimiter = "^^^";
var zip_pattern = /^\d\d\d\d\d$/;
var email_pattern = /^[^\@]+\@[^\.]+\.\S+$/;
var checked_image = 'http://images.carprices.com/configurator/selected_icon.gif';
var unchecked_image = 'http://images.carprices.com/configurator/selectable_icon.gif';
var required_image = 'http://images.carprices.com/configurator/required_selection_icon.gif';
var included_image = 'http://images.carprices.com/configurator/included_icon.gif';
var excluded_image = 'http://images.carprices.com/configurator/excluded_icon.gif';
var detail_image = 'http://images.carprices.com/configurator/paper_icon.gif';

var isIE = false;
if (navigator.appName == "Microsoft Internet Explorer") {
	isIE = true;
}

function formatMoney (value) {
	if (!value) {
		return "0";
	}
	var sign = '';
	if (value < 0) {
		sign = '-';
		value = value * -1;
	}
	if (PREF['language'] && PREF['language'] == "french") {
		var intString = "" + Math.round(value);
		var loopCount = (intString.length - (intString.length % 3)) / 3;
		var result = "";
		for (var i = 1; i <= loopCount; i++) {
			var start = intString.length - (3 * i);
			if (intString.length > 3*i) {
				result = " " + intString.substring(start, start + 3) + result;
			} else {
				result = intString.substring(start, start + 3) + result;
			}
		}
		if (intString.length > loopCount * 3) {
			result = intString.substring(0, intString.length % 3) + result;
		}
	} else {
		var intString = "" + Math.round(value);
		var loopCount = (intString.length - (intString.length % 3)) / 3;
		var result = "";
		for (var i = 1; i <= loopCount; i++) {
			var start = intString.length - (3 * i);
			if (intString.length > 3*i) {
				result = "," + intString.substring(start, start + 3) + result;
			} else {
				result = intString.substring(start, start + 3) + result;
			}
		}
		if (intString.length > loopCount * 3) {
			result = intString.substring(0, intString.length % 3) + result;
		}
	}
	return sign + result;
}

function displayMoney (value) {
	if (value == -0.01) {
		return "TBD";
	} else if (PREF['language'] && PREF['language'] == "french") {
		if (value < 0) {
			var pos = value * -1;
			return "-" + formatMoney(pos) + " $";
		} else {
			return formatMoney(value) + " $";
		}
	} else {
		if (value < 0) {
			var pos = value * -1;
			return "-$" + formatMoney(pos);
		} else {
			return "$" + formatMoney(value);
		}
	}
}

function getCookie (name) {
	var result = "";
	var allcookies = document.cookie;
	allcookies = " " + allcookies + ";";
	var searchName = " " + name + "=";
	var startOfCookie = allcookies.indexOf(searchName);
	var endOfCookie;

	if (startOfCookie != -1) {
		startOfCookie += searchName.length;
		endOfCookie = allcookies.indexOf(";", startOfCookie);
		result = unescape(allcookies.substring(startOfCookie, endOfCookie));
	}
	return result;
}

function setCookie (name, value) {
	value = escape(value);
	document.cookie = name + "=" + value + "; path=/";
	document.cookie = name + "=" + value + "; path=/; domain=.carprices.com";
}

function setGlobalCookie (name, value, domain) {
	value = escape(value);
	document.cookie = name + "=" + value + "; path=/; domain=" + domain;
}

function mySplit (str, pattern) {
	var result = new Array();
	if (str) {
		var count = 0;
		var i = str.indexOf(pattern);
		while (i != -1) {
			var segment = str.substring(0, i);
			if (segment) {
				result[count++] = segment;
			}
			str = str.substring(i + pattern.length);
			i = str.indexOf(pattern);
		}
		if (str) {
			result[count++] = str;
		}
	}
	return result;
}

function XMLescape (str) {
	if (str) {
		str = str.replace(/\&reg;/g, "_TEMP_REG_TEMP_");
		str = str.replace(/\&trade;/g, "_TEMP_TRADE_TEMP_");
		str = str.replace(/\&copy;/g, "_TEMP_COPY_TEMP_");
		str = str.replace(/\&/g, "&amp;");
		str = str.replace(/_TEMP_REG_TEMP_/g, "&reg;");
		str = str.replace(/_TEMP_TRADE_TEMP_/g, "&trade;");
		str = str.replace(/_TEMP_COPY_TEMP_/g, "&copy;");
		str = str.replace(/\</g, "&lt;");
		str = str.replace(/\>/g, "&gt;");
		str = str.replace(/'/g, "&#39;");
		str = str.replace(/"/g, "&quot;");
	}
	return str;
}

function getState () {
	var cookie = getCookie("conf_state");
	var state = mySplit(cookie, delimiter);
	STATE = new Object();
	STATE['zipcode'] = "";
	STATE['email'] = "";
	STATE['exterior'] = "";
	STATE['secondary'] = "";
	STATE['interior'] = "";
	for (var i = 0; i < state.length; i++) {
		var currState = state[i];
		var key = currState.substring(0, currState.indexOf('='));
		var value = currState.substring(key.length + 1);
		if (key == 'invoice' || key == 'retail' || key =='invoice_options' || key == 'retail_options') {
			STATE[key] = parseInt(value);
		} else {
			STATE[key] = value;
		}
	}
}

function saveState () {
	var state = "";
	for (var key in STATE) {
		state += key + "=" + STATE[key] + delimiter;
	}
	setCookie("conf_state", state);
}

function listAdd (list, item) {
	if (list) {
		var search = "," + list + ",";
		var index = search.indexOf("," + item + ",");
		if (index < 0) {
			list += "," + item;
		}
	} else {
		list = item;
	}
	return list;
}

function listDel (list, item) {
	if (list != null && list.length != 0) {
		var search = "," + list + ",";
		var index = search.indexOf("," + item + ",");
		if (index >= 0) {
			if (index == 0) {
				list = list.substring(item.length + 1);
			} else if (index + item.length == list.length) {
				list = list.substring(0, index - 1);
			} else {
				list = list.substring(0, index) + list.substring(index + item.length + 1, list.length);
			}
		}
	}
	return list;
}

function popWindow (url, name, width, height) {
	var win = window.open(url, name, 'width='+width+',height='+height+',scrollbars=yes,resizable=yes,toolbar=no,location=no,status=no,menubar=no');
	win.focus();
}

function showPrice () {
	var invopt_div = document.getElementById('invoice_options');
	var retopt_div = document.getElementById('retail_options');
	var inv_div = document.getElementById('invoice');
	var ret_div = document.getElementById('retail');

	if (PREF['show_invoice'] && CARS[STATE['car_id']]['invoice'] != 0 && invopt_div) {
		var inv_price = STATE['invoice'];
		if (PREF['ad_fee'] && PREF['ad_fee'][CARS[STATE['car_id']]['year'] + ' ' + CARS[STATE['car_id']]['make'] + ' ' + CARS[STATE['car_id']]['model']]) {
			inv_price += PREF['ad_fee'][CARS[STATE['car_id']]['year'] + ' ' + CARS[STATE['car_id']]['make'] + ' ' + CARS[STATE['car_id']]['model']];
		}
		inv_div.innerHTML = displayMoney(inv_price);
		invopt_div.innerHTML = displayMoney(STATE['invoice_options']);
	}
	if (retopt_div) {
		retopt_div.innerHTML = displayMoney(STATE['retail_options']);
	}
	if (ret_div) {
		ret_div.innerHTML = displayMoney(STATE['retail']);
	}
}

function vehicle_name (car_id) {
	var name = CARS[car_id]['year'] + " " + CARS[car_id]['make'] + " " + CARS[car_id]['model'] + " " + CARS[car_id]['trim'] + " ";
	var pat1 = / \d( |\-)?Door(s)? /i;
	var pat2 = / (2|4|F|R|A)( |\-)?WD /i;
	if (!pat1.test(name)) {
		name += CARS[car_id]['doors'] + "-Door ";
	}
	if (!pat2.test(name)) {
		name += CARS[car_id]['drive'] + "WD ";
	}
	if (name.indexOf(CARS[car_id]['bodystyle']) == -1) {
		name += CARS[car_id]['bodystyle'];
	}
	return name;
}

function trim_name (car_id) {
	var name = CARS[car_id]['trim'] + " ";
	var pat1 = / \d( |\-)?Door(s)? /i;
	var pat2 = / (2|4|F|R|A)( |\-)?WD /i;
	if (!pat1.test(name)) {
		name += CARS[car_id]['doors'] + "-Door ";
	}
	if (!pat2.test(name)) {
		name += CARS[car_id]['drive'] + "WD ";
	}
	if (name.indexOf(CARS[car_id]['bodystyle']) == -1) {
		name += CARS[car_id]['bodystyle'];
	}
	return name;
}

function getArgs () {
	var args = new Object();
	var query = location.search.substring(1);
	var pairs = mySplit(query, ",");
	for (var i = 0; i < pairs.length; i++) {
		var pos = pairs[i].indexOf('=');
		if (pos >= 0) {
			var argname = pairs[i].substring(0, pos);
			var value = pairs[i].substring(pos + 1);
			args[argname] = unescape(value);
		}
	}
	return args;
}

function akamaize (url) {
	// disabling akamai
	return url;

	if (PREF['no_akamai']) {
		return url;
	} else {
		return url.substr(0, 7) + "a716.g.akamai.net/f/716/1233/24h/" + url.substr(7, url.length);
	}
}

function load_preference () {
	if (STATE['conf_id']) {
		document.writeln("<script src=\"../conf_preference/" + STATE['conf_id'] + ".js\"></" + "script>");
	} else {
		document.location = "http://configurator.carprices.com/cgi-bin/configurator.cgi?conf_id=carprices&template=carprices";
	}
}

function isBanksite () {
	var display_cookie = getCookie("DISPLAY");
	if ((display_cookie.substr(0,14) == "DIGITALINSIGHT")
        	|| (display_cookie.substr(0,4) == "MASC")
        	|| (display_cookie.substr(0,3) == "OSI")
        	|| (display_cookie.substr(0,8) == "BANKSITE")
        	|| (display_cookie.substr(0,7) == "FEDCOMP")
        	|| (display_cookie.substr(0,4) == "CYFI")) {

		return true;
	} else {
		return false;
	}
}

function setPage (page) {
	STATE['lastpage'] = STATE['page'];
	STATE['page'] = page;
	saveState();
}

function inventory_result () {
	var frompage = "firstpage_new";
	var partner = getCookie('DISPLAY').toLowerCase();
	var topage = "page3.cgi";

	if (PREF['inventory_frompage'] && PREF['inventory_topage']) {
		frompage = PREF['inventory_frompage'];
		topage = PREF['inventory_topage'];
	} else if (STATE['conf_id'] == 'carprices' || STATE['conf_id'] == 'carprices_used') {
		frompage = "basicsearch";
		topage = "n_page3.cgi";
	} else if (STATE['conf_id'] == 'aaa_used') {
		if (partner == 'aaama') {
			STATE['conf_id'] = 'aaa_ma';
			frompage = "firstpage_aaa_ma";
		} else {
			STATE['conf_id'] = 'aaa';
			frompage = "aaa";
		}
	} else if (STATE['conf_id'] == 'citysearch_used') {
		STATE['conf_id'] = 'carprices_used';
		frompage = "firstpage_cp";
	} else if (STATE['conf_id'] == 'aaa_autobuy') {
		STATE['conf_id'] = partner;
		frompage = "aaa";
	} else if (STATE['conf_id'] == 'aaa_autobuying') {
		STATE['conf_id'] = partner;
		topage = "aaa_inv.cgi";
	} else if (STATE['conf_id'] == 'yourlocalcardealer' || STATE['conf_id'] == 'toyotaofelcajon') {
		frompage = "basicsearch_all";
		topage = "n_page3.cgi";
	}
   	document.location = "http://inventory.carprices.com/cgi-bin/" + topage + "?car_id=" + STATE['car_id'] + "&conf_id=" + STATE['conf_id'] + "&zipcode=" + STATE['zipcode'] + "&makemodeltrims=" + CARS[STATE['car_id']]['make'] + "%5e" + CARS[STATE['car_id']]['model'] + "%5e&frompage=" + frompage + "&display_type=dealer&vehicle_type=new";
}

function new_inventory (doc, host) {
	if (!host) {
		host = "www.carprices.com";
	}
	doc.location = "http://" + host + "/inventory/search.php/ID_" + STATE['conf_id'] + "/CARID_" + STATE['car_id'] + "/YEAR_" + CARS[STATE['car_id']]['year'] + "/MAKE_" + CARS[STATE['car_id']]['make'] + "/MODEL_" + escape(CARS[STATE['car_id']]['model']);
}

function show_qform () {
	var div = document.getElementById('qform_div');
	div.style.display = 'block';
	STATE['yes_pop'] = '1';
	saveState();
}

getState();

