var docksStores = {};

$(document).ready(function() {
    if ($.browser.msie) {
        Array.prototype.indexOf = function(k) {
            var len = this.length;
            for (i = 0; i < len; i++) {
                if (this[i] == k) {
                    return i;
                }
            }
            return -1;
        };
    }

    /*
     if($('#mtop').is('div')){
     setMtop();
     }
     */
    if($('#form_ordini').length){
        modtable_ordini();
         $('#form_ordini').submit(function(e){
                if(checkform_ordini()){
                    e.preventDefault();
                }
        });
        var $radio=$('#form_ordini').find('input:radio');
         $radio.click(function(){
             if($(this).attr('value')=='NO'){
               default_tessera=false;
             }else{default_tessera=true;}
         });

    }
    if ($('#aperture_str').is('div')) {
        $('#aperture_str').corner();
    }
    if ($('#tab_orario').is('table')) {
        $('#rounded_sx').corner('tl,bl 5px');
        $('#rounded_dx').corner('tr,br 5px');
    }
    if ($('#btn_type_vol').is('div')) {
        setvolantini();
    }
    if ($('#btn_os').is('div')) {
        setorari();
    }
    if ($('.toreset').is('input')) {
        resetField();
    }
    if ($('#map_canvas').is('div')) {
        startmap()
    }
    if ($('#browse_volantino').is('div')) {
        setVolantini()
    }
    if ($('#el_reparti').is('ul')) {
        handleDepartments();
    }
    if ($('#select_els_prods').is('div')) {
        taxonomy = new Taxonomy("#select_els_prods");
        filtri.init();
    }
    if ($('.pager').is('div')) {
        handleProductsListNav();
    }
    if ($('.form-table').is('table')) {
        setClassesForm();
    }
    if ($('#el_prodotti').is('ul')) {
        mng_listprod();
    }
    if ($('#form_docks').is('form')) {
        checkForm();
    }
    if ($('#productBreadcrumb').is('span')) {
        handleProductBreadcrumb();
    }
    if ($('.faq').is('ul')) {
        faq.init();
    }
    if ($('#btn_login').is('input')) {
        handlePasswordLabel();
    }
    if ($('.pulsante_rounded').is('div')) {
        $('.pulsante_rounded>a').corner('5px');
    }
    if($('#c_bnews').length){
        bn.init();
    }
    handleMyDocksBox();
    handleToActivationForm();

    var storesJsonUrl = appRoot + "storelocator.json";
    $.ajax({
        type: "POST",
        url: storesJsonUrl,
        success: function(data) {
            docksStores = data;
            handleMyDocksStore(docksStores);
        },
        dataType: "json"
    });
});




var bn={
    init : function(){
        $('#c_bnews>ul').totemticker({
            row_height  :   '20px',
            mousestop	:	true,
            speed       :   800,
            interval    :   3500
        });

    }
}




var default_tessera=true;
function checkform_ordini(){
         var errors=false;
         var $fields=$('#form_ordini').find('.webform_table input');
         $fields.each(function(){
             if($(this).attr('value')==''){
                 if($(this).attr('name')=='InputField-3'&&default_tessera==false){
                      $(this).css({border:'solid 1px #d6d6d6'});
                 }else{
                 $(this).css({border:'solid 1px red'});
                 errors=true;
                 $('#errors').show();
                 }
             }
             else{
                  $(this).css({border:'solid 1px #d6d6d6'});
             }
         });
        return errors;
}

function modtable_ordini(){
    var tr_table=$('#form_ordini').find('td.webform_field_table').html();

    $('#form_ordini').find('.webform_label_table').parent('tr').html('')
    var form_button= $('#form_ordini').find('td.webform_button').html();
    $('#form_ordini').find('.webform_button').parent('tr').html('');
    var tab_order='<table id="ordini"><tr><td>'+tr_table+'</tr></td><tr><td>'+form_button+'</td></tr></table>';
    $('#form_ordini').append(tab_order);
}

/*
 Thanks to http://www.electrictoolbox.com/jquery-toggle-between-password-text-field/
 */
function handlePasswordLabel() {
    $('#password-clear').show();
    $('#password-password').hide();

    $('#password-clear').focus(function() {
        $('#password-clear').hide();
        $('#password-password').show();
        $('#password-password').focus();
    });
    $('#password-password').blur(function() {
        if ($('#password-password').val() == '') {
            $('#password-clear').show();
            $('#password-password').hide();
        }
    });
}

var faq = {
    prevFaq : '',
    init : function() {
        $('.faq').find('.question').each(function(i) {
            $(this).attr('id', 'faq_' + i);
            $(this).click(function() {
                var id = $(this).attr('id');
                faq.show(id);
                faq.prevFaq = id;
                return false;
            });
        });
    },
    show:function(id) {
        if (faq.prevFaq == id && $('#' + faq.prevFaq).next('.answer').css('display') == 'block') {
            faq.hide(id);
        }
        else if (faq.prevFaq == id && $('#' + faq.prevFaq).next('.answer').css('display') == 'none') {
            $('#' + id).next('.answer').show();
        }
        else if (faq.prevFaq != id) {
            $('#' + id).next('.answer').show();
            faq.hide(id);
        }
    },
    hide:function(id) {
        if (faq.prevFaq != '') {
            $('#' + faq.prevFaq).next('.answer').hide();

        }
    }
}

function handleMyDocksBox() {
    if ($('#f_tessera').is('input')) {
        var tessera = $('#f_tessera').val();
        $('#f_tessera').click(function() {
            $(this).val('');
        });
        $('#f_tessera').blur(function() {
            if ($(this).val() == '') {
                $(this).val(tessera);
            }
        });
    }
    if ($("input[name='username']").is('input')) {
        var username = $("input[name='username']").val();
        $("input[name='username']").click(function() {
            $(this).val('');
        });
        $("input[name='username']").blur(function() {
            if ($(this).val() == '') {
                $(this).val(username);
            }
        });
    }
}

function handleToActivationForm() {
    var trim = function(text) {
        return text.replace(/^\s+|\s+$/g, "");
    };

    var zeroPad = function(text, size) {
        var newText = trim((null == text) ? '' : text);
        var offset = size - newText.length;

        if (offset > 0) {
            for (var i = offset; i > 0; --i) {
                newText = "0" + newText;
            }
        }

        return newText;
    };

    $("form[name=toactivationform]").submit(function() {
        var tessera = $("#f_tessera");

        tessera.val(zeroPad(tessera.val(), 8));
        return true;
    });
}

function checkForm() {
    $.validator.addMethod("cPrivacy", function(value, element) {
        return ($(element).attr('type') == 'radio') &&
                ($(element).attr('checked') == true) &&
                (value == 'S');
    }, "<label class=\"error\" id=\"error_privacy\">E\' obbligatorio acconsentire al trattamento dei dati</label>");

    $.validator.addClassRules("privacy", {cPrivacy: true});
    $.extend($.validator.messages, {required: "Questo campo &egrave; obbligatorio"});

    $("#form_docks").validate({
        errorContainer: "#msg",
        rules : {
            privacy : { cPrivacy : true },
            pwd:{
                required: true,
                minlength: 4
            },
            pwd2: {
                required: true,
                minlength: 4,
                equalTo: "#pwd"
            },
            partita_iva: {
                minlength: function(element) {
                    if ($("#nazione").val() == "IT") return 11;
                    else return 0;
                },
                required: function(element) {
                    return $("#nazione").val() == "IT";
                }
            },
            mail: {
                required: true,
                email: true
            }
        },
        highlight: function(element, errorClass) {
            if ($(element).attr('type') == 'radio') {
                $(element).parent().addClass('error');
            }
            else {
                $(element).addClass('error');
            }
        },
        unhighlight: function(element, errorClass) {
            if ($(element).attr('type') == 'radio') {
                $(element).parent().removeClass('error');
            }
            else {
                $(element).removeClass('error');
            }
        },
        invalidHandler: function(e, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                $("#msg").show();
            }
            else {
                $("#msg").hide();
            }
        },
        messages: {
            mail: {
                required: "Questo campo &egrave; obbligatorio",
                email: "Inserire una email valida"
            },
            partita_iva: {
                required: "Questo campo &egrave; obbligatorio",
                minlength: "Inserire almeno 11 caratteri"
            },
            pwd: {
                required: "Questo campo &egrave; obbligatorio",
                minlength: "Inserire almeno 4 caratteri"
            },
            pwd2: {
                required: "Questo campo &egrave; obbligatorio",
                equalTo: "Password e Conferma password non coincidono",
                minlength: "Inserire almeno 4 caratteri"
            }
        }
    });
}

function newStoreOption(value, text) {
    var option = $("<option></option>");
    option.attr("value", value);
    option.html(text);

    return option;
}

