var STATE = new Object();


function showVehicles() {
	var myForm = document.makemodelForm;
	
	if (myForm.vehicle_type[0].checked && myForm.vehicle_type[1].checked) {
		STATE['type'] = "";
	} else {
		if (myForm.vehicle_type[0].checked) {
			STATE['type'] = "N";
		} else {
			if (myForm.vehicle_type[1].checked) {
				STATE['type'] = "U";
			} else {
				myForm.vehicle_type[0].checked = true;
				myForm.vehicle_type[1].checked = true;
				STATE['type'] = "";
			}
		}
	}
	updateFirstPage();
}

function updateFirstPage() {
    var fmake = getParam("make").toUpperCase();
    var fmodel = getParam("model").toUpperCase();

    if (fmake) {
        for (var i = 0; i < M.length; i++) {
            if (M[i] == fmake) {
                STATE['make'] = fmake;
            }
        }
    }

    if (fmodel) {
        for (var i = 0; i < C.length; i++) {
            if (C[i] == fmodel) {
                STATE['model'] = fmodel;
            }
        }
    }
    updatePage();
}

function updatePage () {
	var myForm = document.makemodelForm;
	var matched = runFilter();

	if (myForm.year) {
		refresh_list(myForm.year, STATE['year'], Y, matched['year']);
	}
	if (myForm.make) {
		refresh_list(myForm.make, STATE['make'], M, matched['make']);
	}
	if (myForm.model) {
		refresh_list(myForm.model, STATE['model'], C, matched['model']);
	}
}

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

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

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 getParam (name) {
    var result = "";
    var allparam = location.search.substring(1);
    allparam = " " + allparam + "&";
    var searchName = name + "=";
    var startOfCookie = allparam.indexOf(searchName);
    var endOfCookie;

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

function getConf () {
    var all = location.search.substring(1);
	all = all + "&";
	var end = all.indexOf("&",all);
	result = unescape(all.substring(0,end));

	return result;
}

function refresh_list (optlist, value, lookup, matched) {
	var list_default = optlist.options[0].text;
	optlist.length = 0;
	optlist.options[0] = new Option(list_default, '');

	var preselect = "";
	var list = new Array();
	for (var key in matched) {
		if (lookup) {
			list[list.length] = lookup[key];
		} else {
			list[list.length] = key;
		}
	}
	if (list.length == 1) {
		preselect = list[0];
	}
	list.sort();
	if (value) {
		preselect = value;
	}
	var si = 0;
	for (var index in list) {
		var val = list[index];
		var disp = val;
		var len = optlist.options.length;
		optlist.options[len] = new Option(disp, val);
		if (preselect == val) {
			si = len;
		}
	}
	optlist.options[si].selected = true;
}

function runFilter () {
	var matched = new Object();
	matched['year'] = new Object();
	matched['make'] = new Object();
	matched['model'] = new Object();
	for (var i = 0; i < L.length; i++) {
		var flag = 1111;
		var car = mySplit(L[i], "\t");
		if (STATE['year'] && STATE['year'] != Y[car[0]]) {
			flag -= 1000;
		}
		if (STATE['make'] && STATE['make'].toUpperCase() != M[car[1]].toUpperCase()) {
			flag -= 100;
		}
		if (STATE['model'] && STATE['model'].toUpperCase() != C[car[2]].toUpperCase()) {
			flag -= 10;
		}
		if (STATE['type'] && car[3].indexOf(STATE['type']) == -1) {
			flag -= 1;
		}
		if (flag == 1111 || flag == 111) {
			matched['year'][car[0]] = 1;
		}
		if (flag == 1111 || flag == 1011) {
			matched['make'][car[1]] = 1;
		}
		if (flag == 1111 || flag == 1101) {
			matched['model'][car[2]] = 1;
		}
	}
	return matched;
}

function optionSelected (name, list) {
	var value = "";
	for (var i = 0; i < list.options.length; i++) {
		if (list.options[i].selected) {
			value = list.options[i].value;
		}
	}
	STATE[name] = value;
	updatePage();

	setCookie(name,value);
}

function listSelected (list) {
	var selected = 0;
	for (var i = 0; i < list.options.length; i++) {
		if (list.options[i].selected) {
			selected = list.options[i].value;
		}
	}
	return selected;
}

function clearAll () {
	STATE['year'] = "";
	if (document.makemodelForm.make) {
		STATE['make'] = "";
	}
	STATE['model'] = "";
	setCookie("make","");
	setCookie("model","");
	updatePage();
}

function shopByMakeModelCogs() {
    var new_c = document.makemodelForm.vehicle_type[0].checked;
    var used_c = document.makemodelForm.vehicle_type[1].checked;
    var msg = "";
	var myIMake = listSelected(document.makemodelForm.make);
	var myIModel = listSelected(document.makemodelForm.model);

    var certified = document.makemodelForm.certified;
    var certified_checked = 0;

    document.makemodelForm.skip.value="0";

    if (certified) {
        certified_checked = certified.checked;
    }
    if (!new_c && !used_c && !certified_checked) {
        if (certified) {
            msg += "Please select New or Used or Certified Pre-Owned.\n";
        } else {
            msg += "Please select New or Used.\n";
        }
    }

	if (msg) {
        alert (msg);
    } else {
    	if (!myIMake || !myIModel) {
        	document.makemodelForm.skip.value="1";
    	} 
       	document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/page2.cgi";
       	document.makemodelForm.submit();
    }
}

function shopByMakeModel() {
    var new_c = document.makemodelForm.vehicle_type[0].checked;
    var used_c = document.makemodelForm.vehicle_type[1].checked;
    var msg = "";
	var myIMake = listSelected(document.makemodelForm.make);
	var myIModel = listSelected(document.makemodelForm.model);

    var certified = document.makemodelForm.certified;
    var certified_checked = 0;

    document.makemodelForm.skip.value="0";

    if (certified) {
        certified_checked = certified.checked;
    }
    if (!new_c && !used_c && !certified_checked) {
        if (certified) {
            msg += "Please select New or Used or Certified Pre-Owned.\n";
        } else {
            msg += "Please select New or Used.\n";
        }
    }
    if (!myIMake || !myIModel) {
        msg += "Please select a make and model.\n";
    }

	if (msg) {
        alert (msg);
    } else {
        document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/page2.cgi";
        document.makemodelForm.submit();
    }
}


function shopByPrice () {
    var zipcode = document.makemodelForm.zipcode;
    var msg = "";
    if (zipcode) {
        var zip = document.makemodelForm.zipcode.value;
        var zip_pattern = /^\d\d\d\d\d$/;
        if (zip) {
            if (!zip_pattern.test(zip)) {
                msg += "Zip Code must be 5 digits, please try again.";
            }
        } else {
            msg += "Please enter your zipcode.";
        }
    }
    if (msg) {
        alert(msg);
    } else {
        document.makemodelForm.skip.value="1";
        document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/similar.cgi";
        document.makemodelForm.submit();
    }
}

function checkZip() {
	var msg ="";
    var zipcode = document.makemodelForm.zipcode;

    if (zipcode) {
        var zip = document.makemodelForm.zipcode.value;
        var zip_pattern = /^\d\d\d\d\d$/;
        if (zip) {
            if (!zip_pattern.test(zip)) {
                msg += "Zip Code must be 5 digits, please try again.";
            }
        } else {
            msg += "Please enter your zipcode.\n";
        }
    }

	return msg;
}


function checkPrice() {
	var msg ="";
    var price_min_list = document.makemodelForm.price_min;
    var price_max_list = document.makemodelForm.price_max;

	if (price_min_list) {
		price_min = price_min_list.options[price_min_list.selectedIndex].value;
	}
	if (price_max_list) {
		price_max = price_max_list.options[price_max_list.selectedIndex].value;
	}
	if (parseInt(price_min) > parseInt(price_max)) {
		msg += "Please select a valid price range.\n";
	}

	return msg;
}

function checkYear() {
	var msg ="";
    var year_min_list = document.makemodelForm.year_min;
    var year_max_list = document.makemodelForm.year_max;

	if (year_min_list) {
		year_min = year_min_list.options[year_min_list.selectedIndex].value;
	}
	if (year_max_list) {
		year_max = year_max_list.options[year_max_list.selectedIndex].value;
	}
	if (parseInt(year_min) > parseInt(year_max)) {
		msg += "Please select a valid year range.\n";
	}

	return msg;
}

function checkBody() {
	var msg ="";

    var myIMake = listSelected(document.makemodelForm.make);
    var myIModel = listSelected(document.makemodelForm.model);
	var checked=0;

	if (!myIMake || !myIModel) {
        for (var i = 0; i <= 7; i++) {
			if (document.makemodelForm.bodystyle[i].checked == true) {
				checked=1;
			}
		}
		if (!checked) {
			msg += "Please select a bodystyle.\n";
		}
	}

	return msg;
}


function checkNewUsed () {
	var msg ="";

	if (document.makemodelForm.vehicle_type.checked) {

	} else {
    var new_c = document.makemodelForm.vehicle_type[0].checked;
    var used_c = document.makemodelForm.vehicle_type[1].checked;
    var certified = document.makemodelForm.certified;
    var certified_checked = 0;

    if (certified) {
        certified_checked = certified.checked;
    }
    if (!new_c && !used_c && !certified_checked) {
        if (certified) {
            msg += "Please select New or Used or Certified Pre-Owned.\n";
        } else {
            msg += "Please select New or Used.\n";
        }
    }
	}

	return msg;
}

function basicSearch () {
    var myIMake = listSelected(document.makemodelForm.make);
    var myIModel = listSelected(document.makemodelForm.model);
	var vehicle_type ="";

    var msg = "";
	msg += checkZip();
	msg += checkPrice();

	setCookieCarprices("ad_make",myIMake);
	setCookieCarprices("ad_model",myIModel);

	if (document.makemodelForm.vehicle_type) {
		msg += checkNewUsed();
		if (document.makemodelForm.vehicle_type.checked) {
			vehicle_type = document.makemodelForm.vehicle_type;
		} else {
			if (document.makemodelForm.vehicle_type[0].checked) {
				vehicle_type += document.makemodelForm.vehicle_type[0].value;
			}
			if (document.makemodelForm.vehicle_type[1].checked) {
				vehicle_type += document.makemodelForm.vehicle_type[1].value;
			}
		}
		setCookieCarprices("vehicle_type",vehicle_type);
	}

    if (msg) {
        alert(msg);
    } else {
		if (!myIMake && !myIModel) {
        	document.makemodelForm.skip.value="1";
        	document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/n_similar.cgi";

			if (PREF['page3_direct']) {
        		document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/n_page3.cgi";
			}

		} else {
        	document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/n_page3.cgi";
		}
        document.makemodelForm.submit();
    }
}

function advanceSearch () {
    var myIMake = listSelected(document.makemodelForm.make);
    var myIModel = listSelected(document.makemodelForm.model);
	var vehicle_type;

    var msg = "";
	msg += checkZip();
	msg += checkPrice();
	msg += checkYear();

	if (document.makemodelForm.vehicle_type) {
		msg += checkNewUsed();
		if (document.makemodelForm.vehicle_type.checked) {
			vehicle_type = document.makemodelForm.vehicle_type;
		} else {
			if (document.makemodelForm.vehicle_type[0].checked) {
				vehicle_type += document.makemodelForm.vehicle_type[0].value;
			}
			if (document.makemodelForm.vehicle_type[1].checked) {
				vehicle_type += document.makemodelForm.vehicle_type[1].value;
			}
		}
		setCookieCarprices("vehicle_type",vehicle_type);
	}

	setCookieCarprices("ad_make",myIMake);
	setCookieCarprices("ad_model",myIModel);

    if (msg) {
        alert(msg);
    } else {
		if (!myIMake && !myIModel) {
        	document.makemodelForm.skip.value="1";
        	document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/n_similar.cgi";

			if (PREF['page3_direct']) {
        		document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/n_page3.cgi";
			}
		} else {
        	document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/n_page3.cgi";
		}
        document.makemodelForm.submit();
    }
}


function skip () {
    document.makemodelForm.skip.value="1";
    document.makemodelForm.action = "http://inventory.carprices.com/cgi-bin/page2.cgi";
    document.makemodelForm.submit();
}


function printYearList(name,ymin,ymax,v) {
    var min_selected;
    var max_selected;

    if (ymin == v) {
        min_selected = " selected ";
    } else {
        max_selected = " selected ";
    }

    document.writeln("<select name=\"" + name + "\">");
    document.writeln("<option value=\"" + ymin + "\" " + min_selected + ">" + ymin);

	for (var i = parseInt(ymin)+1; i < ymax; i++) {
        document.writeln("<option value=\"" + i + "\" " + ">" + i);
	}

    document.writeln("<option value=\"" + ymax + "\" " + max_selected + ">" + ymax);
    document.writeln("</select>");
}

function printPriceList(name,pmin,pmax,v) {

    var min_selected ="";
    var max_selected ="";
    var min_money;
    var max_money;

    if (pmin == v) {
        min_selected = " selected ";
    } else {
        max_selected = " selected ";
    }

    min_money = displayMoney(pmin);
    document.writeln("<select name=\"" + name + "\">");
    document.writeln("<option value=\"" + pmin + "\" " + min_selected + ">" + min_money);

    var money;
    var i_c;

    for (var i = parseInt(pmin/1000) + 1; i < parseInt(pmax/1000); i++) {
        i_c = i * 1000;
        money = displayMoney(i_c);
        document.writeln("<option value=\"" + i_c + "\" " + ">" + money);
    }

    max_money = displayMoney(pmax);
    document.writeln("<option value=\"" + pmax + "\" " + max_selected + ">" + max_money);
    document.writeln("</select>");
}

function displayMoney (value) {
    if (PREF['language'] && PREF['language'] == "canada_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 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 formatMoney (value) {
    if (!value) {
        return "0";
    }
    var sign = '';
    if (value < 0) {
        sign = '-';
        value = value * -1;
    }
    if (PREF['language'] && PREF['language'] == "canada_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 distanceZip () {

	if (PREF['zip_code']) {
		document.writeln("<tr><td colspan=\"4\"><span class=\"bold\">Distance <select name=\"radius\"><option value=\"30\" selected>30 miles</option><option value=\"40\" >40 mile</option> <option value=\"50\" >50 miles</option><option value=\"75\" >75 miles</option><option value=\"100\" >100 miles</option><option value=\"150\" >150 miles</option><option value=\"200\" >200 miles</option><option value=\"500\" >500 miles</option><option value=\"100000\" >Any Distance</option> </select> from Zip Code</span> <input type=\"text\" name=\"zipcode\" size=\"5\" maxlength=\"5\" value=\"\"> </td> </tr>");
	}
}


function loadZip () {

    if (PREF['zip_code']) {
        var zipcode = getCookie("zipcode");
        document.makemodelForm.zipcode.value = zipcode;
    }
}


function loadMakeModel() {
	var temp_make = getParam("make").toUpperCase();
	var temp_model = getParam("model").toUpperCase();

	STATE['make'] = getCookie("make");
	STATE['model'] = getCookie("model");

	if (temp_make) {
		STATE['make'] = temp_make;
		STATE['model'] = temp_model;

		setCookie("make",temp_make);
		setCookie("model",temp_model);
	}

	updatePage();
}

function loadYearMakeModel() {
	var temp_year = getParam("year").toUpperCase();
	var temp_make = getParam("make").toUpperCase();
	var temp_model = getParam("model").toUpperCase();

	STATE['make'] = getCookie("make");
	STATE['model'] = getCookie("model");
	STATE['year'] = getCookie("year");

	if (temp_make) {
		STATE['make'] = temp_make;
		STATE['model'] = temp_model;
		STATE['year'] = temp_year;

		setCookie("make",temp_make);
		setCookie("model",temp_model);
		setCookie("year",temp_year);
	}

	updatePage();
}

