$(document).ready(function() {
    if ($('#tyre-finder-toggle').length > 0) {
        if ($.browser.msie) {
            $('body').append('<iframe id="tyrefinderhelper" style="position: absolute;display: none;visibility: hidden;z-index: 0;" src="" scrolling="no" frameborder="0"></iframe>');
//            $('#find-your-tyre').css('position', 'relative').css('z-index', '1');
            $('#find-your-tyre .tyre-finder-criteria ul.tyre-finder-form').css('position', 'relative');
            $('#find-your-tyre').css('z-index', '1');
            $('#tyre-finder-wrap').css('position', 'relative').css('z-index', '2');
        }
        $('#tyre-finder-toggle .show').click(function() {
            $('#tyre-finder-toggle').animate({marginTop:'0px'}, 'fast', 'linear', function() {
                $('#tyre-finder-wrap').slideDown('slow');
                if ($.browser.msie) {
                    $('#tyrefinderhelper').css('display', 'block');
                    $('#tyrefinderhelper').css('left', $('#find-your-tyre').offset().left);
                    $('#tyrefinderhelper').css('top', $('#find-your-tyre').offset().top);
                    $('#tyrefinderhelper').css('width', $('#find-your-tyre').css('width'));
                    $('#tyrefinderhelper').css('height', $('#find-your-tyre').height() + 2);
                }
            }).removeClass('closed');
            return false;
        });
        $('#tyre-finder-toggle .hide').click(function() {
            if ($.browser.msie) {
                $('#tyrefinderhelper').slideUp('normal');
            }
            $('#tyre-finder-wrap').slideUp('slow', function() {
                if ($.browser.msie) {
                    $('#tyrefinderhelper').css('display', 'none');
                }
                //$('#tyre-theme #tyre-finder-toggle, #tyre-results-page #tyre-finder-toggle').animate({marginTop:'-37px'}, 'fast', 'linear');
            });
            $('#tyre-finder-toggle').addClass('closed');
            return false;
        });
    } else if ($('#tyre-dealer-finder').length > 0) {
        refreshTyreFinderFormHomepage('');
        $('#tyre-finder-type a').click(function() {
            var href = $(this).attr('href');
            $('#tyre-finder-action .action-type').hide();
            $('#action-type-id').val(href.replace('#', ''));
            $(href.substr(href.indexOf('#'))).show();
            $('#tyre-finder-type li').removeClass('active');
            $(this).parent('li').addClass('active');
            if (href == "#by-size") {
                refreshTyreFinderFormHomepage('');
                $('.slct-tyrefinder').change(function(u) {
                    refreshTyreFinderFormHomepage(u.target.id);
                });
            }
            if (href == "#by-car") {
                $("#car-model, #car-brand, #accept-conditions").change(function() {
                    stateSelectBoxesChanges();
                });
                fillBrands();
                $('#not_agree_conditions').click(function() {
                    $('#not_agree_conditions_step').slideDown();
                    return false;
                });
            }
            window.location.hash = "find-" + href.replace('#', '');
            return false;
        });
        if (window.location.href.indexOf("#") != -1) {
            var href = window.location.href.split("#")[1];
            href = href.replace('find-', '');
            $('#tyre-finder-action .action-type').hide();
            $('#action-type-id').val(href);
            $("#" + href).show();
            $('#tyre-finder-type li').removeClass('active');
            $("a[href='#" + href + "']").parent('li').addClass('active');
            if (href == "by-size") {
                refreshTyreFinderFormHomepage('');
                $('.slct-tyrefinder').change(function(u) {
                    refreshTyreFinderFormHomepage(u.target.id);
                });
            }
            if (href == "by-car") {
                $("#car-model, #car-brand, #accept-conditions").change(function() {
                    stateSelectBoxesChanges();
                });
                fillBrands();
                $('#not_agree_conditions').click(function() {
                    $('#not_agree_conditions_step').slideDown();
                    return false;
                });
            }
        }
    }

});


///=======================================================  Tire Finder Form Section