function createStoreOptionsByStoreType(stores, storeType, optionValue) {
    var allDocksStores = [];

    var docksmarkets = stores[storeType];
    for (var regionName in docksmarkets) {
        var regions = docksmarkets[regionName];
        for (var districtName in regions) {
            var districts = regions[districtName];
            for (var locationName in districts) {
                var location = districts[locationName];
                var value = location[optionValue];
                if (value != "") {
                    allDocksStores.push({storeName:locationName, storeValue: value});
                }
            }
        }
    }

    allDocksStores.sort(function(left, right) {
        var leftName = left["storeName"];
        var rightName = right["storeName"];

        return (leftName == rightName) ? 0 : (leftName > rightName ? 1 : -1);
    });

    var options = [];

    $.each(allDocksStores, function(index, element) {
        options.push(newStoreOption(element["storeValue"], element["storeName"]));
    });

    return options;
}

function handleMyDocksStore(allDocksStores) {
    if ($('#store_locator').is('div')) {
        stores.init(allDocksStores)
    }

    var myStoresSelect = $("#my_docks_store");

    if (!myStoresSelect.is("select")) {
        return;
    }

    myStoresSelect.empty();
    var options = createStoreOptionsByStoreType(allDocksStores, "docksmarket", "code");
    options.unshift(newStoreOption("", "Seleziona il Punto Vendita"));

    $(options).appendTo("#my_docks_store");

    var currentStoreCode = $("#currentStoreCode").text();
    try {
        myStoresSelect.val(currentStoreCode);
    } catch (ex) {
        /*  ie6 hack */
        setTimeout("$('#my_docks_store').val('" + currentStoreCode + "')", 1);
    }
    ;

    myStoresSelect.change(function() {
        var myFavouriteStoreJsonUrl = appRoot + "myfavouritestore.json";
        $.ajax({
            type: "POST",
            data: {myFavouriteStore : $(this).val()},
            url: myFavouriteStoreJsonUrl,
            success: function(data) {
                //TODO: gestire scenario store non esistente ...
                var myIper = $("#my_iper");
                var iperLink = myIper.find("a:first");

                iperLink.attr("href", data["link"]);
                iperLink.html("Docks Markert " + data["name"]);

                try {
                    $("#my_docks_store").val(data["code"]);
                } catch (ex) {
                    /* ie6 hack */
                    setTimeout("$('#my_docks_store').val('" + data["code"] + "')", 1);
                }
                ;
            },
            dataType: "json"
        });
    });
}

var stores = {
    componentSelectors  : ["#c_search_brand", "#c_search_com", "#btn_send"],
    getSelectedBrand    : function() {
        return $('#s_brand').val();
    },
    getSelectedLocation : function() {
        return $('#search_com').val();
    },
    getLocations        : function() {
        return stores.storeTypes[stores.getSelectedBrand()];
    },

    updateUI: function(componentId, hideForward) {
        var componentPos = stores.componentSelectors.indexOf(componentId);

        if (componentPos > -1) {
            var showComponent = componentPos + 1;
            var hideComponents = showComponent + 1;

            if ((showComponent >= 0) && (showComponent < stores.componentSelectors.length)) {
                var component = $(stores.componentSelectors[showComponent]);
                if (!hideForward) {
                    component.show();
                }
                else {
                    component.hide();
                }
            }
            for (var index = hideComponents; index < stores.componentSelectors.length; ++index) {
                var component = $(stores.componentSelectors[index]);
                component.hide();
            }
        }
    },

    init : function(allDocksStores) {
        this.storeTypes = { docksmarket: createStoreOptionsByStoreType(allDocksStores, "docksmarket", "href"),
            grossiper  : createStoreOptionsByStoreType(allDocksStores, "grossiper", "href") };

        $('#s_brand').change(function() {
            stores.fillOptions("#search_com", "Seleziona Comune", stores.getLocations());
            stores.updateUI('#c_search_brand', $(this).val() == '');
        });

        $('#search_com').change(function() {
            stores.updateUI('#c_search_com', $(this).val() == '');
        });

        $('#btn_send').click(function() {
            var storeHref = $('#search_com').val();
            if ("" != storeHref) {
                location.href = storeHref;
            }

            return false;
        });
    },
    fillOptions: function(selectId, firstOption, selectOptions) {
        var select = $(selectId);

        select.empty();
        selectOptions.unshift(newStoreOption("", firstOption));
        $(selectOptions).appendTo(select);
    }
}

function handleProductBreadcrumb() {
    $("#productBreadcrumb a").click(function() {
        var productBreadcrumbId = $(this).find(".productBreadcrumbId").text();
        var productBreadcrumbType = $(this).find(".productBreadcrumbType").text();

        if (productBreadcrumbId != "") {
            var form = $("#formRefineSearch");

            if (productBreadcrumbType == "PL") {
                form = $("#formProductsList");
                var rootFolder = form.find("input[name=rootFolder]");

                rootFolder.val(productBreadcrumbId);
            }
            else {
                var taxonomyId = form.find("input[name=taxonomyId]");
                var taxonomyTypeCode = form.find("input[name=taxonomyTypeCode]");

                taxonomyId.val(productBreadcrumbId);
                taxonomyTypeCode.val(productBreadcrumbType);
            }

            form.submit();
        }
        return false;
    });
}

var filtri = {
    init : function() {
        $('#select_els_prods li a').click(function() {
            filtri.show_els($(this).parents('ul'));

            return false;
        });
    },
    show_els : function(father) {
        filtri.hide_els(father);
        $(father).addClass('selected');
        $(father).find('li').show();
        $(father).css('background', "url('img/prodotti/bg_voci_btm.gif') no-repeat left bottom");
        $(father).find('li.label').css('background', "url('img/prodotti/bg_voci_top.gif') no-repeat left top");
    },
    hide_els : function(father) {
        selId = $(father).attr('id');
        $(".selected li").each(function() {
            if ($(this).attr('class') != 'on' && $(this).attr('class') != 'label') {
                $(this).hide();
            }
            if ($(this).attr('class') == 'label') {
                $(this).css('background', "url('img/prodotti/bg_filter_close.gif') no-repeat left top");
            }
        });

        $("#select_els_prods ul[id!=" + selId + "]").removeClass('selected');
        $("#select_els_prods ul[id!=" + selId + "]").css('background', 'none');
    }
}

function setClassesForm() {
    $('.form-table input[type="text"]').addClass('input_text');
    $('.form-table input[type="password"]').addClass('input_password');
    $('.form-table input[type="radio"]').addClass('input_radio');
    $('.form-table input[type="checkbox"]').addClass('input_checkbox');
    $('.form-table input[type="submit"]').addClass('input_submit');
}

var map;
function startmap() {
    var myLatlng = new google.maps.LatLng(pvdLatitude, pvdLongitude);
    var myOptions = {
        zoom: 14,
        center: myLatlng,
        mapTypeControl: true,
        mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
        navigationControl: true,
        navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    if (store_brand == 'docks') {
        var image = appRoot + 'system/modules/it.docksmarket.opencms.frontend/resources/img/stores/ico_store_docks.png';
    }
    else if (store_brand == 'gross') {
        var image = appRoot + 'system/modules/it.docksmarket.opencms.frontend/resources/img/stores/ico_store_gross.png';
    }

    var contentString =
            '<div class="c_info_store">' +
                    '<h1 class="firstHeading" class="firstHeading">' + $('#name_store').text() + '</h1>' +
                    '<div class="winContent">' +
                    '<p>' + $('#address_store').text() + '</p>' +
                    '<p>' + $('#telfax').text() + '</p>' +
                    '<div class="map_directions">' +
                    '<b>Indicazioni per arrivare a questo store: </b>' +
                    '<div class="form_directions"><form action="javascript:getDirections()">Indirizzo di partenza:' +
                    '<p><input type="text" size=40 maxlength=40 name="destutente" id="destutente" value="" /></p>' +
                    '<p><input value="Mostra indicazioni" type="submit" id="btn_getdirs"/></p></form>' +
                    '</div>' +
                    '</div>' +
                    '</div>' +
                    '</div>';


    var infowindow = new google.maps.InfoWindow({
        content: contentString
    });

    var marker = new google.maps.Marker({
        position: myLatlng,
        map: map,
        icon: image,
        title:"Docks Market"
    });

    /*open info store on pageload*/
    infowindow.open(map, marker);

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map, marker);
    });

    $('#btn_close_maptxt').click(function() {
        $('#map_txtdirections').hide();
        $('#map_canvas').width('756px');
    })
}

