/* AJAX ERROR */
$(document).ajaxError(function (request,settings,e) {
    alert('Error requesting URL: '+e.url);
});
/* URL ROUTER */
var Router = function (route,params) {
    //parametre
    if (typeof(params) == 'object') {
        var p = '';
        $.each(params,function (name,value) {
            if (p != '') {
                p += '&';
            }
            p += escape(name)+'='+escape(value);
        });
        return Router(route)+'?'+p;
    }
    else {
        return '/' + route;
    }
};
Router.route = function (route,params) {
    var url = Router(route,params);
    location.href = url;
}

/* Plugin na input hint */
jQuery.fn.inputHint = function () {
    this.each(function () {
        var self = $(this);
        if (self.is('input[type=text]')) {
            jQuery.inputHintShow(self);
            self.focus(function () {
                jQuery.inputHintHide(this);
            }).blur(function () {
                jQuery.inputHintShow(this);
            }).closest('form').submit(function () {
                jQuery.inputHintHide(self);
                return true;
            });
        }
    });
    return this;
};
jQuery.inputHintShow = function (inpt) {
    inpt = jQuery(inpt);
    if (inpt.val() == inpt.attr('title') || inpt.val() == '') {
        inpt.addClass('hint').val(inpt.attr('title'));
    }
}
jQuery.inputHintHide = function (inpt) {
    inpt = jQuery(inpt);
    inpt.removeClass('hint');
    if (inpt.val() == inpt.attr('title')) {
        inpt.val('');
    }
}

//plugin na zebra tabulky a highlight tabulky
jQuery.fn.zebraTable = function () {
    this.each(function () {
        var self = $(this);
        if (self.is('table')) {
            $('tbody tr:even',self).removeClass('even').addClass('odd');
            $('tbody tr:odd',self).removeClass('odd').addClass('even');
        }
    });
    return this;
};
jQuery.fn.highlightTable = function () {
    this.each(function () {
        var self = $(this);
        if (self.is('table')) {
            $('tbody tr',self).unbind('mouseover.highlight').bind('mouseover.highlight',function () {
                $('>td',this).addClass('highlight');
            });
            $('tbody tr',self).unbind('mouseout.highlight').bind('mouseout.highlight',function () {
                $('>td',this).removeClass('highlight');
            });
        }
    });
    return this;
};

//plugin na popup okno
jQuery.fn.homepopup = function () {
    var popup = this.eq(0);
    //overlay
    var overlay = $('<div id="homepopupOverlay"></div>');
    var bodyW = $(document).width();
    var bodyH = $(document).height();
    overlay.width(bodyW);
    overlay.height(bodyH);
    popup.before(overlay);
    //animacia na popup
    var desiredHeight = popup.height();
    popup.find('> *').hide();
    popup.height(1).show();
    popup.css({
        top: (($(window).height() - desiredHeight) / 2 + $(document).scrollTop()) + 'px',
        left: (($(window).width() - popup.width()) / 2 + $(document).scrollLeft()) + 'px'
    });
    popup.animate({
        height: desiredHeight + 'px'
    },{
        duration: 500,
        complete: function () {
            $(this).find('> *').show();
        }
    });
    popup.find('.close').click(function () {
        popup.hide();
        overlay.remove();
        //nastavime cookies
        if ($('#homepopupNomore').is(':checked')) {
            $.get(Router('system/current-time/'),function (curtime) {
                jQuery.cookie('popup1', curtime, {
                    expires: 100,
                    path: '/'
                });
            })
        }
    });
    return this;
};

//plugin na cookies
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options = $.extend({}, options); // clone object since it's unexpected behavior if the expired property were changed
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // NOTE Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

