tqSlideshow = {
	version:			1.0,
	timeoutStorage:		new Object(),
	timeoutFixHeight:	new Object(),
	options:			new Object(),

	isValid: function(slideshowId) {
		if( !tqSlideshow.options[slideshowId] ) {
			return false;
		} else {
			return true;
		}
	}
}

/*
engine.itemShow()
engine.itemHide()
engine.itemDisable()
engine.itemDescriptionGet()
engine.itemDescriptionSet()

*/


tqSlideshow.image = {
	init: function(options) {
		var slideshowId	 = options["id"];

		tqSlideshow.options[slideshowId] = options;

		if( options["changeTime"] < 500 ) {
			options["changeTime"] = 0;
		}

		if(options["startItem"] <= 0 || options["startItem"] >= options["count"]) {
			options["startItem"] = 0;
		}

		// Init
		options["type"]			= "image";
		options["currentItem"] = -1;
		options["isActive"]		= 1;

		// store settings
		tqSlideshow.options[slideshowId] = options;

		tqSlideshow.image.show(slideshowId, options["startItem"]);

		// start auto slideshow
		if( options["changeTime"] > 0 ) {
			tqSlideshow.image.start(slideshowId);
		}
	},

	show: function(slideshowId, imageNumber) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		if( !tqSlideshow.options[slideshowId]["isActive"] || imageNumber == tqSlideshow.options[slideshowId]["currentItem"] ) {
			return;
		}

		// hide all images
		tqSlideshow.image.hideAll(slideshowId);

		if( imageNumber < 0 ) {
			imageNumber = (tqSlideshow.options[slideshowId]["count"]-1);
		}

		if( imageNumber >= tqSlideshow.options[slideshowId]["count"] ) {
			imageNumber = 0;
		}

		// show image
		var imageElement		= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-"+slideshowId+"-"+imageNumber);
		var imageTitleElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-Title-"+slideshowId+"-"+imageNumber);
		var buttonElement		= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Toolbar-Button-"+slideshowId+"-"+imageNumber);
		var titleElement		= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Toolbar-Title-"+slideshowId);

		if(buttonElement) {
			tqSlideshow.engine.addClass(slideshowId, buttonElement, "active");
		}

		if(imageElement) {
			tqSlideshow.engine.addClass(slideshowId, imageElement, "active");
			tqSlideshow.engine.itemShow(slideshowId, imageElement);
		}

		if(titleElement) {
			if(imageTitleElement) {
				tqSlideshow.engine.setHtml(slideshowId,  titleElement, tqSlideshow.engine.getHtml(slideshowId, imageTitleElement) );
			} else {
				tqSlideshow.engine.setHtml(slideshowId,  titleElement, "" );
			}
		}

		tqSlideshow.options[slideshowId]["currentItem"] = imageNumber;

		tqSlideshow.image.fixHeight(slideshowId);
	},

	hideAll: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		var itemCount = tqSlideshow.options[slideshowId]["count"];
		for(i=0; i<=itemCount; i++) {
			var imageElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-"+slideshowId+"-"+i);
			var buttonElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Toolbar-Button-"+slideshowId+"-"+i);
			if(buttonElement) {
				tqSlideshow.engine.removeClass(slideshowId, buttonElement, "active");
			}

			if(imageElement) {
				tqSlideshow.engine.removeClass(slideshowId, imageElement, "active");
				if( tqSlideshow.options[slideshowId]["currentItem"] == i ) {
					tqSlideshow.engine.itemHide(slideshowId, imageElement);
				} else {
					tqSlideshow.engine.hide(slideshowId, imageElement);

				}
			}
		}
	},

	next: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		tqSlideshow.image.show(slideshowId, (tqSlideshow.options[slideshowId]["currentItem"]+1));
	},

	prev: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		tqSlideshow.image.show(slideshowId, (tqSlideshow.options[slideshowId]["currentItem"]-1));
	},

	stop: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		if( tqSlideshow.timeoutStorage[slideshowId] ) {
			window.clearTimeout( tqSlideshow.timeoutStorage[slideshowId] );
			tqSlideshow.timeoutStorage[slideshowId] = false;
		}
	},

	start: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		// stop timer
		tqSlideshow.image.stop(slideshowId);

		if( tqSlideshow.options[slideshowId]["changeTime"] > 0 ) {
			tqSlideshow.timeoutStorage[slideshowId] = window.setTimeout(function() {
				tqSlideshow.image.next(slideshowId);
				tqSlideshow.image.start(slideshowId);
			}, tqSlideshow.options[slideshowId]["changeTime"]);
		}
	},

	fixHeight: function(slideshowId) {
		if( tqSlideshow.timeoutFixHeight[slideshowId] ) {
			window.clearTimeout( tqSlideshow.timeoutStorage[slideshowId] );
			tqSlideshow.timeoutStorage[slideshowId] = false;
		}

		var scope = this;
		var callback = function () {
			var currentItem	= tqSlideshow.options[slideshowId]["currentItem"];
			var imageElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-"+slideshowId+"-"+currentItem);
			var wrapperElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-Wrapper-"+slideshowId);

			if(imageElement && wrapperElement) {

				if( tqSlideshow.options[slideshowId]["height"] ) {
					var imageHeight = tqSlideshow.options[slideshowId]["height"];
				} else {
					var imageHeight = tqSlideshow.engine.getHeight(slideshowId, imageElement);
				}

				if( imageHeight > 0 ) {
					tqSlideshow.engine.setHeight(slideshowId, wrapperElement, imageHeight);
				} else {
					// loop until we have the height
					window.setTimeout(callback, 100);
					return;
				}
			}
		}

		callback();

		window.setTimeout(callback, 100)
	}
}

