jQuery.ajaxSetup({
    'beforeSend': function (xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
});

function initNavigation() {
	var _slideSpeed = 250;
	var _activeClass = 'open';
	var _activeTabClass = 'active';
	var _dropItems = $('ul.nav > li');

	_dropItems.each(function(){
		var _holder = $(this);
		var _opener = _holder.find('div.link-holder a');
		var _drop = _holder.find('div.drop-down').hide();
		var _tabs = _holder.find('div.drop-down-holder');

		// main navigation onclick
		if(_drop.length) {
			_opener.click(function(){
				if(_holder.hasClass(_activeClass)) {
					_holder.removeClass(_activeClass);
					_drop.slideUp(_slideSpeed);
				} else {
					_dropItems.filter('.'+_activeClass).removeClass(_activeClass).find('div.drop-down').slideUp(_slideSpeed);

					_holder.addClass(_activeClass);
					_drop.slideDown(_slideSpeed);
				}
				return false;
			});
		}

		// subnavigation tabs
		if(_tabs.length) {
			var _tablinks = _tabs.find('ul.categories a');
			var _tablist = _tabs.find('div.sub-categories > div.tab-content');
			_tablinks.each(function(_ind){
				$(this).click(function(){
					_tablinks.removeClass(_activeTabClass).eq(_ind).addClass(_activeTabClass);
					_tablist.hide().eq(_ind).show();
					return false;
				});
			});
			_tablinks.eq(0).trigger('click');
		}

		// hide drop if clicked elsewhere
		$('body').click(function(e){
			if(!e) e = window.event;
			var _target = (e.target || e.srcElement);
			if (!$(_target).parents('ul.nav').length) {
				_holder.removeClass(_activeClass);
				_drop.slideUp(_slideSpeed);
			}
		});
	});
}

function initHeaderArea() {
	var _slideSpeed = 450;
	var _header = $('#header');
	var _activeClass = 'active';
	var _btnLogin = _header.find('a.btn-login');
	var _btnSearch = _header.find('a.btn-search');
	var _areaLogin = _header.find('div.login-holder');
	var _areaSearch = _header.find('div.search-holder');

	_btnLogin.click(function(){
		if(_btnLogin.hasClass(_activeClass)) {
			toggleBlock(_areaLogin, _btnLogin, true, _areaSearch, _btnSearch);
		} else {
			toggleBlock(_areaLogin, _btnLogin, false, _areaSearch, _btnSearch);
		}
		return false;
	});

	_btnSearch.click(function(){
		if(_btnSearch.hasClass(_activeClass)) {
			toggleBlock(_areaSearch, _btnSearch, true, _areaLogin, _btnLogin);
		} else {
			toggleBlock(_areaSearch, _btnSearch, false, _areaLogin, _btnLogin);
		}
		return false;
	});

	function toggleBlock(_block, _opener, _state, _hblock, _hopener) {
		if(_state) {
			_block.slideUp(_slideSpeed)
			_opener.removeClass(_activeClass);
		} else {
			_hblock.slideUp(_slideSpeed,function(){
				_block.slideDown(_slideSpeed)
				_opener.addClass(_activeClass);
			});
			_hopener.removeClass(_activeClass);
		}
	}
}

function initContentPopups() {
	var _slideSpeed = 350;
	var _activeClass = 'active';
	$('div.popup-holder').each(function(){
		var _holder = $(this);
		var _opener = _holder.find('>a.opener');
		var _slider = _holder.find('>div.popup');
        _opener.unbind('click');
		_opener.click(function(){
			if(_holder.hasClass(_activeClass)) {
				_slider.slideUp(_slideSpeed);
				_holder.removeClass(_activeClass)
			} else {
				_slider.slideDown(_slideSpeed);
				_holder.addClass(_activeClass)
			}
			return false;
		});

        $('body').unbind('click');
		$('body').click(function(e){
			if(!e) e = window.event;
			var _target = (e.target || e.srcElement);
			if (!$(_target).parents('div.popup-holder').length) {
				_slider.slideUp(_slideSpeed);
				_holder.removeClass(_activeClass)
			}
		});

	});
}

function initContentAccordion() {
	var _activeClass = 'link-expanded';
	var _slideSpeed = 650;

	$('div.over').each(function(){
		var _holder = $(this);
		var _opener = _holder.find('div.link-more');
		var _slider = _holder.find('div.tools-holder');

		var _minHeight = _slider.height();
		_slider.css({height:'auto'});
		var _maxHeight = _slider.height();
		_slider.css({height:_minHeight});

		_opener.find('a').click(function(){
			if(_opener.hasClass(_activeClass)) {
				_slider.animate({height:_minHeight},{duration:_slideSpeed});
				_opener.removeClass(_activeClass);
			} else {
				_slider.animate({height:_maxHeight},{duration:_slideSpeed});
				_opener.addClass(_activeClass);
			}
			return false;
		});
	});
}

function initScrollGallery() {
	var _slideSpeed = 450;
	var _disabledClass = 'disabled';

	$('div.img-select, div.video-select, div.related-list').each(function(){
		var _holder = $(this);
		var _btnPrev = _holder.find('a.prev');
		var _btnNext = _holder.find('a.next');
		var _slidesHolder = _holder.find('div.view-list, div.related-holder');
		var _slider = _slidesHolder.find('>ul');
		var _slides = _slider.find('>li');
		var _slideWidth = _slides.eq(0).outerWidth(true);
		var _holderWidth = _slidesHolder.outerWidth(true);
		var _currentIndex = 0;
		var _visibleCount = Math.floor(_holderWidth / _slideWidth);
		var _stepCount = _slides.length - _visibleCount;

		_btnPrev.click(function(){
			prevSlide();
			return false;
		});
		_btnNext.click(function(){
			nextSlide();
			return false;
		});
		function prevSlide() {
			if(_currentIndex>0) {
				_currentIndex--;
			}
			switchSlide();
		}
		function nextSlide() {
			if(_currentIndex<_stepCount) {
				_currentIndex++;
			}
			switchSlide();
		}
		function switchSlide() {
			_btnPrev.removeClass(_disabledClass);
			_btnNext.removeClass(_disabledClass);
			if(_currentIndex == 0) _btnPrev.addClass(_disabledClass);
			if(_stepCount <= 0 || _currentIndex == _stepCount) _btnNext.addClass(_disabledClass);

			_offset = -_currentIndex*_slideWidth;
			_slider.animate({marginLeft:_offset},{duration:_slideSpeed,queue:false});
		}
		switchSlide();
	});
}

function initGalleryTabs() {
	$('div.tab-wrap').each(function(){
		var _list = $(this);
		var _links = _list.find('div.view-list ul li a');

		_links.each(function() {
			var _link = $(this);
			var _href = _link.attr('href');
			var _tab = $(_href);

			if(_link.hasClass('active')) _tab.show();
			else _tab.hide();

			_link.click(function(){
				_links.filter('.active').each(function(){
					$($(this).removeClass('active').attr('href')).hide();
                    // if video, remove it!
                    var _one_href = $(this).attr('href');
                    if (swfobject && _one_href.substring(0,10) == '#video-tab') {
                        swfobject.removeSWF('video-holder' + _one_href.substring(10));
                        // re-add the image-box block
                        $('#video-tab' + _one_href.substring(10)).append('<div class="wrap-left" id="video-holder' + _one_href.substring(10) + '"><div class="wrap-right">Flash is required to display this video.</div></div>');
                    }
				});
				_link.addClass('active');
                // if video, display it!
                if (swfobject && _href.substring(0,10) == '#video-tab') {
                    var params = {quality: "high", scale: "noscale", wmode: "window", allowscriptaccess: "always", bgcolor: "#FFFFFF"};
                    var flashvars = {vid: "/video/filename/" + videos[parseInt(_href.substring(10))]}; //{vid: "/product_video/video/test.flv"};
                    var attributes = {id: 'video-holder' + _href.substring(10)};
                    swfobject.embedSWF("/product_video/videoPlayer.swf", attributes.id, "438", "254", "10.0.0", "/product_video/expressInstall.swf", flashvars, params, attributes);
                }
				_tab.show();
				return false;
			});
		});
		_links.eq(0).trigger('click');
	});
}

function initImageZoom() {
	var _fadeSpeed = 150;
	var _previewHolder = $('div.flash-center');
	var _previewArea = $('<div class="zoompreview"><div class="img-wrap"></div></div>').hide();
	_previewHolder.append(_previewArea);
    var _previewWidth = _previewArea.width();
    var _previewHeight = _previewArea.height();

	$('a.zoom-link').each(function(){
		var _holder = $(this);

        var _img;
		var _imgW;
		var _imgH;

        var _parent = _holder.parent();
		var _zoomLens = $('<span class="zoom-label"></span>').hide();
		var _offsetX = _holder.offset().left;
		var _offsetY = _holder.offset().top;
		_holder.append(_zoomLens);

        var _lensWidth;
        var _lensHeight;
        var _diffX;
        var _diffY;

		var _holderWidth = _holder.width();
		var _holderHeight = _holder.height();

        // resize zoom lens based on large image vs. small image dimensions
        var _main_img = jQuery('img', _holder);
        var _main_img_width = _main_img.width();
        var _main_img_height = _main_img.height();

		// show/hide lens
		_holder.hover(function(e){
            _img = $('<img src="'+_holder.attr('href')+'" alt="" />');
            _img.load(function(){
                _imgW = _img.get(0).width;
                _imgH = _img.get(0).height;
                _zoomLens.width(_previewWidth * _main_img_width / _imgW); //resize width
                _zoomLens.height(_previewHeight * _main_img_height / _imgH); //resize height
                _lensWidth = _zoomLens.outerWidth(true);
                _lensHeight = _zoomLens.outerHeight(true);
                _diffX = _lensWidth/2;
                _diffY = _lensHeight/2;
                
                _offsetX = _holder.offset().left;
                _offsetY = _holder.offset().top;
                
                // hack because IE does not have pageX/pageY here
                var _pageX, _pageY;
                if (e.pageX != null && e.pageY != null) {
                    _pageX = e.pageX; _pageY = e.pageY;
                } else {
                    _pageX = e.clientX + e.scrollLeft;
                    _pageY = e.clientY + e.scrollTop;
                }

                positionLens(_pageX - _offsetX, _pageY - _offsetY);
    			_zoomLens.show();
            });
			_previewArea.find('div.img-wrap').empty().append(_img);
			_previewArea.fadeIn(_fadeSpeed);
            
		},function(){
			_previewArea.fadeOut(_fadeSpeed);
			_zoomLens.hide();
		});

        // mouse control function
		function positionLens(_x, _y) {
			if(_x-_diffX > 0) {
				if(_x+_diffX < _holderWidth) _zoomLens.css({left:_x-_diffX});
				else _zoomLens.css({left:_holderWidth-_diffX*2});
			}
			else _zoomLens.css({left:0});
			if(_y-_diffY > 0) {
				if(_y+_diffY < _holderHeight) _zoomLens.css({top:_y-_diffY});
				else _zoomLens.css({top:_holderHeight-_diffY*2});
			}
			else _zoomLens.css({top:0});

			var _calcX = parseInt(_zoomLens.css('left'));
			var _calcY = parseInt(_zoomLens.css('top'));
			var _bigImg = _previewArea.find('img').eq(0);
            if (_bigImg.get(0)) {
                _imgW = _bigImg.get(0).width;
                _imgH = _bigImg.get(0).height;
                var _pX = (_calcX/_holderWidth)*100;
                var _pY = (_calcY/_holderHeight)*100;
                var _oX = -(_imgW/100)*_pX;
                var _oY = -(_imgH/100)*_pY;
                _bigImg.css({
                    marginLeft:_oX,
                    marginTop:_oY
                });
            }
		}
		_holder.mousemove(function(e){
			_offsetX = _holder.offset().left;
			_offsetY = _holder.offset().top;
			positionLens(e.pageX - _offsetX, e.pageY - _offsetY);
		});
	});
}

$(window).bind("load", function() {
	initImageZoom();
	initNavigation();
	initHeaderArea();
	initContentPopups();
	initContentAccordion();
	initScrollGallery();
	initGalleryTabs();
});

$(document).ready(function () {
	if ($.facebox) {
    $.facebox.settings.opacity = 0.5;
    $('a#share').facebox();
	}
});
