dojo.require("dojo.NodeList-traverse");
dojo.require("dojo.fx.easing");
dojo.require("dojo.window");
dojo.require("dojo.fx");
dojo.require('dojox.fx.scroll');

window.onresize = function() { 
	setHeroDivSize();
};

dojo.addOnLoad(function() {
	if (dojo.byId("tsHero") != null) {
		dojo.style(dojo.query("#tsHero")[0], "display", "block");
		var switchers = dojo.query('#tsHeroImgSwitcher li');
		var firstNode = dojo.query('#tsHeroMovabelNode div.tsHeroNode').first();
		dojo.addClass(firstNode[0], "tsSelect");
		setHeroDivSize();

		switchers.connect('onclick', heroSwitcher);

		thumbnailSelect(switchers);

		try {
			heroTimer = setInterval(switchNext, heroDuration);
		}
		catch(err) {}
	}
});

// Hero windows size
// ---------------------------------------------------------------------------------------------

function setHeroDivSize(){
    var vs = dojo.window.getBox();
    var divCenter = dojo.query('#tsHeroMovabelNode div.tsHeroNode');
    if(dojo.style(divCenter[0], "width") != vs.w){
	for(var i = 0; i < divCenter.length; i++){
	    dojo.style(divCenter[i], "width", vs.w + "px");
	}
    }
    return vs;
}

// Hero switcher
// ---------------------------------------------------------------------------------------------

function moveHero(properties) {

    var moveArgs = {
	node: properties.node,
	properties: {
	    top: {
		    start: properties.startPosition_Y,
		    end: properties.endPosition_Y,
		    unit: "px"
	    },
	    left: {
		    start: properties.startPosition_X,
		    end: properties.endPosition_X,
		    unit: "px"
	    }
	},
	easing: dojo.fx.easing[properties.easing],
	duration: properties.duration,
	onEnd: properties.onEnd,
	delay: properties.delay
    };
    dojo.animateProperty(moveArgs).play();
    dojo.animateProperty(moveArgs).stop();
}

function delayPriceTag(currentPosition, nextPosition) {
	var speechBubble = dojo.query(".tsHeroNode.tsSelect .tsSpeechBubbleHolder")[0];

	if (speechBubble != null) {
		if (currentPosition < nextPosition) {
			var currentProperties = {
				node: speechBubble,
				startPosition_X: 0,
				endPosition_X: -120,
				duration: 500,
				easing: "expoInOut",
				onEnd: function() { dojo.style(speechBubble, {left: "0px" }) }
			};

		} else {
			var currentProperties = {
				node: speechBubble,
				startPosition_X: 0,
				endPosition_X: 120,
				duration: 500,
				easing: "expoInOut",
				onEnd: function() { dojo.style(speechBubble, {left: "0px" }) }
			};
		}
	}

	var nextindex;
	dojo.query(".tsHeroNode").forEach(function(node, index, nodelist){
    	if (node.className == "tsHeroNode tsSelect") {
			if (currentPosition < nextPosition) {
				nextindex = index + 1;
			} else {
				nextindex = index - 1;
			}
		}	
	});

	var nextSpeechBubble = dojo.query("div.tsSpeechBubbleHolder", dojo.query(".tsHeroNode")[nextindex])[0];

	if (nextSpeechBubble != null) {
		if (currentPosition < nextPosition) {
			var nextProperties = {
				node: nextSpeechBubble,
				startPosition_X: 120,
				endPosition_X: 0,
				duration: 500,
				delay: 370,
				easing: "expoInOut"
			};

		} else {
			var nextProperties = {
				node: nextSpeechBubble,
				startPosition_X: -120,
				endPosition_X: 0,
				duration: 500,
				delay: 370,
				easing: "expoInOut"
			};
		}
	}

    moveHero(currentProperties);
    moveHero(nextProperties);
	
};

function heroSwitcher() {
	dojox.fx.smoothScroll({node:dojo.byId("tsHeadContainer"),win:window,duration:200}).play();
	var heroNodes = dojo.query('#tsHeroMovabelNode div.tsHeroNode');
	var currentPosition = null;
	var nextPosition = dojo.indexOf(dojo.query('#tsHeroImgSwitcher li'),this);
	clearInterval(heroTimer);
	var vs = setHeroDivSize();
	for(var t = 0; t < heroNodes.length; t++){
	    if((dojo.attr(heroNodes[t], "class")).indexOf("tsSelect") > 0){
		currentPosition = t;
	    }
	}
	
	var properties = {
	    node: "tsHeroMovabelNode",
	    startPosition_X: -vs.w*currentPosition,
	    endPosition_X: -vs.w*nextPosition,
	    startPosition_Y: 0,
	    endPosition_Y: 0,
	    duration: 900,
	    easing: "expoInOut"
	};

	moveHero(properties);

	if (currentPosition != nextPosition) {
		delayPriceTag(currentPosition, nextPosition);
	}

	dojo.query('#tsHeroMovabelNode div.tsSelect').removeClass("tsSelect");
	dojo.addClass(heroNodes[nextPosition], "tsSelect");

};

// Thumbnail select
// ---------------------------------------------------------------------------------------------
function thumbnailSelect(target) {
    target.connect('onmouseup',function() {
        dojo.query("#tsHeroImgSwitcher li").forEach(
        function(item, index, array) {
            dojo.removeClass(item);
        });
        dojo.addClass(this,'tsSelect');
    });
};

function addList(arg, value){
    if(arg[0] == null){
        arg[0] = value;
        return arg;
    }
    arg[arg.length] = value;
    return arg;
}

function outputThumbnails(value){
    for(var i = 0; i < value.length; i++){
	if( i == 0){
	    document.writeln("<li class='tsSelect' style='background: url(" + value[i] + ") no-repeat center center'><span>&nbsp;</span></li>");   
	} else  {
	    document.writeln("<li style='background: url(" + value[i] + ") no-repeat center center'><span>&nbsp;</span></li>");
	}
    }
}

// Auto switcher
// ---------------------------------------------------------------------------------------------
function switchNext() {
	var heroNodes = dojo.query('#tsHeroMovabelNode div.tsHeroNode');
	var nextNodes = dojo.query("#tsHeroMovabelNode div.tsSelect").next();
	var nextThumbnail = dojo.query("#tsHeroImgSwitcher ul li.tsSelect").next();
	var currentPosition = null;
	var nextPosition = null;
	var vs = setHeroDivSize();

	for(var i = 0; i < heroNodes.length; i++){
	    if((dojo.attr(heroNodes[i], "class")).indexOf("tsSelect") > 0){
			currentPosition = i;
			nextPosition = i + 1;
	    }
	}

	if(nextPosition == heroNodes.length){
		nextPosition = 0;
		nextThumbnail = dojo.query("#tsHeroImgSwitcher ul li").first();
	}

	var properties = {
	    node: "tsHeroMovabelNode",
	    startPosition_X: -vs.w*currentPosition,
	    endPosition_X: -vs.w*nextPosition,
	    startPosition_Y: 0,
	    endPosition_Y: 0,
	    duration: 900,
	    easing: "expoInOut"
	};

	moveHero(properties);

	delayPriceTag(currentPosition, nextPosition);

	dojo.query('#tsHeroMovabelNode div.tsSelect').removeClass("tsSelect");
	dojo.addClass(heroNodes[nextPosition], "tsSelect");
	dojo.query("#tsHeroImgSwitcher ul li.tsSelect").removeClass("tsSelect");
	dojo.addClass(nextThumbnail[0], "tsSelect");
};
