$.validator.setDefaults({ onkeyup: false, onfocusout: false });

jQuery(function () {
    initBrowserDetect();
    initButtons();
    classTabs.init();
    initGallery();
});

// BrowserDetect
function initBrowserDetect() {
    var u = navigator.userAgent.toLowerCase();
    var _html = document.getElementsByTagName("html")[0];

    if (is("win")) addClass("win");
    else if (is("mac")) addClass("mac");
    else if (is("linux") || is("x11")) addClass("linux");

    if (is("msie 8.0")) addClass("ie8");
    else if (is("msie 7.0")) addClass("ie7");
    else if (is("msie 6.0")) addClass("ie6");
    else if (is("firefox/2")) addClass("ff2");
    else if (is("firefox/3")) addClass("ff3");
    else if (is("opera") && is("version/10")) addClass("opera10");
    else if (is("opera") && is("version/11")) addClass("opera11");
    else if (is("opera/9")) addClass("opera9");
    else if (is("safari") && is("version/3")) addClass("safari3");
    else if (is("safari") && is("version/4")) addClass("safari4");
    else if (is("safari") && is("version/5")) addClass("safari5");
    else if (is("chrome")) addClass("chrome");
    else if (is("safari")) addClass("safari2");
    else if (is("unknown")) addClass("unknown");

    if (is("msie")) addClass("trident");
    else if (is("applewebkit")) addClass("webkit");
    else if (is("gecko")) addClass("gecko");
    else if (is("opera")) addClass("presto");

    function is(browser) {
        if (u.indexOf(browser) != -1) return true;
    }
    function addClass(_class) {
        _html.className += (" " + _class);
    }
}

// Pressed Buttons
function initButtons() {
    var buttons = document.getElementsByTagName("span");
    for (var i = 0; i < buttons.length; i++) {
        if (buttons[i].className.indexOf("button") != -1) {
            buttons[i].onmousedown = function () {
                if (this.className.indexOf("pressed") == -1) this.className += " pressed";
            };
            buttons[i].onmouseup = function () {
                this.className = this.className.replace("pressed", "");
            };
            buttons[i].onmouseout = function () {
                this.className = this.className.replace("pressed", "");
            };
        }
    }
}