$.extend({
    getUrlParams: function() {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    },
    getUrlParam: function(name) {
        if ($.getUrlParams()[name] === undefined) {
            return "";
        } else {
            return $.getUrlParams()[name];
        }
    }
});

function restoreSelectedForCompare() {
    var tokens = $.getUrlParam('id').split(',');
    for (var i = 0; i < tokens.length; i++) {
        $("#tyre-finder-check-tyre-" + tokens[i]).attr('checked', true);
    }
}


function getSearchObject(last, search) {

    var searchObject = {
        vehicleType : getVehicleType(),
        productGroups : [],
        seasons : [],
        userId : getUserId()
    };

    if (last) {
        searchObject.last = last;
    }

    searchObject.result = search || ($("#tyre-finder-tablewrap").length > 0 && $("#tyre-finder-tablewrap").is(":visible"));

    //add seasons
    $('.season-chck').each(function() {
        if ($(this).is(':checked')){
            searchObject.seasons.push(this.id);
		}
    });

    //add product groups
    $('.product-group-chck').each(function() {
        if ($('#' + this.id).is(':checked'))
            searchObject.productGroups.push(this.id);
    });

    //add technologies
    $('.chck-tyrefinder').each(function() {
        if ($('#' + this.id).is(':checked'))
            searchObject[this.id] = true;
    });

    //add sizes
    $('.slct-tyrefinder').each(function() {
        searchObject[this.name] = $('#' + this.id).val();
    });

    return searchObject;
}

function getVehicleType() {
    if (typeof(product_group) !== 'undefined') {
        return product_group;
    } else {
        return 'homepage';
    }
}

function clearSelectTF(id) {
    removeAllOptions("#" + id);
    addOptions("#" + id, [
        {
            name: "",
            id: 0
        }
    ], "id", "name");

    $("#" + id).attr("disabled", true);
}

function sendSubmit(id) {
    $('#product-group').val(id);
    if ($('#tyre_finder_homepage_form').length > 0) { //on hmepage
        $('#tyre_finder_homepage_form').submit();
    } else { //not on homepage
        alert("go to :" + id + "!!!!");
    }
}

function createPGBox(key, value, last, url) {
    var box = '<div class="typewrap ' + last + '">';
    box += '    <div class="type-big">';

    if (!url) {
        box += '        <a onclick="sendSubmit(\'' + key + '\');" href="#">';
    } else {
        box += '        <a href="' + url + '">';
    }
    box += '            <span class="typeimg typeimg-' + key + '">&nbsp;</span>';
    box += '            <span class="typetxt">' + value + '</span>';
    box += '        </a>';
    box += '    </div>';
    box += '</div>';
    return box;
}


function generateTableByName(result) {
    var content = '<ul class="lined">';
    for (var i = 0; i < result.length; i++) {
        content += '<li';
        content += (i == result.length) ? " last " : "";
        content += '><em><a href="' + result[i].url + '">' + result[i].name + '</a></em></li>';
    }
    content += '</ul>';
    $("#by-name-result-table-content").html(content);
}

function addProductGroupBox(pgroups, max) {
    if (pgroups.length > max && $('#product-group')) {
        $('#product-group').val("clear");
        var boxes = '';
        for (var i = 0; i < pgroups.length; i++) {
            boxes += createPGBox(pgroups[i].id, pgroups[i].name, ((i == pgroups.length) ? "last" : ""), (max == -1) ? themeUrls[pgroups[i].id] : null);
        }
        if ($('#by-size-switch-productgroup-content'))
            $('#by-size-switch-productgroup-content').html(boxes);
    }
}

function checkProductGroupCount(count) {
    if (count.length == 1) {
        if ($('#product-group'))
            $('#product-group').val(count[0].id);
        //$('#by-size-notice').hide();
        if ($('#by-size-productgroup'))
            $('#by-size-productgroup').html((createPGBox(count[0].id, count[0].name, "last"))).show();
    } else {
        if ($('#product-group'))
            $('#product-group').val("clear");
        if ($('#by-size-productgroup'))
            $('#by-size-productgroup').html("").hide();
        //$("#by-size-notice").show("slow");
        addProductGroupBox(count, 1);
    }
    return false;
}