function getDirections() {
    var directionsService = new google.maps.DirectionsService();
    var direzione_pdv = new google.maps.DirectionsRenderer();
    var origin_utente = $('#destutente').val();
    var pdv_destinazione = new google.maps.LatLng(pvdLatitude, pvdLongitude);
    var request = {
        origin: origin_utente,
        destination: pdv_destinazione,
        travelMode: google.maps.DirectionsTravelMode.DRIVING,
        unitSystem: google.maps.DirectionsUnitSystem.METRIC,
        region: ".it"
    };
    directionsService.route(request, function(result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            direzione_pdv.setDirections(result);
        }
    });
    direzione_pdv.setMap(map);
    $('#map_canvas').width('506px');
    $('#map_txtdirections').show();
    direzione_pdv.setPanel(document.getElementById("map_txtdirections"));

}

function setVolantini() {
    if (volantino_brand == "docks") {
        $('#vol_docks').show();
        $('#vol_gross').hide();
    }
    else if (volantino_brand == "gross") {
        $('#vol_docks').hide();
        $('#vol_gross').show();
    }
}

function setorari() {
    $('#btn_orari>a').click(function() {
        $('#btn_orari').addClass('on');
        $('#btn_servizi').removeClass('on');
        $('#servizi_store').hide();
        $('#orari_elenco').show();
        return false;
    });
    $('#btn_servizi>a').click(function() {
        $('#btn_servizi').addClass('on');
        $('#btn_orari').removeClass('on');
        $('#orari_elenco').hide();
        $('#servizi_store').show();
        return false;
    });
}

function setvolantini() {
    $('#btn_docks>a').click(function() {
        $('#btn_docks').addClass('on');
        $('#btn_gross').removeClass('on');
        $('#vol_gross').hide();
        $('#vol_docks').show();
        return false;
    });
    $('#btn_gross>a').click(function() {
        $('#btn_gross').addClass('on');
        $('#btn_docks').removeClass('on');
        $('#vol_docks').hide();
        $('#vol_gross').show();
        return false;
    });
}

function resetField(el) {
    $('.toreset').each(function() {
        $(this).click(function() {
            $(this).val('');
        });
    });

}

function setMtop() {
    var wmtop = $('#mtop').width();
    gap = (790 - wmtop);
    $('#mtop').width(wmtop + gap)
}

function setvetrinehp() {
    $('.el_vetrina').each(function() {
        $(this).find('h3').corner('tl tr');
        $(this).corner();
    })
    $('.el_vetrina_wide').each(function() {
        $(this).find('h3').corner('tl tr');
        $(this).corner();
    })
}

var filtri = {
    init : function() {
        $('#select_els_prods li a').click(function() {
            filtri.show_els($(this).parents('ul'));
            return false;
        });
    },
    select : function(group) {
        if (group.is("ul")) {
            filtri.show_els(group);
        }
    },
    show_els : function(father) {
        filtri.hide_els(father);
        $(father).addClass('selected');
        $(father).find('li').show();
        $(father).css('background', "url('system/modules/it.docksmarket.opencms.frontend/resources/img/prodotti/bg_voci_btm.gif') no-repeat left bottom");
        $(father).find('li.label').css('background', "url('system/modules/it.docksmarket.opencms.frontend/resources/img/prodotti/bg_voci_top.gif') no-repeat left top");
    },
    hide_els : function(father) {
        selId = $(father).attr('id');
        $(".selected li").each(function() {
            if ($(this).attr('class') != 'on' && $(this).attr('class') != 'label') {
                $(this).hide();
            }
            if ($(this).attr('class') == 'label') {
                $(this).css('background', "url('system/modules/it.docksmarket.opencms.frontend/resources/img/prodotti/bg_filter_close.gif') no-repeat left top");
            }
        });

        $("#select_els_prods ul[id!=" + selId + "]").removeClass('selected');
        $("#select_els_prods ul[id!=" + selId + "]").css('background', 'none');
    }
}

/***** Selector *****/
Selector = function(containerId, optionIdPrefix, chooseNewItemDescription, onSelect) {
    this.init(containerId, optionIdPrefix, chooseNewItemDescription, onSelect);
}

Selector.prototype.init = function(containerId, optionIdPrefix, chooseNewItemDescription, onSelect) {
    this.container = $(containerId);
    this.optionIdPrefix = optionIdPrefix;
    this.chooseNewItemDescription = chooseNewItemDescription;
    this.onSelect = onSelect;
}

Selector.prototype.select = function(selectedIndex) {
    var thisSelector = this;
    this.container.find("li").each(function(index) {
        if (index == selectedIndex) {
            $(this).addClass("on");
            var taxonomyId = $(this).find("p.taxonomyId").text();
            thisSelector.onSelect(taxonomyId);
        }
        else {
            $(this).removeClass("on");
        }
    });
}

Selector.prototype.isEmpty = function() {
    return this.container.find("li").length <= 0;
}

Selector.prototype.fill = function(optionsCollection) {
    var newOptions = [];

    newOptions.push(this.newOption(this.chooseNewItemDescription));

    var thisSelector = this;
    if (optionsCollection.taxonomyLeaves) {
        $.each(optionsCollection.taxonomyLeaves, function(index, value) {
            newOptions.push(thisSelector.newOption(value["description"] + "<span><div class=\"productInfo\"><div class=\"productTotal\">Totale prodotti:</div><div class=\"productCount\">" + value["productCount"] + "</div></div></span>" + "<p class=\"taxonomyId\">" + value["taxonomyId"] + "</p>"));
        });
    }

    this.container.empty();
    $.each(newOptions, function(index, value) {
        var optionId = thisSelector.optionIdPrefix + "_" + index;

        var li = $("<li></li>");
        li.attr("id", optionId);

        if (index == 0) {
            li.addClass("label");
        }

        var item = $(this);

        if (index > 0) {
            item.click(function() {
                var currentItem = $(this);
                var parentContainer = currentItem.parent("li:first");
                if (!parentContainer.hasClass("on")) {
                    thisSelector.select(thisSelector.container.find("li").index(parentContainer));
                }

                return false;
            });
        }

        thisSelector.container.append(item);
        item.wrap(li);
    });
}

Selector.prototype.bind = function() {
    var thisSelector = this;

    this.container.find("li a").click(function() {
        var currentItem = $(this);
        var parentContainer = currentItem.parent("li:first");
        if (!parentContainer.hasClass("on")) {
            thisSelector.select(thisSelector.container.find("li").index(parentContainer));
        }

        return false;
    });
}

Selector.prototype.newOption = function(optionText) {
    var a = $("<a>" + optionText + "</a>");
    a.attr("href", "#");

    return a;
}

Selector.prototype.reset = function() {
    this.container.empty();
}

Selector.prototype.display = function(show) {
    this.container.css({display: show ? "block" : "none"});
}

Selector.prototype.openShortcut = function(optionsCollection) {
    // findShortcutId: nel caso in cui la lista delle classificazioni contenga un solo
    // elemento con un numero prodotti > 0
    var shortcutEnabled = true;
    var taxonomyIdCountGraterThanZero = [];

    if (optionsCollection.taxonomyLeaves) {
        $.each(optionsCollection.taxonomyLeaves, function(index, value) {
            var productCount = value["productCount"];
            if (productCount > 0) {
                taxonomyIdCountGraterThanZero.push(value["taxonomyId"]);
            }
        });
    }

    if ((shortcutEnabled) && (taxonomyIdCountGraterThanZero.length == 1)) {
        var shortcutId = taxonomyIdCountGraterThanZero[0];
        if ((null != shortcutId) && ("" != shortcutId)) {
            this.container.find("p.taxonomyId").each(function() {
                var taxonomyId = $(this).text();
                if (taxonomyId == shortcutId) {
                    $(this).parent("a:first").click();
                }
            });
        }
    }
}

/***** Taxonomy *****/
Taxonomy = function(containerId) {
    this.init(containerId);
}