jQuery.fn.tooltip = function (userParams) {
    var params = $.extend({
            action: null,
            params: {}
    }, userParams);
    
    var tooltipTimein;
    var tooltipTimeout;
    
    $.each($(this), function (idx, elem){
        var tooltip;
        
        var id = 'tooltip_' + params.action;
        $.each(params.params, function (key, value) {
            id += '_' + value;
        });
        tooltip = $('#' + id);
        
        if (!tooltip.length){
            tooltip = $('<div id="' + id + '" class="tooltip-container" />');
            tooltip.css({
                position: 'absolute',
                display: 'none'
            });
            
            tooltip.bind('hidetooltip', function (){
                if (tooltip.hasClass('ishover')){
                    //
                } else{
                    tooltip.hide();
                }
            });
            
            tooltip.hover(function (){
                $(this).addClass('ishover');
                clearTimeout(tooltipTimeout);
            }, function (){
                $(this).removeClass('ishover');
                $(this).trigger('hidetooltip');
            });
            
            $('body').append(tooltip);
            
            tooltipTimein = setTimeout(function () {
                //zobrazime loader
                //var loader = $('<div class="loading-overlay" />');
                //loader.css({
                //    position: 'absolute',
                //    top: 0,
                //    left: 0,
                //    opacity: 0.8
                //}).width(tooltip.width()).height(tooltip.height());
                //tooltip.append(loader);
                
                var image = $('<img src="'+ params.params.src +'" alt="'+ params.params.alt +'"/>');
                tooltip.html(image);
                tooltip.show();
                
                //tooltip.load(Router('hq-tools/browse/' + params.action + '/'), params.params);
            }, 1500);
        }
        
        //tooltip.css({
        //    top: (($(window).height() - tooltip.outerHeight()) / 2) + $(window).scrollTop(),
        //    left: (($(window).width() - tooltip.outerWidth()) / 2) + $(window).scrollLeft()
        //});
        
        // pozicie
        var pos_y = $(elem).offset().top - tooltip.outerHeight();
        var pos_x = $(elem).offset().left + $(elem).outerWidth();
        if ((pos_y + tooltip.outerHeight()) > $(window).height() + $(window).scrollTop()){
            pos_y = $(window).scrollTop() + pos_y - (pos_y + tooltip.outerHeight() - $(window).height()) - 10;
        }
        if ((pos_x + tooltip.outerWidth()) > $(window).width() + $(window).scrollLeft()){
            pos_x = $(window).scrollLeft() + pos_x - (pos_x + tooltip.outerWidth() - $(window).width()) - 10;
        }
        
        tooltip.css({
            top: pos_y,
            left: pos_x
        });
        
        $(elem).hover(function (){
            tooltipTimein = setTimeout(function () {
                tooltip.show();
            }, 1500);
        }, function (){
            if (tooltipTimein){
                clearTimeout(tooltipTimein);
            }
            
            tooltipTimeout = setTimeout(function () {
                tooltip.trigger('hidetooltip');
            }, 1500);
        });
    });
};