function submitSizeForm(productGroup) {
    $("#productGroup").val(productGroup);
    $("#search-by-size").submit();
}

function generateProductGroupList(productGroups) {
    var result = "<ul>";
    $.each(productGroups, function() {
        result += "<li>";

        result += "<a href='#' onclick=\"submitSizeForm('" + this.id + "');\" class=\"sz-" + this.id + "\">" + this.name + "</a>";

        result += "</li>";
    });

    result += "</ul>";

    $("#by-size-productgroup").html(result);
}

function fillSelectTF(id, result) {
    var valueSelected = $("#" + id).val();
    clearSelectTF(id);

    addOptions("#" + id, result);
    $("#" + id).val(valueSelected);
    $("#" + id).attr("disabled", false);
    updateCustomSelect(id);
    $("#" + id + "-loading").hide();
    $("#" + id + "-count").show();
}

function fillSelectTFHomepage(id, result) {
    var valueSelected = $("#" + id).val();
    clearSelect(id);
    addOptions("#" + id, result);
    $("#" + id).attr("disabled", false);
    $("#" + id).val(valueSelected);
    updateCustomSelect(id);
    $("#" + id).resetSS();
    hideLoading(id);
}

function setLoadingHomepage(fLoading) {
    if (fLoading) {
        $('#vsize .loading').show();
    } else {
        $('#vsize .loading').hide();
    }
}

function setLoading(loading, field) {
    if (field && field.length > 0) {
        if (field == "size") {
            $(".slct-tyrefinder").each(function() {
                if (loading) {
                    $('#' + this.id + "-loading").css("display", "inline");
                    $('#' + this.id + '-count').hide();
                } else {
                    $('#' + this.id + "-loading").hide();
                    $('#' + this.id + '-count').show();
                }
            });
        }
        if (loading) {
            $('#' + field + "-loading").css("display", "inline");
            $('#' + field + '-count').hide();
        } else {
            $('#' + field + "-loading").hide();
            $('#' + field + '-count').show();
        }
    }
}


function setCheckboxCount(id, count) {

    $("#" + id + "-count").text("(" + count + ")");
    $("#" + id).attr("disabled", false);
    $("#" + id + "-loading").hide();
    $("#" + id + "-count").show();
}
function stateTyreFinderBoxesChanges() {
    var width = $("#tyre-width").val();
    var height = $("#profile-height").val();
    var rim = $("#rim-size").val();

    if (width != 0 || height != 0 || rim != 0) {
        $("#by-size-button").removeAttr("disabled");
        $("#by-size-button").each(function() {
            $(this).attr("class", this.className.replace("button-gradient-disabled", "button-gradient-blue"));
        });
        return true;
    } else {
        $("#by-size-button").attr("disabled", "disabled");
        $("#by-size-button").each(function() {
            $(this).attr("class", this.className.replace("button-gradient-blue", "button-gradient-disabled"));
        });
        return false;
    }
}

function refreshTyreFinderFormHomepage(currentField) {
    if (currentField && currentField.length > 0) {
        setLoading(true, currentField);
    } else {
        setLoadingHomepage(true);
    }

    var so = getSearchObject();
    tyrefinder.getSizesBySearchObjectHomepage(so, function(result) {

        fillSelectTFHomepage("tyre-width", result.size['tyre-width']);
        fillSelectTFHomepage("profile-height", result.size['profile-height']);
        fillSelectTFHomepage("rim-size", result.size['rim-size']);

        if (result.productGroups && result.productGroups.length == 1) {
            $("#productGroup").val(result.productGroups[0].id);
        }

        generateProductGroupList(result.productGroups);

        stateTyreFinderBoxesChanges();
    });
}

