/*
* Script : morePanel plugin for DOMAssistant
* Auteur:  Samuel desnoes - http://www.ifacta.fr
* Création : 04 08 2009
* Version : 0.1a - 05 08 2009 ( for DOMAssistant v2.7 )
* Licence : X11 - MIT
* Documentation : http://www.ifacta.fr/labo/scripts/domassistant.morePanel/using.html
* Requires DOMAssistant library - http://www.domassistant.com
*/

/*global DOMAssistant, $, $$, window, document*/

DOMAssistant.tmmPanel = function () {
	return {
		idC : 0,
		elems : [],
		anim : false,
		ts : false,
		params : {
			"openMessage" : "afficher",
			"closeMessage" : "masquer"
		},
		
		publicMethods : [
			"createPanel",
			"ready",
			"toggleMode"
		],
		
		init : function () {
			if (navigator.appName === "Microsoft Internet Explorer" && (!document.getElementById || !document.createElement)) {
				//alert(parseInt(navigator.appVersion));//debug
				return;
			}
			DOMAssistant.DOMReady(function () {
				$(".tmmpanel").each(function () {
					$$(this).createPanel();
				});
				//alert(navigator.appName);//debug
				DOMAssistant.tmmPanel.ready();
			});
		},
		
		createPanel : function () {
			var hasContent, cParent, gc, cid, c, lc, l, el, h, hlc;
			if ($$(this).hasClass("tmmpanel") === false) {
				$$(this).addClass("tmmpanel");
			}
			hasContent = ($$(this).innerHTML === "") ? false : true;
			cParent = $$(this).parentNode;
			//alert($$(cParent) + "(" + $$(cParent).className + ")" + $$(cParent).offsetWidth);//debug
			gc = $$(document.body).create("div", {
				className : "tmmpGContainer"
			}, 1);
			cid = "tmmp" + DOMAssistant.tmmPanel.idC;
			c = $$(gc).create("div", {
				className : "tmmpContainer",
				id : cid
			}, 1, $$(this).cloneNode(true));
			c = $$(this).replace(gc, true);
			$$(c).setStyle({
				width : $$(cParent).offsetWidth + "px"
			});
			lc = $$(cid).create("div", {
				className : "tmmpLinkContainer"
			}, 1);
			if (hasContent === true) {
				l = $$(lc).create("a", {
					href : "#",
					className : "tmmpLink"
				}, 1, DOMAssistant.tmmPanel.params.openMessage);
			}
			el = $$(cid).cssSelect(".tmmpanel").first();
			h = $$(el).offsetHeight;
			hlc = $$(lc).offsetHeight;
			$$(gc).setStyle("z-index", 100 - DOMAssistant.tmmPanel.idC);
			$$(el).setStyle({
				height : 0
			});
			if (navigator.appName === "Microsoft Internet Explorer") {
				h += 10;
				$$(el).setStyle("display", "none");
			}
			$$(gc).next().setStyle("padding-top", hlc + "px");
			/* structure : DOMAssistant.morePanel.elems[idC] = [hOrig, hCur, status] */
			DOMAssistant.tmmPanel.elems[DOMAssistant.tmmPanel.idC] = [h, 0, "closed"];
			//alert(DOMAssistant.morePanel.elems.length);//debug
			DOMAssistant.tmmPanel.idC++;
			//alert($$(el).style.height);//debug
			DOMAssistant.tmmPanel.ready();
			return $(this);
		},
		
		ready : function () {
			$(window).addEvent("resize", function () {
				DOMAssistant.tmmPanel.dynResize();
			});
			$(".tmmpLink").each(function () {
				$$(this).removeEvent("click");
				$$(this).addEvent("click", function () {
					var ref = $$(this).parentNode.parentNode.id.replace(/tmmp/, "");
					DOMAssistant.tmmPanel.toggleMode(ref);
					return false;
				});
			});
		},
		
		toggleMode : function (el) {
			/*basculement ouvert/fermé*/
			var to, s;
			//alert(el);
			to = (DOMAssistant.tmmPanel.elems[el][2] === "closed") ? DOMAssistant.tmmPanel.elems[el][0] : 0;
			//alert(DOMAssistant.morePanel.elems.length + " - " + to);//debug
			/*calcul vitesse*/
			s = Math.round(DOMAssistant.tmmPanel.elems[el][0] / 100)*20;
			if (s === 0) { s = 5; }
			//alert(s);//debug
			DOMAssistant.tmmPanel.initAnimate(el, to, s);
			return false;
		},
		
		initAnimate : function (el, to, inc) {
			//alert(el);//debug
			DOMAssistant.tmmPanel.anim = {
				"el" : el,
				"to" : to,
				"inc" : inc,
				"effect" : false
			}
			DOMAssistant.tmmPanel.ts = setInterval("DOMAssistant.tmmPanel.animate()", 20);
		},
		
		animate : function () {
			var el, eldom, inc, elL, nh;
			el = DOMAssistant.tmmPanel.anim.el;
			eldom = $$("tmmp" + DOMAssistant.tmmPanel.anim.el).cssSelect(".tmmpanel").first();
			//alert(el);
			
			if ((DOMAssistant.tmmPanel.anim.to === 0 && DOMAssistant.tmmPanel.anim.effect === true) || DOMAssistant.tmmPanel.anim.to !== 0 && DOMAssistant.tmmPanel.anim.effect === true &&  DOMAssistant.tmmPanel.elems[el][1] > DOMAssistant.tmmPanel.elems[el][0]) {
				inc = -1*DOMAssistant.tmmPanel.anim.inc;
			}
			else {
				inc = DOMAssistant.tmmPanel.anim.inc;
			}
			nh = DOMAssistant.tmmPanel.elems[el][1] + inc;
			//alert(nh + " / " + DOMAssistant.tmmPanel.elems[el][0]);//debug
			if ((inc > 0 && nh >= DOMAssistant.tmmPanel.anim.to && DOMAssistant.tmmPanel.anim.effect === true) || (inc < 0 && nh <= DOMAssistant.tmmPanel.anim.to)) {
				clearInterval(DOMAssistant.tmmPanel.ts);
				nh = DOMAssistant.tmmPanel.anim.to;
				$$(eldom).setStyle("height", nh + "px");
				DOMAssistant.tmmPanel.elems[el][1] = nh;
				DOMAssistant.tmmPanel.elems[el][2] = (nh !== 0) ? "opened" : "closed";
				elL = $$("tmmp" + el).cssSelect(".tmmpLink").first();
				if (nh === 0){
					if (navigator.appName === "Microsoft Internet Explorer") {
						$$(eldom).setStyle("display", "none");
					}
					$$(elL).replaceContent(DOMAssistant.tmmPanel.params.openMessage);
				}
				else {
					$$(elL).replaceContent(DOMAssistant.tmmPanel.params.closeMessage);
				}
			}
			else {
				if (navigator.appName === "Microsoft Internet Explorer") {
					$$(eldom).setStyle("display", "block");
				}
				$$(eldom).setStyle("height", nh + "px");
				DOMAssistant.tmmPanel.elems[el][1] = nh;
			}
			if (nh >= DOMAssistant.tmmPanel.elems[el][0] + 15) {
				DOMAssistant.tmmPanel.anim.effect = true;
			}
		},
		
		dynResize : function () {
			$(".tmmpGContainer").each(function () {
				var p, el, id, elC;
				p = $$(this).parentNode;
				//alert($$(p));//debug
				el = $$(this).cssSelect(".tmmpContainer").first().id;
				id = parseInt(el.replace(/tmmp/, ""));
				elC = $$(el).cssSelect(".tmmpanel").first();
				$$(this).setStyle("width", $$(p).offsetWidth + "px");
				$$(el).setStyle("width", $$(p).offsetWidth + "px");
				$$(elC).setStyle("height", "auto");
				DOMAssistant.tmmPanel.elems[id][0] = $$(elC).offsetHeight;
				$$(elC).setStyle("height", DOMAssistant.tmmPanel.elems[id][1] + "px");
			});
		}
	};
}();
DOMAssistant.attach(DOMAssistant.tmmPanel);