var brandsAnimationOnoff = 1;
var tabIdCounter = 0;
$(function(){
    //tooltipy
    //$('.tooltip').mouseover(function () {
    //    $(this).tooltip({action: $(this).data('action'), params: $(this).data('params')});
    //});
	//hinty vo formularoch
	$('input.hint').inputHint();
	//vypnut autocomplete vo formularoch
	$('input.autocompleteoff').attr('autocomplete', 'off');
	//zebra tabulky + highlight
    $('table.zebra').zebraTable();
    $('table.highlight').highlightTable();
	//brands menu
	//animacne obrazky znaciek
    eval('var brandImagesJson = '+$('#brandImagesJson').val()+';');
    $('#supertopBanner2').append('<div id="supertopBanner2Image"></div>');
	$('#brands li').hover(function () {
        var a = $(this).find('a');
        var brand = a.attr('rel');
        var id = a.attr('id');
        var brandImageUrl = '';
        $(this).addClass(brand + '-hover');
        
        if (id){
            brandImageUrl = brandImagesJson['brand_' + id.substring(10)];
        }
        if (brandImageUrl) {
            $('#supertopBanner2Image').empty().append('<img src="'+brandImageUrl+'" alt="'+ brand +'" />');
        }
    },function () {
        var brand = $(this).find('>a').attr('rel');
        $(this).removeClass(brand + '-hover');
        $('#supertopBanner2Image').empty()
    });
    
    $('div.tab-menu a').click(function (){
        //var container = $(this).closest('.tab-menu');
        var id = $(this).attr('id').replace(/tab/i, '');
        var tabpanel = $('.tabpanel[id = tabpanel' + id +']');
        
        $('div.tab-menu li').removeClass('active');
        $(this).closest('li').addClass('active');
        
        $('.tabpanel').hide();
        tabpanel.show();
    });
    
    //rychle vyhladavanie - vysunutie rozsireneho
    var form = $('#quickSearchForm');
    var formNew = $('<form></form>');
    formNew.attr({
            method: form.attr('method'),
            action: form.attr('action'),
            id: 'quickSearchFormAdvanced'
    });
    $('#quickSearchOptions').appendTo($('body')).wrap(formNew);
    var quickSearchOptions_protect = false;
    var quickSearchOptions_visible = false;
    quickSearchOptions_updatePosition();
    $(window).resize(quickSearchOptions_updatePosition);
    
    $('#quickSearchQueryInput').click(function () {
        var qsb = $('#quickSearchOptions');
        if (!quickSearchOptions_visible) {
            quickSearchOptions_visible = true;
            qsb.slideDown('fast');
        }
    });
    $('#quickSearchOptions').mouseleave(function () {
        if (!quickSearchOptions_protect) {
            quickSearchOptions_visible = false;
            quickSearchOptions_protect = false;
            $('#quickSearchOptions').slideUp('fast');
        }
    });
    $('#quickSearchOptions').click(function (e) {
        if (!$(e.target).is('#quickSearchOptionsClose')) {
            quickSearchOptions_protect = true;
        }
    });
    $('#quickSearchQuery').focus(function () {
        var qsb = $('#quickSearchOptions');
        if (!quickSearchOptions_visible) {
            quickSearchOptions_visible = true;
            qsb.slideDown('fast');
        }
    });
    $('#quickSearchOptionsClose').click(function () {
        quickSearchOptions_visible = false;
        quickSearchOptions_protect = false;
        $('#quickSearchOptions').slideUp('fast');
    });
    
    // var form = $('#quickSearchForm');
    // var formNew = $('<form></form>');
    // formNew.attr({
    //         method: form.attr('method'),
    //         action: form.attr('action'),
    //         id: 'quickSearchFormAdvanced'
    // });
    // $('#quickSearchOptions').appendTo($('body')).wrap(formNew);
    // quickSearchOptions_updatePosition();
    // $('#quickSearchQueryInput').bind('mouseenter',function () {
    //     var qsb = $('#quickSearchOptions');
    //     if (qsb.is(':hidden')) {
    //         qsb.slideDown('fast');
    //     }
    // });
    // $('#quickSearchQuery').bind('focus',function () {
    //     var qsb = $('#quickSearchOptions');
    //     if (qsb.is(':hidden')) {
    //         qsb.slideDown('fast');
    //     }
    // });
    // $('#quickSearchForm').bind('mouseleave',function (e) {
    //     alert($(e.currentTarget).attr('id'));
    //     if (!$(e.currentTarget).is('#quickSearchOptions')) {
    //         var qsb = $('#quickSearchOptions');
    //         if (qsb.is(':visible')) {
    //             qsb.slideUp('fast');
    //         }
    //     }
    // });
    
    $('#quickSearchForm').submit(function () {
        $('#quickSearchFormAdvanced').submit();
        return false;
    });
    $('#quickSearchFormAdvanced').submit(function () {
        $('#quickSearchQueryAdvanced').val($('#quickSearchQuery').val());
        return true;
    });
    $('#quickSearchQueryInput').one('click',function () {
        this.select();
    });
    $('#quickSearchOptionsClose').click(function () {
        $('#quickSearchOptions').slideUp('fast');
    });
    
    //homepopup
    $('#homepopup').homepopup();
    
    //animacia znaciek
    //prisposobenie sirky znaciek
    $('#brands').each(function () {
        var sirka = 0;
        $(this).find('li').each(function () {
            var w = $(this).width();
            sirka += w;
            $(this).attr('width', w);
        });
        $(this).width(sirka);
    });
    window.setTimeout(function () {
        brandsAnimation();
    }, 2000);
    
    //porovnanie
    $('a.go-compare-products').click(function () {
        var chbxs = $('input[type=checkbox].chbx-compare:checked');
        if (!chbxs.length) {
            chbxs = $('input[type=checkbox].chbx-compare');
        }
        var ids = [];
        chbxs.each(function () {
            ids.push(this.value);
        });
        this.href += '?id=' + ids.join(',');
        return true;
    });
});

function quickSearchOptions_updatePosition() {
    var qsb = $('#quickSearchOptions');
    var qsi = $('#quickSearchQueryInput');
    var formOffset = qsi.offset();
    qsb.css({
            top: formOffset.top + qsi.height() - 1,
            left: formOffset.left
    });
}

function brandsAnimation(curLeft) {
    if (typeof(curLeft) == 'undefined') {
        var curLeft = parseInt($('#brands').css('left'));
    }
    var firstW = parseInt($('#brands li:eq(0)').attr('width')); //atribut sa nastavuje pri inicializacii animacie
    var newLeft = curLeft - firstW;
    // $('#brands').css('left', newLeft);
    $('#brands').animate({
        left: newLeft + 'px'
    },1500, function () {
        newLeft += firstW;
        $('#brands li:eq(0)').appendTo($('#brands'));
        $('#brands').css('left', newLeft);
        window.setTimeout(function () {
            brandsAnimation(newLeft)
        },3000);
    });
}

