/*
	Author: Volkan Altinbas & Mahir Yildirim
	Modified: 01/05/2009
*/

var $j = jQuery.noConflict();

function vaScroller(sliderId, scrollBarArrowStepNumber) {
	
	var _startX = 0; 
	var _startY = 0;
	var _offsetX = 0;
	var _offsetY = 0; 
	var _trackX = 0;
	var _currentItem = 0;

	var scrollBarArrowStepNumber = scrollBarArrowStepNumber || 1;
	var scrollerItems = $j("#"+sliderId+" .scrollerItem");
	var scrollerContainerWidth = 0;
	var scrollerContainerPos = 0;
	var scrollerItemContainer = $j("#"+sliderId+" .scrollerItemContainer");
	var scrollerItemContainerHeight;
	var scrollBar = $j("#"+sliderId+" .scrollBar");
	var scrollerTrackBar = $j("#"+sliderId+" .scrollerTrackBar");
	var scrollerTrackBarWidth = ExtractNumber(scrollerTrackBar.width());
	var scrollerTrack = $j("#"+sliderId+" .scrollerTrack");
	var scrollerTrackWidth = ExtractNumber(scrollerTrack.width());
	var scrollerItemMask = $j("#"+sliderId+" .scrollerItemMask");
	var scrollerItemMaskWidth = ExtractNumber(scrollerItemMask.width());
	var scrollBarLeftArrow = $j("#"+sliderId+" .scrollBarLeftArrow");
	var scrollBarRightArrow = $j("#"+sliderId+" .scrollBarRightArrow");
	var scrollerLeftArrow = $j("#"+sliderId+" .scrollerLeftArrow");
	var scrollerRightArrow = $j("#"+sliderId+" .scrollerRightArrow");

	var _categoryNames = new Array();
	var _isCategoryClicked = false;
	var scrollerCatItem = $j("#"+sliderId+" .scrollerCatItem");

	var scrollerImgs = $j("#"+sliderId+" img");
	var scrollerImgsTotal = scrollerImgs.length;
	var scrollerImgLoaded = 0;
	
	var _visibleItemNumber = Math.floor(scrollerItemMaskWidth / ExtractNumber($j(scrollerItems[0]).width()));

	this.initial = function() {
		initializeScroll();
	}

	scrollBarLeftArrow.click(function() {
		slideTo(-scrollBarArrowStepNumber);							  
	})
	scrollBarRightArrow.click(function() {
		slideTo(scrollBarArrowStepNumber);							  
	})
	scrollerLeftArrow.click(function() {
		slideTo(-scrollBarArrowStepNumber);							  
	})
	scrollerRightArrow.click(function() {
		slideTo(scrollBarArrowStepNumber);							  
	})

	scrollerCatItem.each(function() {
		$j(this).click(function() {
			_isCategoryClicked = true;
			slideToCategory(this);
		})		  
	})

	function isImageComplete(img) {
		if (!img.complete) {
			return false;
		}
		if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) {
			return false;
		}
		return true;
	}

	function isAllScrollerImgLoaded() {
		scrollerImgLoaded = 0;
		for (var i=0; i < scrollerImgsTotal; i++) {
			if(isImageComplete(scrollerImgs[i])) {
				scrollerImgLoaded++;
			}
		}
		if(scrollerImgLoaded != scrollerImgsTotal) {
			return false;
		}
		else {
			return true;
		}
	}
	
	var _t;
	
	function checkLoad(){
		var isLoad = isAllScrollerImgLoaded();
		if(isLoad){
			clearInterval(_t);
			scrollerItemContainerHeight = scrollerItemContainer.height();
			scrollerItemMask.css("height", scrollerItemContainerHeight);
		}
		else {
			setTimeout(function(){scrollerItemMask.css("height", scrollerItemContainer.height())},10000)
		}
	}
	
	

	function initializeScroll() {

		for(var i=0; i < scrollerItems.length; i++) {
			scrollerContainerWidth += scrollerItems[i].offsetWidth;
		}
		
		scrollerItemContainer.width(scrollerContainerWidth);

		_t = setInterval(function(){checkLoad()},1000);
				
		scrollerItems.each(function(){		
				if(!$j('div.cntViewSimilarProductsButton').length) {				
					$j(this).bind('mouseenter',function(){
						$j(this).addClass('itemHover');
						$j(this).children().eq(0).addClass('innerHover');
						$j(this).height(scrollerItemContainerHeight - 10 + 'px');
					});
					$j(this).bind('mouseleave',function(){
						$j(this).removeClass('itemHover');
						$j(this).children().eq(0).removeClass('innerHover');
						$j(this).height(scrollerItemContainerHeight + 10 + 'px');
					});
					$j(this).bind('click', function(e){
							var trg = $j(e.target);
							var tag = $j(trg);
							var targetUrl = tag.parents('.scrollerItemClickableArea').attr('rel');
							if(tag.parents('.scrollerItemClickableArea').length) {
								if(tag.parents('.cntColourVariationSelector').length || tag.parents('.cntCountryVariantContainer').length || tag.hasClass('intel')) {
									return true;
									
								}
								else {
									if(tag.parent('.scrollerItemClickableArea').attr('target') == '_blank' || tag.attr('target') == '_blank') {
										
										var newWindow = window.open(targetUrl, '_blank');
										newWindow.focus();
										return false;
									}
									else {
										window.location = targetUrl;
									}
								}
							}
			
					});
				}
		});
		
		scrollerItems.height(scrollerItemContainerHeight);
		$j('#'+sliderId+' .scrollerItemClickableArea').height(scrollerItemContainerHeight);
		
				
		if (scrollerItems.length <= _visibleItemNumber) {
			
			scrollerTrack.css("visibility","hidden");
			scrollerLeftArrow.addClass("scrollerLeftArrowPassive");
			scrollerRightArrow.addClass("scrollerRightArrowPassive");
			scrollBarLeftArrow.addClass("scrollBarLeftArrowPassive");
			scrollBarRightArrow.addClass("scrollBarRightArrowPassive");
			scrollerLeftArrow.unbind("click");
			scrollerRightArrow.unbind("click");
			scrollBarLeftArrow.unbind("click");
			scrollBarRightArrow.unbind("click");
			return false;
		}

		scrollerTrackBar.click(function(e) {
			if(!_isCategoryClicked) {
				e = e || window.event;
				
				var scrollerTrackBarOffset = $j(this).offset();
				var scrollerTrackBarPos = e.clientX - scrollerTrackBarOffset.left;
				_trackX = scrollerTrackBarPos - scrollerTrackWidth / 2;
				
				slideScroller(true);
				slideContainer(true);
			}
			_isCategoryClicked = false
		})
		
		scrollerTrack.click(function() {
			return false;							 
		})
		
		scrollerTrack.mousedown(function(e) {
			
			e = e || window.event;

			_startX = e.clientX;
			_offsetX = ExtractNumber(scrollerTrack.css("left"));
			
			document.onmousemove = function(e) { 
				e = e || window.event;
				_trackX = (_offsetX + (e.clientX - _startX));
				slideScroller(false);
				slideContainer(false);
			}
			document.onselectstart = function () { return false; }
			
			findCurrentItem();
			return false;
		})

		document.onmouseup = function() {
			// GetCursor function is needed to assign a onmousemove event for microsoft genuine popup to work, if it is not undefined.
			document.onmousemove = (typeof(GetCursor) == undefined) ? null : GetCursor;
		}
		
		checkArrowBtn();
		findCategories();
	
	}	

	function slideToCategory(cat) {
		var catIndex = $j(cat).attr("rel")
		var catFirstItem = _categoryNames[catIndex][0];
		
		if(catFirstItem > (scrollerItems.length -_visibleItemNumber))  catFirstItem = scrollerItems.length -_visibleItemNumber;
		var itemWidth = ExtractNumber($j(scrollerItems[0]).width());
		scrollerContainerPos = -(itemWidth*catFirstItem)
		scrollerItemContainer.animate({left:scrollerContainerPos}, 300)
		var catWidth = ExtractNumber($j(cat).width());
		_trackX = ExtractNumber($j(cat).css("left")) - (scrollerTrackWidth - catWidth)/2;
		slideScroller(true);
		
		findCurrentItem();
		checkArrowBtn();
	}
	
	function findCategories() {
		var index1 = 0;
		var index2 = 0;
		for(var i=0; i < scrollerItems.length; i++) {
			index2 = i;
			if($j(scrollerItems[i]).attr("rel")) {
				if(_categoryNames.length == 0) {
					index1 = i;
					_categoryNames.push(new Array(i,$j(scrollerItems[i])));
				}
				else {
					
					if(_categoryNames[_categoryNames.length-1][1].attr("rel") != $j(scrollerItems[i]).attr("rel"))
					{
						index1 = i;
						_categoryNames.push(new Array(i,$j(scrollerItems[i])));
						
					}
				}
				var categoryNameObj = getCategoryNameObj(_categoryNames.length-1) ;
				var catLeft = (scrollerTrackBarWidth / (scrollerItems.length)) * (index1 + (index2 - index1)/2) +  $j(categoryNameObj).width()/2;
				catLeft = (catLeft + $j(categoryNameObj).width()) > scrollerTrackBarWidth ? (scrollerTrackBarWidth - $j(categoryNameObj).width()) : catLeft;
				
				$j(categoryNameObj).css("left", catLeft);
			}
		}
	}
	function getCategoryNameObj(index){
		var obj = null;
		scrollerCatItem.each(function() {			
			if(index == ($j(this).attr("rel"))){
				obj= this;
			}
		})
		return obj;
	}
	
	function slideScroller(animate) {
		if(_trackX < 0) {
			_trackX = 0;
		}
		
		if(_trackX > scrollerTrackBarWidth - scrollerTrackWidth) {
			_trackX = scrollerTrackBarWidth - scrollerTrackWidth;
		}
		
		if(animate) {
			scrollerTrack.animate({left:_trackX},300);
		}
		else {
			scrollerTrack.css("left",_trackX);
		}
	}
	
	function slideContainer(animate) {		
		
		scrollerContainerPos = setContainerX();
		
		if(animate) {
			scrollerItemContainer.animate({left:scrollerContainerPos},300)
		}
		else {
			scrollerItemContainer.css("left", scrollerContainerPos)
		}

		findCurrentItem();
		checkArrowBtn();
		
	}
	
	function slideTrack() {
		var _trackX = 0;
		var trackScrollableArea = (scrollerTrackBarWidth - scrollerTrackWidth);
		var containerScrollableArea = (scrollerContainerWidth - scrollerItemMaskWidth);
		var percent = Math.abs(ExtractNumber(scrollerContainerPos)) / containerScrollableArea * 100;

		_trackX = trackScrollableArea * percent / 100;
		
		scrollerTrack.animate({left:_trackX},300);
	}

	function setContainerX() {
		var _containerX = 0;
		var scrollableArea = (scrollerTrackBarWidth - scrollerTrackWidth);
		var percent = _trackX / scrollableArea * 100;
		var containerPos = (scrollerContainerWidth - scrollerItemMaskWidth) * percent / 100;
		return _containerX = -containerPos;
	}
	
	function slideTo(step) {
		scrollerContainerPos = scrollerItemContainer.css("left");
		_currentItem+= step;
	
		if(_currentItem < 0) {
			_currentItem = 0;
		}

		if(_currentItem > scrollerItems.length - _visibleItemNumber) {
			_currentItem = (scrollerItems.length) - _visibleItemNumber;
		}

		var itemWidth = ExtractNumber($j(scrollerItems[0]).width());

		scrollerContainerPos = -(itemWidth*_currentItem)
		scrollerItemContainer.animate({left:scrollerContainerPos}, 300 )
		
		slideTrack();
		checkArrowBtn();
	}
	
	function checkArrowBtn() {
		if(_currentItem == 0 ) {
			scrollerLeftArrow.addClass("scrollerLeftArrowPassive");
			scrollBarLeftArrow.addClass("scrollBarLeftArrowPassive");
		}
		else {
			scrollerLeftArrow.removeClass("scrollerLeftArrowPassive");
			scrollBarLeftArrow.removeClass("scrollBarLeftArrowPassive");
		}
		
		if(_currentItem == (scrollerItems.length - _visibleItemNumber)) {
			scrollerRightArrow.addClass("scrollerRightArrowPassive");
			scrollBarRightArrow.addClass("scrollBarRightArrowPassive");
		}
		else {
			scrollerRightArrow.removeClass("scrollerRightArrowPassive");
			scrollBarRightArrow.removeClass("scrollBarRightArrowPassive");
		}
	}	

	function findCurrentItem() {
		var itemWidth = ExtractNumber($j(scrollerItems[0]).width());
		return _currentItem = Math.floor(Math.abs(scrollerContainerPos / itemWidth));
	}
	
	function ExtractNumber(value) { 
		var n = parseInt(value); 
		return n == null || isNaN(n) ? 0 : n; 
	} 

}