YAHOO.namespace("kainee");

YAHOO.kainee.slider = function(){
	var YUE = YAHOO.util.Event;
	var YUD   = YAHOO.util.Dom;
	var YL  = YAHOO.lang;
	var slider,	bg = "slider-bg", thumb = "slider-thumb";

	var imageSlider = YUD.get('image-slider-content');
	var clipWidth = imageSlider.offsetWidth;
	
	var productDetailsWrapper = YUD.get('product-details');
	
	var topConstraint = 0;
	var bottomConstraint = 675 - 15;
	var keyIncrement = 5;
	var tickSize = 5;
	
	// Custom scale factor for converting the pixel offset into a real value
	var scaleFactor = ((clipWidth - (97 * 7)) / bottomConstraint);

	// custom events
	var requestProduct   = new YAHOO.util.CustomEvent("requestProduct");
	requestProduct.subscribe(getProductDetails);

	//console.log('scale: ' + scaleFactor)
	//console.log('bottom width: ' + bottomConstraint);
	//console.log('children: ' + Dom.getChildren(imageSlider).length);
	//console.log('children width : ' + (97 * Dom.getChildren(imageSlider).length));
	
	function loadIt() {
		if (YUD.getChildren(imageSlider).length > 7) {

			// load slider
			slider = YAHOO.widget.Slider.getHorizSlider(bg, thumb, topConstraint, bottomConstraint, 5);
			slider.animate = true;
			slider.animationDuration = 0.2; 

			slider._lastpos = 0; 
		
			// get pixel real values
			slider.getRealValue = function() {
				return Math.round(this.getValue() * scaleFactor);
			}

			slider.subscribe("change", function(offsetFromStart) {

				var actualValue = slider.getRealValue();
				YUD.get(bg).title = "slider value = " + actualValue;

				var animspeed = 2;
	
				var differnce = Math.abs(this.getRealValue() - slider._lastpos);
				
				if(differnce <= 100) {
					animspeed = 0.2;
				}else if(differnce > 100 && differnce <= 200){
					animspeed = 0.5;
				}else if(differnce > 200 && differnce <= 300){
					animspeed = 1;
				}else if(differnce > 300 && differnce <= 400){
					animspeed = 1.5;
				}else if(differnce > 400 && differnce <= 800){
					animspeed = 2;
				}
				
				slider._lastpos = this.getRealValue(); 

				var oAttributes = { 
					left : { to : -(this.getRealValue())}
				};
				var oAnim = new YAHOO.util.Motion(imageSlider, oAttributes, animspeed, YAHOO.util.Easing.easeNone);
				oAnim.animate();
			});

			//slider.subscribe("slideStart", function() {});
			
			//slider.subscribe("slideEnd", function() {});
		}
		
		YUE.on('image-slider-content', 'click', handleProductClick);
	}
	
	function handleProductClick(e) {
    	YUE.preventDefault(e);
    	var eTarget = YUE.getTarget(e);
    	while (eTarget.id != "image-slider-content" && eTarget.nodeName.toUpperCase() != "LI"){
			if(eTarget.nodeName.toUpperCase() == "A"){
    			requestProduct.fire(eTarget);
				break;
    		}else{
    			eTarget = eTarget.parentNode;
    		}
    	}
	}
	
	function getProductDetails(type, args) {
		// make ajax call
		var sURL = args[0].href;
		var callback = {
		  success:handleSuccess,
		  failure:handleFailure
		};

		YUD.setStyle(productDetailsWrapper, 'opacity', '0.2');
		YUD.addClass(productDetailsWrapper, 'waiting');

		YAHOO.util.Connect.initHeader('X-Requested-For', 'InterniProduct');
		YAHOO.util.Connect.asyncRequest('GET', sURL, callback);
	}


	function handleSuccess(o) {
		if(o.responseText !== undefined){
			var productDetailsRequest = eval("(" + o.responseText + ")");
			if (productDetailsRequest.success == 'correct')
			{
				productDetailsWrapper.innerHTML = productDetailsRequest.content;
				YUD.setStyle(productDetailsWrapper, 'opacity', '0.95');
				YUD.removeClass(productDetailsWrapper, 'waiting');
			}
		}
	}

	function handleFailure(o) {
		if(o.responseText !== undefined){
			YUD.setStyle(productDetailsWrapper, 'opacity', '0.95');
			YUD.removeClass(productDetailsWrapper, 'waiting');
			return false;
		}
	}
	
	return {
		init : function()
		{
			loadIt();
		}
	}
};
  
YAHOO.util.Event.onAvailable('image-slider-wrapper', function(){
	if(YAHOO.util.Dom.inDocument(YAHOO.util.Dom.get('image-slider-content'))){
		var oSlider = new YAHOO.kainee.slider();
		oSlider.init();
	}
});