function manageTyreFinderOption(id, isAdded) {
    if (isAdded) {
        var html = addOptionBox(id);
        $('.veh-type-option').after(html);
        //refreshTyreFinderForm(false, id);
        refreshTyreFinderFormSimple(false, id); //WEB-1180
    } else {
        $('#' + id + '-option-wrap').remove();
        var temp = id.substr(0, id.length - id.indexOf("-option"));
        $("#" + temp).val(0);
        clearTyreFinderElement(id);
        //refreshTyreFinderForm(false, id);
        refreshTyreFinderFormSimple(false, id); //WEB-1180
    }
    if (id == "clear-option") {
        $('.regular-option').remove();
        clearTyreFinderForm();
        //refreshTyreFinderForm(false, id);
        refreshTyreFinderFormSimple(false, id); //WEB-1180
    }
}

function tyrefinderStateChanged() {
    var empty = $(".chck-tyrefinder:checked, .season-chck:checked, .product-group-chck:checked").length == 0
            && $(".slct-tyrefinder option[value!='0']:selected").length == 0;

    if (empty) {
        $("#clear-option-wrap").hide();
    } else {
        $("#clear-option-wrap").show();
    }
}

function addOptionBox(id) {
    tyrefinderStateChanged();
    return "<li class='regular-option' id='" + id + "-option-wrap'>" +
            "<div onclick=\"manageTyreFinderOption('" + id + "', false);\" class='regular-option-box'>" +
            "<a id='" + id + "-option' href='javascript:void(0);'>" + js_translate[id] + ($('#' + id).is(':checkbox') ? '' : ':' + $("#" + id).val()) + "</a>" +
            "</div>" +
            "</li>";
}

function addOptionsBoxes(id) {
    var retHtml = '';
    if ($("#" + id).is(':checked')) {
        retHtml += addOptionBox(id);
    }
    return retHtml;
}

function getSizeValue(value, def) {
    return (!value || value == '0') ? def : value;
}

function generateSizeLine() {
    var width = getSizeValue($("#tyre-width").val(), "-");
    var height = getSizeValue($("#profile-height").val(), "-");
    var rim = getSizeValue($("#rim-size").val(), "-");
    var speed = getSizeValue($("#speed-index").val(), "");
    var load = getSizeValue($("#load-index").val(), "-");
    if ((width == "-") && (height == "-") && (rim == "-") && (speed == "")) {
        return "";
    } else {
        return width + "/" + height + " R" + rim + speed;
    }
}

function addSizesOptions() {
    if (generateSizeLine() != "") {
        return '<li class="regular-option" id="sizes-option-wrap"><div onclick=\'manageTyreFinderOption("size", false);\' class="regular-option-box"><a id="sizes-option" href="javascript:void(0);">' + js_translate["size"] + ":" + generateSizeLine() + '</a></div></li>';
    } else {
        return "";
    }

}

function generateOptionsLine() {

    var html = '';

    $(".season-chck, .product-group-chck, .chck-tyrefinder").each(function() {
        html += addOptionsBoxes(this.id);
    });

    html += addSizesOptions();

    $('.regular-option').remove();
    $('.veh-type-option').after(html);
}


function clearTyreFinderForm() {
    $('.chck-tyrefinder, .season-chck, .product-group-chck').attr('checked', false);
    $(".slct-tyrefinder option[value='0']").attr('selected', 'selected');
}

function clearTyreFinderElement(elemId) {
    tyrefinderStateChanged();
    if (elemId != "size") {
        if ($('#' + elemId).is(':checkbox')) {
            $('#' + elemId).attr('checked', false);
        } else {
            $('#' + elemId).val("0");
        }
    } else {
        clearTFSizes();
    }
}

function clearTFSizes() {
    $(".slct-tyrefinder").each(function() {
        clearSelectTF(this.id);
        updateCustomSelect(this.id);
    });
}

var batch;

function refreshTyreFinderForm(doSearch, lastFieldId) {
    refreshTyreFinderFormMain(doSearch, lastFieldId, false);
}

function refreshTyreFinderFormSimple(doSearch, lastFieldId) {
    refreshTyreFinderFormMain(doSearch, lastFieldId, true);
}

