var models = new Array();
var messages = new Array();
var updatingModel = false;

function Model(id, name, manId, bodyId) {
    this.id = id;
    this.name = name;
    this.manId = manId;
    this.bodyId = bodyId;
    return this;
}

function changeManufacturer() {
    updatingModel = true;
    var manufacturer = document.getElementById("content:carInfoForm:inquiry:manufacturer");
    var modelsSelect = document.getElementById("modelsSelect");
    if (manufacturer && modelsSelect) {
        var manId = manufacturer[manufacturer.selectedIndex].value;
        if (manId == -1) { //If user selects 'Other'
            modelsSelect.value = -1;
            var model = document.getElementById("content:carInfoForm:inquiry:model");
            model.value = -1;
            modelsSelect.disabled = true;
            $(modelsSelect).addClass("validField");
            $("#content\\:carInfoForm\\:inquiry\\:manufacturerName").show();
            $("#content\\:carInfoForm\\:inquiry\\:modelName").show();
            return;
        }
        else {
            modelsSelect.disabled = false;
            modelsSelect.length = 1;
            modelsSelect.value = 0;
            var ik = modelsSelect.length;
            $(modelsSelect).removeClass("validField");
            $("#content\\:carInfoForm\\:inquiry\\:manufacturerName").hide();
            $("#content\\:carInfoForm\\:inquiry\\:modelName").hide();
            for (var i = 0; models && i < models.length; i++) {
                if (manId == models[i].manId) {
                    modelsSelect.options[ik] = new Option(models[i].name, models[i].id);
                    modelsSelect.options[ik].bodyId = models[i].bodyId;
                    ik++;
                }
            }
            modelsSelect.options[ik] = new Option(messages["carInfoForm_other"], -1);
            if (modelsSelect.onchange) {
                modelsSelect.onchange();
            }
        }
    }
    updatingModel = false;
}

function changeModel() {
    var modelsSelect = document.getElementById("modelsSelect");
    if (modelsSelect.value == -1) {
        $("#content\\:carInfoForm\\:inquiry\\:modelName").show();
    }
    else {
        $("#content\\:carInfoForm\\:inquiry\\:modelName").hide();
    }

}

function updateModel() {
    var model = document.getElementById("content:carInfoForm:inquiry:model");
    if (model.value != "") {
        document.getElementById("modelsSelect").value = model.value;
    }
}

function formatDigitValue(object) {
    object.value = object.value.replace(/[^\d]/g, "");
}

function formatMileageValue() {
    var field = document.getElementById("content:carInfoForm:inquiry:mileage");
    field.value = field.value.replace(/[^\d\.]/g, "");
}

function validateLength(field, length, nextFieldId) {
    if (field.value.length > length)
        field.value = field.value.substring(0, length - 1);
    if (field.value.length == length && nextFieldId != '') {
        $(document.getElementById(nextFieldId)).focus();
    }
}

function validateFields(skipValidateSurname) {
    var result = '';
    var manufacturer = document.getElementById("content:carInfoForm:inquiry:manufacturer");
    if (manufacturer.value == -1) {
        result += validateManufacturerName();
    }
    else {
        result += validateManufacturer();
    }

    var modelsSelect = document.getElementById("modelsSelect");
    if (modelsSelect.value == -1) {
        result += validateModelName();
    }
    else {
        result += validateModel();
    }

    result += validateYear() +
            validateMileage();

    var error = validateName();
    if (error == '') {
        error = validateSurname(skipValidateSurname);
    }
    else {
        validateSurname(skipValidateSurname);
    }
    result += error;

    error = validatePhonePart1();
    if (error == '') {
        error = validatePhonePart2();
        if (error == '') error = validatePhonePart3();
    }

    result += error;

    error = validateZipCodePart1();
    if (error == '') {
        error = validateZipCodePart2();
    }
    else {
        validateZipCodePart2();
    }
    result += error +
            validatePrefecture() +
            validateAddress() +
            validateEmail();
    if (result != "") {
        alert(result);
        return false;
    }
    return true;
}