tqSlideshow.content = {
	init: function(options) {
		var slideshowId	 = options["id"];

		tqSlideshow.options[slideshowId] = options;

		if( options["changeTime"] < 500 ) {
			options["changeTime"] = 0;
		}

		if(options["startItem"] <= 0 || options["startItem"] >= options["count"]) {
			options["startItem"] = 0;
		}

		// Init
		options["type"]			= "image";
		options["currentItem"] = -1;
		options["isActive"]		= 1;

		// store settings
		tqSlideshow.options[slideshowId] = options;

		tqSlideshow.content.show(slideshowId, options["startItem"]);

		// start auto slideshow
		if( options["changeTime"] > 0 ) {
			tqSlideshow.content.start(slideshowId);
		}
	},

	show: function(slideshowId, imageNumber) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		if( !tqSlideshow.options[slideshowId]["isActive"] || imageNumber == tqSlideshow.options[slideshowId]["currentItem"] ) {
			return;
		}

		// hide all images
		tqSlideshow.content.hideAll(slideshowId);

		if( imageNumber < 0 ) {
			imageNumber = (tqSlideshow.options[slideshowId]["count"]-1);
		}

		if( imageNumber >= tqSlideshow.options[slideshowId]["count"] ) {
			imageNumber = 0;
		}

		// show image
		var imageElement		= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-"+slideshowId+"-"+imageNumber);
		var imageTitleElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-Title-"+slideshowId+"-"+imageNumber);
		var buttonElement		= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Toolbar-Button-"+slideshowId+"-"+imageNumber);
		var titleElement		= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Toolbar-Title-"+slideshowId);

		if(buttonElement) {
			tqSlideshow.engine.addClass(slideshowId, buttonElement, "active");
		}

		if(imageElement) {
			tqSlideshow.engine.addClass(slideshowId, imageElement, "active");
			tqSlideshow.engine.itemShow(slideshowId, imageElement);
		}

		if(titleElement) {
			if(imageTitleElement) {
				tqSlideshow.engine.setHtml(slideshowId,  titleElement, tqSlideshow.engine.getHtml(slideshowId, imageTitleElement) );
			} else {
				tqSlideshow.engine.setHtml(slideshowId,  titleElement, "" );
			}
		}

		tqSlideshow.options[slideshowId]["currentItem"] = imageNumber;

		tqSlideshow.content.fixHeight(slideshowId);
	},

	hideAll: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		if( !tqSlideshow.options[slideshowId]["isActive"] ) {
			return;
		}

		var itemCount = tqSlideshow.options[slideshowId]["count"];
		for(i=0; i<=itemCount; i++) {
			var imageElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-"+slideshowId+"-"+i);
			var buttonElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Toolbar-Button-"+slideshowId+"-"+i);
			if(buttonElement) {
				tqSlideshow.engine.removeClass(slideshowId, buttonElement, "active");
			}

			if(imageElement) {
				tqSlideshow.engine.removeClass(slideshowId, imageElement, "active");
				if( tqSlideshow.options[slideshowId]["currentItem"] == i ) {
					tqSlideshow.engine.itemHide(slideshowId, imageElement);
				} else {
					tqSlideshow.engine.hide(slideshowId, imageElement);

				}
			}
		}
	},

	next: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		tqSlideshow.content.show(slideshowId, (tqSlideshow.options[slideshowId]["currentItem"]+1));
	},

	prev: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		tqSlideshow.content.show(slideshowId, (tqSlideshow.options[slideshowId]["currentItem"]-1));
	},

	stop: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		if( tqSlideshow.timeoutStorage[slideshowId] ) {
			window.clearTimeout( tqSlideshow.timeoutStorage[slideshowId] );
			tqSlideshow.timeoutStorage[slideshowId] = false;
		}
	},

	start: function(slideshowId) {
		if( !tqSlideshow.isValid(slideshowId) ) {
			return;
		}

		// stop timer
		tqSlideshow.content.stop(slideshowId);

		if( tqSlideshow.options[slideshowId]["changeTime"] > 0 ) {
			tqSlideshow.timeoutStorage[slideshowId] = window.setTimeout(function() {
				tqSlideshow.content.next(slideshowId);
				tqSlideshow.content.start(slideshowId);
			}, tqSlideshow.options[slideshowId]["changeTime"]);
		}
	},

	fixHeight: function(slideshowId) {
		if( tqSlideshow.timeoutFixHeight[slideshowId] ) {
			window.clearTimeout( tqSlideshow.timeoutStorage[slideshowId] );
			tqSlideshow.timeoutStorage[slideshowId] = false;
		}

		var scope = this;
		var callback = function () {
			var currentItem	= tqSlideshow.options[slideshowId]["currentItem"];
			var imageElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-"+slideshowId+"-"+currentItem);
			var wrapperElement	= tqSlideshow.engine.get(slideshowId, "tqSlideshow-Item-Wrapper-"+slideshowId);

			if(imageElement && wrapperElement) {

				if( tqSlideshow.options[slideshowId]["height"] ) {
					var imageHeight = tqSlideshow.options[slideshowId]["height"];
				} else {
					var imageHeight = tqSlideshow.engine.getHeight(slideshowId, imageElement);
				}

				if( imageHeight > 0 ) {
					tqSlideshow.engine.setHeight(slideshowId, wrapperElement, imageHeight);
				} else {
					// loop until we have the height
					window.setTimeout(callback, 100);
					return;
				}
			}
		}

		callback();
	}
}


