//--- PLACE

(function($) { $.fn.place = function () {
	var elt = $(this);
	// marginRight explicit case of Webkit CSS rendering
	var eltMarginRight = 0;
	if ($.browser.webkit && elt.css('display') == 'block' && elt.css('float') == 'none' && elt.css('position') == 'static'){
		elt.css('display', 'inline-block');
		eltMarginRight = getNumber(elt.css('marginRight'));
	// note : if was FF < 3 then
	//	elt.css('display', 'block');
	}
	// marginRight in all cases (and browsers)
	else { eltMarginRight = getNumber(elt.css('marginRight')); }
	// width + paddings + margins
	var eltWidth = getNumber(elt.outerWidth()) + getNumber(elt.css('marginLeft')) + eltMarginRight;
	// height + paddings + margins
	var eltHeight = getNumber(elt.outerHeight()) + getNumber(elt.css('marginTop')) + getNumber(elt.css('marginBottom'));
	// return both
	return { width: eltWidth, height: eltHeight };
}; })(jQuery);

function getNumber(nb) {
	nb = parseInt(nb);
	if (!isNaN(parseFloat(nb)) && isFinite(nb)){ return nb; }
	else { return 0; }
}


//--- DROPDOWN + MEGAMENU (needs PLACE)

(function($) { $.fn.dropdown = function (o) {
	o = $.extend(
	{
		mevent: 'over',
		activate: function(wrap){ wrap.show(); },
		deactivate: function(wrap){ wrap.hide(); },
		after: function(wrap){}
	}, o);
	var menudown = $(this);
	if (menudown.length < 1){ return false; }

	$('li', menudown).each(function(){
		var liCur = $(this);
		var wrap = $('>ul', liCur);
		var aCur = $('a', liCur).eq(0);
		var tableCur = $('table', liCur).eq(0);

		if ($('ul', liCur).length > 0){
			liCur.addClass('dir');
			tableCur.addClass('dir');
			aCur.addClass('dir');
		}

		function dropShow(){
			if (liCur.hasClass('dir')){
				liCur.addClass('dir-actif');
				aCur.addClass('dir-actif');
				tableCur.addClass('dir-actif');
			}
			else {
				liCur.addClass('actif');
				aCur.addClass('actif');
				tableCur.addClass('actif');
			}

			var megapanel = $('>div.mega-panel', liCur);
			if (megapanel.length > 0){ wrap = megapanel; }

			wrap.addClass('active');

			o.activate(wrap, liCur, aCur);

			if (megapanel.length > 0){
				$('li', megapanel).unbind();

				if (!liCur.hasClass('mega-tab')){
					liCur.addClass('mega-tab');

					var inner = $('>div.inner', megapanel);
					var colsW = 0; $('>ul', inner).addClass('col').each(function(){ colsW = colsW + $(this).place().width; });
					var additionalsW = 0; $('>div.additional', inner).each(function(){ additionalsW = additionalsW + $(this).place().width; });
					var megapanelW = colsW + additionalsW;
					inner.width(megapanelW);
					$('>ul.col, >div.additional', inner).height(inner.height());
					var bodyW = $('body').place().width;
					var megapanelOffset = megapanel.offset();
					if(megapanelOffset.left + megapanelW >= (bodyW -18)){
						var liCurOffset = liCur.offset();
						var liCurOffsetLeft = ((bodyW-18)/2) - (megapanelW/2) - (liCurOffset.left);
						if (liCurOffsetLeft < -liCurOffset.left) { liCurOffsetLeft = -liCurOffset.left; }
						megapanel.css('left', liCurOffsetLeft);
					}
				}
			}

			o.after(wrap, liCur, aCur);
		}

		function dropHide(){
			if (liCur.hasClass('dir')){
				liCur.removeClass('dir-actif');
				aCur.removeClass('dir-actif');
				tableCur.removeClass('dir-actif');
			}
			else {
				liCur.removeClass('actif');
				aCur.removeClass('actif');
				tableCur.removeClass('actif');
			}

			var wrap = $('>ul', liCur);
			var megapanel = $('>div.mega-panel', liCur);
			if (megapanel.length > 0){ wrap = megapanel; }

			wrap.removeClass('active');

			o.deactivate(wrap, liCur, aCur);
			o.after(wrap, liCur, aCur);
		}

		if (o.mevent == 'over'){
			liCur.hover(
				function(){ dropShow(); },
				function(){ dropHide(); }
			);
		}
		else {
			$('> a', liCur).click(function(){
				if ($(this).hasClass('actif') || $(this).hasClass('dir-actif')){ dropHide(); }
				else { dropShow(); }
			});
		}
	});
}; })(jQuery);


//--- GETCHILDNODES

(function($) { $.fn.getChildNodes = function() {
	var nodes = '';
	$(this).each(function(){ for (var i = 0; i < this.childNodes.length; i++) { nodes = nodes + this.childNodes[i].nodeValue; } });
	return nodes;
}; })(jQuery);