Taxonomy.prototype.init = function(containerId) {
    this.taxonomyJsonUrl = appRoot + "taxonomybrowser.json";
    this.container = $(containerId);

    var thisTaxonomy = this;

    this.saveLastChoice = function(choiceId) {
        var form = $("#formProductsListQuery");
        var rootFolder = form.find("input[name=rootFolder]");

        rootFolder.val(choiceId);
    }

    this.group = new Selector(this.container.find("#els_gruppo"), "list_gruppo", "Seleziona GRUPPO", function(selectedId) {
        thisTaxonomy.load("FM", selectedId, thisTaxonomy.familiy);
    });

    this.familiy = new Selector(this.container.find("#els_famiglia"), "list_fam", "Seleziona FAMIGLIA", function(selectedId) {
        thisTaxonomy.load("SF", selectedId, thisTaxonomy.subFamily);
    });

    this.subFamily = new Selector(this.container.find("#els_subfamiglia"), "list_subfam", "Seleziona SOTTOFAMIGLIA", function(selectedId) {
        var form = $("#formProductsListSFam");
        var rootFolder = form.find("input[name=rootFolder]");

        rootFolder.val(selectedId);

        form.submit();
    });

    this.selectors = [
        {typeCode: "GP", item: this.group},
        {typeCode: "FM", item: this.familiy},
        {typeCode: "SF", item: this.subFamily}
    ];

    var department = $("#currentDepartment").text();
    var taxonomyAlreadyLoaded = $("#taxonomyAlreadyLoaded").text();

    if (taxonomyAlreadyLoaded == "true") {
        this.group.bind();
        this.familiy.bind();
        this.subFamily.bind();

        filtri.select($("#select_els_prods .selected"));
        this.saveLastChoice($("#select_els_prods .on:last p.taxonomyId").text());

        $.each(this.selectors, function(index, element) {
            element.item.display(!element.item.isEmpty());
        });
    }
    else {
        if (department != "") {
            this.load("GP", department, this.group);
        }
    }
}

Taxonomy.prototype.load = function (taxonomyTypeCode, taxonomyRequestId, selector) {
    this.reset(taxonomyTypeCode);

    var thisTaxonomy = this;
    $.ajax({
        type: "POST",
        url: this.taxonomyJsonUrl,
        data: {"taxonomyTypeCode": taxonomyTypeCode, "taxonomyRequestId" : taxonomyRequestId},
        success: function(data) {
            selector.fill(data);
            filtri.init();
            filtri.select(selector.container);
            thisTaxonomy.saveLastChoice(taxonomyRequestId);
            selector.openShortcut(data)
        },
        dataType: "json"
    });
}

Taxonomy.prototype.reset = function(taxonomyTypeCode) {
    var doReset = false;
    $.each(this.selectors, function(index, element) {

        if (doReset) {
            element.item.reset();
            element.item.display(false);
        }
        else {
            doReset = (taxonomyTypeCode == element.typeCode);
            element.item.display(true);
        }
    });
}

function handleDepartments() {
    $("#el_reparti a").each(function() {
        var item = $(this);
        item.click(function() {
            var form = $("#formRefineSearch");
            var departmentId = form.find("input[name=departmentId]");
            var currentId = item.find("p.departmentId").text();

            if (currentId != "") {
                departmentId.val(currentId);
                form.submit();
            }
            return false;
        })
    });
}

function handleProductsListNav() {
    $(".pager a.pageSelector").click(function() {
        var currentPage = $(this).find("p:first").text();

        var form = $("#formProductsList");
        var pageNumber = form.find("input[name=pageNumber]");
        pageNumber.val(currentPage);
        form.submit();

        return false;
    });
}

function mng_listprod() {
    $('#el_prodotti li').corner("5px");
    $("span.desc_prodotto").corner("top 4px");
    $('#el_prodotti li.promo').each(function() {
        var img = $("<img></img>");
        img.attr("src", appRoot + "system/modules/it.docksmarket.opencms.frontend/resources/img/prodotti/promo.gif");
        img.addClass("img_promo");
        $(this).find('.img_prod').append(img);
    });
    $('#el_prodotti li').click(function() {
        location.href = $(this).find('a').attr('href');
    });
}

/*************************UTILS*************************/
/*!
 * jQuery corner plugin: simple corner rounding
 * Examples and documentation at: http://jquery.malsup.com/corner/
 * version 2.12 (23-MAY-2011)
 * Requires jQuery v1.3.2 or later
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * Authors: Dave Methvin and Mike Alsup
 */

/**
 *  corner() takes a single string argument:  $('#myDiv').corner("effect corners width")
 *
 *  effect:  name of the effect to apply, such as round, bevel, notch, bite, etc (default is round).
 *  corners: one or more of: top, bottom, tr, tl, br, or bl.  (default is all corners)
 *  width:   width of the effect; in the case of rounded corners this is the radius.
 *           specify this value using the px suffix such as 10px (yes, it must be pixels).
 */
;(function($) {

var style = document.createElement('div').style,
    moz = style['MozBorderRadius'] !== undefined,
    webkit = style['WebkitBorderRadius'] !== undefined,
    radius = style['borderRadius'] !== undefined || style['BorderRadius'] !== undefined,
    mode = document.documentMode || 0,
    noBottomFold = $.browser.msie && (($.browser.version < 8 && !mode) || mode < 8),

    expr = $.browser.msie && (function() {
        var div = document.createElement('div');
        try { div.style.setExpression('width','0+0'); div.style.removeExpression('width'); }
        catch(e) { return false; }
        return true;
    })();

$.support = $.support || {};
$.support.borderRadius = moz || webkit || radius; // so you can do:  if (!$.support.borderRadius) $('#myDiv').corner();

function sz(el, p) {
    return parseInt($.css(el,p))||0;
};
function hex2(s) {
    s = parseInt(s).toString(16);
    return ( s.length < 2 ) ? '0'+s : s;
};
function gpc(node) {
    while(node) {
        var v = $.css(node,'backgroundColor'), rgb;
        if (v && v != 'transparent' && v != 'rgba(0, 0, 0, 0)') {
            if (v.indexOf('rgb') >= 0) {
                rgb = v.match(/\d+/g);
                return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
            }
            return v;
        }
        if (node.nodeName.toLowerCase() == 'html')
            break;
        node = node.parentNode; // keep walking if transparent
    }
    return '#ffffff';
};

function getWidth(fx, i, width) {
    switch(fx) {
    case 'round':  return Math.round(width*(1-Math.cos(Math.asin(i/width))));
    case 'cool':   return Math.round(width*(1+Math.cos(Math.asin(i/width))));
    case 'sharp':  return width-i;
    case 'bite':   return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
    case 'slide':  return Math.round(width*(Math.atan2(i,width/i)));
    case 'jut':    return Math.round(width*(Math.atan2(width,(width-i-1))));
    case 'curl':   return Math.round(width*(Math.atan(i)));
    case 'tear':   return Math.round(width*(Math.cos(i)));
    case 'wicked': return Math.round(width*(Math.tan(i)));
    case 'long':   return Math.round(width*(Math.sqrt(i)));
    case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
    case 'dogfold':
    case 'dog':    return (i&1) ? (i+1) : width;
    case 'dog2':   return (i&2) ? (i+1) : width;
    case 'dog3':   return (i&3) ? (i+1) : width;
    case 'fray':   return (i%2)*width;
    case 'notch':  return width;
    case 'bevelfold':
    case 'bevel':  return i+1;
    case 'steep':  return i/2 + 1;
    case 'invsteep':return (width-i)/2+1;
    }
};

$.fn.corner = function(options) {
    // in 1.3+ we can fix mistakes with the ready state
    if (this.length == 0) {
        if (!$.isReady && this.selector) {
            var s = this.selector, c = this.context;
            $(function() {
                $(s,c).corner(options);
            });
        }
        return this;
    }

    return this.each(function(index){
        var $this = $(this),
            // meta values override options
            o = [$this.attr($.fn.corner.defaults.metaAttr) || '', options || ''].join(' ').toLowerCase(),
            keep = /keep/.test(o),                       // keep borders?
            cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]),  // corner color
            sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]),  // strip color
            width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10, // corner width
            re = /round|bevelfold|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dogfold|dog|invsteep|steep/,
            fx = ((o.match(re)||['round'])[0]),
            fold = /dogfold|bevelfold/.test(o),
            edges = { T:0, B:1 },
            opts = {
                TL:  /top|tl|left/.test(o),       TR:  /top|tr|right/.test(o),
                BL:  /bottom|bl|left/.test(o),    BR:  /bottom|br|right/.test(o)
            },
            // vars used in func later
            strip, pad, cssHeight, j, bot, d, ds, bw, i, w, e, c, common, $horz;

        if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR )
            opts = { TL:1, TR:1, BL:1, BR:1 };

        // support native rounding
        if ($.fn.corner.defaults.useNative && fx == 'round' && (radius || moz || webkit) && !cc && !sc) {
            if (opts.TL)
                $this.css(radius ? 'border-top-left-radius' : moz ? '-moz-border-radius-topleft' : '-webkit-border-top-left-radius', width + 'px');
            if (opts.TR)
                $this.css(radius ? 'border-top-right-radius' : moz ? '-moz-border-radius-topright' : '-webkit-border-top-right-radius', width + 'px');
            if (opts.BL)
                $this.css(radius ? 'border-bottom-left-radius' : moz ? '-moz-border-radius-bottomleft' : '-webkit-border-bottom-left-radius', width + 'px');
            if (opts.BR)
                $this.css(radius ? 'border-bottom-right-radius' : moz ? '-moz-border-radius-bottomright' : '-webkit-border-bottom-right-radius', width + 'px');
            return;
        }

        strip = document.createElement('div');
        $(strip).css({
            overflow: 'hidden',
            height: '1px',
            minHeight: '1px',
            fontSize: '1px',
            backgroundColor: sc || 'transparent',
            borderStyle: 'solid'
        });

        pad = {
            T: parseInt($.css(this,'paddingTop'))||0,     R: parseInt($.css(this,'paddingRight'))||0,
            B: parseInt($.css(this,'paddingBottom'))||0,  L: parseInt($.css(this,'paddingLeft'))||0
        };

        if (typeof this.style.zoom != undefined) this.style.zoom = 1; // force 'hasLayout' in IE
        if (!keep) this.style.border = 'none';
        strip.style.borderColor = cc || gpc(this.parentNode);
        cssHeight = $(this).outerHeight();

        for (j in edges) {
            bot = edges[j];
            // only add stips if needed
            if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) {
                strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
                d = document.createElement('div');
                $(d).addClass('jquery-corner');
                ds = d.style;

                bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);

                if (bot && cssHeight != 'auto') {
                    if ($.css(this,'position') == 'static')
                        this.style.position = 'relative';
                    ds.position = 'absolute';
                    ds.bottom = ds.left = ds.padding = ds.margin = '0';
                    if (expr)
                        ds.setExpression('width', 'this.parentNode.offsetWidth');
                    else
                        ds.width = '100%';
                }
                else if (!bot && $.browser.msie) {
                    if ($.css(this,'position') == 'static')
                        this.style.position = 'relative';
                    ds.position = 'absolute';
                    ds.top = ds.left = ds.right = ds.padding = ds.margin = '0';

                    // fix ie6 problem when blocked element has a border width
                    if (expr) {
                        bw = sz(this,'borderLeftWidth') + sz(this,'borderRightWidth');
                        ds.setExpression('width', 'this.parentNode.offsetWidth - '+bw+'+ "px"');
                    }
                    else
                        ds.width = '100%';
                }
                else {
                    ds.position = 'relative';
                    ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' :
                                        (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';
                }

                for (i=0; i < width; i++) {
                    w = Math.max(0,getWidth(fx,i, width));
                    e = strip.cloneNode(false);
                    e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
                    bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
                }

                if (fold && $.support.boxModel) {
                    if (bot && noBottomFold) continue;
                    for (c in opts) {
                        if (!opts[c]) continue;
                        if (bot && (c == 'TL' || c == 'TR')) continue;
                        if (!bot && (c == 'BL' || c == 'BR')) continue;

                        common = { position: 'absolute', border: 'none', margin: 0, padding: 0, overflow: 'hidden', backgroundColor: strip.style.borderColor };
                        $horz = $('<div/>').css(common).css({ width: width + 'px', height: '1px' });
                        switch(c) {
                        case 'TL': $horz.css({ bottom: 0, left: 0 }); break;
                        case 'TR': $horz.css({ bottom: 0, right: 0 }); break;
                        case 'BL': $horz.css({ top: 0, left: 0 }); break;
                        case 'BR': $horz.css({ top: 0, right: 0 }); break;
                        }
                        d.appendChild($horz[0]);

                        var $vert = $('<div/>').css(common).css({ top: 0, bottom: 0, width: '1px', height: width + 'px' });
                        switch(c) {
                        case 'TL': $vert.css({ left: width }); break;
                        case 'TR': $vert.css({ right: width }); break;
                        case 'BL': $vert.css({ left: width }); break;
                        case 'BR': $vert.css({ right: width }); break;
                        }
                        d.appendChild($vert[0]);
                    }
                }
            }
        }
    });
};