// classTabs
var classTabs = {
    hasClass: function (obj, cname) {
        return (obj.className ? obj.className.match(new RegExp('(\\s|^)' + cname + '(\\s|$)')) : false);
    },
    addClass: function (obj, cname) {
        if (!this.hasClass(obj, cname)) {
            obj.className += " " + cname;
            this.accurateRecordClass(obj);
        }
    },
    removeClass: function (obj, cname) {
        if (this.hasClass(obj, cname)) {
            obj.className = obj.className.replace(new RegExp('(\\s|^)' + cname + '(\\s|$)'), ' ');
            this.accurateRecordClass(obj);
        }
    },
    accurateRecordClass: function (obj) {
        if (obj.className) obj.className = obj.className.replace(/(\s+)/g, ' ').replace(/(^ | $)/g, '');
    },
    applyCss: function (obj, css) {
        for (var key in css) {
            obj.style[key] = css[key];
        }
    },
    applyEvent: function (v, settings) {
        var c = document.getElementById(v.hr);
        if (c) {
            for (var i = 0; i < v.tab.length; i++) {
                this.applyCss(document.getElementById(v.tab[i].hr), settings.cssHide);
                this.removeClass(v.tab[i], settings.activeClass);
                if (settings.addParentClass) {
                    this.removeClass(v.tab[i].parent, settings.parentActiveClass);
                }
            }
            this.addClass(v, settings.activeClass);
            if (settings.addParentClass) {
                this.addClass(v.parent, settings.parentActiveClass);
            }
            this.applyCss(c, settings.cssShow);
            return false;
        }
    },
    init: function (o) {
        var settings = {
            addParentClass: false,
            addFirstLast: false,
            addHoverClass: false,
            eventClick: true,
            clickDisabled: true,
            cssShow: { position: 'static', left: 0 },
            cssHide: { position: 'absolute', left: '-9999px' },
            activeClass: 'active',
            parentActiveClass: 'parentactive',
            firstClass: 'first',
            lastClass: 'last',
            hoverClass: 'hover',
            tagTabMenu: 'ul',
            classTabMenu: 'tabset',
            tagBtnTabMenu: 'a',
            classBtnTabMenu: 'tab'
        };
        if (typeof (o) == 'object') {
            for (var key in o) if (typeof (settings[key]) == typeof (o[key])) settings[key] = o[key];
        }
        this.sets = document.getElementsByTagName(settings.tagTabMenu);
        for (var i = 0; i < this.sets.length; i++) {
            if (this.hasClass(this.sets[i], settings.classTabMenu)) {
                var tab = [];
                var btn = this.sets[i].getElementsByTagName(settings.tagBtnTabMenu);
                if (btn.length > 1 && settings.addFirstLast) {
                    this.addClass(btn[0].parentNode, settings.firstClass);
                    this.addClass(btn[0], settings.firstClass);
                    this.addClass(btn[btn.length - 1].parentNode, settings.lastClass);
                    this.addClass(btn[btn.length - 1], settings.lastClass);
                }
                for (var j = 0; j < btn.length; j++) {
                    if (settings.addHoverClass) {
                        btn[j].parentNode.onmouseover = function () { classTabs.addClass(this, settings.hoverClass); };
                        btn[j].parentNode.onmouseout = function () { classTabs.removeClass(this, settings.hoverClass); };
                    }
                    if (this.hasClass(btn[j], settings.classBtnTabMenu)) {
                        var _hr = btn[j].href;
                        if (_hr.indexOf('#') != -1) {
                            _hr = _hr.substr(_hr.indexOf("#") + 1);
                            if (_hr.length > 0) {
                                btn[j].hr = _hr;
                                btn[j].parent = btn[j].parentNode;
                                tab.push(btn[j]);
                                btn[j].tab = tab;
                                var c = document.getElementById(_hr);
                                if (c) {
                                    if (this.hasClass(btn[j], settings.activeClass)) {
                                        this.applyCss(c, settings.cssShow);
                                        if (settings.addParentClass && !this.hasClass(btn[j].parent, settings.parentActiveClass)) {
                                            this.addClass(btn[j].parent, settings.parentActiveClass);
                                        }
                                    } else {
                                        this.applyCss(c, settings.cssHide);
                                    }
                                }
                                if (settings.eventClick) {
                                    btn[j].onclick = function () {
                                        classTabs.applyEvent(this, settings);
                                        return false;
                                    };
                                } else {
                                    btn[j].onmouseover = function () {
                                        classTabs.applyEvent(this, settings);
                                    };
                                    if (settings.clickDisabled) {
                                        btn[j].onclick = function () { return false; };
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
};

// initGallery
function initGallery() {
    jQuery('.gallery-block').fadeGallery({
        slideElements: '.gallery-list > li',
        pagerLinks: '.switcher > li',
        btnPlayPause: 'a.pause',
        pausedClass: 'paused',
        playClass: 'playing',
        activeClass: 'active',
        noCircle: false,
        pauseOnHover: true,
        autoRotation: true,
        autoHeight: false,
        stopAfterClick: false,
        switchTime: 4000,
        duration: 650
    });

    jQuery('.carousel-holder').scrollGallery({
        sliderHolder: '.carousel',
        pagerLinks: 'div.pager a',
        btnPrev: 'a.prev',
        btnNext: 'a.next',
        circleSlide: true,
        pauseOnHover: true,
        autoRotation: false,
        switchTime: 5000,
        duration: 650
    });
}



// slideshow plugin
jQuery.fn.fadeGallery = function (_options) {
    var _options = jQuery.extend({
        slideElements: 'div.slideset > div',
        pagerLinks: 'div.pager a',
        btnNext: 'a.next',
        btnPrev: 'a.prev',
        btnPlayPause: 'a.play-pause',
        btnPlay: 'a.play',
        btnPause: 'a.pause',
        pausedClass: 'paused',
        disabledPrevClass: 'prev-disabled',
        disabledNextClass: 'next-disabled',
        playClass: 'playing',
        activeClass: 'active',
        loadingClass: 'ajax-loading',
        loadedClass: 'slide-loaded',
        dynamicImageLoad: false,
        dynamicImageLoadAttr: 'alt',
        currentNum: false,
        allNum: false,
        startSlide: null,
        noCircle: false,
        pauseOnHover: true,
        autoRotation: false,
        autoHeight: false,
        onBeforeFade: false,
        onAfterFade: false,
        onChange: false,
        disableWhileAnimating: false,
        stopAfterClick: false,
        switchTime: 5000,
        duration: 650,
        event: 'click'
    }, _options);

    return this.each(function () {
        // gallery options
        if (this.slideshowInit) return;
        else this.slideshowInit;
        var _this = jQuery(this);
        var _slides = jQuery(_options.slideElements, _this);
        var _pagerLinks = jQuery(_options.pagerLinks, _this);
        var _btnPrev = jQuery(_options.btnPrev, _this);
        var _btnNext = jQuery(_options.btnNext, _this);
        var _btnPlayPause = jQuery(_options.btnPlayPause, _this);
        var _btnPause = jQuery(_options.btnPause, _this);
        var _btnPlay = jQuery(_options.btnPlay, _this);
        var _pauseOnHover = _options.pauseOnHover;
        var _dynamicImageLoad = _options.dynamicImageLoad;
        var _dynamicImageLoadAttr = _options.dynamicImageLoadAttr;
        var _autoRotation = _options.autoRotation;
        var _activeClass = _options.activeClass;
        var _loadingClass = _options.loadingClass;
        var _loadedClass = _options.loadedClass;
        var _disabledNextClass = _options.disabledNextClass;
        var _disabledPrevClass = _options.disabledPrevClass;
        var _pausedClass = _options.pausedClass;
        var _playClass = _options.playClass;
        var _autoHeight = _options.autoHeight;
        var _stopAfterClick = _options.stopAfterClick;
        var _duration = _options.duration;
        var _switchTime = _options.switchTime;
        var _controlEvent = _options.event;
        var _currentNum = (_options.currentNum ? jQuery(_options.currentNum, _this) : false);
        var _allNum = (_options.allNum ? jQuery(_options.allNum, _this) : false);
        var _startSlide = _options.startSlide;
        var _noCycle = _options.noCircle;
        var _onChange = _options.onChange;
        var _onBeforeFade = _options.onBeforeFade;
        var _onAfterFade = _options.onAfterFade;
        var _disableWhileAnimating = _options.disableWhileAnimating;

        // gallery init
        var _anim = false;
        var _hover = false;
        var _prevIndex = 0;
        var _currentIndex = 0;
        var _slideCount = _slides.length;
        var _timer;
        if (_slideCount < 2) return;

        _prevIndex = _slides.index(_slides.filter('.' + _activeClass));
        if (_prevIndex < 0) _prevIndex = _currentIndex = 0;
        else _currentIndex = _prevIndex;
        if (_startSlide != null) {
            if (_startSlide == 'random') _prevIndex = _currentIndex = Math.floor(Math.random() * _slideCount);
            else _prevIndex = _currentIndex = parseInt(_startSlide);
        }
        _slides.hide().eq(_currentIndex).show();
        if (_autoRotation) _this.removeClass(_pausedClass).addClass(_playClass);
        else _this.removeClass(_playClass).addClass(_pausedClass);
        if (_autoHeight) _slides.eq(_currentIndex).parent().css({ height: _slides.eq(_currentIndex).outerHeight(true) });

        // gallery control
        if (_btnPrev.length) {
            _btnPrev.bind(_controlEvent, function () {
                if (_stopAfterClick) {
                    _autoRotation = false;
                    if (_timer) clearTimeout(_timer);
                    _this.removeClass(_playClass).addClass(_pausedClass);
                }
                prevSlide();
                return false;
            });
        }
        if (_btnNext.length) {
            _btnNext.bind(_controlEvent, function () {
                if (_stopAfterClick) {
                    _autoRotation = false;
                    if (_timer) clearTimeout(_timer);
                    _this.removeClass(_playClass).addClass(_pausedClass);
                }
                nextSlide();
                return false;
            });
        }
        if (_pagerLinks.length) {
            _pagerLinks.each(function (_ind) {
                jQuery(this).bind(_controlEvent, function () {
                    if (_currentIndex != _ind) {
                        if (_disableWhileAnimating && _anim) return;
                        _prevIndex = _currentIndex;
                        _currentIndex = _ind;
                        if (_stopAfterClick) {
                            _autoRotation = false;
                            if (_timer) clearTimeout(_timer);
                            _this.removeClass(_playClass).addClass(_pausedClass);
                        }
                        switchSlide();
                    }
                    return false;
                });
            });
        }

        // play pause section
        if (_btnPlayPause.length) {
            _btnPlayPause.bind(_controlEvent, function () {
                if (_this.hasClass(_pausedClass)) {
                    _this.removeClass(_pausedClass).addClass(_playClass);
                    _autoRotation = true;
                    autoSlide();
                } else {
                    _autoRotation = false;
                    if (_timer) clearTimeout(_timer);
                    _this.removeClass(_playClass).addClass(_pausedClass);
                }
                return false;
            });
        }
        if (_btnPlay.length) {
            _btnPlay.bind(_controlEvent, function () {
                _this.removeClass(_pausedClass).addClass(_playClass);
                _autoRotation = true;
                autoSlide();
                return false;
            });
        }
        if (_btnPause.length) {
            _btnPause.bind(_controlEvent, function () {
                _autoRotation = false;
                if (_timer) clearTimeout(_timer);
                _this.removeClass(_playClass).addClass(_pausedClass);
                return false;
            });
        }

        // dynamic image loading (swap from ATTRIBUTE)

        function loadSlide(slide) {
            if (!slide.hasClass(_loadingClass) && !slide.hasClass(_loadedClass)) {
                var images = slide.find(_dynamicImageLoad); // pass selector here
                var imagesCount = images.length;
                if (imagesCount) {
                    slide.addClass(_loadingClass);
                    images.each(function () {
                        var img = this;
                        img.onload = function () {
                            img.loaded = true;
                            img.onload = null;
                            setTimeout(reCalc, _duration);
                        };
                        img.setAttribute('src', img.getAttribute(_dynamicImageLoadAttr));
                        img.setAttribute(_dynamicImageLoadAttr, '');
                    }).css({ opacity: 0 });

                    function reCalc() {
                        var cnt = 0;
                        images.each(function () {
                            if (this.loaded) cnt++;
                        });
                        if (cnt == imagesCount) {
                            slide.removeClass(_loadingClass);
                            images.animate({ opacity: 1 }, {
                                duration: _duration,
                                complete: function () {
                                    if (jQuery.browser.msie && jQuery.browser.version < 9) jQuery(this).css({ opacity: 'auto' });
                                }
                            });
                            slide.addClass(_loadedClass);
                        }
                    }
                }
            }
        }

        // gallery animation

        function prevSlide() {
            if (_disableWhileAnimating && _anim) return;
            _prevIndex = _currentIndex;
            if (_currentIndex > 0) _currentIndex--;
            else {
                if (_noCycle) return;
                else _currentIndex = _slideCount - 1;
            }
            switchSlide();
        }

        function nextSlide() {
            if (_disableWhileAnimating && _anim) return;
            _prevIndex = _currentIndex;
            if (_currentIndex < _slideCount - 1) _currentIndex++;
            else {
                if (_noCycle) return;
                else _currentIndex = 0;
            }
            switchSlide();
        }

        function refreshStatus() {
            if (_dynamicImageLoad) loadSlide(_slides.eq(_currentIndex));
            if (_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentIndex).addClass(_activeClass);
            if (_currentNum) _currentNum.text(_currentIndex + 1);
            if (_allNum) _allNum.text(_slideCount);
            _slides.eq(_prevIndex).removeClass(_activeClass);
            _slides.eq(_currentIndex).addClass(_activeClass);
            if (_noCycle) {
                if (_btnPrev.length) {
                    if (_currentIndex == 0) _btnPrev.addClass(_disabledPrevClass);
                    else _btnPrev.removeClass(_disabledPrevClass);
                }
                if (_btnNext.length) {
                    if (_currentIndex == _slideCount - 1) _btnNext.addClass(_disabledNextClass);
                    else _btnNext.removeClass(_disabledNextClass);
                }
            }
            if (typeof _onChange === 'function') {
                _onChange(_this, _slides, _prevIndex, _currentIndex);
            }
        }

        function switchSlide() {
            _anim = true;
            if (typeof _onBeforeFade === 'function') _onBeforeFade(_this, _slides, _prevIndex, _currentIndex);
            _slides.eq(_prevIndex).fadeOut(_duration, function () {
                _anim = false;
            });
            _slides.eq(_currentIndex).fadeIn(_duration, function () {
                if (typeof _onAfterFade === 'function') _onAfterFade(_this, _slides, _prevIndex, _currentIndex);
            });
            if (_autoHeight) _slides.eq(_currentIndex).parent().animate({ height: _slides.eq(_currentIndex).outerHeight(true) }, { duration: _duration, queue: false });
            refreshStatus();
            autoSlide();
        }

        // autoslide function

        function autoSlide() {
            if (!_autoRotation || _hover) return;
            if (_timer) clearTimeout(_timer);
            _timer = setTimeout(nextSlide, _switchTime + _duration);
        }

        if (_pauseOnHover) {
            _this.hover(function () {
                _hover = true;
                if (_timer) clearTimeout(_timer);
            }, function () {
                _hover = false;
                autoSlide();
            });
        }
        refreshStatus();
        autoSlide();
    });
};

// scrolling gallery plugin
jQuery.fn.scrollGallery = function (_options) {
    var _options = jQuery.extend({
        sliderHolder: '>div',
        slider: '>ul',
        slides: '>li',
        pagerLinks: 'div.pager a',
        btnPrev: 'a.link-prev',
        btnNext: 'a.link-next',
        activeClass: 'active',
        disabledPrevClass: 'prev-disabled',
        disabledNextClass: 'next-disabled',
        generatePagination: 'div.pg-holder',
        curNum: 'em.scur-num',
        allNum: 'em.sall-num',
        circleSlide: true,
        pauseClass: 'gallery-paused',
        pauseButton: 'none',
        pauseOnHover: true,
        autoRotation: false,
        stopAfterClick: false,
        switchTime: 5000,
        duration: 650,
        easing: 'swing',
        event: 'click',
        splitCount: false,
        afterInit: false,
        vertical: false,
        step: false
    }, _options);

    return this.each(function () {
        // gallery options
        var _this = jQuery(this);
        var _sliderHolder = jQuery(_options.sliderHolder, _this);
        var _slider = jQuery(_options.slider, _sliderHolder);
        var _slides = jQuery(_options.slides, _slider);
        var _btnPrev = jQuery(_options.btnPrev, _this);
        var _btnNext = jQuery(_options.btnNext, _this);
        var _pagerLinks = jQuery(_options.pagerLinks, _this);
        var _generatePagination = jQuery(_options.generatePagination, _this);
        var _curNum = jQuery(_options.curNum, _this);
        var _allNum = jQuery(_options.allNum, _this);
        var _pauseButton = jQuery(_options.pauseButton, _this);
        var _pauseOnHover = _options.pauseOnHover;
        var _pauseClass = _options.pauseClass;
        var _autoRotation = _options.autoRotation;
        var _activeClass = _options.activeClass;
        var _disabledPrevClass = _options.disabledPrevClass;
        var _disabledNextClass = _options.disabledNextClass;
        var _easing = _options.easing;
        var _duration = _options.duration;
        var _switchTime = _options.switchTime;
        var _controlEvent = _options.event;
        var _step = _options.step;
        var _vertical = _options.vertical;
        var _circleSlide = _options.circleSlide;
        var _stopAfterClick = _options.stopAfterClick;
        var _afterInit = _options.afterInit;
        var _splitCount = _options.splitCount;

        // gallery init
        if (!_slides.length) return;

        if (_splitCount) {
            var curStep = 0;
            var newSlide = $('<slide>').addClass('split-slide');
            _slides.each(function () {
                newSlide.append(this);
                curStep++;
                if (curStep > _splitCount - 1) {
                    curStep = 0;
                    _slider.append(newSlide);
                    newSlide = $('<slide>').addClass('split-slide');
                }
            });
            if (curStep) _slider.append(newSlide);
            _slides = _slider.children();
        }

        var _currentStep = 0;
        var _sumWidth = 0;
        var _sumHeight = 0;
        var _hover = false;
        var _stepWidth;
        var _stepHeight;
        var _stepCount;
        var _offset;
        var _timer;

        _slides.each(function () {
            _sumWidth += $(this).outerWidth(true);
            _sumHeight += $(this).outerHeight(true);
        });

        // calculate gallery offset

        function recalcOffsets() {
            if (_vertical) {
                if (_step) {
                    _stepHeight = _slides.eq(_currentStep).outerHeight(true);
                    _stepCount = Math.ceil((_sumHeight - _sliderHolder.height()) / _stepHeight) + 1;
                    _offset = -_stepHeight * _currentStep;
                } else {
                    _stepHeight = _sliderHolder.height();
                    _stepCount = Math.ceil(_sumHeight / _stepHeight);
                    _offset = -_stepHeight * _currentStep;
                    if (_offset < _stepHeight - _sumHeight) _offset = _stepHeight - _sumHeight;
                }
            } else {
                if (_step) {
                    _stepWidth = _slides.eq(_currentStep).outerWidth(true) * _step;
                    _stepCount = Math.ceil((_sumWidth - _sliderHolder.width()) / _stepWidth) + 1;
                    _offset = -_stepWidth * _currentStep;
                    if (_offset < _sliderHolder.width() - _sumWidth) _offset = _sliderHolder.width() - _sumWidth;
                } else {
                    _stepWidth = _sliderHolder.width();
                    _stepCount = Math.ceil(_sumWidth / _stepWidth);
                    _offset = -_stepWidth * _currentStep;
                    if (_offset < _stepWidth - _sumWidth) _offset = _stepWidth - _sumWidth;
                }
            }
        }

        // gallery control
        if (_btnPrev.length) {
            _btnPrev.bind(_controlEvent, function () {
                if (!_btnPrev.hasClass(_disabledPrevClass)) {
                    if (_stopAfterClick) stopAutoSlide();
                    prevSlide();
                }
                return false;
            });
        }
        if (_btnNext.length) {
            _btnNext.bind(_controlEvent, function () {
                if (!_btnNext.hasClass(_disabledNextClass)) {
                    if (_stopAfterClick) stopAutoSlide();
                    nextSlide();
                }
                return false;
            });
        }
        if (_generatePagination.length) {
            _generatePagination.empty();
            recalcOffsets();
            var _list = $('<ul />');
            for (var i = 0; i < _stepCount; i++) $('<li><a href="#">' + (i + 1) + '</a></li>').appendTo(_list);
            _list.appendTo(_generatePagination);
            _pagerLinks = _list.children();
        }
        if (_pagerLinks.length) {
            _pagerLinks.each(function (_ind) {
                jQuery(this).bind(_controlEvent, function () {
                    if (_currentStep != _ind) {
                        if (_stopAfterClick) stopAutoSlide();
                        _currentStep = _ind;
                        switchSlide();
                    }
                    return false;
                });
            });
        }

        // gallery animation

        function prevSlide() {
            recalcOffsets();
            if (_currentStep > 0) _currentStep--;
            else if (_circleSlide) _currentStep = _stepCount - 1;
            switchSlide();
        }

        function nextSlide() {
            recalcOffsets();
            if (_currentStep < _stepCount - 1) _currentStep++;
            else if (_circleSlide) _currentStep = 0;
            switchSlide();
        }

        function refreshStatus() {
            if (_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentStep).addClass(_activeClass);
            if (!_circleSlide) {
                _btnPrev.removeClass(_disabledPrevClass);
                _btnNext.removeClass(_disabledNextClass);
                if (_currentStep == 0) _btnPrev.addClass(_disabledPrevClass);
                if (_currentStep == _stepCount - 1) _btnNext.addClass(_disabledNextClass);
            }
            if (_curNum.length) _curNum.text(_currentStep + 1);
            if (_allNum.length) _allNum.text(_stepCount);
        }

        function switchSlide() {
            recalcOffsets();
            if (_vertical) _slider.animate({ marginTop: _offset }, { duration: _duration, queue: false, easing: _easing });
            else _slider.animate({ marginLeft: _offset }, { duration: _duration, queue: false, easing: _easing });
            refreshStatus();
            autoSlide();
        }

        // autoslide function

        function stopAutoSlide() {
            if (_timer) clearTimeout(_timer);
            _this.addClass(_pauseClass);
            _autoRotation = false;
        }

        function autoSlide() {
            if (!_autoRotation || _hover) return;
            if (_timer) clearTimeout(_timer);
            _timer = setTimeout(nextSlide, _switchTime + _duration);
        }

        if (_pauseOnHover) {
            _this.hover(function () {
                _hover = true;
                if (_timer) clearTimeout(_timer);
            }, function () {
                _hover = false;
                autoSlide();
            });
        }
        recalcOffsets();
        refreshStatus();
        autoSlide();

        // pause buttton
        if (_pauseButton.length) {
            _pauseButton.click(function () {
                if (_this.hasClass(_pauseClass)) {
                    _this.removeClass(_pauseClass);
                    _autoRotation = true;
                    autoSlide();
                } else {
                    _this.addClass(_pauseClass);
                    stopAutoSlide();
                }
                return false;
            });
        }

        if (_afterInit && typeof _afterInit === 'function') _afterInit(_this, _slides);
    });
};

//This file consist of all js from file ajax-dynamic-content.js, ajax.js and new-fly-to-basket.js
//ajax-dynamic-content file
var loadingimage = "http://www.kontorsgiganten.se/images/loading.gif";
var enableCache = true;
var jsCache = new Array();
var dynamicContent_ajaxObjects = new Array();
function ajax_showContent(divId, ajaxIndex, url) {
    var targetObj = document.getElementById(divId);
    targetObj.innerHTML = dynamicContent_ajaxObjects[ajaxIndex].response;
    if (enableCache) {
        jsCache[url] = dynamicContent_ajaxObjects[ajaxIndex].response;
    }
    dynamicContent_ajaxObjects[ajaxIndex] = false;
    ajax_parseJs(targetObj);
}
function ajax_loadContent(divId, url) {
    if (enableCache && jsCache[url]) {
        document.getElementById(divId).innerHTML = jsCache[url];
        return;
    }
    var ajaxIndex = dynamicContent_ajaxObjects.length;
    document.getElementById(divId).innerHTML = '<table class="text" width="100%"><tr><td align="center">Laddar...<br /><IMG SRC="' + loadingimage + '" /></td></tr></table>'; //'Loading content - please wait';
    dynamicContent_ajaxObjects[ajaxIndex] = new sack();
    dynamicContent_ajaxObjects[ajaxIndex].requestFile = url; // Specifying which file to get
    dynamicContent_ajaxObjects[ajaxIndex].onCompletion = function () { ajax_showContent(divId, ajaxIndex, url); }; // Function that will be executed after file has been found
    dynamicContent_ajaxObjects[ajaxIndex].runAJAX(); 	// Execute AJAX function	
}
function ajax_parseJs(inputObj) {
    var jsTags = inputObj.getElementsByTagName('SCRIPT');
    for (var no = 0; no < jsTags.length; no++) {
        eval(jsTags[no].innerHTML);
    }
}
//ajax-dynamic-content file

//ajax file
function sack(file) {
    this.xmlhttp = null;
    this.resetData = function () {
        this.method = "POST";
        this.queryStringSeparator = "?";
        this.argumentSeparator = "&";
        this.URLString = "";
        this.encodeURIString = true;
        this.execute = false;
        this.element = null;
        this.elementObj = null;
        this.requestFile = file;
        this.vars = new Object();
        this.responseStatus = new Array(2);
    };
    this.resetFunctions = function () {
        this.onLoading = function () { };
        this.onLoaded = function () { };
        this.onInteractive = function () { };
        this.onCompletion = function () { };
        this.onError = function () { };
        this.onFail = function () { };
    };
    this.reset = function () {
        this.resetFunctions();
        this.resetData();
    };
    this.createAJAX = function () {
        try {
            this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e1) {
            try {
                this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e2) {
                this.xmlhttp = null;
            }
        }
        if (!this.xmlhttp) {
            if (typeof XMLHttpRequest != "undefined") {
                this.xmlhttp = new XMLHttpRequest();
            } else {
                this.failed = true;
            }
        }
    };
    this.setVar = function (name, value) {
        this.vars[name] = Array(value, false);
    };
    this.encVar = function (name, value, returnvars) {
        if (true == returnvars) {
            return Array(encodeURIComponent(name), encodeURIComponent(value));
        } else {
            this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
        }
    };
    this.processURLString = function (string, encode) {
        encoded = encodeURIComponent(this.argumentSeparator);
        regexp = new RegExp(this.argumentSeparator + "|" + encoded);
        varArray = string.split(regexp);
        for (i = 0; i < varArray.length; i++) {
            urlVars = varArray[i].split("=");
            if (true == encode) {
                this.encVar(urlVars[0], urlVars[1]);
            } else {
                this.setVar(urlVars[0], urlVars[1]);
            }
        }
    };
    this.createURLString = function (urlstring) {
        if (this.encodeURIString && this.URLString.length) {
            this.processURLString(this.URLString, true);
        }

        if (urlstring) {
            if (this.URLString.length) {
                this.URLString += this.argumentSeparator + urlstring;
            } else {
                this.URLString = urlstring;
            }
        }
        // prevents caching of URLString
        this.setVar("rndval", new Date().getTime());
        urlstringtemp = new Array();
        for (key in this.vars) {
            if (false == this.vars[key][1] && true == this.encodeURIString) {
                encoded = this.encVar(key, this.vars[key][0], true);
                delete this.vars[key];
                this.vars[encoded[0]] = Array(encoded[1], true);
                key = encoded[0];
            }

            urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
        }
        if (urlstring) {
            this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
        } else {
            this.URLString += urlstringtemp.join(this.argumentSeparator);
        }
    };
    this.runResponse = function () {
        eval(this.response);
    };
    this.runAJAX = function (urlstring) {
        if (this.failed) {
            this.onFail();
        } else {
            this.createURLString(urlstring);
            if (this.element) {
                this.elementObj = document.getElementById(this.element);
            }
            if (this.xmlhttp) {
                var self = this;
                if (this.method == "GET") {
                    totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
                    this.xmlhttp.open(this.method, totalurlstring, true);
                } else {
                    this.xmlhttp.open(this.method, this.requestFile, true);
                    try {
                        this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                    } catch (e) { }
                }
                this.xmlhttp.onreadystatechange = function () {
                    switch (self.xmlhttp.readyState) {
                        case 1:
                            self.onLoading();
                            break;
                        case 2:
                            self.onLoaded();
                            break;
                        case 3:
                            self.onInteractive();
                            break;
                        case 4:
                            self.response = self.xmlhttp.responseText;
                            self.responseXML = self.xmlhttp.responseXML;
                            self.responseStatus[0] = self.xmlhttp.status;
                            self.responseStatus[1] = self.xmlhttp.statusText;
                            if (self.execute) {
                                self.runResponse();
                            }
                            if (self.elementObj) {
                                elemNodeName = self.elementObj.nodeName;
                                elemNodeName.toLowerCase();
                                if (elemNodeName == "input"
								|| elemNodeName == "select"
								|| elemNodeName == "option"
								|| elemNodeName == "textarea") {
                                    self.elementObj.value = self.response;
                                } else {
                                    self.elementObj.innerHTML = self.response;
                                }
                            }
                            if (self.responseStatus[0] == "200") {
                                self.onCompletion();
                            } else {
                                self.onError();
                            }
                            self.URLString = "";
                            break;
                    }
                };
                this.xmlhttp.send(this.URLString);
            }
        }
    };
    this.reset();
    this.createAJAX();
}

function addToBasket(element, productId, quantity, displayType) {
    //var displayType = 0;
    var parsedQuantity = parseInt(quantity);
    if (parsedQuantity < 1) {
        parsedQuantity = 1;
    }
    addToBasketold(element, productId, parsedQuantity, displayType);
    if (displayType == 1) {
        getLightBoxContent(productId, parsedQuantity);
    }
}

function addToBasketold(element, productId, quantity, displayType) {
    var parsedQuantity = parseInt(quantity);

    if (parsedQuantity < 1) {
        parsedQuantity = 1;
    }
    if (displayType == 0) {
        displaySpinner(element);
    } else {
        $('#buy-lightbox-content').html('<div class="addingToBasket"><img src="/Content/images/ajax-loader.gif" alt="loading"/> Lägger till i varukorgen</div>');
    }
    $.ajax({
        url: "/Shopping/EditCartPartial",
        type: "POST",
        data: "productid=" + productId + "&qty=" + parsedQuantity,
        success: function (result) {
            $('#cartdata').html(result);
            if (displayType == 0) {
                displayAddToBasketInfo();
            }
        },
        error: function () {

        }
    });
}
function getLightBoxContent(productId, quantity) {
    $.ajax({
        url: "/Product/GetProductInformation",
        type: "POST",
        data: "productid=" + productId + "&qty=" + quantity,
        success: function (result) {
            $('#buy-lightbox-content').html(result);
        },
        error: function () {

        }
    });
}

function displaySpinner(element) {
    $('#addToBasketInfo').hide();
    $("#spinner").css({
        top: (getY(element) + 47) + "px",
        left: (getX(element) - 47) + "px"
    });
    $("#spinner").show();
}

function displayAddToBasketInfo(event) {

    $("#addToBasketInfo").css({
        top: ($('#spinner').position().top) + "px",
        left: ($('#spinner').position().left) + "px"
    });
    hideSpinner();
    $('#addToBasketInfo').show();
    setTimeout("$('#addToBasketInfo').fadeOut(250);$(document).unbind('mousemove');", 500);
}

function getY(oElement) {
    var iReturnValue = 0;
    while (oElement != null) {
        iReturnValue += oElement.offsetTop;
        oElement = oElement.offsetParent;
    }
    return iReturnValue;
}

function getX(oElement) {
    var iReturnValue = 0;
    while (oElement != null) {
        iReturnValue += oElement.offsetLeft;
        oElement = oElement.offsetParent;
    }
    return iReturnValue;
}

function hideSpinner() {
    $('#spinner').fadeOut(200);
    $(document).unbind('mousemove');
}

function tonerToggle(linkelement) {
    $(linkelement).parent().parent().find('.toner-list').slideToggle();
    return false;
}
function updateCartBox() {
    $('#cartdata').load("/Shopping/ShoppingCart?rand=" + Math.random());
}

function GetOrderProducts(element, orderId) {
    $('#' + orderId + '-con').toggle();
    if ($('#' + orderId + '-img').length) {
        $.ajax({
            url: '/Account/OrderProducts',
            type: 'POST',
            data: 'orderId=' + orderId,
            success: function (result) {
                $('#' + orderId + '-con').html(result);
            },
            error: function () {

            }
        });
    }
}

function GetListProducts(listId) {
    if (listId > 0) {
        $.ajax({
            url: '/Account/ListProducts',
            type: 'POST',
            data: 'listId=' + listId,
            success: function (result) {
                $('#prodlist').html(result);
            },
            error: function () {

            }
        });
    }
}

function setCookie(vat) {
    $.ajax({
        url: "/Shopping/SetVatCookie",
        type: "POST",
        data: "vat=" + vat,
        success: function (result) {
            location.reload();
        },
        error: function () {
            alert('något gick fel, vänligen försök igen.');
        }
    });
}

function updateHeader() {
    $('#account_header').load('/Home/UpdateHeader #nav');
}

function getLoader() {
    $('#lightbox-content').html('<img src="/Content/images/ajax-loader.gif" alt="loading"/>');
    //$('#account_header').load('/Home/UpdateHeader #nav');
    //location.reload();
}

function closeColorbox() {
    $.fn.colorbox.close();
    return false;
}

function setShippingAndPayMethod() {
    $.ajax({
        url: "/Checkout/AddShippingAndPayMethodType",
        type: "POST",
        data: "payMethodId=" + $("input[name=PayMethodId]:checked").val() + "&shippingTypeId=" + $("input[name=ShippingTypeId]:checked").val(),
        success: function (result) {
            $('#CartItems').html(result);
            updateCartBox();
        },
        error: function () {

        }
    });
}

//NIKLAS
$(document).ready(function () {

    $(".buyit").colorbox({ width: "835px", height: "490px", inline: true, href: "#buy-lightbox-content", transition: 'none', opacity: '0.8' });

    $(".display-lightbox").colorbox({ width: "650px", height: "350px", inline: true, href: "#lightbox-content", transition: 'none', opacity: '0.8' });

    $("#orderproducts").click(function () {
        if ((navigator.userAgent.indexOf("Firefox") < 0)) {
            window.location.href = $(this).attr('href');
        }
        $("#orderproducts").parent().html("<strong style=\"display:block;text-align:right;\"><img src=\"/content/images/ajax-loader.gif\" /> Skickar...</strong>");
    });

    //Handle back button cart reload
    $('#cartdata').load("/Shopping/ShoppingCart?rand=" + Math.random());

    //Handle text in quicksearch bar
    $('#searchstring').focus(function () {
        if ($(this).val() == 'Sök produkt eller artikelnummer') {
            $(this).val('');
            $(this).css({ 'color': '#000', 'font-style': 'normal' });
        }
    });
    $('#searchstring').blur(function () {
        if ($(this).val() == '') {
            $(this).val('Sök produkt eller artikelnummer');
            $(this).css({ 'color': '#999', 'font-style': 'italic' });
        }
    });
    if ($('#searchstring').val() == '') {
        $('#searchstring').css({ 'color': '#999', 'font-style': 'italic' });
        $('#searchstring').val('Sök produkt eller artikelnummer');
    }

    //Scroll to top if something goes wrong while trying to register
    $("#registerUser").click(function () {
        $("#RegisterLoginBlock").hide();
        $.scrollTo('#registerH1');
    });

    //Show a colorbox while clicking on product image
    $("a[rel='zoom'], a[rel='zoom2']").colorbox({ transition: 'none', inline: false, photo: true });

    //Toggle in view AccountOrders, show content of old orders
    $('.order-content').hide();
    $('.order-expand').click(function () { $(this).toggleClass('active'); });

    $('.order-expand').hover(function () {
        $(this).css('cursor', 'pointer');
    }, function () {
        $(this).css('cursor', 'auto');
    });

    //Toggle in view toner guide
    $('.brand-content').hide();
    $('.brand-expand').click(function () { $(this).parent().find('.brand-content').toggle(); });

    $('.brand-expand').hover(function () {
        $(this).css('cursor', 'pointer');
    }, function () {
        $(this).css('cursor', 'auto');
    });



    //Toggle view of the cart box on mouseover
    $(".cart-box").mouseenter(function () {
        $(".articles").show();
    }).mouseleave(function () {
        $(".articles").hide();
    });

    $('body').mouseleave(function () {
        if (".articles".is(":visible")) {
            $(".articles").hide();
        }
    });

    //Toggle view of environment codes
    $(".miljo").mouseenter(function () {
        $("#miljo-content").show();
    }).mouseleave(function () {
        $("#miljo-content").hide();
    });


    $("#search").focus(function () {
        $(".search-flyout").slideDown();
    }).blur(function () {
        $(".search-flyout").hide();
    });

    $(".open-close").click(function () {
        if ($("#show-all-categories").hasClass('active')) {
            $("#show-all-categories").removeClass('active');
            return false;
        } else {
            $("#show-all-categories").addClass('active');
            return false;
        }
    });

    //$("#login_link, #register_login_link, .login_link").colorbox({ width: "650px", inline: true, href: ".lightbox-logon", transition: 'none', opacity: '0.8', scrolling: 'false' });
    $('.lightbox').find('form').submit(function () { $.colorbox.resize(); });

    if ($('input:radio[name=PayMethodId]:checked').val() != 2) $("#orgnr").hide();

    $('#poptionPay').click(function () {
        $("#orgnr").show();
        $('#invoiceadress').css('display', 'block');
    });

    $("#cardPay").click(function () {
        $("#orgnr").hide();
        $('#invoiceadress').css('display', 'none');
    });

    if ($('#invoiceaddr').attr('checked'))
        $('#invoicedetails').css('display', 'none');
    else
        $('#invoicedetails').css('display', 'block');

    $('#invoiceaddr').change(function () {
        if ($('#invoiceaddr').attr('checked'))
            $('#invoicedetails').css('display', 'none');
        else
            $('#invoicedetails').css('display', 'block');
    });
    $('#invoiceadress').css('display', 'none');
    $("input[name=poption]").change(function () {
        changed_paymentoption();
    });
    $('#infomessage').css('display', 'none');
    $("input[name=IsCompany]").change(function () {
        if ($("input[name=IsCompany]:checked").val() == 'True') {
            $('#infomessage').css('display', 'none');
            $('#payinvoice').css('display', 'block');
        }
        else if ($("input[name=IsCompany]:checked").val() == 'False') {
            $('#infomessage').css('display', 'block');

            //remove invoice option. Select card payment
            $('#payinvoice').css('display', 'none');
            $("#cardPay").attr('checked', 'checked');
            $('#orgnr').css('display', 'none');
            $('#invoiceadress').css('display', 'none');
        }
    });

    var mouse_is_inside = false;
    $('.search-flyout').hover(function () {
        mouse_is_inside = true;
    }, function () {
        mouse_is_inside = false;
    });
    $("body").mouseup(function () {
        if (!mouse_is_inside) $('.search-flyout').hide();
    });

    $(".subcat-row").mouseover(function () {
        group = $(this).parent().parent().parent().parent();
        group.find('.subcat-row').removeClass('sel');
        $(this).addClass('sel');
        url = $(this).find("a").attr("href");
        id = $(this).find(".code").html();
        name = $(this).find(".name a").text();

        target = group.find('.frame');

        target.find("a").attr("href", url);
        target.find("img").attr({ "src": "/Images/GetImage/?id=" + id + "&height=120&width=120", "alt": name });
    });

    $("#searchstring").keyup(function (e) {
        var searchstr = $.trim($("#searchstring").val());
        if (e.keyCode == 13) {
            return true;
        }
        else if (searchstr.length > 1) {
            $(".search-flyout").slideDown();
            $(".search-flyout").load("/QuickSearch/" + escape(searchstr) + "/10");
        } else {
            $(".search-flyout").hide();
        }
    });

    if ($("#ProductListId").val() > 0) {
        GetListProducts($("#ProductListId").val());
    }

    $("#ProductListId").change(function () {
        if ($("#ProductListId").val() > 0) {
            GetListProducts($("#ProductListId").val());
        }
    });
});


function changed_paymentoption() {
    if ($("input[name=poption]:checked").val() == 'card') {
        //hide orgnr
        $('#orgnr').css('display', 'none');
        $('#invoiceadress').css('display', 'none');
    }
    else if ($("input[name=poption]:checked").val() == 'invoice') {
        //show orgnr
        $('#orgnr').css('display', 'block');
        $('#invoiceadress').css('display', 'block');
    }
}

function simple_tooltip(target_items, name) {
    $(target_items).each(function (i) {
        $("body").append("<div class='" + name + "' id='" + name + i + "'>" + $(this).attr('title') + "</div>");
        var my_tooltip = $("#" + name + i);

        $(this).removeAttr("title").mouseover(function () {
            my_tooltip.css({ opacity: 1, display: "none" }).fadeIn(200);
        }).mousemove(function (kmouse) {
            my_tooltip.css({ left: kmouse.pageX + 15, top: kmouse.pageY + 15 });
        }).mouseout(function () {
            my_tooltip.fadeOut(200);
        });
    });
}