function checkErrors(object) {
    if (object.id.indexOf("manufacturer") != -1) {
        if (object.id.indexOf("manufacturerName") != -1) {
            validateManufacturerName();
            return;
        }
        validateManufacturer();
        return;
    }

    if (object.id.indexOf("model") != -1) {
        if (object.id.indexOf("modelName") != -1) {
            validateModelName();
            return;
        }
        validateModel();
        return;
    }
    if (object.id.indexOf("year") != -1) {
        validateYear();
        return;
    }
    if (object.id.indexOf("mileage") != -1) {
        validateMileage();
        return;
    }
    if (object.id.indexOf("userName") != -1) {
        validateName();
        return;
    }
    if (object.id.indexOf("userSurname") != -1) {
        validateSurname();
        return;
    }
    if (object.id.indexOf("phonePart1") != -1) {
        validatePhonePart1();
        return;
    }
    if (object.id.indexOf("phonePart2") != -1) {
        validatePhonePart2();
        return;
    }
    if (object.id.indexOf("phonePart3") != -1) {
        validatePhonePart3();
        return;
    }
    if (object.id.indexOf("zipCodePart1") != -1) {
        validateZipCodePart1();
        return;
    }
    if (object.id.indexOf("zipCodePart2") != -1) {
        validateZipCodePart2();
        return;
    }
    if (object.id.indexOf("prefecture") != -1) {
        validatePrefecture();
        return;
    }
    if (object.id.indexOf("address") != -1) {
        validateAddress();
        return;
    }
    if (object.id.indexOf("email") != -1) {
        validateEmail();
    }
}

function setError(object) {
    $(object).removeClass("validField");
    $(object).addClass("errorField");
}

function unsetError(object) {
    $(object).removeClass("errorField");
    $(object).addClass("validField");
}

function validateManufacturer() {
    var manufacturer = document.getElementById("content:carInfoForm:inquiry:manufacturer");
    if (manufacturer.value == 0) {
        setError(manufacturer);
        return "- " + messages["carInfoForm_carData_manufacturer_empty"] + "\n";
    }
    unsetError(manufacturer);
    return "";
}

function validateManufacturerName() {
    var manufacturerName = document.getElementById("content:carInfoForm:inquiry:manufacturerName");
    if (manufacturerName.value == "") {
        setError(manufacturerName);
        return "- " + messages["carInfoForm_carData_manufacturer_empty"] + "\n";
    }
    unsetError(manufacturerName);
    return "";
}

function validateModel() {
    if (updatingModel)
        return "";
    var modelsSelect = document.getElementById("modelsSelect");
    if (modelsSelect.value == 0) {
        setError(modelsSelect);
        return "- " + messages["carInfoForm_carData_model_empty"] + "\n";
    }
    unsetError(modelsSelect);
    var model = document.getElementById("content:carInfoForm:inquiry:model");
    model.value = modelsSelect.value;
    return "";
}

function validateModelName() {
    var modelName = document.getElementById("content:carInfoForm:inquiry:modelName");
    if (modelName.value == "") {
        setError(modelName);
        return "- " + messages["carInfoForm_carData_model_empty"] + "\n";
    }
    unsetError(modelName);
    return "";
}

function validateYear() {
    var year = document.getElementById("content:carInfoForm:inquiry:year");
    if (year.value == 0) {
        setError(year);
        return "- " + messages["carInfoForm_carData_year_empty"] + "\n";
    }
    unsetError(year);
    return "";
}

function validateMileage() {
    var mileage = document.getElementById("content:carInfoForm:inquiry:mileage");
    if (mileage.value == 0) {
        setError(mileage);
        return "- " + messages["carInfoForm_carData_mileage_empty"] + "\n";
    }
    unsetError(mileage);
    return "";
}

function validateName() {
    var userName = document.getElementById("content:carInfoForm:inquiry:userName");
    if (userName.value == "") {
        setError(userName);
        return "- " + messages["carInfoForm_userData_name_empty"] + "\n";
    }
    unsetError(userName);
    return "";
}

function validateSurname(skipValidateSurname) {
    var userSurname = document.getElementById("content:carInfoForm:inquiry:userSurname");
    if (skipValidateSurname == null || skipValidateSurname == 'undefined' || !skipValidateSurname) {
        if (userSurname.value == "") {
            setError(userSurname);
            return "- " + messages["carInfoForm_userData_name_empty"] + "\n";
        }
    }
    unsetError(userSurname);
    return "";
}

