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: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:model");
            model.value = -1;
            modelsSelect.disabled = true;
            $(modelsSelect).addClass("validField");
            $("#otherManufacturerRow input").show();
            $("#otherModelRow input").show();
            return;
        }
        else {
            modelsSelect.disabled = false;
            modelsSelect.length = 1;
            modelsSelect.value = 0;
            var ik = modelsSelect.length;
            $(modelsSelect).removeClass("validField");
            $("#otherManufacturerRow input").hide();
            $("#otherModelRow input").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) {
        $("#otherModelRow input").show();
    }
    else {
        $("#otherModelRow input").hide();
    }

}

function updateModel() {
    var model = document.getElementById("content:carInfoForm: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: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() {
    var result = '';
    var manufacturer = document.getElementById("content:carInfoForm: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();
    }
    else {
        validateSurname();
    }
    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("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: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: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:model");
    model.value = modelsSelect.value;
    return "";
}

function validateModelName() {
    var modelName = document.getElementById("content:carInfoForm:modelName");
    if(modelName.value == "" ) {
        setError(modelName);
        return "- " + messages["carInfoForm_carData_model_empty"] + "\n";
    }
    unsetError(modelName);
    return "";
}

function validateYear() {
    var year = document.getElementById("content:carInfoForm: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: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:userName");
    if(userName.value == "" ) {
        setError(userName);
        return "- " + messages["carInfoForm_userData_name_empty"] + "\n";
    }
    unsetError(userName);
    return "";
}

function validateSurname() {
    var userSurname = document.getElementById("content:carInfoForm:userSurname");
    if(userSurname.value == "") {
        setError(userSurname);
        return "- " + messages["carInfoForm_userData_name_empty"] + "\n";
    }
    unsetError(userSurname);
    return "";
}

function validateZipCodePart1() {
    var zipCodePart1 = document.getElementById("content:carInfoForm:zipCodePart1");
    if(zipCodePart1.value == "") {
        setError(zipCodePart1);
        return "- " + messages["carInfoForm_userData_zipCode_empty"] + "\n";
    }
    unsetError(zipCodePart1);
    return "";
}

function validateZipCodePart2() {
    var zipCodePart2 = document.getElementById("content:carInfoForm:zipCodePart2");
    if(zipCodePart2.value == "") {
        setError(zipCodePart2);
        return "- " + messages["carInfoForm_userData_zipCode_empty"] + "\n";
    }
    unsetError(zipCodePart2);
    return "";
}

function validatePrefecture() {
    var prefecture = document.getElementById("content:carInfoForm: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:address");
    if(address.value == "") {
        setError(address);
        return "- " + messages["carInfoForm_userData_address_empty"] + "\n";
    }
    unsetError(address);
    return "";
}

function validateEmail() {
    var email = document.getElementById("content:carInfoForm: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 "";
}

$(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);
    });
});

function clickSubmitLink() {
    $(".submitLink").trigger("click");
}

function clickConfirmLink() {
    $(".confirmLink").trigger("click");
}


function checkInputZip() {
    var zipPart1 = document.getElementById("content:carInfoForm:zipCodePart1");
    var zipPart2 = document.getElementById("content:carInfoForm: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>");
}

