/* (c) 2010 Quicksite sarl - http://www.quicksite.ch/ - Daniel Thalmann */

$(document).ready(function () {

	$(".qsslideshow").each(function () {

		var qsSlide = {
			"stripwidth": 0			// largueur total de la bande contenant toutes les images.
			, "normalspeed": -3		// vitesse de déplacement de l'animation lorsque le curseur n'est pas sur le slideshow
			, "maxspeed": -30		// vitesse maximal de déplacement lorsque le curseur est aux extrémités du slideshow
			, "adjust": 1			// correction en pixel de la taille de la bande.
			, "currentspeed": 0		// (ne pas modifier) vitesse courante
			, "adjusted": false		// (ne pas modifier) indique si l'ajustement s'est effectué
			, "slideshowwidth": 0	// (ne pas modifier) largueur de la zone affiché du slideshow
			, "slideshowleft": 0	// (ne pas modifier) position gauche de la zone affiché du slideshow
			, "boxlength": 0		// (ne pas modifier) nombre d'image dans le slideshow
			, "firstbox": null		// (ne pas modifier) DOMelement contenant la première image
			, "lastbox": null		// (ne pas modifier) DOMelement contenant la dernière image
			, "mouseevent": null	// (ne pas modifier) DOMevent de la souris
			, "mouseover": false	// (ne pas modifier) indique si le curseur de la souris est au dessus du slideshow
			, "laststipcalc": 0 	// (ne pas modifier) indique le momemt de recalculer la largeur de la bande
			, "onImgLoad": function () {
				boxwidth = $(this).parents(".qsslideshow-box").width();
				qsSlide = $(this).parents(".qsslideshow").get(0).qsSlide;
				qsSlide.stripwidth += boxwidth;
				if (!qsSlide.adjusted) {
					qsSlide.adjusted = true;
					qsSlide.stripwidth += qsSlide.adjust;
				}
				$(this).parents(".qsslideshow-strip").width(qsSlide.stripwidth);
			}
			, "getMouseXY": function () {
				var posX;
				var posY;
				var e = this.mouseevent;
				if (!e)
					e = window.event || window.Event;

				if (typeof (e.PageX) != 'undefined') {

					posX = e.PageX;
					posY = e.PageY;
				}
				else {
					posX = e.clientX + document.body.scrollLeft;
					posY = e.clientY + document.body.scrollTop;
				}
				return { "x": posX, "y": posY };
			}
			, "getOffsetLeft": function (elem) {
				nodeName = elem.tagName || elem.nodeName;
				if (nodeName.toUpperCase() == "BODY") {
					return 0;
				}
				else {
					offset = $(elem).offset();
					return offset.left;
					/*
					var left = elem.offsetLeft;
					left += this.getOffsetLeft($(elem).parent().get(0));
					return left;*/
				}
			}
		};

		this.qsSlide = qsSlide;

		qsSlide.slideshowleft = qsSlide.getOffsetLeft(this);
		qsSlide.slideshowwidth = $(this).width();

		$(this).find(".qsslideshow-strip .qsslideshow-box").each(function () {

			// si la taille de l'image est à 0, on utilise l'événement on load pour obtenir la largeur de la case
			if ($(this).width() == 0) {
				$(this).find("img").load(qsSlide.onImgLoad);
			} else {
				img = $(this).find("img").get(0);
				qsSlide.onImgLoad.call(img);
			}

			if (qsSlide.boxlength == 0) {
				qsSlide.firstbox = this;
			}
			qsSlide.boxlength += 1;
			qsSlide.lastbox = this;

		});

		// $(this).find(".qsslideshow-strip").width(qsSlide.stripwidth);

		$(this).hover(function () {
			this.qsSlide.mouseover = true;
		}, function () {
			this.qsSlide.mouseover = false;
		}
		);
		$(this).mousemove(function (e) {
			this.qsSlide.mouseevent = e;
		});

	});

	$(window).resize(function () {

		$(".qsslideshow").each(function () {
			qsSlide = this.qsSlide;
			qsSlide.slideshowleft = qsSlide.getOffsetLeft(this);
		});

	})

	setTimeout(qsSlideShowAnim, 100);
});


function qsSlideShowAnim() {

	$(".qsslideshow").each(function () {
		qsSlide = this.qsSlide;

		// on effectue l'animation uniquement si la boite contient une image
		if (qsSlide.boxlength > 0) {

			if (qsSlide.laststipcalc == 0) {
				newWidth = 0;
				$(this).find(".qsslideshow-strip .qsslideshow-box").each(function () {
					newWidth += $(this).width();
				});

				qsSlide.stripwidth = qsSlide.adjust + newWidth;
				$(this).find(".qsslideshow-strip").width(qsSlide.stripwidth);
				qsSlide.laststipcalc = 10;
			}
			else {
				qsSlide.laststipcalc--;
			}


			// on effectue l'animation uniquement si la taille de la bande est plus grande que l'emplacement à disposition
			if (qsSlide.slideshowwidth < qsSlide.stripwidth) {
				// calcule du déplacement du slide en fonction de la souris
				if (qsSlide.mouseover) {
					m = qsSlide.getMouseXY();
					middlewidth = (qsSlide.slideshowwidth / 2);
					qsSlide.currentspeed = parseInt(((m.x - qsSlide.slideshowleft - middlewidth) / middlewidth) * qsSlide.maxspeed);
				}
				else {
					qsSlide.currentspeed = qsSlide.normalspeed;
				}

				// si la marge de gauche est à "auto" on la défini à 0
				marginleft = $(this).find(".qsslideshow-strip").css("margin-left");
				if (marginleft == "auto") {
					marginleft = 0;
				} else {
					marginleft = parseInt(marginleft);
				}

				// on traite la création des nouvelles boites
				if (marginleft > 0) {
					qsSlide.firstbox = $(qsSlide.lastbox).insertBefore(qsSlide.firstbox).get(0);
					//qsSlide.firstbox = $(this).find(".qsslideshow-box").get(0);
					qsSlide.lastbox = $(this).find(".qsslideshow-box").get(qsSlide.boxlength - 1);
					marginleft = marginleft - $(qsSlide.firstbox).width();
				}
				if (qsSlide.stripwidth + marginleft < qsSlide.slideshowwidth) {
					qsSlide.lastbox = $(qsSlide.firstbox).insertAfter(qsSlide.lastbox).get(0);
					qsSlide.firstbox = $(this).find(".qsslideshow-box").get(0);
					//qsSlide.lastbox = $(this).find(".qsslideshow-box").get(qsSlide.boxlength - 1);
					marginleft = marginleft + $(qsSlide.lastbox).width();
				}

				$(this).find(".qsslideshow-strip").css("margin-left", marginleft + qsSlide.currentspeed);
			}

		}

	});

	setTimeout(qsSlideShowAnim, 40);
}