function validatePhonePart1() {
    return validatePhonePart("phonePart1");
}
function validatePhonePart2() {
    return validatePhonePart("phonePart2");
}
function validatePhonePart3() {
    return validatePhonePart("phonePart3");
}
function validatePhonePart(phonePartId) {
    var phonePart = document.getElementById("content:carInfoForm:inquiry:" + phonePartId);
    if (phonePart.value == "") {
        setError(phonePart);
        return "- " + messages["carInfoForm_userData_phone_empty"] + "\n";
    }
    unsetError(phonePart);
    return "";
}

function validateZipCodePart1() {
    var zipCodePart1 = document.getElementById("content:carInfoForm:inquiry:zipCodePart1");
    if (zipCodePart1.value == "") {
        setError(zipCodePart1);
        return "- " + messages["carInfoForm_userData_zipCode_empty"] + "\n";
    }
    unsetError(zipCodePart1);
    return "";
}

function validateZipCodePart2() {
    var zipCodePart2 = document.getElementById("content:carInfoForm:inquiry:zipCodePart2");
    if (zipCodePart2.value == "") {
        setError(zipCodePart2);
        return "- " + messages["carInfoForm_userData_zipCode_empty"] + "\n";
    }
    unsetError(zipCodePart2);
    return "";
}

function validatePrefecture() {
    var prefecture = document.getElementById("content:carInfoForm:inquiry:prefecture");
    if (prefecture.value == 0) {
        setError(prefecture);
        return "- " + messages["carInfoForm_userData_prefecture_empty"] + "\n";
    }
    unsetError(prefecture)
    return "";
}

function validateAddress() {
    var address = document.getElementById("content:carInfoForm:inquiry:address");
    if (address.value == "") {
        setError(address);
        return "- " + messages["carInfoForm_userData_address_empty"] + "\n";
    }
    unsetError(address);
    return "";
}

function validateEmail() {
    var email = document.getElementById("content:carInfoForm:inquiry:email");
    if (email.value == "") {
        setError(email);
        return "- " + messages["carInfoForm_userData_email_empty"] + "\n";
    }
    var emailRegexp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (!emailRegexp.test(email.value)) {
        setError(email);
        return "- " + messages["carInfoForm_userData_email_format"] + "\n";
    }
    unsetError(email);
    return "";
}

function hideFlash() {
    $('#flash_cell div:first-child').hide();
    $("#submitFlash").hide();
    $("#contentTitleBannerFlash").hide();
    $(".submitLink").css("display", "block");
    $("#contentTitleBannerDiv").css("display", "block");
}

$(document).ready(function() {
    $("input:text").focus(function() {
        $(this).addClass("selectedField");
        $(this).addClass("validField");
    });
    $("input:text").blur(function() {
        $(this).removeClass("selectedField");
        checkErrors(this);
    });
    $("textarea").focus(function() {
        $(this).addClass("selectedField");
        $(this).addClass("validField");
    });
    $("textarea").blur(function() {
        $(this).removeClass("selectedField");
        checkErrors(this);
    });

    detectAndFixFlash();
});

function clickSubmitLink() {
    $(".submitLink").trigger("click");
}

function clickConfirmLink() {
    $(".confirmLink").trigger("click");
}


function checkInputZip() {
    var zipPart1 = document.getElementById("content:carInfoForm:inquiry:zipCodePart1");
    var zipPart2 = document.getElementById("content:carInfoForm:inquiry:zipCodePart2");

    if (zipPart1.value.length == 3 && zipPart2.value.length == 4) {
        findPrefectureAndCity();
    }

}

function includeSpecialCss(contextPath) {
    document.write("<link href=\"" + contextPath + "/css/special.css\" rel=\"stylesheet\" type=\"text/css\" />");
}

function clickKaitoriBanner() {
//    $("#topRightBanner a").trigger("click");
    location.href = "http://www.buy-car.jp/";
//    window.open("http://www.buy-car.jp/", "bannerLinkWindow");
}

function includeIEPNGFix(element, contextPath) {
    document.write("<style type=\"text/css\"> " + element + " {behavior: url(\"" + contextPath + "/js/iepngfix.htc\") !important}</style>");
}

function detectAndFixFlash() {
    var requiredMajorVersion = 8;
    var requiredMinorVersion = 0;
    var requiredRevision = 0;
    if (typeof DetectFlashVer === 'function') {
        var detected = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
        if (! detected) {
            hideFlash();
        }
    }
}