function processTireFinderObject(result, simple) {

    //fill count for selectboxes
    $(".slct-tyrefinder").each(function() {
        fillSelectTF(this.id, result.size[this.id]);
    });

    //fill count for checkboxes
    $(".season-chck, .product-group-chck, .chck-tyrefinder").each(function() {
        setCheckboxCount(this.id, '0');
    });

    //update result table
    if (result.result) {
        $('#global-size').show();
        $('#global-size').html("(" + result.global + ")");

        processTyreFinderResult(result.result);
    } else {
        $('#global-size').hide();
    }

    //shop popup if no sizes
    if (result.productGroups) {
        addProductGroupBox(result.productGroups, -1);
        showSizeAttention();
    }

    //show error
    if (result.unchecked) {
        var error = "";
        jQuery.each(result.unchecked, function(index, value) {
            var last = index == (result.unchecked.length - 1);

            $('#' + value).removeAttr("checked");
            $('#' + value + '-option-wrap').remove();
            error += js_translate[$('#' + value)[0].name] + (!last ? ", " : "");
        });

        showCriteriaError(error);
    }

    tyrefinderStateChanged();
}

function refreshTyreFinderFormMain(doSearch, lastFieldId, simple) {
    if (doSearch) {
        var $tips = $('#tips').clone();
        $('#tips').hide();
        if ($('#tyre-theme-side #tips').length == 0) {
            $('#tyre-theme-side').append($tips);
            $('#tyre-theme-side #tips').width(172);
            $('#tyre-theme-side #tips .tipwrap').css({'margin':'0', 'clear':'left'});
        }
    }
    if (typeof tyreToCompare != 'undefined') {
        tyreToCompare = Array();
    }
    setLoading(true, lastFieldId);
    var so = getSearchObject(lastFieldId, doSearch);

    //abort previous batch
    DWREngine._abortRequest(batch);
    batch = null;

    //start new batch
    DWREngine.beginBatch();
    batch = DWREngine._batch;

    if (simple) {
        tyrefinder.getSizesBySearchObjectSimple(so, function(result) {
            processTireFinderObject(result, true);
        }, {handleError : function(message, ex) {
        }});
    } else {
        tyrefinder.getSizesBySearchObject(so, function(result) {
            processTireFinderObject(result, false);
        }, {handleError : function(message, ex) {
        }});
    }
    //end batch
    DWREngine.endBatch();
}

function getTyreFinderResult() {
    var so = getSearchObject();
    tyrefinder.getTyreFinderResult(so, function(result) {
        $('#global-size').show();
        $('#global-size').html("(" + result.length + ")");
        processTyreFinderResult(result);
    });
}

function processTyreFinderResult(result) {
    var $tips = $('#tips').clone();
    $('#tips').hide();
    if ($('#tyre-theme-side #tips').length == 0) {
        $('#tyre-theme-side').append($tips);
        $('#tyre-theme-side #tips').width(172);
        $('#tyre-theme-side #tips .tipwrap').css({'margin':'0', 'clear':'left'});
    }
    generateOptionsLine();
    stateChanged(result);
    if (result.length == 0) {
        hideCompare();
    } else {
        showCompare();
    }
}

function hideCompare() {
    if ($("#tyre-finder-results-head"))
        $("#tyre-finder-results-head").hide();
    if ($("#bottom-compare-btn"))
        $("#bottom-compare-btn").hide();
    if ($('#tyre-finder-tablewrap'))
        $('#tyre-finder-tablewrap').addClass('nowrap');
}

function showCompare() {
    if ($("#tyre-finder-results-head"))
        $("#tyre-finder-results-head").show();
    if ($("#bottom-compare-btn"))
        $("#bottom-compare-btn").show();
    if ($('#tyre-finder-tablewrap'))
        $('#tyre-finder-tablewrap').removeClass('nowrap');
    restoreSelectedForCompare();
}


//Find by car model  ==================================================================================================

function showLoading(id) {
    $("#" + id + "-loading").show();
}

function hideLoading(id) {
    $("#" + id + "-loading").hide();
}

function clearSelect(id) {
    removeAllOptions("#" + id);
    addOptions("#" + id, [
        {
            name: " ",
            id: 0
        }
    ], "id", "name");

    $("#" + id).attr("disabled", true);
    updateCustomSelect(id);
}