$.fn.uncorner = function() {
    if (radius || moz || webkit)
        this.css(radius ? 'border-radius' : moz ? '-moz-border-radius' : '-webkit-border-radius', 0);
    $('div.jquery-corner', this).remove();
    return this;
};

// expose options
$.fn.corner.defaults = {
    useNative: true, // true if plugin should attempt to use native browser support for border radius rounding
    metaAttr:  'data-corner' // name of meta attribute to use for options
};

})(jQuery);

/*
	Totem Ticker Plugin
	Copyright (c) 2011 Zach Dunn / www.buildinternet.com
	Released under MIT License
	--------------------------
	Structure based on Doug Neiner's jQuery plugin blueprint: http://starter.pixelgraphics.us/
*/
(function( $ ){

	if(!$.omr){
		$.omr = new Object();
	};

	$.omr.totemticker = function(el, options ) {

	  	var base = this;

		//Define the DOM elements
	  	base.el = el;
	  	base.$el = $(el);

	  	// Add a reverse reference to the DOM object
        base.$el.data("omr.totemticker", base);

	  	base.init = function(){
            base.options = $.extend({},$.omr.totemticker.defaultOptions, options);

            //Define the ticker object
           	base.ticker;

			//Adjust the height of ticker if specified
			base.format_ticker();

			//Setup navigation links (if specified)
			base.setup_nav();

			//Start the ticker
			base.start_interval();

			//Debugging info in console
			//base.debug_info();
        };

		base.start_interval = function(){

			//Clear out any existing interval
			clearInterval(base.ticker);

	    	base.ticker = setInterval(function() {

	    		base.$el.find('li:first').animate({
	            	marginTop: '-' + base.options.row_height
	            }, base.options.speed, function() {
	                $(this).detach().css('marginTop', '0').appendTo(base.$el);
	            });

	    	}, base.options.interval);
	    }

	    base.reset_interval = function(){
	    	clearInterval(base.ticker);
	    	base.start_interval();
	    }

	    base.stop_interval = function(){
	    	clearInterval(base.ticker);
	    }

		base.format_ticker = function(){

			if(typeof(base.options.max_items) != "undefined" && base.options.max_items != null) {

				//Remove units of measurement (Should expand to cover EM and % later)
				var stripped_height = base.options.row_height.replace(/px/i, '');
				var ticker_height = stripped_height * base.options.max_items;

				base.$el.css({
					height		: ticker_height + 'px',
					overflow	: 'hidden'
				});

			}else{
				//No heights were specified, so just doublecheck overflow = hidden
				base.$el.css({
					overflow	: 'hidden'
				})
			}

		}

		base.setup_nav = function(){

			//Stop Button
			if (typeof(base.options.stop) != "undefined"  && base.options.stop != null){
				$(base.options.stop).click(function(){
					base.stop_interval();
					return false;
				});
			}

			//Start Button
			if (typeof(base.options.start) != "undefined"  && base.options.start != null){
				$(base.options.start).click(function(){
					base.start_interval();
					return false;
				});
			}

			//Previous Button
			if (typeof(base.options.previous) != "undefined"  && base.options.previous != null){
				$(base.options.previous).click(function(){
					base.$el.find('li:last').detach().prependTo(base.$el).css('marginTop', '-' + base.options.row_height);
					base.$el.find('li:first').animate({
				        marginTop: '0px'
				    }, base.options.speed, function () {
				        base.reset_interval();
				    });
				    return false;
				});
			}

			//Next Button
			if (typeof(base.options.next) != "undefined" && base.options.next != null){
				$(base.options.next).click(function(){
					base.$el.find('li:first').animate({
						marginTop: '-' + base.options.row_height
			        }, base.options.speed, function() {
			            $(this).detach().css('marginTop', '0px').appendTo(base.$el);
			            base.reset_interval();
			        });
			        return false;
				});
			}

			//Stop on mouse hover
			if (typeof(base.options.mousestop) != "undefined" && base.options.mousestop === true) {
				base.$el.mouseenter(function(){
					base.stop_interval();
				}).mouseleave(function(){
					base.start_interval();
				});
			}

			/*
				TO DO List
				----------------
				Add a continuous scrolling mode
			*/

		}

		base.debug_info = function()
		{
			//Dump options into console
			//console.log(base.options);
		}

		//Make it go!
		base.init();
  };

  $.omr.totemticker.defaultOptions = {
  		message		:	'Ticker Loaded',	/* Disregard */
  		next		:	null,		/* ID of next button or link */
  		previous	:	null,		/* ID of previous button or link */
  		stop		:	null,		/* ID of stop button or link */
  		start		:	null,		/* ID of start button or link */
  		row_height	:	'100px',	/* Height of each ticker row in PX. Should be uniform. */
  		speed		:	800,		/* Speed of transition animation in milliseconds */
  		interval	:	4000,		/* Time between change in milliseconds */
		max_items	: 	null 		/* Integer for how many items to display at once. Resizes height accordingly (OPTIONAL) */
  };

  $.fn.totemticker = function( options ){
    return this.each(function(){
    	(new $.omr.totemticker(this, options));
  	});
  };

})( jQuery );
/*
 * jQuery validation plug-in 1.7
 *
 * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
 * http://docs.jquery.com/Plugins/Validation
 *
 * Copyright (c) 2006 - 2008 J?rn Zaefferer
 *
 * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
eval(function(p, a, c, k, e, r) {
    e = function(c) {
        return(c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
    };
    if (!''.replace(/^/, String)) {
        while (c--)r[e(c)] = k[c] || e(c);
        k = [function(e) {
            return r[e]
        }];
        e = function() {
            return'\\w+'
        };
        c = 1
    }
    ;
    while (c--)if (k[c])p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
    return p
}('(7($){$.H($.2L,{17:7(d){l(!6.F){d&&d.2q&&2T.1z&&1z.52("3y 3p, 4L\'t 17, 64 3y");8}p c=$.19(6[0],\'v\');l(c){8 c}c=2w $.v(d,6[0]);$.19(6[0],\'v\',c);l(c.q.3x){6.3s("1w, 3i").1o(".4E").3e(7(){c.3b=w});l(c.q.35){6.3s("1w, 3i").1o(":2s").3e(7(){c.1Z=6})}6.2s(7(b){l(c.q.2q)b.5J();7 1T(){l(c.q.35){l(c.1Z){p a=$("<1w 1V=\'5r\'/>").1s("u",c.1Z.u).33(c.1Z.Z).51(c.U)}c.q.35.V(c,c.U);l(c.1Z){a.3D()}8 N}8 w}l(c.3b){c.3b=N;8 1T()}l(c.L()){l(c.1b){c.1l=w;8 N}8 1T()}12{c.2l();8 N}})}8 c},J:7(){l($(6[0]).2W(\'L\')){8 6.17().L()}12{p b=w;p a=$(6[0].L).17();6.P(7(){b&=a.I(6)});8 b}},4D:7(c){p d={},$I=6;$.P(c.1I(/\\s/),7(a,b){d[b]=$I.1s(b);$I.6d(b)});8 d},1i:7(h,k){p f=6[0];l(h){p i=$.19(f.L,\'v\').q;p d=i.1i;p c=$.v.36(f);23(h){1e"1d":$.H(c,$.v.1X(k));d[f.u]=c;l(k.G)i.G[f.u]=$.H(i.G[f.u],k.G);31;1e"3D":l(!k){T d[f.u];8 c}p e={};$.P(k.1I(/\\s/),7(a,b){e[b]=c[b];T c[b]});8 e}}p g=$.v.41($.H({},$.v.3Y(f),$.v.3V(f),$.v.3T(f),$.v.36(f)),f);l(g.15){p j=g.15;T g.15;g=$.H({15:j},g)}8 g}});$.H($.5p[":"],{5n:7(a){8!$.1p(""+a.Z)},5g:7(a){8!!$.1p(""+a.Z)},5f:7(a){8!a.4h}});$.v=7(b,a){6.q=$.H(w,{},$.v.3d,b);6.U=a;6.3I()};$.v.W=7(c,b){l(R.F==1)8 7(){p a=$.3F(R);a.4V(c);8 $.v.W.1Q(6,a)};l(R.F>2&&b.2c!=3B){b=$.3F(R).4Q(1)}l(b.2c!=3B){b=[b]}$.P(b,7(i,n){c=c.1u(2w 3t("\\\\{"+i+"\\\\}","g"),n)});8 c};$.H($.v,{3d:{G:{},2a:{},1i:{},1c:"3r",28:"J",2F:"4P",2l:w,3o:$([]),2D:$([]),3x:w,3l:[],3k:N,4O:7(a){6.3U=a;l(6.q.4K&&!6.4J){6.q.1K&&6.q.1K.V(6,a,6.q.1c,6.q.28);6.1M(a).2A()}},4C:7(a){l(!6.1E(a)&&(a.u 11 6.1a||!6.K(a))){6.I(a)}},6c:7(a){l(a.u 11 6.1a||a==6.4A){6.I(a)}},68:7(a){l(a.u 11 6.1a)6.I(a);12 l(a.4x.u 11 6.1a)6.I(a.4x)},39:7(a,c,b){$(a).22(c).2v(b)},1K:7(a,c,b){$(a).2v(c).22(b)}},63:7(a){$.H($.v.3d,a)},G:{15:"61 4r 2W 15.",1q:"M 2O 6 4r.",1J:"M O a J 1J 5X.",1B:"M O a J 5W.",1A:"M O a J 1A.",2j:"M O a J 1A (5Q).",1G:"M O a J 1G.",1P:"M O 5O 1P.",2f:"M O a J 5L 5I 1G.",2o:"M O 47 5F Z 5B.",43:"M O a Z 5z a J 5x.",18:$.v.W("M O 3K 5v 2X {0} 2V."),1y:$.v.W("M O 5t 5s {0} 2V."),2i:$.v.W("M O a Z 3W {0} 3O {1} 2V 5o."),2r:$.v.W("M O a Z 3W {0} 3O {1}."),1C:$.v.W("M O a Z 5j 2X 46 3M 3L {0}."),1t:$.v.W("M O a Z 5d 2X 46 3M 3L {0}.")},3J:N,5a:{3I:7(){6.24=$(6.q.2D);6.4t=6.24.F&&6.24||$(6.U);6.2x=$(6.q.3o).1d(6.q.2D);6.1a={};6.54={};6.1b=0;6.1h={};6.1f={};6.21();p f=(6.2a={});$.P(6.q.2a,7(d,c){$.P(c.1I(/\\s/),7(a,b){f[b]=d})});p e=6.q.1i;$.P(e,7(b,a){e[b]=$.v.1X(a)});7 2N(a){p b=$.19(6[0].L,"v"),3c="4W"+a.1V.1u(/^17/,"");b.q[3c]&&b.q[3c].V(b,6[0])}$(6.U).2K(":3E, :4U, :4T, 2e, 4S","2d 2J 4R",2N).2K(":3C, :3A, 2e, 3z","3e",2N);l(6.q.3w)$(6.U).2I("1f-L.17",6.q.3w)},L:7(){6.3v();$.H(6.1a,6.1v);6.1f=$.H({},6.1v);l(!6.J())$(6.U).3u("1f-L",[6]);6.1m();8 6.J()},3v:7(){6.2H();Q(p i=0,14=(6.2b=6.14());14[i];i++){6.29(14[i])}8 6.J()},I:7(a){a=6.2G(a);6.4A=a;6.2P(a);6.2b=$(a);p b=6.29(a);l(b){T 6.1f[a.u]}12{6.1f[a.u]=w}l(!6.3q()){6.13=6.13.1d(6.2x)}6.1m();8 b},1m:7(b){l(b){$.H(6.1v,b);6.S=[];Q(p c 11 b){6.S.27({1j:b[c],I:6.26(c)[0]})}6.1n=$.3n(6.1n,7(a){8!(a.u 11 b)})}6.q.1m?6.q.1m.V(6,6.1v,6.S):6.3m()},2S:7(){l($.2L.2S)$(6.U).2S();6.1a={};6.2H();6.2Q();6.14().2v(6.q.1c)},3q:7(){8 6.2k(6.1f)},2k:7(a){p b=0;Q(p i 11 a)b++;8 b},2Q:7(){6.2C(6.13).2A()},J:7(){8 6.3j()==0},3j:7(){8 6.S.F},2l:7(){l(6.q.2l){3Q{$(6.3h()||6.S.F&&6.S[0].I||[]).1o(":4N").3g().4M("2d")}3f(e){}}},3h:7(){p a=6.3U;8 a&&$.3n(6.S,7(n){8 n.I.u==a.u}).F==1&&a},14:7(){p a=6,2B={};8 $([]).1d(6.U.14).1o(":1w").1L(":2s, :21, :4I, [4H]").1L(6.q.3l).1o(7(){!6.u&&a.q.2q&&2T.1z&&1z.3r("%o 4G 3K u 4F",6);l(6.u 11 2B||!a.2k($(6).1i()))8 N;2B[6.u]=w;8 w})},2G:7(a){8 $(a)[0]},2z:7(){8 $(6.q.2F+"."+6.q.1c,6.4t)},21:7(){6.1n=[];6.S=[];6.1v={};6.1k=$([]);6.13=$([]);6.2b=$([])},2H:7(){6.21();6.13=6.2z().1d(6.2x)},2P:7(a){6.21();6.13=6.1M(a)},29:7(d){d=6.2G(d);l(6.1E(d)){d=6.26(d.u)[0]}p a=$(d).1i();p c=N;Q(Y 11 a){p b={Y:Y,2n:a[Y]};3Q{p f=$.v.1N[Y].V(6,d.Z.1u(/\\r/g,""),d,b.2n);l(f=="1S-1Y"){c=w;6g}c=N;l(f=="1h"){6.13=6.13.1L(6.1M(d));8}l(!f){6.4B(d,b);8 N}}3f(e){6.q.2q&&2T.1z&&1z.6f("6e 6b 6a 69 I "+d.4z+", 29 47 \'"+b.Y+"\' Y",e);67 e;}}l(c)8;l(6.2k(a))6.1n.27(d);8 w},4y:7(a,b){l(!$.1H)8;p c=6.q.3a?$(a).1H()[6.q.3a]:$(a).1H();8 c&&c.G&&c.G[b]},4w:7(a,b){p m=6.q.G[a];8 m&&(m.2c==4v?m:m[b])},4u:7(){Q(p i=0;i<R.F;i++){l(R[i]!==20)8 R[i]}8 20},2u:7(a,b){8 6.4u(6.4w(a.u,b),6.4y(a,b),!6.q.3k&&a.62||20,$.v.G[b],"<4s>60: 5Z 1j 5Y Q "+a.u+"</4s>")},4B:7(b,a){p c=6.2u(b,a.Y),37=/\\$?\\{(\\d+)\\}/g;l(1g c=="7"){c=c.V(6,a.2n,b)}12 l(37.16(c)){c=1F.W(c.1u(37,\'{$1}\'),a.2n)}6.S.27({1j:c,I:b});6.1v[b.u]=c;6.1a[b.u]=c},2C:7(a){l(6.q.2t)a=a.1d(a.4q(6.q.2t));8 a},3m:7(){Q(p i=0;6.S[i];i++){p a=6.S[i];6.q.39&&6.q.39.V(6,a.I,6.q.1c,6.q.28);6.2E(a.I,a.1j)}l(6.S.F){6.1k=6.1k.1d(6.2x)}l(6.q.1x){Q(p i=0;6.1n[i];i++){6.2E(6.1n[i])}}l(6.q.1K){Q(p i=0,14=6.4p();14[i];i++){6.q.1K.V(6,14[i],6.q.1c,6.q.28)}}6.13=6.13.1L(6.1k);6.2Q();6.2C(6.1k).4o()},4p:7(){8 6.2b.1L(6.4n())},4n:7(){8 $(6.S).4m(7(){8 6.I})},2E:7(a,c){p b=6.1M(a);l(b.F){b.2v().22(6.q.1c);b.1s("4l")&&b.4k(c)}12{b=$("<"+6.q.2F+"/>").1s({"Q":6.34(a),4l:w}).22(6.q.1c).4k(c||"");l(6.q.2t){b=b.2A().4o().5V("<"+6.q.2t+"/>").4q()}l(!6.24.5S(b).F)6.q.4j?6.q.4j(b,$(a)):b.5R(a)}l(!c&&6.q.1x){b.3E("");1g 6.q.1x=="1D"?b.22(6.q.1x):6.q.1x(b)}6.1k=6.1k.1d(b)},1M:7(a){p b=6.34(a);8 6.2z().1o(7(){8 $(6).1s(\'Q\')==b})},34:7(a){8 6.2a[a.u]||(6.1E(a)?a.u:a.4z||a.u)},1E:7(a){8/3C|3A/i.16(a.1V)},26:7(d){p c=6.U;8 $(4i.5P(d)).4m(7(a,b){8 b.L==c&&b.u==d&&b||4g})},1O:7(a,b){23(b.4f.4e()){1e\'2e\':8 $("3z:3p",b).F;1e\'1w\':l(6.1E(b))8 6.26(b.u).1o(\':4h\').F}8 a.F},4d:7(b,a){8 6.32[1g b]?6.32[1g b](b,a):w},32:{"5N":7(b,a){8 b},"1D":7(b,a){8!!$(b,a.L).F},"7":7(b,a){8 b(a)}},K:7(a){8!$.v.1N.15.V(6,$.1p(a.Z),a)&&"1S-1Y"},4c:7(a){l(!6.1h[a.u]){6.1b++;6.1h[a.u]=w}},4b:7(a,b){6.1b--;l(6.1b<0)6.1b=0;T 6.1h[a.u];l(b&&6.1b==0&&6.1l&&6.L()){$(6.U).2s();6.1l=N}12 l(!b&&6.1b==0&&6.1l){$(6.U).3u("1f-L",[6]);6.1l=N}},2h:7(a){8 $.19(a,"2h")||$.19(a,"2h",{2M:4g,J:w,1j:6.2u(a,"1q")})}},1R:{15:{15:w},1J:{1J:w},1B:{1B:w},1A:{1A:w},2j:{2j:w},4a:{4a:w},1G:{1G:w},49:{49:w},1P:{1P:w},2f:{2f:w}},48:7(a,b){a.2c==4v?6.1R[a]=b:$.H(6.1R,a)},3V:7(b){p a={};p c=$(b).1s(\'5H\');c&&$.P(c.1I(\' \'),7(){l(6 11 $.v.1R){$.H(a,$.v.1R[6])}});8 a},3T:7(c){p a={};p d=$(c);Q(Y 11 $.v.1N){p b=d.1s(Y);l(b){a[Y]=b}}l(a.18&&/-1|5G|5C/.16(a.18)){T a.18}8 a},3Y:7(a){l(!$.1H)8{};p b=$.19(a.L,\'v\').q.3a;8 b?$(a).1H()[b]:$(a).1H()},36:7(b){p a={};p c=$.19(b.L,\'v\');l(c.q.1i){a=$.v.1X(c.q.1i[b.u])||{}}8 a},41:7(d,e){$.P(d,7(c,b){l(b===N){T d[c];8}l(b.2R||b.2p){p a=w;23(1g b.2p){1e"1D":a=!!$(b.2p,e.L).F;31;1e"7":a=b.2p.V(e,e);31}l(a){d[c]=b.2R!==20?b.2R:w}12{T d[c]}}});$.P(d,7(a,b){d[a]=$.44(b)?b(e):b});$.P([\'1y\',\'18\',\'1t\',\'1C\'],7(){l(d[6]){d[6]=2Z(d[6])}});$.P([\'2i\',\'2r\'],7(){l(d[6]){d[6]=[2Z(d[6][0]),2Z(d[6][1])]}});l($.v.3J){l(d.1t&&d.1C){d.2r=[d.1t,d.1C];T d.1t;T d.1C}l(d.1y&&d.18){d.2i=[d.1y,d.18];T d.1y;T d.18}}l(d.G){T d.G}8 d},1X:7(a){l(1g a=="1D"){p b={};$.P(a.1I(/\\s/),7(){b[6]=w});a=b}8 a},5A:7(c,a,b){$.v.1N[c]=a;$.v.G[c]=b!=20?b:$.v.G[c];l(a.F<3){$.v.48(c,$.v.1X(c))}},1N:{15:7(c,d,a){l(!6.4d(a,d))8"1S-1Y";23(d.4f.4e()){1e\'2e\':p b=$(d).33();8 b&&b.F>0;1e\'1w\':l(6.1E(d))8 6.1O(c,d)>0;5y:8 $.1p(c).F>0}},1q:7(f,h,j){l(6.K(h))8"1S-1Y";p g=6.2h(h);l(!6.q.G[h.u])6.q.G[h.u]={};g.40=6.q.G[h.u].1q;6.q.G[h.u].1q=g.1j;j=1g j=="1D"&&{1B:j}||j;l(g.2M!==f){g.2M=f;p k=6;6.4c(h);p i={};i[h.u]=f;$.2U($.H(w,{1B:j,3Z:"2Y",3X:"17"+h.u,5w:"5u",19:i,1x:7(d){k.q.G[h.u].1q=g.40;p b=d===w;l(b){p e=k.1l;k.2P(h);k.1l=e;k.1n.27(h);k.1m()}12{p a={};p c=(g.1j=d||k.2u(h,"1q"));a[h.u]=$.44(c)?c(f):c;k.1m(a)}g.J=b;k.4b(h,b)}},j));8"1h"}12 l(6.1h[h.u]){8"1h"}8 g.J},1y:7(b,c,a){8 6.K(c)||6.1O($.1p(b),c)>=a},18:7(b,c,a){8 6.K(c)||6.1O($.1p(b),c)<=a},2i:7(b,d,a){p c=6.1O($.1p(b),d);8 6.K(d)||(c>=a[0]&&c<=a[1])},1t:7(b,c,a){8 6.K(c)||b>=a},1C:7(b,c,a){8 6.K(c)||b<=a},2r:7(b,c,a){8 6.K(c)||(b>=a[0]&&b<=a[1])},1J:7(a,b){8 6.K(b)||/^((([a-z]|\\d|[!#\\$%&\'\\*\\+\\-\\/=\\?\\^X`{\\|}~]|[\\E-\\B\\C-\\x\\A-\\y])+(\\.([a-z]|\\d|[!#\\$%&\'\\*\\+\\-\\/=\\?\\^X`{\\|}~]|[\\E-\\B\\C-\\x\\A-\\y])+)*)|((\\3S)((((\\2m|\\1W)*(\\30\\3R))?(\\2m|\\1W)+)?(([\\3P-\\5q\\45\\42\\5D-\\5E\\3N]|\\5m|[\\5l-\\5k]|[\\5i-\\5K]|[\\E-\\B\\C-\\x\\A-\\y])|(\\\\([\\3P-\\1W\\45\\42\\30-\\3N]|[\\E-\\B\\C-\\x\\A-\\y]))))*(((\\2m|\\1W)*(\\30\\3R))?(\\2m|\\1W)+)?(\\3S)))@((([a-z]|\\d|[\\E-\\B\\C-\\x\\A-\\y])|(([a-z]|\\d|[\\E-\\B\\C-\\x\\A-\\y])([a-z]|\\d|-|\\.|X|~|[\\E-\\B\\C-\\x\\A-\\y])*([a-z]|\\d|[\\E-\\B\\C-\\x\\A-\\y])))\\.)+(([a-z]|[\\E-\\B\\C-\\x\\A-\\y])|(([a-z]|[\\E-\\B\\C-\\x\\A-\\y])([a-z]|\\d|-|\\.|X|~|[\\E-\\B\\C-\\x\\A-\\y])*([a-z]|[\\E-\\B\\C-\\x\\A-\\y])))\\.?$/i.16(a)},1B:7(a,b){8 6.K(b)||/^(5h?|5M):\\/\\/(((([a-z]|\\d|-|\\.|X|~|[\\E-\\B\\C-\\x\\A-\\y])|(%[\\1U-f]{2})|[!\\$&\'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\E-\\B\\C-\\x\\A-\\y])|(([a-z]|\\d|[\\E-\\B\\C-\\x\\A-\\y])([a-z]|\\d|-|\\.|X|~|[\\E-\\B\\C-\\x\\A-\\y])*([a-z]|\\d|[\\E-\\B\\C-\\x\\A-\\y])))\\.)+(([a-z]|[\\E-\\B\\C-\\x\\A-\\y])|(([a-z]|[\\E-\\B\\C-\\x\\A-\\y])([a-z]|\\d|-|\\.|X|~|[\\E-\\B\\C-\\x\\A-\\y])*([a-z]|[\\E-\\B\\C-\\x\\A-\\y])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|X|~|[\\E-\\B\\C-\\x\\A-\\y])|(%[\\1U-f]{2})|[!\\$&\'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|X|~|[\\E-\\B\\C-\\x\\A-\\y])|(%[\\1U-f]{2})|[!\\$&\'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|X|~|[\\E-\\B\\C-\\x\\A-\\y])|(%[\\1U-f]{2})|[!\\$&\'\\(\\)\\*\\+,;=]|:|@)|[\\5e-\\5T]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|X|~|[\\E-\\B\\C-\\x\\A-\\y])|(%[\\1U-f]{2})|[!\\$&\'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.16(a)},1A:7(a,b){8 6.K(b)||!/5U|5c/.16(2w 5b(a))},2j:7(a,b){8 6.K(b)||/^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/.16(a)},1G:7(a,b){8 6.K(b)||/^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$/.16(a)},1P:7(a,b){8 6.K(b)||/^\\d+$/.16(a)},2f:7(b,e){l(6.K(e))8"1S-1Y";l(/[^0-9-]+/.16(b))8 N;p a=0,d=0,2g=N;b=b.1u(/\\D/g,"");Q(p n=b.F-1;n>=0;n--){p c=b.59(n);p d=58(c,10);l(2g){l((d*=2)>9)d-=9}a+=d;2g=!2g}8(a%10)==0},43:7(b,c,a){a=1g a=="1D"?a.1u(/,/g,\'|\'):"57|56?g|55";8 6.K(c)||b.65(2w 3t(".("+a+")$","i"))},2o:7(c,d,a){p b=$(a).66(".17-2o").2I("3H.17-2o",7(){$(d).J()});8 c==b.33()}}});$.W=$.v.W})(1F);(7($){p c=$.2U;p d={};$.2U=7(a){a=$.H(a,$.H({},$.53,a));p b=a.3X;l(a.3Z=="2Y"){l(d[b]){d[b].2Y()}8(d[b]=c.1Q(6,R))}8 c.1Q(6,R)}})(1F);(7($){l(!1F.1r.38.2d&&!1F.1r.38.2J&&4i.3G){$.P({3g:\'2d\',3H:\'2J\'},7(b,a){$.1r.38[a]={50:7(){6.3G(b,2y,w)},4Z:7(){6.4Y(b,2y,w)},2y:7(e){R[0]=$.1r.2O(e);R[0].1V=a;8 $.1r.1T.1Q(6,R)}};7 2y(e){e=$.1r.2O(e);e.1V=a;8 $.1r.1T.V(6,e)}})};$.H($.2L,{2K:7(d,e,c){8 6.2I(e,7(a){p b=$(a.4X);l(b.2W(d)){8 c.1Q(b,R)}})}})})(1F);', 62, 389, '||||||this|function|return|||||||||||||if||||var|settings||||name|validator|true|uFDCF|uFFEF||uFDF0|uD7FF|uF900||u00A0|length|messages|extend|element|valid|optional|form|Please|false|enter|each|for|arguments|errorList|delete|currentForm|call|format|_|method|value||in|else|toHide|elements|required|test|validate|maxlength|data|submitted|pendingRequest|errorClass|add|case|invalid|typeof|pending|rules|message|toShow|formSubmitted|showErrors|successList|filter|trim|remote|event|attr|min|replace|errorMap|input|success|minlength|console|date|url|max|string|checkable|jQuery|number|metadata|split|email|unhighlight|not|errorsFor|methods|getLength|digits|apply|classRuleSettings|dependency|handle|da|type|x09|normalizeRule|mismatch|submitButton|undefined|reset|addClass|switch|labelContainer||findByName|push|validClass|check|groups|currentElements|constructor|focusin|select|creditcard|bEven|previousValue|rangelength|dateISO|objectLength|focusInvalid|x20|parameters|equalTo|depends|debug|range|submit|wrapper|defaultMessage|removeClass|new|containers|handler|errors|hide|rulesCache|addWrapper|errorLabelContainer|showLabel|errorElement|clean|prepareForm|bind|focusout|validateDelegate|fn|old|delegate|fix|prepareElement|hideErrors|param|resetForm|window|ajax|characters|is|than|abort|Number|x0d|break|dependTypes|val|idOrName|submitHandler|staticRules|theregex|special|highlight|meta|cancelSubmit|eventType|defaults|click|catch|focus|findLastActive|button|size|ignoreTitle|ignore|defaultShowErrors|grep|errorContainer|selected|numberOfInvalids|error|find|RegExp|triggerHandler|checkForm|invalidHandler|onsubmit|nothing|option|checkbox|Array|radio|remove|text|makeArray|addEventListener|blur|init|autoCreateRanges|no|to|equal|x7f|and|x01|try|x0a|x22|attributeRules|lastActive|classRules|between|port|metadataRules|mode|originalMessage|normalizeRules|x0c|accept|isFunction|x0b|or|the|addClassRules|numberDE|dateDE|stopRequest|startRequest|depend|toLowerCase|nodeName|null|checked|document|errorPlacement|html|generated|map|invalidElements|show|validElements|parent|field|strong|errorContext|findDefined|String|customMessage|parentNode|customMetaMessage|id|lastElement|formatAndAdd|onfocusout|removeAttrs|cancel|assigned|has|disabled|image|blockFocusCleanup|focusCleanup|can|trigger|visible|onfocusin|label|slice|keyup|textarea|file|password|unshift|on|target|removeEventListener|teardown|setup|appendTo|warn|ajaxSettings|valueCache|gif|jpe|png|parseInt|charAt|prototype|Date|NaN|greater|uE000|unchecked|filled|https|x5d|less|x5b|x23|x21|blank|long|expr|x08|hidden|least|at|json|more|dataType|extension|default|with|addMethod|again|524288|x0e|x1f|same|2147483647|class|card|preventDefault|x7e|credit|ftp|boolean|only|getElementsByName|ISO|insertAfter|append|uF8FF|Invalid|wrap|URL|address|defined|No|Warning|This|title|setDefaults|returning|match|unbind|throw|onclick|checking|when|occured|onkeyup|removeAttr|exception|log|continue'.split('|'), 0, {}));



