var swisshp = {
    productsHighlight: function(){
        var duration = 0.5;
        var passive = 0.6;
        $$('.product-logo-row-1 img, .product-logo-row-2 img').each(function(logo){
            logo.fade({
                from: 1,
                to: passive,
                duration: duration
            });
            logo.observe('mouseover', function(event){
                var elem = Event.element(event);
                elem.appear({
                    from: passive,
                    to: 1,
                    duration: duration
                });
            });
            logo.observe('mouseout', function(event){
                var elem = Event.element(event);
                elem.fade({
                    from: 1,
                    to: passive,
                    duration: duration
                });
            });
        });
    },
    formsAlign: function(){
        var left, func = null, isForm = true;
        if ($('forms-2') || $('forms-4') || $('forms-13')){
            left = 150;
        } else if ($('forms-5')){
            left = 140;
            func = function(element){
                if (element.tagName.toLowerCase() != 'select') return;
                element.setStyle({
                    'position': 'static'
                });
            }
        } else if ($('forms-11')){
            left = 160;
        } else if ($('forms-3')){
            left = 200;
        } else {
            isForm = false;
        }
        if (isForm) {
            $$('.element-container input, .element-container select, .element-container textarea').each(function(element){
                if (element.hasClassName(':verifier')) {
                    left += 65;
                    element.setStyle({
                        'width': '135px'
                    });
                }
                element.setStyle({
                    'left': left + 'px'
                });
                if (func) {
                    func(element);
                }
                if (element.tagName.toLowerCase() == 'textarea') {
                    element.up('.element-container').setStyle({
                        'height': '50px'
                    });
                }
                element.setStyle({
                    'visibility': 'visible'
                });
            });
        }
    }
};

swisshp.requestPage = 'view/parts/templates/swisshp/ajax-request.php';

swisshp.service = {
    getAllProducts: true,
    init: function(){
        swisshp.service.loadTypeDropDown();
        swisshp.service.manageModelDropDown();
    },
    loadTypeDropDown: function(){
        // send friendly-url (furl) only if you need types for a specific product
        var furl = swisshp.service.getAllProducts === false ? location.pathname.substr(location.pathname.lastIndexOf('/')) : '';
        swisshp.service.getResponse({
            action: 'getTypes',
            furl: furl
        }, function(request){
            $(swisshp.service.ids.type).update(request.responseText);
        });
    },
    manageModelDropDown: function(){
        var modelDropdown = $(swisshp.service.ids.modelDropdown);
        modelDropdown.disable();
        var modelNumber = $(swisshp.service.ids.modelNumber);
        swisshp.service.clearModelNumber(modelNumber);
        $(swisshp.service.ids.type).observe('change', function(e){
            var elem = Event.element(e);
            modelDropdown.length = 0;
            modelDropdown.disable();
            swisshp.service.clearModelNumber(modelNumber);
            if (!elem.value) {
                return;
            }
            var parts = elem.value.split('|');
            var product = parts[0].strip();
            var type = parts[1].strip();
            swisshp.service.getResponse({
                action: 'getTypeModels',
                'product': product,
                'type': type
            }, function(request){
                modelDropdown.update(request.responseText);
                modelDropdown.enable();
            });
        });
        $(swisshp.service.ids.modelDropdown).observe('change', function(e){
            var elem = Event.element(e);
            modelNumber.value = '';
            if (!elem.value) {
                swisshp.service.clearModelNumber(modelNumber);
            }
            else {
                modelNumber.enable();
            }
        });
    },
    getResponse: function(params, onSuccess){
        new Ajax.Request(swisshp.requestPage,{
            parameters: params,
            onSuccess: onSuccess,
            onFailure: function(request){
                alert('Something went wrong...'+'\n'+request.responseText)
            }
        });
    },
    clearModelNumber: function(element){
        element.value = '';
        element.disable();
    }
};

Event.observe(window, 'load', function(){
    //redirects Forms requestPage to swisshp requests page
    if (window.mForms) mForms.requestPage = swisshp.requestPage;

    var columize = $$(".group-columize")[0];
    if (columize){
        new MultiColumn(columize.up(), new MultiColumnSettings);
    }
    var productType = $$('.product-type');
    if (productType && dvsk_common.allQueryParams.isParameter('p')){
        var type = dvsk_common.allQueryParams.getParameter('p');
        productType.each(function(prod){
            var prodElem = prod.down('span');
            var prodName = prodElem.innerHTML.toLowerCase();
            prodElem.addClassName('closed');
            if (prodName.indexOf(type) == -1) {
                prod.down('ul').hide();
            }
            else {
                prodElem.toggleClassName('closed');
                prodElem.toggleClassName('opened');
            }
            prodElem.observe('click', function(e){
                var clicked = Event.element(e);
                var ul = clicked.next();
                ul.toggle();
                clicked.toggleClassName('closed');
                clicked.toggleClassName('opened');
            });
        });
    }
    if ($('forms-2') || $('forms-13')){
        if ($('forms-2')) {
            swisshp.service.ids = {
                modelDropdown: 'formsDropdown-2-51',
                modelNumber: 'formsTextbox-2-53',
                type: 'formsDropdown-2-49'
            }
            swisshp.service.getAllProducts = false;
        }
        else {
            swisshp.service.ids = {
                modelDropdown: 'formsDropdown-13-14',
                modelNumber: 'formsTextbox-13-16',
                type: 'formsDropdown-13-12'
            }
        }
        swisshp.service.init();
    }
    swisshp.formsAlign();
    swisshp.productsHighlight();
})