function fillSelect(id, result) {

    addOptions("#" + id, result, "id", "name");
    $("#" + id).attr("disabled", false);
    if ($("#"+id).attr("class")!=undefined){
	if ($("#"+id).attr("class").indexOf("replace-stylish-select")>=0){
        $("#" + id).resetSS();   
    } else{
        updateCustomSelect(id);
    }
}
    hideLoading(id);
}

var __models = {};
var __brand = 0;
var __model = 0;
var __car = 0;
var __modelDetail = 0;

function fillBrands() {

    var id = "car-brand";

    var val = $("#" + id).val();

    showLoading(id);
    clearSelect(id);
    car.findBrands(locale, function(result) {
        fillSelect(id, result);
        hideLoading(id);

        if (__brand && __brand != 0) {
            $("#" + id).val(__brand);
            updateCustomSelect(id);
            fillCars();
            __brand = 0;
        } else {
            if (val && val != 0) {
                $("#" + id).val(val);
                updateCustomSelect(id);
            }
        }

    }, {
        errorHandler:function(message) {
            hideLoading(id);
        }
    });
}

function clearCars() {
    clearSelect("car-model");
    clearModels();
}

function fillCars() {

    var id = "car-model";

    var crazyId = "car-brand";

    var brand = $("#car-brand").val();

    if (brand > 0) {
        showLoading(crazyId);
        clearSelect(id);
        car.findCars(brand, function(result) {
            fillSelect(id, result);
            hideLoading(crazyId);
            if (__car && __car != 0) {
                $("#" + id).val(__car);
                updateCustomSelect(id);
                __car = 0;
                fillModels();
            } else {
                clearModels();
            }

        }, {
            errorHandler:function(message) {
                hideLoading(crazyId);
            }
        });
    } else {
        clearCars();
    }
}

function saveModels(result) {
    __models = {};
    for (var i in result) {
        __models[result[i].id] = result[i];
    }
}

function getSelectedModel() {
    return __models[$("#car-version").val()];
}

function clearModels() {
    clearSelect("car-version");
    clearModelDetails();
}

function fillModels() {
    var id = "car-version";

    var crazyId = "car-model";

    var model = $("#car-model").val();

    if (model > 0) {
        showLoading(crazyId);
        clearSelect(id);
        car.findModels(model, function(result) {
            for (var i = 0; i < result.length; i++) {
                if (result[i].name.substring(result[i].name.length - 1, result[i].name.length) == '-') {
                    result[i].name = result[i].name.substring(0, result[i].name.length - 1);
                }
            }
            saveModels(result);
            fillSelect(id, result);
            hideLoading(crazyId);

            if (__model && __model != 0) {
                $("#" + id).val(__model);
                updateCustomSelect(id);
                __model = 0;
                fillModelDetails();
            } else {
                clearModelDetails();
            }

        }, {
            errorHandler:function(message) {
                hideLoading(crazyId);
            }
        });

    } else {
        clearModels();
    }
}

function clearModelDetails() {
    clearSelect("engine-type");
}

function fillModelDetails() {
    var id = "engine-type";

    var crazyId = "car-version";

    var version = $("#car-version").val();

    if (version > 0) {
        showLoading(crazyId);
        clearSelect(id);
        car.findModelDetails(version, function(result) {
            fillSelect(id, result);
            hideLoading(crazyId);

            if (__modelDetail && __modelDetail != 0) {
                $("#" + id).val(__modelDetail);
                updateCustomSelect(id)();
                __modelDetail = 0;
            }

        }, {
            errorHandler:function(message) {
                hideLoading(crazyId);
            }
        });
    } else {
        clearModelDetails();
    }
}

function updateCustomSelect(id){
    if ($("#"+id).attr("class")!=undefined){
	    if ($("#"+id).attr("class").indexOf("replace-stylish-select")>=0){
	        $("#" + id).resetSS();   
	    } else{
	        $("#" + id).updateCustomComboBox();
	    }
	}
}

