//
//    mondofragilis Javascript Framework
//    Copyright (C) 2009 Romain Petit
//    This program is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
//
//Js dev notes :
//
//HTMLElement.class -> error on safari
// variable named "class" -> parser error on safari
//for(i=0... -> error on IE if i not declared
//uncknow browser method -> bug on IE if not in brackets : ( if() {do;} else {dontdo();} -> OK,  if() do; else dontdo(); -> NOT OK )
// swf dans un display:none --> fait foirer tous les scriptaccess !!!!! sa mère !
// working IE png : <img src="tagada.png" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='tagada.png', sizingMethod='scale');">
var mf = function(id)
{
	if( mf.DEBUG && ! document.getElementById(id) ) alert(id + " id does not exist.");
	return document.getElementById(id);
};
mf.version = "0.7.2";
mf.Safari = navigator.userAgent.toLowerCase().indexOf('safari') + 1;
mf.Firefox = navigator.userAgent.toLowerCase().indexOf('firefox') + 1;
mf.Chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
mf.IE = document.all?true:false;
mf.IE7LTE = (navigator.appVersion.indexOf("MSIE 5.")>-1) || (navigator.appVersion.indexOf("MSIE 6.")>-1) || (navigator.appVersion.indexOf("MSIE 7.")>-1);
mf.IE8LTE = mf.IE7LTE || (navigator.appVersion.indexOf("MSIE 8.")>-1);
mf.HTML5 = function()
{
	var canvas = document.createElement('canvas');
	if (!canvas || !canvas.getContext) return false;
	return true;
}
mf.init = function()
{
	mf.Infos.BrowserDetect.init();
	//mf.Infos.PluginDetectInit();
};
mf.getAttribute = function(o, attr_name)
{
	if( o.getAttribute(	attr_name ) != null )
		return o.getAttribute(	attr_name );
	else if(o.parentNode)
		return mf.getAttribute( o.parentNode, attr_name );
	else
		return false;
};
// MISC
elements = function(id)
{
	return document.getElementById(id);
};
val = function(id)
{
	return document.getElementById(id).value;
};
fill = function(id, content)
{
	elements(id).innerHTML = content;
};
trim = function(someString)
{
	if(typeof(someString)=="undefined") return "";
	var str = '';
	if( typeof(someString.replace) == "function" )
		str = someString.replace(/^\s+/g,'');
	else
		return someString;

	if( typeof(str.replace) == "function" )
		str = str.replace(/\s+$/g,'');

	return str;
};
getMovie = function(movieName) 
{
	//if(mf.IE)
	if( navigator.appName.indexOf ("Microsoft") != -1 )
	{return window[movieName];}
	else
	{return window.document[movieName];}
};
isset = function( variable )
{
	return( typeof($variable) != "undefined" );
};
exists = function( maVar )
{
	return ( ( typeof maVar != "undefined" ) && ( maVar != null ) ) ? true:false;
};
in_array = function( needle, stack )
{
	for(var k = 0; k < stack.length; k++)
	{
		if( stack[k] == needle ) return true;
	}
	return false;
};
is_element = function(o)
{
	if( !o ) return false;
	if( o.nodeType != 1 ) return false;
	if(trim(o.tagName) == "" ) return false; // IE SA MERE
	return true;
};
is_array = function(o){return(typeof(o) == 'object');}
is_object = function(o){return(typeof(o) == 'object');}
is_string = function(o){return(typeof(o) == 'string');}
is_function = function(o){return(typeof(o) == 'function');}
is_undefined = function(o){return(typeof(o) == 'undefined');}
array_keys = function(o)
{
	var keys = [];
	for( var k in o )
	{
		if( k == 'each' ) break;
		keys.push(k);
	}
	return keys;
};
br2nl = function(str, nl)
{
	if( !exists(nl) ) nl = "\r\n";
	var parts = str.split('<br/>');
	var out = parts.join(nl);
	return out;
};
function print_r(arr,level)
{
	if(!level) level = 0;
	else if( level > 20 ) return "";

	var cr = "\n";
	var pad = "      ";
	var dumped_text = "";
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += pad;
	
	if( typeof(arr) == 'object' )
	{
		//Array/Hashes/Objects
		for(var item in arr)
		{
			var value = arr[item];
			if(typeof(value) == 'object')
			{
				//If it is an array,
				dumped_text += level_padding + "'" + item + "' ..." + cr;
				dumped_text += print_r(value,level+1);
			}
			else
			{
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"" + cr;
			}
		}
	}
	else
	{
		//Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
};
function print_rw(arr)
{
	var str = print_r(arr);
	var p = document.createElement('p');
	p.innerHTML = str;
	document.body.appendChild(p);
}
function clone(obj)
{
	if(obj == null || typeof(obj) != 'object') return obj;
	var temp = new obj.constructor();
	for(var key in obj) temp[key] = clone(obj[key]);
	return temp;
}
function str_replace(searches, replaces, str)
{
	for(var i = 0; i < searches.length; i++)
	{
		str = str.split( searches[i] ).join( replaces[i] );
	}
	return str;
}
// /MISC

////////////               OBJECT               ///////////
mf.Object = {};
mf.Object.Data = new Array();
mf.Object.Center = function(o, width, height)
{
	var ow = exists(width) ? width : mf.Object.getWidth(o);
	var oh = exists(height) ? height : mf.Object.getHeight(o);
	
	var sw = mf.Screen.getVisibleW();
	var sh = mf.Screen.getVisibleH();

	var ol = mf.Screen.getLeft0() + ( sw - ow ) / 2;
	
	var ot = 0;
	if( oh > sh )
		ot = mf.Screen.getTop0() + 20;
	else
		ot = mf.Screen.getTop0() + ( sh - oh ) / 2;

	//var ot = mf.Screen.getTop0() + 20;
	o.style.position = "absolute";
	o.style.left = ol + "px";
	o.style.top = ot + "px";
};

mf.Object.createElement = function(tagName, Attributs)
{
	if( tagName.toUpperCase() == 'EMBED' ) return mf.Object.createTextElement(tagName, Attributs);

	//tagName = tagName.toUpperCase();
    
	var TempElement = document.createElement(tagName);
	if( exists(Attributs) )
	{
		for( name in Attributs )
		{
			if( Attributs[name] != '' ) TempElement.setAttribute(name,Attributs[name]);
		}
	}
	return TempElement;
};
mf.Object.createTextElement = function(tagName, Attributs)
{
	var output = '<' + tagName;
	if( exists(Attributs) )
	{
		for( name in Attributs )
		{
			if( Attributs[name] != '' ) output += ' ' + name + '="' + Attributs[name] + '"';
		}
	}
	output += '/>';

	var Div = document.createElement('div');
	Div.innerHTML = output;

	return Div;
};
mf.Object.recursiveBlock = function(o)
{
	o.style.display = "block";
	if( o.hasChildNodes() )
	{
		var ChildNodes = o.childNodes;
		for(var c=0;c<ChildNodes.length;c++)
		{
			if( ChildNodes.item(c).nodeType == 1 )
			{
				mf.Object.recursiveBlock(ChildNodes.item(c));
			}
		}
	}
};
mf.Object.recursiveKillLinks = function(o)
{
	if( o.href != '' )
		o.onclick = "return false;";

	// mf.Event.addEvent( o, "click", function(){"return false;"}, false);
	if( o.hasChildNodes() )
	{
		var ChildNodes = o.childNodes;
		for(var c=0;c<ChildNodes.length;c++)
		{
			if( ChildNodes.item(c).nodeType == 1 )
			{
				mf.Object.recursiveKillLinks(ChildNodes.item(c));
			}
		}
	}
};
mf.Object.setFloat = function(o,float)
{
	if(mf.IE){o.style.styleFloat = float;}
	else{o.style.cssFloat = float;}
};
mf.Object.getFloat = function(o, rec)
{
	if( mf.IE ){return o.style.styleFloat;}
	else{return o.style.cssFloat;}
};
mf.Object.setClass = function(o,newClass)
{
	o.className = newClass;
};
mf.Object.getTop = function(o)
{
	if (exists(o.offsetParent)){return (o.offsetTop + mf.Object.getTop(o.offsetParent) );}
	else{return (o.offsetTop);}
};
mf.Object.getLeft = function(o)
{
	var Offset = 0;
	var Float = mf.Object.getFloat(o);
	if( Float )
	{
		var Offset = 0;
		var Node = o;
		while ( Node.previousSibling )
	    {
	    	if( Node.previousSibling.rel != 'hidden' )
	    	{
	    		var TempWidth = mf.Object.getWidth( Node.previousSibling );
	    		if( exists( TempWidth ) ){Offset += TempWidth}
	    	}
	    	Node = Node.previousSibling;
	    }
		if (o.offsetParent){return (Offset + o.offsetLeft + mf.Object.getLeft(o.offsetParent) );}
		else{return (Offset + o.offsetLeft);}
	}
	else
	{
		if (o.offsetParent){return (o.offsetLeft + mf.Object.getLeft(o.offsetParent) );}
		else{return (o.offsetLeft);}
	}
};
mf.Object.setPos = function(o, x, y)
{
	o.left = x;
	o.style.left = x + "px";
	o.top = x;
	o.style.top = x + "px";
};
mf.Object.getHTML = function(o)
{
	if( !o.innerHTML || o.innerHTML == "" )
		return '<img name="'+ o.name +'" src="' + o.src + '"/>';
	else
		return o.innerHTML;
};
mf.Object.setSizeByID = function(id, width, height, recursive, tagname)
{
	mf.Object.setSize(elements(id), width, height, recursive, tagname);
};
mf.Object.setSize = function(o, width, height, recursive, tagname)
{
	if( o.tagName == tagname || !tagname)
	{
		o.width = width;
		o.height = height;

		o.style.width = width + "px";
		o.style.height = height + "px";
	}

	if( recursive && o.hasChildNodes() )
	{
		var ChildNodes = o.childNodes;
		for(var c=0;c<ChildNodes.length;c++)
		{
			if( ChildNodes.item(c).nodeType == 1 )
			{
				mf.Object.setSize( ChildNodes.item(c), width, height, true, tagname);
			}
		}
	}
};
mf.Object.getWidth = function(o)
{
	//return o.style.width ? o.style.width : o.offsetWidth;
	return o.offsetWidth ? o.offsetWidth : o.clientWidth;
	
	//offsetWidth: offsetWidth property of getElementById method gets the width of the div element that is specified in the CSS class style.
	//clientWidth: clientWidth property of the getElementById method gets the inner absolute width of the specified div element.

};
mf.Object.getHeight = function(o)
{
	//return o.style.height ? o.style.height : o.offsetHeight;
	return o.offsetHeight ? o.offsetHeight : o.clientHeight;
};
mf.Object.getDynObject = function(o)
{
	if( o.is_dyn == true )
	{
		return o;
	}
	else
	{
		return mf.Object.getDynObject(o.parentNode);
	}
};
mf.Object.getVar = function(o, v)
{
	if( exists( o.getAttribute(v) ) == true )
	{
		return o.getAttribute(v);
	}
	else if( exists( o.parentNode) )
	{
		return mf.Object.getVar(o.parentNode, v);
	}
	else
	{
		return false;
	}
};
mf.Object.allowMoving = function(o)
{
	var Top = mf.Object.getTop(o);
	var Left = mf.Object.getLeft(o);
	o.style.position = "absolute";
	o.style.left = Left + "px";
	o.style.top = Top + "px";
};
mf.Object.Overwrite = function(newNode, oldNode)
{
	if( exists(oldNode.parentNode) )
	{
		var Parent = oldNode.parentNode;
		Parent.insertBefore(newNode,oldNode);
		var OldNode = Parent.removeChild(oldNode);
		return OldNode;
	}
	return false;
};
mf.Object.insertAfter = function(newNode, oldNode)
{
	if( exists(oldNode.parentNode) )
	{
		var Parent = oldNode.parentNode;
		Parent.insertBefore(newNode,oldNode);
		var OldNode = Parent.removeChild(oldNode);
		Parent.insertBefore(oldNode,newNode);
		return true;
	}
	return false;
};
/* TRANSPARENCY */
mf.Object.allowTransparencyByID = function(id)
{
	//if(mf.DEBUG){alert(id);}
	mf.Object.allowTransparency(elements(id));
};
mf.Object.allowTransparency = function(o, width)
{
	if(!exists(o.transparancy) )
	{
		o.transparancy = true;
		//o.style.position = "relative";
		if( !o.style.width)
			o.style.width = width?width:o.offsetWidth;
		//o.style.height = o.offsetHeight;
		//o.style.backgroundColor = "#fff";
	}
};
mf.Object.setAlphaByID = function(id, alpha )
{
	mf.Object.setAlpha(elements(id), alpha);
};
mf.Object.setAlpha = function( o, alpha )
{
	var opacity = alpha * 100;
	o.alpha = alpha;

	if( mf.IE )
	{
		//o.style.filter = "alpha(opacity="+opacity+", finishopacity="+opacity+", style=2)";
		o.style.MozOpacity = alpha;
		o.style.KhtmlOpacity = alpha;
	}
	o.style.filter = "alpha(opacity="+opacity+")";
	o.style.opacity = alpha;
};
mf.Object.meltEraseCallBack = function(){};
mf.Object.meltShowCallBack = function(){};
mf.Object.meltEraseCallBacks = new Array();
mf.Object.meltShowCallBacks = new Array();
mf.Object.meltAlphaStep = 0.1;
mf.Object.meltInterval = 30; // ms
mf.Object.meltErase = function( o, cb, it )
{
	mf.Object.allowTransparency(o);
	if( !exists(o.alpha) ) o.alpha = 1;
	window.clearInterval( o.meltIdInterval );
	if( typeof(cb) == "function" ) mf.Object.meltEraseCallBacks[o.id] = cb;
	if( !exists(it) ) it = mf.Object.meltInterval;
	o.meltIdInterval = setInterval('mf.Object.animateMeltErase( "'+o.id+'")', it);
};
mf.Object.animateMeltErase = function( ido )
{
	o = elements( ido );
	mf.Object.setAlpha(o, o.alpha - mf.Object.meltAlphaStep);
	if( o.alpha <= 0 )
	{
		mf.Object.setAlpha(o, 0);
		window.clearInterval( o.meltIdInterval );
		if( exists(mf.Object.meltEraseCallBacks[ido]) )
			mf.Object.meltEraseCallBacks[ido]();
		else
			mf.Object.meltEraseCallBack();
	}
};
mf.Object.meltShow = function( o, cb, it, maxi )
{
	mf.Object.allowTransparency(o);
	if( !exists(o.alpha) ) o.alpha = 0;
	window.clearInterval( o.meltIdInterval );
	if( typeof(cb) == "function" ) mf.Object.meltShowCallBacks[o.id] = cb;
	if( !exists(it) ) it = mf.Object.meltInterval;
	if(!exists(maxi)) maxi = 1;
	o.meltIdInterval = setInterval('mf.Object.animateMeltShow( "'+o.id+'", "'+maxi+'")', it);
};
mf.Object.animateMeltShow = function( ido, maxi )
{
	o = elements( ido );
	mf.Object.setAlpha(o, o.alpha + mf.Object.meltAlphaStep );
	if( o.alpha >= maxi )
	{
		mf.Object.setAlpha(o, maxi);
		window.clearInterval( o.meltIdInterval );

		if( exists(mf.Object.meltShowCallBacks[ido]) )
			mf.Object.meltShowCallBacks[ido]();
		else
			mf.Object.meltShowCallBack();
	}
};
/* TRANSPARENCY */
////////////               OBJECT               ///////////

////////////               SCREEN               ///////////
mf.Screen = {};
mf.Screen.ieNOTopera = document.all && navigator.userAgent.indexOf("Opera")==-1;
mf.Screen.ieHoffset_extra = document.all ? 15 : 0;
mf.Screen.IEcompattest = function()
{
	return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
};
mf.Screen.getLeft0 = function()
{
	var dsocleft = document.all? mf.Screen.IEcompattest().scrollLeft : pageXOffset;
	var dsoctop = document.all? mf.Screen.IEcompattest().scrollTop : pageYOffset;
	var window_width = mf.Screen.ieNOTopera? mf.Screen.IEcompattest().clientWidth + mf.Screen.ieHoffset_extra : window.innerWidth + mf.Screen.ieHoffset_extra;
	var window_height = mf.Screen.ieNOTopera? mf.Screen.IEcompattest().clientHeight : window.innerHeight;

	if(document.all || elements)
	{
		return( parseInt(dsocleft) );
	}
	else if(document.layers)
	{
		return ( dsocleft);
	}
};
mf.Screen.getTop0 = function()
{
	var dsocleft=document.all? mf.Screen.IEcompattest().scrollLeft : pageXOffset;
	var dsoctop=document.all? mf.Screen.IEcompattest().scrollTop : pageYOffset;
	var window_width=mf.Screen.ieNOTopera? mf.Screen.IEcompattest().clientWidth + mf.Screen.ieHoffset_extra : window.innerWidth + mf.Screen.ieHoffset_extra;
	var window_height=mf.Screen.ieNOTopera? mf.Screen.IEcompattest().clientHeight : window.innerHeight;
	
	if (document.all||elements)
	{
		return ( parseInt(dsoctop) );
	}
	else if (document.layers)
	{
		return ( dsoctop );
	}
};
mf.Screen.getPageW = function()
{
	if (document.body)
	{
		return (document.body.clientWidth);
	}
	else
	{
		return (window.innerWidth);
	}
};
mf.Screen.getPageH = function()
{
	if (document.body)
	{
		return (document.body.clientHeight);
	}
	else
	{
		return (window.innerHeight);
	}
};
mf.Screen.getVisibleW = function()
{
	return document.documentElement.clientWidth;
};
mf.Screen.getVisibleH = function()
{
	return document.documentElement.clientHeight;
};
////////////               SCREEN               ///////////


////////////               UTILS               /////////////
mf.Utils = {};
mf.Utils.getMouseXY = function(e) 
{
	var tempX = 0;
	var tempY = 0;
	if (mf.IE)
	{
		tempX = event.clientX + mf.Screen.getLeft0();
		tempY = event.clientY + mf.Screen.getTop0();
	}
	else 
	{
		tempX = e.pageX;
		tempY = e.pageY;
	}  
	// possible negative values with NS4
	if (tempX < 0){tempX = 0;}
	if (tempY < 0){tempY = 0;}  
	
	return Array(tempX, tempY);
};
mf.Utils.getCursorSelection = function()
{
	if ( document.selection )
	{
		return ( document.selection.createRange().text );
	}
	else if ( document.getSelection )
	{
		return ( document.getSelection() );
	}
	return false;
};
mf.Utils.is_set = function( $entry )
{
	if( typeof($entry) != "undefined" && $entry != null )
	{
		return true;	
	}
	return false;
};
mf.Utils.AutoFillInput = {};
mf.Utils.AutoFillInput.Id = false;
mf.Utils.onMouseUpAutofill = function( evt )
{
	var CurrentSelection = mf.Utils.getCursorSelection();
	if(trim(CurrentSelection) != '')
		elements(mf.Utils.AutoFillInput.Id).value = mf.Utils.getCursorSelection();
};
mf.Utils.setAutoFillInput = function( idinput )
{
	mf.Utils.AutoFillInput.Id = idinput;
	mf.Event.addEvent( document, "mouseup", mf.Utils.onMouseUpAutofill, false);
};
mf.Utils.changeInnerHTMLIdInterval = 0;
mf.Utils.changeInnerHtmlSwitchCond = function( bool, id, content1, content2 )
{
	var oldObject = elements( id );
	var parentObject = oldObject.parentNode;

	var newObject = document.createElement('div');

	if( bool ){newObject.innerHTML = content1;}
	else{newObject.innerHTML = content2;}

	try
	{
		parentObject.appendChild( newObject );
		oldObject.style.display = "none";
		return true;
	}
	catch(err)
	{
	}
};
/*
mf.Utils.changeInnerHtmlSwitchCond = function( bool, id, content1, content2 )
{
	var parentObject = elements( id ).offsetParent;
	var newObject = document.createElement('div');
	try
	{
		if( bool )
		{
			dynObject.innerHTML = content1;
		}
		else
		{
			dynObject.innerHTML = content2;
		}
		parentObject.appendChild( dynObject );
	}
	catch( err )
	{
		alert( err );
	}
}
*/

////////////               / UTILS               ///////////


////////////                EVENT                ///////////
mf.Event = {};
mf.Event.addEvent = function( obj, type, callback, prop)
{
	if( type == 'scroll' )
	{
		if( mf.Firefox )obj.addEventListener('DOMMouseScroll', callback, prop);
		else if( mf.IE ) obj.attachEvent("onmousewheel", callback );
		else obj.addEventListener('mousewheel', callback, prop);
		return;
	}

	if( mf.IE )
		obj.attachEvent("on" + type, callback );
	else
		obj.addEventListener(type, callback, prop);
};
mf.Event.getScrollAmount = function(evt)
{
	if( mf.IE ) return evt.wheelDelta ? -evt.wheelDelta / 40 : 0;
	if( mf.Chrome ) return - evt.wheelDeltaY / 30;
	return evt.detail || 0;
}
mf.Event.removeEvent = function( obj, type, callback, prop)
{
	if( mf.IE )
		obj.detachEvent("on" + type, callback );
	else
		obj.removeEventListener(type, callback, prop);
};
mf.Event.getEventElement = function(evt)
{
	return evt.target || evt.srcElement;
};

mf.Event.addLoadEventOld = function(func)
{
   var oldonload = window.onload;
   if(typeof window.onload != 'function')
   {
      window.onload = func;
   }
   else
   {
      window.onload = function()
      {
         oldonload();
         func();
      };
   }
};





// Si Safari
//if (/WebKit/i.test(navigator.userAgent))
// Dean Edwards/Matthias Miller/John Resig
mf.loadfunction = function(){};
mf.onload = function()
{
	// quit if this function has already been called
	if (arguments.callee.done) return;
	// flag this function so we don't do the same thing twice
	arguments.callee.done = true;
	if (_timer) clearInterval(_timer);
	// do stuff
	mf.loadfunction();
}

var _timer = false;


/*
if( navigator.vendor.indexOf("Apple") )
{
//	alert('setInteravl');
	_timer = setInterval(function()
					  {
						if (/loaded|complete/.test(document.readyState))
						{
							mf.onload();
						}
					}, 10);
};
*/

/* for Mozilla/Opera9
if (document.addEventListener)
{
	document.addEventListener("DOMContentLoaded", init, false);
}
 */

mf.Event.addLoadEvent = function(func)
{
	var oldonload = window.onload;
	if(typeof window.onload != 'function')
	{
		window.onload = func;
	}
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		};
	}
};









mf.Event.killEvent = function( evt )
{
	mf.Event.stopPropagation(evt);
	mf.Event.preventDefault(evt);
};
mf.Event.stopPropagation = function(evt)
{
	if (evt.stopPropagation) 
		evt.stopPropagation();
	else
		evt.cancelBubble = true;
};
mf.Event.preventDefault = function(evt)
{
	if (evt.preventDefault) 
		  evt.preventDefault();
	else
		evt.returnValue = false;
};


mf.Event.TabEvaluables = new Array();
mf.Event.TabEvaluateSuccess = new Array();
mf.Event.IdIntervalInsert = 0;
mf.Event.setAfterLoad = function( evaluable )
{
	mf.Event.TabEvaluables.push(evaluable);
	mf.Event.TabEvaluateSuccess.push( false );
};
mf.Event.insertAfterLoad = function()
{
	mf.Event.IdIntervalInsert = window.setInterval( "mf.Event.processInsert()", 100 );
};
mf.Event.processInsert = function()
{
	var Errors = false;
	for( var i = 0; i < mf.Event.TabEvaluables.length; i++ )
	{
		if(mf.Event.TabEvaluateSuccess[i] == false)
		try
		{
			eval( mf.Event.TabEvaluables[i] );
			mf.Event.TabEvaluateSuccess[i] = true;
		}
		catch( err )
		{
			alert( err );
			Errors = true;
		}
	}
	
	if( Errors == true )
	{
		window.clearInterval( mf.Event.IdIntervalInsert );
	}
};
////////////               / EVENT               ///////////

////////////               TEXT               ///////////
mf.Text = {};
mf.Text.removePx = function( input )
{
	if( typeof( input ) == 'number' || typeof(input.substr) != 'function' )
	{
		return input;
	}
	else
	{
		if( input.substr( input.length - 2 ) == 'px' )
		{
			input = parseInt( input.substr( 0, input.length - 2 ) );
			return input;
		}
		else
		{
			return input;
		}
	}
};
mf.Text.makeFlashDiv = function( url, width, height, id, quality, autoplay, loop, transparent, flashvars )
{
	var FlashDivContent = '<div class="view-embed">'+mf.Text.makeFlashObject( url, width, height, id, quality, autoplay, loop, transparent, flashvars )+'<div class="content-media-flash"></object></div></div>';
	return FlashDivContent;
};
mf.Text.makeSimpleFlashDiv = function( url, width, height, id, quality, autoplay, loop, transparent, flashvars )
{
	var FlashDivContent = '<div class="content-media-flash">'+mf.Text.makeFlashObject( url, width, height, id, quality, autoplay, loop, transparent, flashvars )+'</div>';
	return FlashDivContent;
};
mf.Text.makeFlashObjectOK = function( url, width, height, id, quality, autoplay, loop, transparent, flashvars )
{
	var fWidth = (width && width != '0') ? width:'100%';
	var fHeight = (height && height != '0') ? height:'100%';
	var fQuality = quality ? quality:'best';
	var fAutoplay = autoplay ? autoplay:'true';
	var fLoop = loop ? loop:'true';
	var fWmode = transparent ? 'transparent':'';

	var FlashDivContent = ''
	+'<object id="'+id+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"'
	+' width="'+fWidth+'" height="'+fHeight+'">'
	+'<param name="movie" value="'+url+'" />'
	+'<param name="quality" value="'+fQuality+'" />'
	+'<param name="play" value="' +fAutoplay+ '" />'
	+'<param name="loop" value="' +fLoop+ '" />'
	+'<param name="wmode" value="'+fWmode+'" />'
	+'<param name="allowscriptaccess" value="always" />'
	+'<embed src="'+url+'" type="application/x-shockwave-flash" pluginspage=""'
	+' allowscriptaccess="always"'
	+' quality="'+fQuality+'"'
	+' width="'+fWidth+'" height="'+fHeight+'"'
	+' wmode="transparent"'
	+' name="'+id+'"'
	+' play="'+fAutoplay+'"'
	+' allowscriptaccess="always"'
	+' loop="'+fLoop+'" name="'+id+'"';

	if( flashvars && flashvars.length && typeof(flashvars.length) == 'number' )
	{
		FlashDivContent += ' flashvars="';
		for( var fv = 0; fv < flashvars.length; fv++)
		{
			FlashDivContent += '&'+ flashvars[fv][0] + '=' + flashvars[fv][1];
		}
		FlashDivContent += '"';
	}
	FlashDivContent += '></embed></object>';
	return FlashDivContent;
};
mf.Text.makeFlashEmbed = function( url, width, height, id, quality, autoplay, loop, transparent, flashvars )
{	
	var fWidth = (width && width != '0') ? width:'100%';
	var fHeight = (height && height != '0') ? height:'100%';
	var fQuality = quality ? quality:'best';
	var fAutoplay = autoplay ? autoplay:'true';
	var fLoop = loop ? loop:'true';
	var fWmode = transparent ? 'transparent':'opaque';
	//var FlashDivContent = ''
	//+'<object id="'+id+'" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"'
	//+' width="'+fWidth+'" height="'+fHeight+'">'

	var FlashObject = mf.Object.createElement('object', {'id':id, 'codebase':'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0','width':fWidth,'height':fHeight});
	
	var FlashObjectHtml = '<object id="' + id + '" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="'+fWidth+'" height="' + fHeight + '">';

	var FlashDivContent = ''
	+'<param name="movie" value="'+url+'" />'
	+'<param name="quality" value="'+fQuality+'" />'
	+'<param name="play" value="' +fAutoplay+ '" />'
	+'<param name="loop" value="' +fLoop+ '" />'
	+'<param name="wmode" value="'+fWmode+'" />'
	+'<embed src="'+url+'" type="application/x-shockwave-flash" pluginspage=""'
	+ 'name="'+ id + '"'
	+ 'id="id_' + id + '"'
	+' quality="'+fQuality+'"'
	+' width="'+fWidth+'" height="'+fHeight+'"'
	+' wmode="transparent"'
	+' allowscriptaccess="always"'
	+' play="'+fAutoplay+'"'
	+' loop="'+fLoop+'"';

	if( flashvars && flashvars.length && typeof(flashvars.length) == 'number' )
	{
		FlashDivContent += ' flashvars="';
		for( var fv = 0; fv < flashvars.length; fv++)
		{
			FlashDivContent += '&'+ flashvars[fv][0] + '=' + flashvars[fv][1];
		}
		FlashDivContent += '"';
	}
	FlashDivContent += '></embed>';
	FlashObjectHtml += FlashDivContent + '</object>';
	
	//FlashObject.innerHTML = FlashDivContent;
	return FlashObjectHtml;
};

mf.Text.makeFlashObject = function( url, width, height, id, quality, autoplay, loop, transparent, flashvars )
{	
	var fWidth = (width && width != '0') ? width:'100%';
	var fHeight = (height && height != '0') ? height:'100%';
	var fQuality = quality ? quality:'best';
	var fAutoplay = autoplay ? autoplay:'true';
	var fLoop = loop ? loop:'true';
	var fWmode = transparent ? 'transparent':'opaque';

	var FlashDivContent = ''
	+'<embed src="'+url+'" type="application/x-shockwave-flash" pluginspage=""'
	+ 'name="'+ id + '"'
	+ 'id="'+ id + '"'
	+' quality="'+fQuality+'"'
	+' width="'+fWidth+'" height="'+fHeight+'"'
	+' wmode="transparent"'
	+' allowscriptaccess="always"'
	+' play="'+fAutoplay+'"'
	+' loop="'+fLoop+'" name="'+id+'"';

	if( flashvars && flashvars.length && typeof(flashvars.length) == 'number' )
	{
		FlashDivContent += ' flashvars="';
		for( var fv = 0; fv < flashvars.length; fv++)
		{
			FlashDivContent += '&'+ flashvars[fv][0] + '=' + flashvars[fv][1];
		}
		FlashDivContent += '"';
	}
	FlashDivContent += '></embed>';
		
	//FlashObject.innerHTML = FlashDivContent;
	return FlashDivContent;
};

mf.Text.makeFlashObjectOT = function( url, width, height, id, quality, autoplay, loop, transparent, flashvars )
{	
	var fWidth = (width && width != '0') ? width:'100%';
	var fHeight = (height && height != '0') ? height:'100%';
	var fQuality = quality ? quality:'best';
	var fAutoplay = autoplay ? autoplay:'true';
	var fLoop = loop ? loop:'true';
	var fWmode = transparent ? 'transparent':'opaque';

	/*
	var FlashObject = mf.Object.createElement('object', {'id':id,'codebase':'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0','width':fWidth,'height':fHeight});
	FlashObject.appendChild( mf.Object.createElement('param', {'name':'movie','value':url}) );
	FlashObject.appendChild( mf.Object.createElement('param', {'name':'quality','value':fQuality}) );
	FlashObject.appendChild( mf.Object.createElement('param', {'name':'play','value':fAutoplay}) );
	FlashObject.appendChild( mf.Object.createElement('param', {'name':'loop','value':fLoop}) );
	FlashObject.appendChild( mf.Object.createElement('param', {'name':'wmode','value':fWmode}) );
	FlashObject.appendChild( mf.Object.createElement('param', {'name':'allowScriptAccess','value':'always'}) );
	*/

	var FlashVars = '';
	if( flashvars && flashvars.length && typeof(flashvars.length) == 'number' )
	{
		for( var fv = 0; fv < flashvars.length; fv++)
		{
			FlashVars += '&'+ flashvars[fv][0] + '=' + flashvars[fv][1];
		}
	}


	var EmbedParams = {'src':url,'type':'application/x-shockwave-flash','pluginspage':'http://www.macromedia.com/go/getflashplayer','quality':fQuality,'width':fWidth,'height':fHeight,'wmode':fWmode,'play':fAutoplay,'loop':fLoop,'name':'embed_'+id,'flashvars':FlashVars,'id':'embed_'+id,'allowScriptAccess':'always'};
	var Embed = mf.Object.createElement('embed', EmbedParams);



	//FlashObject.appendChild( Embed );





	//var embed = document.createElement('embed');
	//embed.setAttribute('width',fWidth);
	//embed.setAttribute('height',fHeight);
	//embed.setAttribute('src',url);
	//var div = document.getElementById(replaceid);
	//document.getElementsByTagName('body')[0].replaceChild(embed,div); 


	return(Embed);
};
mf.Text.makeQTObject = function( url, width, height, id, has_controller, autoplay, loop, pluginspage )
{
	var fWidth = (width && width != '0') ? width:'100%';
	var fHeight = (height && height != '0') ? height:'100%';
	var fHasController = has_controller ? has_controller:'true';
	var fIsAutoplay = autoplay ? autoplay:'true';
	var fIsLoop = loop ? loop:'true';

	var QTObject = mf.Object.createElement('object', {	'width':fWidth,
										   				'height':fHeight,
										   				'codebase':"http://www.apple.com/qtactivex/qtplugin.cab"});
	QTObject.appendChild( mf.Object.createElement('param', {'name':'movie','value':url}) );
	QTObject.appendChild( mf.Object.createElement('param', {'name':'controller','value':fHasController}) );
	QTObject.appendChild( mf.Object.createElement('param', {'name':'autoplay','value':fIsAutoplay}) );
	QTObject.appendChild( mf.Object.createElement('param', {'name':'loop','value':fIsLoop}) );
	QTObject.appendChild( mf.Object.createElement('embed', {'src':url,
												  			'type':"video/quicktime",
												  			'pluginspage':pluginspage,
												  			'width':fWidth,
												  			'height':fHeight,
												  			'play':fIsAutoplay,
												  			'loop':fIsLoop,
												  			'controller':fHasController
															}) );
	return QTObject;
};
mf.Text.makeVideoObject = function(width, height, controls, sources)
{
	var video = document.createElement('video');
	video.setAttribute('width', width);
	video.setAttribute('height', height);
	video.setAttribute('controls', controls);
	video.setAttribute('autobuffer', '1');
	for( var i = 0; i < sources.length; i++ )
	{
		var source = document.createElement('source');
		source.setAttribute('src', sources[i]['src']);
		source.setAttribute('type', sources[i]['type']);
		video.appendChild( source );
	}
	return video;
}




mf.Text.makeRMDiv = function( url, width, height, controls, is_autoplay )
{
	var fWidth = (width && width != '0') ? width:'100%';
	var fHeight = (height && height != '0') ? height:'100%';
	var fControlls = controls ? controls:'true';
	var fIsAutoplay = is_autoplay ? is_autoplay:'true';

	var RMObject = mf.Object.createElement('object', {	'classid':"clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA",
										   				'width':fWidth,
										   				'height':fHeight});
	RMObject.appendChild( mf.Object.createElement('param', {'name':'src','value':url}) );
	RMObject.appendChild( mf.Object.createElement('param', {'name':'controls','value':fControlls}) );
	RMObject.appendChild( mf.Object.createElement('param', {'name':'autostart','value':fIsAutoplay}) );
	RMObject.appendChild( mf.Object.createElement('embed', {'src':url,
												  			'pluginspage':"http://real.com",
												  			'type':"audio/x-pn-realaudio-plugin",
												  			'width':fWidth,
												  			'height':fHeight,
												  			'autostart':fIsAutoplay,
												  			'controls':fControlls}) );
	return RMDivContent;
};
mf.Text.makeWMDiv = function( url, width, height, has_controller, is_autoplay, pluginspage )
{
	var fWidth = (width && width != '0') ? width:'100%';
	var fHeight = (height && height != '0') ? height:'100%';
	var fHasController = has_controller ? has_controller:'true';
	var fIsAutoplay = is_autoplay ? is_autoplay:'true';
	var fPluginSpace = pluginspage ? pluginspage:'';

	var WMObject = mf.Object.createElement('object', {	'ID':"MediaPlayer",
										   				'CLASSID':"CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95",
										   				'STANDBY':"Loading Windows Media Player components...",
										   				'type':"application/x-oleobject",
										   				'width':fWidth,
										   				'height':fHeight});
	WMObject.appendChild( mf.Object.createElement('param', {'name':'filename','value':url}) );
	WMObject.appendChild( mf.Object.createElement('param', {'name':'autostart','value':fIsAutoplay}) );
	WMObject.appendChild( mf.Object.createElement('param', {'name':'showcontrols','value':fHasController}) );
	WMObject.appendChild( mf.Object.createElement('embed', {'src':url,
												  			'type':"application/x-mplayer2",
												  			'pluginspage':fPluginSpace,
												  			'width':fWidth,
												  			'height':fHeight,
												  			'autostart':"true",
												  			'showcontrols':fHasController}) );

	return WMObject;
};
////////////               TEXT               ///////////



////////////                INFOS                ///////////
mf.Infos = {};
mf.BrowserName = '';
mf.OS = '';
mf.Infos.BrowserDetect = {
	showBrowserInfos : function( divid, lang )
	{
		var aboutBrowserHtml = '';
		aboutBrowserHtml += mf.Infos.BrowserDetect.browser + ' ' +  mf.Infos.BrowserDetect.version + ' / ' + mf.Infos.BrowserDetect.OS + '<br/>';
		if( mf.Infos.BrowserDetect.isOld )
		{
			aboutBrowserHtml += this.makeDlSentence(lang);
		}
		else
		{
			aboutBrowserHtml += this.makeOKSentence(lang);
		}
		elements(divid).innerHTML = aboutBrowserHtml;
	},
	makeDlSentence : function( lang )
	{
		switch (lang)
		{
			case "fr":
				return 'T&eacute;l&eacute;chargez la derni&egrave;re version : <a target="_blank" href="' + mf.Infos.BrowserDetect.browserDL + '">sur le site officiel de ' + BrowserDetect.browser + '</a>';
			break;
			default:
				return 'Download last version : <a target="_blank" href="' + mf.Infos.BrowserDetect.browserDL + '">On the official ' + mf.Infos.BrowserDetect.browser + ' website</a>';
			break;
		}
	},
	makeOKSentence : function( lang )
	{
		switch (lang)
		{
			case "fr":
				return 'Vous avez la derni&egrave;re version de ' + mf.Infos.BrowserDetect.browser;
			break;
			default:
				return 'You have the last version of ' + mf.Infos.BrowserDetect.browser;
			break;
		}
	},
	dataBrowser: [
		{string: navigator.userAgent, subString: "Chrome", identity: "Chrome"},
		{string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb"},
		{string: navigator.vendor,	  subString: "Apple",	identity: "Safari"},
		{prop: window.opera, identity: "Opera" },
		{string: navigator.vendor, subString: "iCab", identity: "iCab"},
		{string: navigator.vendor, subString: "KDE", identity: "Konqueror"},
		/* FIREFOX BASED BROWSERS, BEFORE FIREFOX */
		{string: navigator.vendor, subString: "Camino", identity: "Camino"},
		// for newer Netscapes (6+)
		{string: navigator.userAgent, subString: "Netscape", identity: "Netscape"},
		{string: navigator.userAgent, subString: "Flock", identity: "Flock"},
		{string: navigator.userAgent, subString: "Navigator", identity: "Netscape", versionSearch: "Navigator"
		},
		/* NOW FIREFOX */
		{string: navigator.userAgent, subString: "Firefox", identity: "Firefox"},
		{string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE"},
		{string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv"},
		// for older Netscapes (4-)
		{string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla"}
	],
	dataOS : [
		{string: navigator.platform, subString: "Win", identity: "Windows"},
		{string: navigator.platform, subString: "Mac", identity: "Mac"},
		{string: navigator.platform, subString: "Linux", identity: "Linux"}
	],
	dataCurrVersion : {
		Chrome : 0.2,
		OmniWeb : 5,
		Konqueror: 3,
		Firefox: 3,
		Camino : 1,
		Netscape: 9,
		Explorer: 7,
		Flock: 1.2
	},
	urlDownloads : {
		Chrome :{ Windows:  { en : "http://www.google.com/chrome/index.html?hl=en&brand=CHMB&utm_campaign=fr&utm_source=fr-ha-emea-fr-sk&utm_medium=ha&utm_term=chrome",
							  fr : "http://www.google.com/chrome/index.html?hl=en&brand=CHMB&utm_campaign=fr&utm_source=fr-ha-emea-fr-sk&utm_medium=ha&utm_term=chrome"}
				},
		OmniWeb : { Mac: 	{ en : "http://www.omnigroup.com/applications/omniweb/download/",
							  fr : "http://www.omnigroup.com/applications/omniweb/download/"}
				},
		Konqueror: { Linux: { en : "http://www.kde.org/download/",
							  fr : "http://www.kde.org/download/"}
				},
		Firefox: { Windows: { en : "http://www.mozilla-europe.org/en/firefox/",
							  fr : "http://www.mozilla-europe.org/fr/firefox/"},
					Mac: 	{ en : "http://www.mozilla-europe.org/en/firefox/",
							  fr : "http://www.mozilla-europe.org/fr/firefox/"}
				},
		Camino : { Mac: 	{ en : "http://caminobrowser.org/",
							  fr : "http://caminobrowser.org/"}
				},
		Netscape: { Windows:  { en : "http://isp.netscape.com/software/download2.jsp",
							    fr : "http://isp.netscape.com/software/download2.jsp"}
				},
		Explorer: { Windows:  { en : "http://www.microsoft.com/france/windows/downloads/ie/getitnow.Mspx",
							    fr : "http://www.microsoft.com/france/windows/downloads/ie/getitnow.Mspx"}
					},
		Flock: { Windows:  {  en : "http://flock.com",
							  fr : "http://flock.com"}
			}
	},
	searchVersion: function (dataString) 
	{
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	searchString: function (data) 
	{
		for (var i = 0 ; i < data.length; i++)	
		{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) 
			{
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	init: function () 
	{
		this.language = "fr";
		mf.BrowserName = this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version";
		mf.OS = this.OS = this.searchString(this.dataOS) || "an unknown OS";
		this.isOld = (this.version < this.dataCurrVersion[this.browser]) ? true:false;
		//this.browserDL = this.urlDownloads[this.browser][this.OS][this.language];
	}
};
mf.Infos.PluginList = false;
mf.Infos.PluginDetectInit = function()
{
	var agt=navigator.userAgent.toLowerCase();
	var ie  = (agt.indexOf("msie") != -1);
	var ns  = (navigator.appName.indexOf("Netscape") != -1);
	var win = ((agt.indexOf("win")!=-1) || (agt.indexOf("32bit")!=-1));
	var mac = (agt.indexOf("mac")!=-1);
	if (ie && win) 
		pluginlist = detectIE("Adobe.SVGCtl","SVG Viewer") + detectIE("SWCtl.SWCtl.1","Shockwave Director") + detectIE("ShockwaveFlash.ShockwaveFlash.1","Shockwave Flash") + detectIE("rmocx.RealPlayer G2 Control.1","RealPlayer") + detectIE("QuickTimeCheckObject.QuickTimeCheck.1","QuickTime") + detectIE("MediaPlayer.MediaPlayer.1","Windows Media Player") + detectIE("PDF.PdfCtrl.5","Acrobat Reader"); 

	if(ns || !win)
	{
		nse = ""; for (var i=0;i<navigator.mimeTypes.length;i++) nse += navigator.mimeTypes[i].type.toLowerCase();
		pluginlist = detectNS("image/svg-xml","SVG Viewer") + detectNS("application/x-director","Shockwave Director") + detectNS("application/x-shockwave-flash","Shockwave Flash") + detectNS("audio/x-pn-realaudio-plugin","RealPlayer") + detectNS("video/quicktime","QuickTime") + detectNS("application/x-mplayer2","Windows Media Player") + detectNS("application/pdf","Acrobat Reader");
	}
	function detectIE(ClassID,name) { result = false; document.write('<SCRIPT LANGUAGE=VBScript>\n on error resume next \n result = IsObject(CreateObject("' + ClassID + '"))</SCRIPT>\n'); if (result) return name+','; else return ''; };
	function detectNS(ClassID,name) { n = ""; if (nse.indexOf(ClassID) != -1) if (navigator.mimeTypes[ClassID].enabledPlugin != null) n = name+","; return n; };
	pluginlist += navigator.javaEnabled() ? "Java," : "";
	if ( pluginlist && pluginlist.length > 0)
		pluginlist = pluginlist.substring(0,pluginlist.length-1);
	mf.Infos.PluginList = pluginlist;
};
////////////               / INFOS               ///////////




mf.FLVPlayerID = 1;
mf.FLVPlayer = function(swiff, flv, width, height, outer_div_id, autoplay)
{
	this.Swiff = swiff;
	this.AnimWidth = width;
	this.AnimHeight = height;
	this.Flv = flv;
	this.Autoplay = autoplay;
	this.OuterDivID = outer_div_id;
	var ControllerHeight = 25; this.ControllerHeight = ControllerHeight;
	var Created = false; this.Created = Created;
	_this = this;
	mf.Event.addLoadEvent(function(){_this.init();});
	function init()
	{
		this.PlayerID = "mondo_flv_player_" + mf.FLVPlayerID;
		elements(this.OuterDivID).style.display = "block";
		
		var FLVVars = new Array();
		FLVVars.push(new Array('video', this.Flv));
		FLVVars.push(new Array('autoplay', this.Autoplay));
		
		// ( url, width, height, id, quality, autoplay, loop, transparent, flashvars )
		var FlObj = mf.Text.makeFlashObjectOK( this.Swiff, width, height, this.PlayerID, "best", true, true, false, FLVVars );
		elements(this.OuterDivID).innerHTML = FlObj;
		if( mf.IE ) mf.ractivate();
		this.Created = true;
		mf.FLVPlayerID++;
	}
	this.init = init;
}

mf.Player = {};
mf.Player.TabPlayers = new Array();
mf.Player.CurrentPlayerID = 1;
mf.Player.SuperPlayer = function(swiff, flv, width, height)
{
	this.Swiff = swiff;
	this.AnimWidth = width;
	this.AnimHeight = height;
	this.Flv = flv;
	
	var DynVideo = false; this.DynVideo = DynVideo;
	var VideoShown = false; this.VideoShown = VideoShown;
	var ControllerHeight = 25; this.ControllerHeight = ControllerHeight;
	var OuterDivID = 'portfolio_item_video_outer';
		this.OuterDivID = OuterDivID;
	var ObjectID = 'portfolio_item_video_object';
		this.ObjectID = ObjectID;
	var VideoDivID = 'portfolio_item_video_div';
		this.VideoDivID = VideoDivID;
	var Created = false; this.Created = Created;
	var CanvasClassName = 'mondovideo-content'; this.CanvasClassName = CanvasClassName;
	var DynVideo = false; this.DynVideo = DynVideo;
	var ID = false; this.ID = ID;
	var displayCallBack = false; this.displayCallBack = displayCallBack;
	var hideCallBack = false; this.hideCallBack = hideCallBack;
	var IdIntervalPreload; this.IdIntervalPreload = IdIntervalPreload;
	var Waiting = false; this.Waiting = Waiting;

	this.ID = mf.Player.CurrentPlayerID;
	mf.Player.CurrentPlayerID++;
	mf.Player.TabPlayers[this.ID] = this;

	function init()
	{
		if( !this.Created )
		{
			elements(this.OuterDivID).style.display = "block";
			//var FlObj = mf.Text.makeFlashObjectOK( this.Swiff, "100%", "100%", this.ObjectID);
			//elements(this.VideoDivID).innerHTML = FlObj;
			this.DynVideo = mf.Dyn.makeDynamicObject(elements(this.OuterDivID), 0, 0);
			elements(this.DynVideo.staticCanvasId).style.display = "none";
			this.Created = true;
		}
	}
	this.init = init;

	function showVideo(CallBack)
	{
		if( exists(CallBack) ){this.displayCallBack = CallBack;}

		this.init();

		if( !this.VideoShown )
		{
			this.DynVideo.style.display = "block";

			DynCanvas = elements(this.DynVideo.dynCanvasId);
			DynCanvas.className = this.CanvasClassName;

			var ScreenWidth = mf.Screen.getVisibleW();
			var ScreenHeight = mf.Screen.getVisibleH();
			
			var CibleWidth = this.AnimWidth;
			var CibleHeight = this.AnimHeight + this.ControllerHeight;

			var xCible = ( ScreenWidth - CibleWidth ) / 2;
			var yCible = mf.Screen.getTop0() + ( ScreenHeight - CibleHeight ) / 2;

			// CENTRE
			mf.Object.setSize(this.DynVideo, 0, 0, false);
			mf.Object.setPos(this.DynVideo,ScreenWidth / 2, mf.Screen.getTop0() + ScreenHeight + 100);

			
			/*this.DynVideo.left = ScreenWidth / 2;
			this.DynVideo.top = mf.Screen.getTop0() + ScreenHeight/2;
			this.DynVideo.style.left = this.DynVideo.left + "px";
			this.DynVideo.style.top = this.DynVideo.top + "px";
			*/

			mf.Dyn.moveTo( this.DynVideo, xCible, yCible, false );
			mf.Dyn.sizeTo( this.DynVideo, CibleWidth, CibleHeight, mf.Player.SuperPlayer.onAppear, this.ID );

			this.VideoShown = true;
		}
		else
		{
			this.hideCallBack = CallBack;

			getMovie(this.ObjectID).callStopMovie();
			
			//mf.Dyn.sizeTo(this.DynVideo, this.DynVideo.originalWidth, this.DynVideo.originalHeight, mf.Player.SuperPlayer.onDisAppear, this.ID);
			mf.Dyn.sizeTo(this.DynVideo, 0, 0, mf.Player.SuperPlayer.onDisAppear, this.ID);

			var ScreenWidth = mf.Screen.getVisibleW();
			var ScreenHeight = mf.Screen.getVisibleH();

			var xCible = (ScreenWidth / 2);
			var yCible = mf.Screen.getTop0() + ScreenHeight + 100;

			mf.Dyn.moveTo(this.DynVideo, xCible, yCible, false );
			//mf.Dyn.moveTo(this.DynVideo, this.DynVideo.originalLeft, this.DynVideo.originalTop, false );
			this.VideoShown = false;
		}
	};
	this.showVideo = showVideo;
};
mf.ractivate = function()
{
	var fls = document.getElementsByTagName("object");
	for (var a = 0; a < fls.length; a++){fls[a].outerHTML = fls[a].outerHTML;}
}
mf.Player.SuperPlayer.onAppear = function(playerID)
{
	//var objectid = 'embed_portfolio_item_video_object';
	var objectid = mf.Player.TabPlayers[playerID].ObjectID;
	var flv = mf.Player.TabPlayers[playerID].Flv;

	if( mf.IE ) mf.ractivate(objectid);
	getMovie(objectid).callPlayMovie(flv);

	if( typeof(mf.Player.TabPlayers[playerID].displayCallBack) == "function" )
	{
		mf.Player.TabPlayers[playerID].displayCallBack();
	}
};
mf.Player.SuperPlayer.onDisAppear = function(playerID)
{
	var DynVideo = mf.Player.TabPlayers[playerID].DynVideo;

	DynVideo.style.left = DynVideo.originalLeft + "px";
	DynVideo.style.top = DynVideo.originalTop + "px";
	DynVideo.style.display = "none";

	DynCanvas = elements(DynVideo.dynCanvasId);
	DynCanvas.className = '';
	if( typeof(mf.Player.TabPlayers[playerID].hideCallBack) == "function" )
	{
		mf.Player.TabPlayers[playerID].hideCallBack();
	}
};





/********************************************************************************************************************* DRAGNDROP *********************************************************************************************************************/
mf.Dyn = {};
mf.Dyn.dragDropHandler = function()
{
	this.currentID = 0;
	this.tabDragObjects = new Array();
	this.tabMovingObjects = new Array();
	this.getFirstNamedTag = function( name )
	{
		var elements = document.getElementsByName(name);
		return elements[0];
	};
	this.makeDraggableByDivClass = function(divClassName, btnTagName, btnClassName, dragcallback )
	{
		var Divs = document.getElementsByTagName('div');
		var BtnTags = false;
		var DynObjectsArray = new Array();
		for( var d =0; d < Divs.length; d++)
		{
			if( Divs[d].className == divClassName)
			{
				if(exists(btnTagName))
				{
					BtnTags = Divs[d].getElementsByTagName(btnTagName);
					for( var t =0; t < BtnTags.length; t++)
					{
						if( BtnTags[t].className == btnClassName )
						{
							var ObjTemp = this.makeDraggable( Divs[d], BtnTags[t].id, dragcallback );
							ObjTemp.futureclass = Divs[d].className;
							DynObjectsArray.push(ObjTemp);
							break;
						}
					}				
				}
				else
				{
					var ObjTemp = this.makeDraggable( Divs[d], false, dragcallback );
					ObjTemp.futureclass = Divs[d].className;
					DynObjectsArray.push(ObjTemp);
				}
			}
		}

		// Set class after, to avoid infinite recursion with getElementsByTagName ( DYNAMIC )
		for( var t =0; t < DynObjectsArray.length; t++)
		{
			//alert( DynObjectsArray[t].dynCanvasId );
			//DynObjectsArray[t].className = DynObjectsArray[t].class;
			elements(DynObjectsArray[t].dynCanvasId).className = DynObjectsArray[t].futureclass;
		}
		return DynObjectsArray;
	};
	this.makeDraggable = function( staticObject, dragBtnID, dragcallback, setclass, dropCallBack, always_dyn )
	{
		var dynObject = mf.Dyn.makeDynamicObject(staticObject, false, false, false, false, always_dyn);
		var DynObjectID = dynObject.getAttribute('id');

		this.tabDragObjects.push(DynObjectID);
		this.tabMovingObjects[DynObjectID] = false;
		dynObject.style.zIndex = mf.Dyn.dragDropHandler.BASE_DEPTH + this.currentID;

		if( exists(dragcallback)) dynObject.dragCallBack = dragcallback;
		if( exists(dropCallBack)) dynObject.dropCallBack = dropCallBack;

		if( exists(dragBtnID) && dragBtnID )
		{
			var Btn = elements( dragBtnID );
			if( Btn )
			{
				Btn.style.cursor = "pointer";
				mf.Event.addEvent( Btn, "mousedown", mf.Dyn.dragDropHandler.draggableObjectMouseDown, false);
			}
		}
		else
		{
			mf.Event.addEvent( dynObject, "mousedown", mf.Dyn.dragDropHandler.draggableObjectMouseDown, false);
		}
		return dynObject;
	};
};
/////////////////////////// STATIC ////////////////////////////////
mf.Dyn.dragDropHandler.SELECTED_OBJECT_DEPTH = 1000;
mf.Dyn.dragDropHandler.SELECTED_OBJECT_ALPHA = 0.8;
mf.Dyn.dragDropHandler.BASE_DEPTH = 500;
mf.Dyn.dragDropHandler.CURRENT_DRAG_OBJECT = false;
mf.Dyn.dragDropHandler.INTERVAL = 30;
mf.Dyn.dragDropHandler.EASE = 0.6;
mf.Dyn.dragDropHandler.DROP_ACTION_SWITCH = 0;
mf.Dyn.dragDropHandler.DROP_ACTION_REPLACE = 1;
mf.Dyn.dragDropHandler.DROP_ACTION_OVERLAY = 2;

mf.Dyn.dragDropHandler.DROP_ACTION_PUSH_HOR = 3;
mf.Dyn.dragDropHandler.DROP_ACTION_PUSH_VER = 4;

mf.Dyn.dragDropHandler.DROP_ACTION_INSERT_BEFORE = 5;
mf.Dyn.dragDropHandler.DROP_ACTION_INSERT_AFTER = 6;
mf.Dyn.dragDropHandler.DROP_ACTION_APPEND = 7;

mf.Dyn.dragDropHandler.moveHome = function( objID )
{
	var obj = elements( objID );
	var ease = mf.Dyn.dragDropHandler.EASE;
	obj.left = obj.originalLeft + (Math.round(ease*(obj.left - obj.originalLeft) ));
	obj.top = obj.originalTop + (Math.round(ease*(obj.top - obj.originalTop) ));
	obj.style.left = obj.left + "px";
	obj.style.top = obj.top + "px";
	if( Math.abs( obj.left - obj.originalLeft ) <= (1/ease) && Math.abs(obj.top - obj.originalTop) <= Math.ceil( 1/ease ))
	{
		obj.left = obj.originalLeft;
		obj.top = obj.originalTop;
		obj.style.left = obj.left + "px";
		obj.style.top = obj.top + "px";
		obj.moving = false;
		mf.Dyn.dragDropHandler.attachStatic(obj);
		window.clearInterval( obj.IdInterval );
	}
};
mf.Dyn.dragDropHandler.attachStatic = function(o)
{
	if(o.attached) return;
	o.attached = true;
	o.style.position = "";
	elements(o.staticCanvasId).appendChild( elements(o.dynCanvasId).removeChild(o) );
}
mf.Dyn.dragDropHandler.attachDynamic = function(o)
{
	if( !o.attached ) return;
	o.style.position = "absolute";
	o.attached = false;

	var staticCanvas = elements(o.staticCanvasId);
	//var dynCanvas = elements(o.dynCanvasId);

	
	o.left = o.originalLeft = mf.Object.getLeft(staticCanvas);
	o.top = o.originalTop = mf.Object.getTop(staticCanvas);

	o.style.left = o.left+"px";
	o.style.top = o.top+"px";

	elements(o.dynCanvasId).appendChild( elements(o.staticCanvasId).removeChild(o) );
};
mf.Dyn.dragDropHandler.switchStaticCanvas = function(o,p)
{
	var TempStaticCanvasId = o.staticCanvasId;
	o.staticCanvasId = p.staticCanvasId;
	p.staticCanvasId = TempStaticCanvasId;
	
	var originalLeft = o.originalLeft;
	var originalTop = o.originalTop;
	
	o.originalLeft = p.originalLeft;
	o.originalTop = p.originalTop;
	
	p.originalLeft = originalLeft;
	p.originalTop = originalTop;

	// Set home coords
	var CurrentObjectHome = mf.Object.getHome(o);
	mf.Object.setHomeByObject( o, p );
	mf.Object.setHome( p, CurrentObjectHome );
};
mf.Dyn.dragDropHandler.draggableObjectMouseDown = function( Event )
{
	var MousePosition = mf.Utils.getMouseXY(Event);
	var MouseLeft = parseInt(MousePosition[0]);
	var MousetTop = parseInt(MousePosition[1]);

	if( mf.Dyn.dragDropHandler.CURRENT_DRAG_OBJECT )
		mf.Dyn.dragDropHandler.CURRENT_DRAG_OBJECT.style.zIndex = mf.Dyn.dragDropHandler.CURRENT_DRAG_OBJECT.style.zIndex - 1;

	var target = Event.target || Event.srcElement;
	var obj = mf.Object.getDynObject(target);

	if( typeof( obj.dragCallBack ) == "function" )
		obj.dragCallBack(obj, MousePosition);
	
	// Object is going iself to its place ?
	if( obj.moving == true )
	{
		// Can Re-Drag
		mf.Event.removeEvent( document, "mousemove", mf.Dyn.dragDropHandler.draggableObjectMouseMove, false);
		mf.Event.removeEvent( document, "mouseup", mf.Dyn.dragDropHandler.draggableObjectMouseUp, false);		
		window.clearInterval( obj.IdInterval );

		// OR Can not redrag
		//mf.Event.killEvent(Event);
		//return false;
	}
	else
	{
		mf.Dyn.dragDropHandler.attachDynamic(obj);

		obj.style.top = obj.top + "px";
		obj.style.left = obj.left + "px";
		obj.style.width = obj.width + "px";
		obj.style.height = obj.height + "px";
	}

	obj.style.zIndex = mf.Dyn.dragDropHandler.SELECTED_OBJECT_DEPTH;
	mf.Object.setAlpha(  obj, mf.Dyn.dragDropHandler.SELECTED_OBJECT_ALPHA );

	obj.dragX = MouseLeft - obj.left;
	obj.dragY = MousetTop - obj.top;

	mf.Dyn.dragDropHandler.CURRENT_DRAG_OBJECT = obj;

	mf.Event.addEvent( document, "mousemove", mf.Dyn.dragDropHandler.draggableObjectMouseMove, false);
	mf.Event.addEvent( document, "mouseup", mf.Dyn.dragDropHandler.draggableObjectMouseUp, false);	
	mf.Event.killEvent(Event);

	if( obj.dragCallBack && typeof(obj.dragCallBack) == "function" ) obj.dragCallBack();	
	return false;
};
mf.Dyn.dragDropHandler.draggableObjectMouseMove = function( Event )
{
	var MousePosition = mf.Utils.getMouseXY(Event);
	var obj = mf.Dyn.dragDropHandler.CURRENT_DRAG_OBJECT;

	obj.left = MousePosition[0] - obj.dragX;
	obj.top = MousePosition[1] - obj.dragY;

	obj.style.left =  obj.left + "px";
	obj.style.top = obj.top + "px";

	mf.Event.killEvent(Event);

	// SCREEN LIMIT ?

	// MANAGE DROP TARGETS
	if( !exists(obj.dropTargetIDs) ) return false;
	var Hit = false;
	var HitObjectID = '';
	for( var d = 0; d < obj.dropTargetIDs.length; d++ )
	{
		if( obj.dropTargetIDs[d] == obj.id ) continue;
		var dobj = elements( obj.dropTargetIDs[d] );
		if( mf.Object.hitTestObject(obj, dobj) && Hit == false )
		{
			Hit = true;
			HitObjectID = dobj.id;
			mf.Object.setAlpha( dobj, 0.5 );
		}
		else
		{
			mf.Object.setAlpha( dobj, 1 );
		}
	}
	mf.Object.setAlpha(obj, Hit ? 0.9 : 1 );
	obj.HitObject = Hit ? HitObjectID : false;
};
mf.Dyn.dragDropHandler.draggableObjectMouseUp = function( Event )
{
	var obj = mf.Dyn.dragDropHandler.CURRENT_DRAG_OBJECT;
	mf.Object.setAlpha( obj, 1 );
	if( obj.HitObject )
	{
		// The hit object ( a dyn object )
		var HitObject = elements( obj.HitObject );
		mf.Object.setAlpha( HitObject, 1 );

		switch( obj.dropTargetActions[obj.HitObject])
		{
			case mf.Dyn.dragDropHandler.DROP_ACTION_SWITCH:
				
				// Get ready to move
				mf.Dyn.dragDropHandler.attachDynamic(HitObject);
				// Switch static canvas
				mf.Dyn.dragDropHandler.switchStaticCanvas(HitObject,obj);
				// Let's move
				mf.Object.goHome(HitObject);
			break;

			case mf.Dyn.dragDropHandler.DROP_ACTION_INSERT_AFTER:
				// Get staitc canvas
				var staticCanvas = elements(obj.staticCanvasId).parentNode.removeChild(elements(obj.staticCanvasId));
				HitObject.parentNode.parentNode.insertBefore( staticCanvas, HitObject.parentNode);

				obj.originalLeft = mf.Object.getLeft( staticCanvas );
				obj.originalTop = mf.Object.getTop( staticCanvas );
			break;

			case mf.Dyn.dragDropHandler.DROP_ACTION_APPEND:
				//alert('append');
				// Get staitc canvas
				var staticCanvas = elements(obj.staticCanvasId).parentNode.removeChild(elements(obj.staticCanvasId));
				HitObject.appendChild( staticCanvas );
				obj.originalLeft = mf.Object.getLeft( staticCanvas );
				obj.originalTop = mf.Object.getTop( staticCanvas );
			break;

			

			/*
			case mf.Dyn.dragDropHandler.DROP_ACTION_PUSH_HOR:
				var HitObject = elements( obj.HitObject );
				var HitObjectHome = mf.Object.getHome(HitObject);			
				HitObjectHome[0] += HitObject.offsetWidth;
				mf.Object.setHomeByObject( obj, HitObject );
				mf.Object.setHome( HitObject, HitObjectHome );
				mf.Object.setAlpha( HitObject, 1 );
				mf.Object.goHome(HitObject);
			break;
			
			case mf.Dyn.dragDropHandler.DROP_ACTION_PUSH_VER:
				var HitObject = elements( obj.HitObject );
				var HitObjectHome =mf.Object.getHome(HitObject);
				HitObjectHome[1] += HitObject.offsetHeight;
				mf.Object.setHomeByObject( obj, HitObject );
				mf.Object.setHome( HitObject, HitObjectHome );
				mf.Object.setAlpha( HitObject, 1 );
				mf.Object.goHome( HitObject );
			break;

			case mf.Dyn.dragDropHandler.DROP_ACTION_REPLACE:
				var HitObject = elements( obj.HitObject );
				mf.Object.setAlpha( HitObject, 0 );
				mf.Object.setHomeByObjectID( obj, obj.HitObject );
			break;
			
			case mf.Dyn.dragDropHandler.DROP_ACTION_OVERLAY:
				mf.Object.setHomeByObjectID( obj, obj.HitObject );
			break;
			*/

		}
		if( typeof(obj.dropCallBacks[obj.HitObject]) == "function" )
		{
			obj.dropCallBacks[obj.HitObject](obj,HitObject);
		}
	}
	if( typeof(obj.dropCallBack) == "function" )
	{
		var coords = mf.Utils.getMouseXY(Event);
		obj.dropCallBack(obj, coords);
	}
	else
	{
		mf.Object.goHome(obj);
	}
	mf.Event.removeEvent( document, "mousemove", mf.Dyn.dragDropHandler.draggableObjectMouseMove, false);
	mf.Event.removeEvent( document, "mouseup", mf.Dyn.dragDropHandler.draggableObjectMouseUp, false);
	mf.Event.killEvent(Event);
};
/////////////////////////// /STATIC ///////////////////////////////////////


mf.Dyn.moveCurrentID = 0;
mf.Dyn.EASE = 0.4;
mf.Dyn.IT = 40;
mf.Dyn.moveTo = function(dynamicObject, x, y, callback)
{
	dynamicObject.baseLeft = x;
	dynamicObject.baseTop = y;
	mf.Dyn.dragDropHandler.attachDynamic(dynamicObject);
	window.clearInterval( dynamicObject.moveInterval );
	dynamicObject.moveInterval = window.setInterval( "mf.Dyn.animateMoveto('"+dynamicObject.id+"')", mf.Dyn.IT );
};
mf.Dyn.animateMoveto = function( objID )
{
	var obj = elements( objID );
	var ease = mf.Dyn.EASE;

	obj.left = obj.baseLeft + (Math.round(ease*(obj.left - obj.baseLeft) ));
	obj.top = obj.baseTop + (Math.round(ease*(obj.top - obj.baseTop) ));
	obj.style.left = obj.left + "px";
	obj.style.top = obj.top + "px";
	
	if( Math.abs( obj.left - obj.baseLeft ) <= (1/ease) && Math.abs(obj.top - obj.baseTop) <= Math.ceil( 1/ease ))
	{
		obj.left = obj.baseLeft;
		obj.top = obj.baseTop;

		obj.style.left = obj.left + "px";
		obj.style.top = obj.top + "px";

		obj.moving = false;	
		window.clearInterval( obj.moveInterval );
	}
};

mf.Dyn.sizeTo = function(o, w, h, callback, callbackparam)
{
	o.resizeCallback = callback;
	
	o.currwidth = mf.Object.getWidth(o);
	o.currheight = mf.Object.getHeight(o);

	o.basewidth = w;
	o.baseheight = h;
	
	o.callbackparam = callbackparam;
	o.sizeInterval = window.setInterval( "mf.Dyn.animateSizeto('"+o.id+"')", mf.Dyn.IT );
};
mf.Dyn.animateSizeto = function( objID )
{
	var obj = elements( objID );
	var ease = mf.Dyn.EASE;

	//obj.currwidth = obj.basewidth + (Math.round(Math.abs(ease*(obj.currwidth - obj.basewidth) )));
	//obj.currheight = obj.baseheight + (Math.round(Math.abs(ease*(obj.currheight - obj.baseheight) )) );
	
	obj.currwidth = obj.basewidth + (Math.round(ease*(obj.currwidth - obj.basewidth) ));
	obj.currheight = obj.baseheight + (Math.round(ease*(obj.currheight - obj.baseheight) ) );
	
	obj.style.width = obj.currwidth + "px";
	obj.style.height = obj.currheight + "px";

	obj.width = obj.currwidth;
	obj.height = obj.currheight;

	if( Math.abs( obj.currwidth - obj.basewidth ) <= (1/ease) && Math.abs(obj.currheight - obj.baseheight) <= Math.ceil( 1/ease ))
	{
		obj.width = obj.basewidth;
		obj.height = obj.baseheight;
		obj.style.width = obj.basewidth + "px";
		obj.style.height = obj.baseheight + "px";
		obj.moving = false;
		window.clearInterval( obj.sizeInterval );
		if( typeof(obj.resizeCallback) == "function" ){obj.resizeCallback(obj.callbackparam);}
	}
};

// A INTEGRER DANS DRAGNDROP !!!!!
mf.Dyn.makeDynamicObject = function(staticObject, origWidth, origHeight, origLeft, origTop, always_dyn)
{
	if( staticObject.parentNode && staticObject.parentNode.is_dyn ) return staticObject.parentNode;

	var Top = mf.Object.getTop(staticObject);
	var Left = mf.Object.getLeft(staticObject);
	var Width = exists(origWidth) && origWidth ? origWidth : mf.Object.getWidth(staticObject);
	var Height = exists(origHeight) && origHeight ? origWidth : mf.Object.getHeight(staticObject);

	staticObject.style.left = "0px";
	staticObject.style.top = "0px";
	
	var DynObjectName = 'mondo_dyn_object_' + mf.Dyn.moveCurrentID;
	var DynCanvasID = 'mondo_dyn_canvas_' + mf.Dyn.moveCurrentID;
	var StaticCanvasID = 'mondo_static_canvas_' + mf.Dyn.moveCurrentID;

	var dynObjectCanvas = document.createElement('div');
	dynObjectCanvas.setAttribute('id', DynCanvasID );
	document.body.appendChild( dynObjectCanvas );

	// CREATE STATIC CANVAS
	var staticObjectCanvas = document.createElement('div');
	staticObjectCanvas.setAttribute('id', StaticCanvasID );
	staticObjectCanvas.className = 'mondo_static_canvas';
	staticObject.parentNode.insertBefore(staticObjectCanvas, staticObject);

	// CREATE DYNAMIC OBJECT
	var dynObject = document.createElement('div');
	dynObject.dynCanvasId = DynCanvasID;
	dynObject.staticCanvasId = StaticCanvasID;
	dynObject.name = DynObjectName;
	dynObject.id = DynObjectName;
	dynObject.originalWidth = Width;
	dynObject.originalHeight = Height;
	dynObject.originalLeft = Left;
	dynObject.originalTop = Top;
	dynObject.style.position = "absolute";
	dynObject.left = Left;
	dynObject.top = Top;
	dynObject.width = Width;
	dynObject.height = Height;
	dynObject.style.width = Width + "px";
	dynObject.style.height = Height + "px";
	dynObject.style.left = Left + "px";
	dynObject.style.top = Top + "px";
	dynObject.is_dyn = true;
	dynObject.attached = false;

	// FILL DYNAMIC OBJECT
	dynObject.appendChild( staticObject.parentNode.removeChild(staticObject) );
	//staticObject.is_dyn = true;
	if( exists(always_dyn) && always_dyn )
	{
		elements(dynObject.staticCanvasId).parentNode.removeChild( elements(dynObject.staticCanvasId) );
		dynObject.staticCanvasId = false;
		dynObject.always_dyn = true;
		dynObjectCanvas.appendChild( dynObject );
	}
	else
	{
		dynObject.always_dyn = false;
		staticObjectCanvas.appendChild( dynObject );
		staticObjectCanvas.style.width = Width + "px";
		staticObjectCanvas.style.height = Height + "px";

		//alert('yep');
		//dynObject.style.width = "0px";
		//dynObject.style.height = "0px";
		dynObject.style.left = "0px";
		dynObject.style.top = "0px";
		dynObject.style.position = "static";

		dynObject.attached = true;
	}
	mf.Dyn.moveCurrentID++;
	return dynObject;
};
mf.Dyn.destroyDynamicObject = function(o)
{
	if( o.attached )
	{
		o = elements(o.staticCanvasId).removeChild(o);
	}
	else
	{
		o = elements(o.dynCanvasId).removeChild(o);
	}
	elements(o.dynCanvasId).parentNode.removeChild( elements(o.dynCanvasId) );
	if( !o.always_dyn ) elements(o.staticCanvasId).parentNode.removeChild( elements(o.staticCanvasId) );
	delete(o);
};
mf.Object.setHomeByObjectID = function( o, objID )
{
	var obj = elements( objID );
	mf.Object.setHomeByObject( o, obj );
};
mf.Object.setHomeByObject = function( o, obj )
{
	o.baseLeft = mf.Object.getLeft(obj);
	o.baseTop = mf.Object.getTop(obj);
};
mf.Object.getHome = function( o )
{
	return new Array( o.baseLeft, o.baseTop );
};
mf.Object.setHome = function( o, newhome )
{
	o.baseLeft = newhome[0];
	o.baseTop = newhome[1];
};
mf.Object.goHome = function( o )
{
	o.moving = true;
	o.IdInterval = window.setInterval( "mf.Dyn.dragDropHandler.moveHome('"+o.id+"')", mf.Dyn.dragDropHandler.INTERVAL );
};
mf.Object.addDropTarget = function( source, target, action, callback )
{
	if( target.id == source.id ) return false;
	if( !source.dropTargetIDs ) source.dropTargetIDs = new Array();
	source.dropTargetIDs.push(target.id);
	mf.Object.setDropAction( source, target, action);
	mf.Object.setDropCallBack(source, target, callback);
};
mf.Object.removeDropTarget = function( source, target )
{
	if( target.id == source.id ) return false;
	if( !source.dropTargetIDs ) return false;
	
	//if( typeof(source.dropTargetIDs[target.id]) != "undefined") delete(source.dropTargetIDs[target.id]);
	for( var i = 0; i < source.dropTargetIDs.length; i++ )
	{
		if( source.dropTargetIDs[i] == target.id ) source.dropTargetIDs.splice(i,1);
	}
	
	if( typeof(source.dropTargetActions[target.id]) != "undefined") delete(source.dropTargetActions[target.id]);
	if( typeof(source.dropCallBacks[target.id]) != "undefined") delete(source.dropCallBacks[target.id]);
};
mf.Object.setDragCallBack = function(o, func)
{
	if( typeof(func) == "function" ) o.dragCallBack = func;
};
mf.Object.setDropCallBack = function(source, target, func)
{
	if( !source.dropCallBacks )
		source.dropCallBacks = new Array();
	if( typeof(func) == "function" )
		source.dropCallBacks[target.id] = func;
};
mf.Object.setDropAction = function( source, target, action)
{
	if( !source.dropTargetActions ) source.dropTargetActions = new Array();
	if( !action )
	{
		source.dropTargetActions[target.id] = mf.Dyn.dragDropHandler.DROP_ACTION_SWITCH;
		/*
		mf.Dyn.dragDropHandler.DROP_ACTION_SWITCH = 0;
		mf.Dyn.dragDropHandler.DROP_ACTION_REPLACE = 1;
		mf.Dyn.dragDropHandler.DROP_ACTION_OVERLAY = 2;
		mf.Dyn.dragDropHandler.DROP_ACTION_PUSH_HOR = 3;
		mf.Dyn.dragDropHandler.DROP_ACTION_PUSH_VER = 4;
		*/
	}
	else
	{
		source.dropTargetActions[target.id] = action;
	}
};
mf.Object.hitTestObject = function( ob, obj )
{
	function getOffset(o)
	{
		for(var r = {l: o.offsetLeft, t: o.offsetTop, r: o.offsetWidth, b: o.offsetHeight};
		o = o.offsetParent; r.l += o.offsetLeft, r.t += o.offsetTop);
		return r.r += r.l, r.b += r.t, r;
	};
	for(var b, s, r = [], a = getOffset(ob), j = isNaN(obj.length), i = (j ? obj = [obj] : obj).length; i;
	b = getOffset(obj[--i]), (a.l == b.l || (a.l > b.l ? a.l <= b.r : b.l <= a.r)) && (a.t == b.t || (a.t > b.t ? a.t <= b.b : b.t <= a.b)) && (r[r.length] = obj[i]));
	return j ? !!r.length : r;
};
mf.Object.hitTestObjectByID = function( o,  objID )
{
	return mf.Object.hitTestObject(o, elements(objID));
};
/*
mf.Object.topHitTestObject = function( o, p )
{
	var ol = mf.Object.getLeft(o);
	var pl = mf.Object.getLeft(p);
	var ot = mf.Object.getTop(o);
	var pt = mf.Object.getTop(p);
	
	var ow = mf.Object.getWidth(o);
	var pw = mf.Object.getWidth(p);
	var oh = mf.Object.getHeight(o);
	var ph = mf.Object.getHeight(p);
};
*/

/********************************************************************************************************************* /DRAGNDROP *********************************************************************************************************************/




mf.Dyn.scrollHandler = {};
mf.Dyn.scrollHandler.Existing = new Array();
mf.Dyn.scrollHandler.IdInterval = new Array();
mf.Dyn.scrollHandler.scrollStep = 5;
mf.Dyn.scrollHandler.scrollIt = 30;
mf.Dyn.makeScrollDiv = function( SupportDivId, ContentDivId, BtnUpId, BtnDoId, height, selectedItemId, centerSelected )
{
	height = (height == null)? 200:height;

	var Support = elements(SupportDivId);
	var Content = elements(ContentDivId);
	var BtnUp = elements(BtnUpId);
	var BtnDo = elements(BtnDoId);

	var BaseTop = 0;
	if(selectedItemId && elements( selectedItemId ) )
	{
		var SelectedObject = elements( selectedItemId );
		BaseTop = -SelectedObject.offsetTop;
		
		if( centerSelected )
		{
			var Marge = Math.round((height - SelectedObject.offsetHeight) / 2);
			BaseTop += Marge;
		}
	}

	Support.style.position = "relative";
	Support.style.overflow = "hidden";
	Support.style.height = height + "px";
	
	Content.style.position = "absolute";
	Content.style.left = "0px";
	Content.style.top = BaseTop + "px";

	Content.topMax = 0;
	Content.topMin = Support.offsetHeight - Content.offsetHeight;

	if( in_array(SupportDivId, mf.Dyn.scrollHandler.Existing ) )
	{
		mf.Event.removeEvent( BtnUp, "mouseover", mf.Dyn.scrollHandler.scrollDo );
		mf.Event.removeEvent( BtnUp, "mouseout", mf.Dyn.scrollHandler.stopScroll );

		mf.Event.removeEvent( BtnDo, "mouseover", mf.Dyn.scrollHandler.scrollUp );
		mf.Event.removeEvent( BtnDo, "mouseout", mf.Dyn.scrollHandler.stopScroll );
	}

	mf.Dyn.scrollHandler.Existing.push(SupportDivId);

	BtnUp.setAttribute('scroll_div_id', ContentDivId );

	mf.Event.addEvent( BtnUp, "mouseover", mf.Dyn.scrollHandler.scrollDo );
	mf.Event.addEvent( BtnUp, "mouseout", mf.Dyn.scrollHandler.stopScroll );

	BtnDo.setAttribute('scroll_div_id', ContentDivId );
	
	mf.Event.addEvent( BtnDo, "mouseover", mf.Dyn.scrollHandler.scrollUp );
	mf.Event.addEvent( BtnDo, "mouseout", mf.Dyn.scrollHandler.stopScroll );
};
mf.Dyn.scrollHandler.scrollUp = function(evt)
{
	var target = mf.Event.getEventElement( evt );
	//var ScrollContent = target.scrollDivId;
	var ScrollContent = mf.getAttribute(target, 'scroll_div_id');
	
	var Step = - mf.Dyn.scrollHandler.scrollStep;
	mf.Dyn.scrollHandler.IdInterval[ScrollContent] = setInterval( 'mf.Dyn.scrollHandler.animateScrollUp( "'+ScrollContent+ '", "'+Step+'" )', mf.Dyn.scrollHandler.scrollIt);
	mf.Event.killEvent(evt);
};
mf.Dyn.scrollHandler.scrollDo = function(evt)
{
	var target = mf.Event.getEventElement( evt );
	//var ScrollContent = target.scrollDivId;
	var ScrollContent = mf.getAttribute(target, 'scroll_div_id');

	var Step = mf.Dyn.scrollHandler.scrollStep;
	mf.Dyn.scrollHandler.IdInterval[ScrollContent] = setInterval( 'mf.Dyn.scrollHandler.animateScrollDo( "'+ScrollContent+ '", "'+Step+'" )', mf.Dyn.scrollHandler.scrollIt);
	mf.Event.killEvent(evt);
};
mf.Dyn.scrollHandler.stopScroll = function(evt)
{
	var target = evt.target || evt.srcElement;
	
	var ScrollContent = mf.getAttribute(target, 'scroll_div_id');
	//var ScrollContent = target.scrollDivId;
	window.clearInterval( mf.Dyn.scrollHandler.IdInterval[ScrollContent] );
};
mf.Dyn.scrollHandler.animateScrollUp = function( id, step )
{
	var target = elements(id);
	step = parseInt( step );
	var TargetTop = parseInt(mf.Text.removePx(target.style.top));
	if( TargetTop > target.topMin)
		target.style.top = ( TargetTop + step ) + "px";
	else
		target.style.top = target.topMin + "px";
};
mf.Dyn.scrollHandler.animateScrollDo = function( id, step )
{
	var target = elements(id);
	step = parseInt( step );
	var TargetTop = parseInt(mf.Text.removePx(target.style.top));
	if( TargetTop < target.topMax)
		target.style.top = ( TargetTop + step ) + "px";
	else
		target.style.top = target.topMax + "px";
};
// /SCROLL DIV
////////////             /  DYN               ///////////




////////////               EASE              ///////////
mf.Ease = {};
mf.Ease.easeAnimateId = 0;
mf.EaseIt = 30;
mf.Ease.TranslateStep = 40;
mf.Ease.MinStep = 10;
mf.Ease.easing = false;
mf.Ease.mondoEaseManagerClass = function()
{
	var TabDesiredWidth = new Array();
	this.TabDesiredWidth = TabDesiredWidth;

	var TabCurrentWidth = new Array();
	this.TabCurrentWidth = TabCurrentWidth;

	var TabDesiredHeight = new Array();
	this.TabDesiredHeight = TabDesiredHeight;

	var TabCurrentHeight = new Array();
	this.TabCurrentHeight = TabCurrentHeight;

	var TabEtats = new Array();
	this.TabEtats = TabEtats;
	
	var TabWidths = new Array();
	this.TabWidths = TabWidths;
	
	var TabHeights = new Array();
	this.TabHeights = TabHeights;
	
	var TabDivIDs = new Array();
	this.TabDivIDs = TabDivIDs;

	var Processing = false;
	this.Processing = Processing;
	
	var OutFunction;
	this.OutFunction = OutFunction;
	
	var Mode = 'ease';
	this.Mode = Mode;

	function setEase( newease )
	{
		mf.Ease.mondoEaseManagerClass.coeffease = newease;
	};
	this.setEase = setEase;

	function Register( iditem, opened, move, offset, clearHeight )
	{
		if( !exists( iditem ) ){return false;}
		if( exists( opened ) )
		{
			this.TabEtats[iditem] = opened;
		}
		else
		{
			this.TabEtats[iditem] = true;
		}

		elements( iditem ).style.display = "block";
		elements( iditem ).style.overflow = "hidden";

		if( clearHeight ) elements( iditem ).style.height = '';

		this.TabHeights[iditem] = elements( iditem ).offsetHeight;
		this.TabWidths[iditem] = elements( iditem ).offsetWidth;

		if( ( exists( move ) && move == true) )
		{
			if( this.TabEtats[iditem] == false )
			{
				elements( iditem ).style.height = this.TabHeights[iditem] + 'px';
				this.TabEtats[iditem] = false;
			}
			else
			{
				elements( iditem ).style.height = '0px';
				this.TabEtats[iditem] = false;
			}
		}
		if( clearHeight && ( (opened && move) || (!opened && !move) ) )
		{
			elements( iditem ).style.height = '0px';
		}
	};
	this.Register = Register;

	function manageEase( divId, TabBtns, TabEtat )
	{
		for( var i = 0; i < TabEtat.length; i++ )
		{
			switch (TabBtns[i])
			{
				case divId:
					if( TabEtat[i] == false )
					{
						TabEtat[i] = !TabEtat[i];
						mondoEaseManager.EaseOpenClose( divId, false );
					}
				break;

				default:
					if( TabEtat[i] == true )
					{
						TabEtat[i] = !TabEtat[i];
						mondoEaseManager.EaseOpenClose( TabBtns[i], false );
					}
				break;
			}
		}
	};
	this.manageEase = manageEase;
	function EaseOpenClose( iditem, Sens, closeOffset, outFunction )
	{
		var minValue = 0;
		if( exists( closeOffset ) )
		{
			minValue = parseInt(closeOffset);
		}
		if( !exists(iditem) )
		{
			return false;
		}
		if(! exists( this.TabEtats[iditem] ) )
		{
			this.Register( iditem, true, true );
		}
		if( exists( outFunction ) )
		{
			this.OutFunction = outFunction;
		}
		if( Sens )
		{
			if( this.TabEtats[iditem] == false)
			{
				this.launchEase( iditem , minValue, this.TabWidths[iditem], null, null );
				TabEtats[iditem] = true;
			}
			else
			{
				this.launchEase( iditem , this.TabWidths[iditem], minValue, null, null );
				this.TabEtats[iditem] = false;	
			}
		}
		else
		{
			if( this.TabEtats[iditem] == false)
			{
				this.launchEase( iditem , null, null, minValue, this.TabHeights[iditem] );
				TabEtats[iditem] = true;
			}
			else
			{
				this.launchEase( iditem , null, null, this.TabHeights[iditem], minValue );
				this.TabEtats[iditem] = false;	
			}
		}
	};
	this.EaseOpenClose = EaseOpenClose;
	function launchEase( divid, widthBase, widthCible, heightBase, heightCible, outFunction )
	{
		if( divid == null )
		{return;}
		if( exists( outFunction ) )
		{
			this.OutFunction = outFunction;
		}
		if( exists( widthCible ) )
		{			
			widthCible = mf.Text.removePx( widthCible );
			this.TabDesiredWidth[divid] = parseInt(widthCible);
			if( !exists( this.TabCurrentWidth[divid] ) )
			{
				if( exists( widthBase ) )
				{
					widthBase = mf.Text.removePx( widthBase );
				}
				else
				{
					widthBase = elements( divid ).offsetWidth;
				}
				this.TabCurrentWidth[divid] = parseInt(widthBase);
			}
		}
		if( exists( heightCible ) )
		{
			var TheHeightCible = mf.Text.removePx( heightCible );
			this.TabDesiredHeight[divid] = parseInt(TheHeightCible);
			if( !exists( this.TabCurrentHeight[divid] ) )
			{
				var TheHeightBase = elements( divid ).offsetHeight;
				if( exists( heightBase ) )
				{
					TheHeightBase = mf.Text.removePx( heightBase );
				}
				TheHeightBase = mf.Text.removePx( TheHeightBase );
				this.TabCurrentHeight[divid] = mf.Text.removePx( TheHeightBase );
			}
		}
		if( this.TabDivIDs.length < 1 || (!in_array( divid, this.TabDivIDs )) )
		{
			this.TabDivIDs.push( divid );
		}
		if( mf.Ease.easing == false )
		{
			mf.Ease.easing = true;
			
			if(this.Mode == 'ease')
			{
				mf.Ease.easeAnimateId = setInterval(this.animateEase, mf.EaseIt);
			}
			else
			{
				mf.Ease.easeAnimateId = setInterval(this.animateTranslate, mf.EaseIt);
			}
		}
	};
	this.launchEase = launchEase;
	function animateEase()
	{
		var ie = '';
		var nb = 0;
		for( var iid = 0; iid < TabDivIDs.length; iid++ )
		{
			ie = TabDivIDs[iid];
			if( exists( TabCurrentWidth[ie] ) && !isNaN(TabCurrentWidth[ie]) )
			{
				nb++;
				var arrived = false;
				var step = Math.round(  mf.Ease.mondoEaseManagerClass.coeffease * ( TabDesiredWidth[ie] - TabCurrentWidth[ie] ) );
				if(step > 0 )
				{
					if( step < mf.Ease.MinStep ) step = mf.Ease.MinStep;
					var newWidth = TabCurrentWidth[ie] + step;
					elements(ie).style.width = newWidth + "px";
					TabCurrentWidth[ie] = newWidth;
					arrived = ( TabDesiredWidth[ie] - TabCurrentWidth[ie] < 0  );
				}
				else
				{
					if( step > -mf.Ease.MinStep ) step = -mf.Ease.MinStep;
					var newWidth = TabCurrentWidth[ie] + step;
					elements(ie).style.width = newWidth + "px";
					TabCurrentWidth[ie] = newWidth;
					arrived = ( TabDesiredWidth[ie] - TabCurrentWidth[ie] > 0  );
				}
				if( arrived  )
				{
					elements(ie).style.width = TabDesiredWidth[ie] + "px";
					TabCurrentWidth[ie] = TabDesiredWidth[ie];
					deleteEaseParams( iid, true );
				}
			}
			if( exists( TabCurrentHeight[ie] ) )
			{
				nb++;
				var arrived = false;
				var step = Math.round(  mf.Ease.mondoEaseManagerClass.coeffease * ( TabDesiredHeight[ie] - TabCurrentHeight[ie] ) );
				if(step > 0 )
				{
					if( step < mf.Ease.MinStep ) step = mf.Ease.MinStep;
					var newHeight = TabCurrentHeight[ie] + step;
					elements(ie).style.height = newHeight + "px";
					TabCurrentHeight[ie] = newHeight;
					arrived = ( TabDesiredHeight[ie] - TabCurrentHeight[ie] <= 0  );
				}
				else
				{
					if( step > -mf.Ease.MinStep ) step = -mf.Ease.MinStep;
					var newHeight = TabCurrentHeight[ie] + step;
					if( newHeight < 0 ) newHeight = 0; // IE....
					elements(ie).style.height = newHeight + "px";
					TabCurrentHeight[ie] = newHeight;
					arrived = ( TabDesiredHeight[ie] - TabCurrentHeight[ie] >= 0  );
				}
				
				if( arrived )
				{
					
					elements(ie).style.height = TabDesiredHeight[ie] + "px";
					
					TabCurrentHeight[ie] = TabDesiredHeight[ie];
					
					deleteEaseParams( iid, true );
					
				}
			}
		}
		if(	nb < 1 )
		{
			if( exists( mondoEaseManager.OutFunction ) )
			{
				mondoEaseManager.OutFunction();
				mondoEaseManager.OutFunction = null;
			}
			clearInterval( mf.Ease.easeAnimateId );
			mf.Ease.easing = false;
		}
	};
	this.animateEase = animateEase;
	function animateTranslate()
	{
		var ie = '';
		var nb = 0;
		for( var iid = 0; iid < TabDivIDs.length; iid++ )
		{
			ie = TabDivIDs[iid];
			if( exists( TabCurrentWidth[ie] ) )
			{	
				nb++;
				if( TabDesiredWidth[ie] > TabCurrentWidth[ie] )
				{
					var newWidth = TabCurrentWidth[ie] + mf.Ease.TranslateStep;
					elements(ie).style.width = newWidth + "px";
					TabCurrentWidth[ie] = newWidth;

					if(newWidth >= TabDesiredWidth[ie])
					{
						elements(ie).style.width = TabDesiredWidth[ie] + "px";
						TabCurrentWidth[ie] = TabDesiredWidth[ie];
						deleteEaseParams( iid, true );
					}
				}
				else
				{
					var newWidth = TabCurrentWidth[ie] - mf.Ease.TranslateStep;
					elements(ie).style.width = newWidth + "px";
					TabCurrentWidth[ie] = newWidth;

					if(newWidth <= TabDesiredWidth[ie])
					{
						elements(ie).style.width = TabDesiredWidth[ie] + "px";
						TabCurrentWidth[ie] = TabDesiredWidth[ie];
						deleteEaseParams( iid, true );
					}
				}
			}
			if( exists( TabCurrentHeight[ie] ) )
			{
				nb++;
				if( TabDesiredHeight[ie] > TabCurrentHeight[ie] )
				{
					var newHeight = TabCurrentHeight[ie] + mf.Ease.TranslateStep;
					elements(ie).style.height = newHeight + "px";
					TabCurrentHeight[ie] = newHeight;

					if(newHeight >= TabDesiredHeight[ie])
					{
						elements(ie).style.height = TabDesiredHeight[ie] + "px";
						TabCurrentHeight[ie] = TabDesiredHeight[ie];
						deleteEaseParams( iid, true );
					}
				}
				else
				{
					var newHeight = TabCurrentHeight[ie] - mf.Ease.TranslateStep;
					elements(ie).style.height = newHeight + "px";
					TabCurrentHeight[ie] = newHeight;

					if(newHeight <= TabDesiredHeight[ie])
					{
						elements(ie).style.height = TabDesiredHeight[ie] + "px";
						TabCurrentHeight[ie] = TabDesiredHeight[ie];
						deleteEaseParams( iid, true );
					}
				}
			}
		}
		if(	nb < 1 )
		{
			if( exists( mondoEaseManager.OutFunction ) )
			{
				mondoEaseManager.OutFunction();
				mondoEaseManager.OutFunction = null;
			}
			clearInterval( mf.Ease.easeAnimateId );
			mf.Ease.easing = false;
		}
	};
	this.animateTranslate = animateTranslate;

	function deleteEaseParams( id, hor )
	{
		var idtext = TabDivIDs[id];
		TabDivIDs[id] = null;
		if( hor == true )
		{
			TabCurrentWidth[idtext] = null;
			TabDesiredWidth[idtext] = null;
		}
		else
		{
			TabCurrentHeight[idtext] = null;
			TabDesiredHeight[idtext] = null;
		}
	};
	this.deleteEaseParams = deleteEaseParams;
};
mf.Ease.mondoEaseManagerClass.coeffease = 0.2;
mf.Ease.mondoEaseManagerClass.ArrivedNegligence = Math.floor( 1 / 0.2 );

mf.Ease.AutoOpenCloseMenuInstances = [];
mf.Ease.AutoOpenCloseMenuClass = function()
{
	this.index = mf.Ease.AutoOpenCloseMenuInstances.length;
	mf.Ease.AutoOpenCloseMenuInstances[this.index] = this;

	var EventType = 'mouseover';
	this.EventType = EventType;

	var EaseManager = mondoEaseManager;// new mf.Ease.mondoEaseManagerClass();
	this.EaseManager = EaseManager;

	var TabBtns = new Array();
	this.TabBtns = TabBtns;

	var TabEtat = new Array();
	this.TabEtat = TabEtat;

	var CurrentDiv = '';
	this.CurrentDiv = CurrentDiv;

	var Sens = false;
	this.Sens = Sens;

	function addDiv( divId, btnId, closeIt, opened )
	{
		this.EaseManager.Register( divId, opened, closeIt );
		this.TabBtns.push(divId);

		var State = closeIt ? false:true;
		this.TabEtat.push(State);

		if(!closeIt) this.CurrentDiv = divId;

		var DivElement = elements(divId);
		DivElement.style.overflow = 'hidden';
		DivElement.EaseClassIndex = this.index;

		if( this.EventType != 'none' )
		{
			if( typeof(btnId) == "string" )
			{
				btnId = new Array(btnId);
			}
			DivElement.style.cursor = 'pointer';

			for( var b = 0; b < btnId.length; b++ )
			{
				var BtnElement = elements(btnId[b]);
				BtnElement.setAttribute('divId', divId);
				BtnElement.setAttribute('EaseClassIndex', this.index);
				BtnElement.style.cursor = "pointer";
				mf.Event.addEvent( BtnElement, this.EventType, mf.Ease.AutoOpenCloseMenuInstances[this.index].manageEase, false );
			}
		}
		return this;
	};
	this.addDiv = addDiv;

	function manageEase( evt, dont_act )
	{
		var divId;
		var EventElement = false;
		if(typeof(evt) == "string")
		{
			divId = evt;
			EventElement = elements(evt);
			this.EaseManager.Register( EventElement.getAttribute('divId'), false, false, false, true );
			divId = EventElement.getAttribute('divId')
		}
		else
		{
			EventElement = mf.Event.getEventElement(evt);
			divId = mf.Object.getVar(EventElement, 'divId');
		}
		var EaseClassIndex = mf.Object.getVar(EventElement, 'EaseClassIndex');
		var AutoOpenCloseMenuInstance = mf.Ease.AutoOpenCloseMenuInstances[EaseClassIndex];

		for( var i = 0; i < AutoOpenCloseMenuInstance.TabEtat.length; i++ )
		{
			if( AutoOpenCloseMenuInstance.TabBtns[i] == divId )
			{
				if( !AutoOpenCloseMenuInstance.TabEtat[i] )
				{
					AutoOpenCloseMenuInstance.TabEtat[i] = AutoOpenCloseMenuInstance.TabEtat[i] ? false:true;
					AutoOpenCloseMenuInstance.EaseManager.EaseOpenClose( divId, mf.Ease.AutoOpenCloseMenuInstances.Sens );
				}
			}
			else if( AutoOpenCloseMenuInstance.TabEtat[i] == true )
			{
				AutoOpenCloseMenuInstance.TabEtat[i] = AutoOpenCloseMenuInstance.TabEtat[i] ? false:true;
				AutoOpenCloseMenuInstance.EaseManager.EaseOpenClose( AutoOpenCloseMenuInstance.TabBtns[i], mf.Ease.AutoOpenCloseMenuInstances.Sens );
			}
		}
		AutoOpenCloseMenuInstance.CurrentDiv = divId;
		return false;
	};
	this.manageEase = manageEase;
};
////////////               EASE              ///////////

///
/// JAMAIS UTILISER L'OPERATEUR ATTRIBUTE_TEXT_BRUT SUR UNE SELECTION !!!!!!!!!!!!!!!!!!!!!!!!
///
////////////               XML              ///////////
mf.mondoXmlClientClass = function()
{
	var Kommunikator;
	this.Kommunikator = Kommunikator;
	var OutFunction;
	this.OutFunction = OutFunction;
	var AttributeArray;
	this.AttributeArray = AttributeArray;
	var xmlType = 'ezobject';
	this.xmlType = xmlType;
	var ImageAliases = new Array('original');
	this.ImageAliases = ImageAliases;
	var NoCache = true;
	this.NoCache = NoCache;
	var async = true;
	this.async = async;
	
	var LastStatus = false;
	this.LastStatus = LastStatus;

	var Result = false;
	this.Result = Result;
	
	var PersistentData = new Array();
	this.PersistentData = PersistentData;

	function get( req, nextfunc, xmlType )
	{
		this.LoadResult( req, nextfunc, false, xmlType );
	};
	this.get = get;
	function post( req, nextfunc, xmlType, body )
	{
		this.LoadResult( req, nextfunc, false, xmlType, body );
	};
	this.post = post;

	function LoadResult( req, nextfunc, attributeArray, xmlType, body, method, async )
	{
		if( exists(async) && async == false ) async = false;
		else async = true;

		if( exists(method) && method == "GET" ) method = "GET";
		else method = "POST";

		this.Kommunikator = null;
		this.Kommunikator = mf.mondoXmlClientClass.getXMLHTTP();

		if( typeof(nextfunc) == "function" ){ this.OutFunction = nextfunc };
		if(exists(xmlType) ){this.xmlType = xmlType;}

		if(exists(attributeArray) && attributeArray){this.AttributeArray	= attributeArray;}
		else{this.AttributeArray = new Array();}

		// Ref to this, the anonymous "onreadystatechange" will have access to the good scope.
		var _this = this;
		this.Kommunikator.onreadystatechange = function(){_this.onkreadystatechange()};

		if( this.NoCache == true )
		{
			var uniqString = Math.random();
			if(req.lastIndexOf('?') == -1 ){req += "?";}
			req += "&nocache=" + uniqString.toString();
		}

		this.Kommunikator.open(method, req , async);
		this.Kommunikator.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		this.Kommunikator.send(body);
	};
	this.LoadResult = LoadResult;
	
	function onkreadystatechange() // evt ?
	{
		if( this.Kommunikator.readyState == 4 )
		{
			this.LastStatus = this.Kommunikator.status;
			if( this.Kommunikator.status == 200 )
			{
				this.processResponse();
			}
			else if( typeof(this.OutFunction) == "function" )
			{
				this.OutFunction(MONDOTOOLS_AJAX_FATAL_ERROR);
			}
		} 
	};
	this.onkreadystatechange = onkreadystatechange;

	function processResponse()
	{
		this.Result = false;
		if( this.xmlType == 'ezobject' )
		{
			this.Result = mf.mondoXmlClientClass.processXmlResponse( this.Kommunikator.responseText, this.ImageAliases );
		}
		else if( this.xmlType == 'ezkeyword' )
		{						
			this.Result = mf.mondoXmlClientClass.processXmlKeyword( this.Kommunikator.responseText );
		}
		else
		{
			this.Result = this.Kommunikator.responseText;
		}
		if( typeof(this.OutFunction) == "function" )
		{
			this.OutFunction(this.Result);
		}
	};
	this.processResponse = processResponse;

	function dispose()
	{
		this.Kommunikator = null;
		this.Kommunikator = mf.mondoXmlClientClass.getXMLHTTP();
	};
	this.dispose = dispose;
};

// STATIC
mf.mondoXmlClientClass.getXMLHTTP = function()
{
	var xhr=null;
	if(window.XMLHttpRequest)
	{
		xhr = new XMLHttpRequest();
	}
	else if(window.ActiveXObject)
	{
		try
		{
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e1)
			{
				xhr = null; 
				alert('Error creating xmlhttp');
			}
		}
	}
	else
	{
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
	}
	return xhr;
};
mf.ajax = mf.mondoXmlClientClass;


mf.activatedRunOnceSources = new Array();
mf.activatedRunOnceScripts = new Array();
mf.activateScripts = function(div)
{
	var AllScripts = div.getElementsByTagName("script");
	for (var i=0; i<AllScripts.length; i++)
	{
		var s=AllScripts[i];
		if( s.src && s.src != "" )
		{
			window.eval(mf.getFileContent(s.src));
		}
		else if( s.innerHTML != null )
		{
			window.eval(s.innerHTML);
		}
	}
};

mf.getFileContent = function(url)
{
	var jack = mf.mondoXmlClientClass.getXMLHTTP();
	jack.open("GET",url,false);
	jack.send(null);
	return jack.responseText;
};
var MONDOTOOLS_AJAX_FATAL_ERROR = 'Something that may not be....';
mf.mondoXmlClientClass.parseXml = function(xml)
{
	var doc;
	if (window.ActiveXObject)
	{
		doc = new ActiveXObject("Microsoft.XMLDOM");
		doc.async = 'false';
		doc.loadXML(xml);
	}
	else
	{
		var parser=new DOMParser();
		doc = parser.parseFromString(xml,"text/xml");
	}
	return doc;
}
mf.mondoXmlClientClass.processXmlResponse = function(xml, ImageAliases)
{
	var xmldoc;
	if (window.ActiveXObject)
	{
		xmldoc = new ActiveXObject("Microsoft.XMLDOM");
		xmldoc.async = 'false';
		xmldoc.loadXML(xml);
	}
	else
	{
		var parser=new DOMParser();
		xmldoc = parser.parseFromString(xml,"text/xml");
	}

	var tabResult = Array();
	if( xmldoc.hasChildNodes() )
	{
		var allobjects = xmldoc.getElementsByTagName('object');
		for(var o = 0; o < allobjects.length; o++)
		{
			tabResult[o] = Array();
			
			var title = allobjects[o].getElementsByTagName('title');
			tabResult[o]['title'] = title[0].firstChild.nodeValue;
			
			var parent = allobjects[o].getElementsByTagName('parent');
			if( exists( parent[0] ) )
				tabResult[o]['parent'] = parent[0].firstChild.nodeValue;
			else
				tabResult[o]['parent'] = '';

			var url = allobjects[o].getElementsByTagName('url');
			tabResult[o]['url'] = url[0].firstChild.nodeValue;
			
			var section_id = allobjects[o].getElementsByTagName('section_id');
			tabResult[o]['section_id'] = section_id[0].firstChild.nodeValue;

			var node_id = allobjects[o].getElementsByTagName('node_id');
			tabResult[o]['node_id'] = node_id[0].firstChild.nodeValue;
			
			var object_id = allobjects[o].getElementsByTagName('object_id');
			tabResult[o]['object_id'] = object_id[0].firstChild.nodeValue;			

			var version = allobjects[o].getElementsByTagName('version');
			tabResult[o]['version'] = version[0].firstChild.nodeValue;			

			var current_language = allobjects[o].getElementsByTagName('current_language');
			tabResult[o]['current_language'] = current_language[0].firstChild.nodeValue;			

			var parent_node_id = allobjects[o].getElementsByTagName('parent_node_id');
			tabResult[o]['parent_node_id'] = parent_node_id[0].firstChild.nodeValue;

			var class_identifier = allobjects[o].getElementsByTagName('class_identifier');
			tabResult[o]['class_identifier'] = class_identifier[0].firstChild.nodeValue;

			var short_date = allobjects[o].getElementsByTagName('shortdate');
			tabResult[o]['shortdate'] = short_date[0].firstChild.nodeValue;

			var year = allobjects[o].getElementsByTagName('year');
			tabResult[o]['year'] = year[0].firstChild.nodeValue;

			var priority = allobjects[o].getElementsByTagName('priority');
			tabResult[o]['priority'] = priority[0].firstChild.nodeValue;

			var sort_field = allobjects[o].getElementsByTagName('sort_field');
			tabResult[o]['sort_field'] = sort_field[0].firstChild.nodeValue;

			var sort_order = allobjects[o].getElementsByTagName('sort_order');
			tabResult[o]['sort_order'] = sort_order[0].firstChild.nodeValue;

			// Rights
			var can_move = allobjects[o].getElementsByTagName('can_move');
			tabResult[o]['can_move'] = can_move[0].firstChild.nodeValue;
			var can_remove = allobjects[o].getElementsByTagName('can_remove');
			tabResult[o]['can_remove'] = can_remove[0].firstChild.nodeValue;
			var can_edit = allobjects[o].getElementsByTagName('can_edit');
			tabResult[o]['can_edit'] = can_edit[0].firstChild.nodeValue;

			var can_create = allobjects[o].getElementsByTagName('can_create');
			if( can_create[0].firstChild )
			{
				tabResult[o]['can_create'] = can_create[0].firstChild.nodeValue;
			}
			else
			{
				tabResult[o]['can_create'] = "";
			}

			var can_translate = allobjects[o].getElementsByTagName('can_translate');
			tabResult[o]['can_translate'] = (can_translate[0].firstChild.nodeValue == 'true') ? true : false;

			var attributes = allobjects[o].getElementsByTagName('attribute');
			tabResult[o]['attributes'] = Array();

			for(var at=0; at < attributes.length; at++)
			{
				//if( exists( attributes[at].getElementsByTagName('value')[0] ) )
				//{
					var key_temp = attributes[at].getElementsByTagName('name')[0].firstChild.nodeValue;
					var valuetemp = attributes[at].getElementsByTagName('value')[0].firstChild;

					tabResult[o]['attributes'][key_temp] = Array();
					tabResult[o]['attributes'][key_temp]['type'] = attributes[at].getElementsByTagName('type')[0].firstChild.nodeValue;
					tabResult[o]['attributes'][key_temp]['has_content'] = attributes[at].getElementsByTagName('has_content')[0].firstChild.nodeValue;

					if(valuetemp)
					{
						if( ImageAliases.length > 0 && tabResult[o]['attributes'][key_temp]['type'] == 'ezimage' )
						{
							var Alias = '';
							var nodetemp = attributes[at].getElementsByTagName('value');
							tabResult[o]['attributes'][key_temp]['value'] = new Array();
							
							for( var ia = 0; ia < ImageAliases.length; ia++ )
							{
								Alias = nodetemp[0].getElementsByTagName( ImageAliases[ia] );
								var width = Alias[0].getElementsByTagName('width')[0].firstChild;
								if( width != null )
								{
									width = width.nodeValue;
								}
								else
								{
									tabResult[o]['attributes'][key_temp]['value'] = new Array();
									continue;
								}
								var height = Alias[0].getElementsByTagName('height')[0].firstChild;
								if( height != null )
								{
									height = height.nodeValue;
								}
								var url = Alias[0].getElementsByTagName('url')[0].firstChild;
								if( url != null )
								{
									url = url.nodeValue;
								}
								tabResult[o]['attributes'][key_temp]['value'][ImageAliases[ia]] = new Array(width, height, url);
							}
						}
						else if( tabResult[o]['attributes'][key_temp]['type'] == 'ezselection' )
						{
							tabResult[o]['attributes'][key_temp]['value'] = valuetemp.nodeValue;
							if( exists(attributes[at].getElementsByTagName('index')[0]) )
							{
								var indextemp = attributes[at].getElementsByTagName('index');
								if(exists(indextemp[0])  && exists(indextemp[0].firstChild))
								{
									indextemp = indextemp[0].firstChild;
									tabResult[o]['attributes'][key_temp]['index'] = indextemp.nodeValue;
								}
							}
						}
						else if( tabResult[o]['attributes'][key_temp]['type'] == 'ezvideoflv' )
						{
							tabResult[o]['attributes'][key_temp]['value'] = new Array();
							
							var nodetemp = attributes[at].getElementsByTagName('value');
							tabResult[o]['attributes'][key_temp]['value']['flv'] = nodetemp[0].getElementsByTagName( 'flv' )[0].firstChild.nodeValue;
							tabResult[o]['attributes'][key_temp]['value']['width'] = nodetemp[0].getElementsByTagName( 'width' )[0].firstChild.nodeValue;
							tabResult[o]['attributes'][key_temp]['value']['height'] = nodetemp[0].getElementsByTagName( 'height' )[0].firstChild.nodeValue;
							tabResult[o]['attributes'][key_temp]['value']['preview'] = nodetemp[0].getElementsByTagName( 'preview' )[0].firstChild.nodeValue;
						}
						else
						{
							tabResult[o]['attributes'][key_temp]['value'] = valuetemp.nodeValue;
						}
					}
				//}
			}
		} // END FOR
	}
	return tabResult;
};
mf.mondoXmlClientClass.processXmlKeyword = function(xml)
{
	var doc;
	if (window.ActiveXObject)
	{
		doc = new ActiveXObject("Microsoft.XMLDOM");
		doc.async = 'false';
		doc.loadXML(xml);
	}
	else
	{
		var parser=new DOMParser();
		doc = parser.parseFromString(xml,"text/xml");
	}
	var tabResult = Array();
	if( doc.hasChildNodes() )
	{
		var allobjects = doc.getElementsByTagName('object');
		for(var o = 0; o < allobjects.length; o++)
		{
			tabResult[o] = Array();
			
			var objtitle = allobjects[o].getElementsByTagName('name');
			tabResult[o]['name'] = objtitle[0].firstChild.nodeValue;
			
			var objclass = allobjects[o].getElementsByTagName('class');
			tabResult[o]['class'] = objclass[0].firstChild.nodeValue;
			
			var objurl = allobjects[o].getElementsByTagName('url');
			tabResult[o]['url'] = objurl[0].firstChild.nodeValue;
			
			//var objsection_name = allobjects[o].getElementsByTagName('section_name');
			//tabResult[o]['section_name'] = objsection_name[0].firstChild.nodeValue;
		}
	}
	return tabResult;
};
////////////               /XML              //////////

// INPUT CUSTOMIZER
mf.Customizer = function()
{
	var spanClassName = 'custom';
	this.spanClassName = spanClassName;

	var divClassName = 'custom';
	this.divClassName = divClassName;

	var inputClassName = 'custom';
	this.inputClassName = inputClassName;

	function customizeElements()
	{
		var TagName = this.tagName?this.tagName:'select';
		var SpanClass = this.spanClassName?this.spanClassName:'custom';
		var inputs = document.getElementsByTagName(TagName);
		var option;
		var active;

		for (var i=0;i<inputs.length;i++) 
		{
			var InputParent = inputs[i].parentNode;
			var Div = document.createElement('div');
			mf.Object.setClass(Div,this.divClassName);

			var Input = mf.Object.Overwrite(Div,inputs[i]);
			var InputID = Input.id;
			if( !InputID )
			{
				Input.id = 'input_' + mf.Customizer.GlobalCusomInputIDs;
				mf.Customizer.GlobalCusomInputIDs++;
			}

			option = Input.getElementsByTagName('option');
			active = " "; // blanc insécable.
			
			// Find active option.
			if( exists(option[0]) && exists(option[0].childNodes[0]))
			{
				active = option[0].childNodes[0].nodeValue;
			}
			for(var j=0;j<option.length;j++)
			{
				if( option[j].selected )
				{
					if( exists(option[0].childNodes[0]))
					{
						active = option[j].childNodes[0].nodeValue;
					}
				}
				//
				//alert(option[j].selected);
			}

			spantext = document.createTextNode(active);
			for(b = 0; b < option.length; b++) 
			{
				if(option[b].selected == true) 
				{
					if( exists(option[b].childNodes[0]) )
					{
						spantext = document.createTextNode(option[b].childNodes[0].nodeValue);
					}
					else
					{
						spantext = document.createTextNode(" ");
					}
				}
			}

			var Span = document.createElement('span');
			Span.id = "select" + Input.id;
			mf.Object.setClass(Span,SpanClass);
			mf.Object.setClass(Input,this.inputClassName);

			Span.appendChild(spantext);
			Div.appendChild(Input);
			Div.appendChild(Span);

			mf.Event.addEvent( Input, 'change', mf.Customizer.onSelectChange, true);
		}
	};
	this.customizeElements = customizeElements;
};
mf.Customizer.GlobalCusomInputIDs = 0;
mf.Customizer.onSelectChange = function(evt)
{
	var Select = mf.Event.getEventElement(evt);
	option = Select.getElementsByTagName("option");
	for(d = 0; d < option.length; d++) 
	{
		if(option[d].selected == true)
		{
			if( exists(option[d].childNodes[0]) )
				elements("select" + Select.id).childNodes[0].nodeValue = option[d].childNodes[0].nodeValue;
			else
				elements("select" + Select.id).childNodes[0].nodeValue = " ";
		}
	}
	mf.Event.killEvent( evt );
};
// /INPUT CUSTOMIZER


// INPUT DEFAULT VALUES ( AUTO ERASE )
mf.Inputs = {};
mf.Inputs.InputClick = false;
mf.Inputs.InputID = '';
mf.Inputs.beforColor = '#AAA';
mf.Inputs.afterColor = '#000';
mf.Inputs.setDefaultInputValue = function( inpuID, defaultText)
{
	mf.Inputs.InputID = inpuID;
	elements(inpuID).value = defaultText;
	elements(inpuID).style.color = mf.Inputs.beforColor;
	mf.Event.addEvent( elements(inpuID), "click", mf.Inputs.onInputClick, false);
};
mf.Inputs.onInputClick = function()
{
	if( !mf.Inputs.InputClick)
	{
		elements(mf.Inputs.InputID).value = '';
		elements(mf.Inputs.InputID).style.color = mf.Inputs.afterColor;
		mf.Inputs.InputClick = true;
	}
};

// NEW !!!!
mf.Inputs.data = {}
mf.Inputs.setDefaultValue = function( id, text, unactive_color, active_color )
{
	if( !exists(text) ) text = 'Rechercher';
	if( !exists(unactive_color) ) unactive_color = '#CCCCCC';
	if( !exists(active_color) ) active_color = '#000000';
	
	var data = new Array();
	data['text'] = text;
	data['unactive_color'] = unactive_color;
	data['active_color'] = active_color;
	mf.Inputs.data[id] = data;

	var st = elements(id);
	st.value = text;
	st.style.color = unactive_color;
	st.setAttribute('active', "0");
	mf.Event.addEvent(st, 'focus', mf.Inputs.onFocus );
	mf.Event.addEvent(st, 'blur', mf.Inputs.onBlur );
};
mf.Inputs.onFocus = function(evt)
{	
	var el = mf.Event.getEventElement(evt);
	var id = el.getAttribute('id');	
	if( !exists( mf.Inputs.data[id] ) ) return;
	if( el.getAttribute('active') != "0") return;
	var data = mf.Inputs.data[id];
	el.value = "";
	el.style.color = data['active_color'];
};
mf.Inputs.onBlur = function(evt)
{
	var st = mf.Event.getEventElement(evt);
	var id = st.getAttribute('id');
	if( !exists( mf.Inputs.data[id] ) ) return;
	if( trim(st.value) != "")
	{
		st.setAttribute('active', "1");
		return;
	}
	st.setAttribute('active', "0");

	var data = mf.Inputs.data[id];
	st.value = data['text'];
	st.style.color = data['unactive_color'];
};


// /INPUT DEFAULT VALUES ( AUTO ERASE )



////
//// UNDER CONSTRUCT 
////

mf.Window = {};
mf.Window.setScroll = function(x,y)
{
	window.scrollTo(x,y);
};
mf.Window.saveScroll = function()
{
	window.scrollTo(x,y);
};

mf.Cookie = {};
mf.Cookie.setCookie = function(name, val)
{
	var argv=EcrireCookie.arguments;
	var argc=EcrireCookie.arguments.length;
	
	var expires=(argc > 2) ? argv[2] : null;
	var path=(argc > 3) ? argv[3] : null;
	var domain=(argc > 4) ? argv[4] : null;
	var secure=(argc > 5) ? argv[5] : false;
	document.cookie=name+"="+escape(val)+((expires==null) ? "" : ("; expires="+expires.toGMTString()))+((path==null) ? "" : ("; path="+path))+((domain==null) ? "" : ("; domain="+domain))+((secure==true) ? "; secure" : "");
};

// DONT MODIFY HERE
mf.DEBUG = false;
//mf.DEBUG_KEY = DECIMAL_SHIFT;
//mf.DEBUG_KEY_COUNT = 0;

// TEST KEYBOARD
mf.Keyboard = {};
mf.Keyboard.getEvent = function(e)
{
    if (mf.IE) return window.event;
	return e;
}
mf.Keyboard.getEventKey = function(e)
{
    if (mf.IE) return e.keyCode;
	return e.which;
}
mf.Keyboard.Alpha = new Array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
mf.Keyboard.getKey = function(e)
{
	e = mf.Keyboard.getEvent(e);
	return mf.Keyboard.getEventKey(e);
};
// DEPRECATED
var getEventKey = mf.Keyboard.getKey;
// DEPRECATED
mf.Keyboard.getChar = function(keyCode)
{
	return String.fromCharCode(keyCode);	
};
var DECIMAL_ENTER = 13;
mf.Keyboard.onStageKeyDown = function( e )
{
	var e = mf.Keyboard.getEvent(e);
    var pressedKey = mf.Keyboard.getEventKey(e);
	var pressedCharacter = String.fromCharCode(pressedKey);
	
	if(!in_array(pressedKey,mf.Keyboard.Downs))
	{
		mf.Keyboard.Downs.push(pressedKey);
	}
	else
	{
		clearInterval( mf.Keyboard.intervalClean );
		mf.Keyboard.intervalClean = setInterval( mf.Keyboard.cleanDowns, 1000 );
		return;
	}

	for( var i = 0; i < mf.Keyboard.listeners.length; i++ )
	{
		var ok = true;
		for( var j = 0; j < mf.Keyboard.listeners[i].length; j++ )
		{
			if( !in_array( mf.Keyboard.listeners[i][j], mf.Keyboard.Downs) )
			{
				ok = false;
				break;
			}
		}
		if( ok )mf.Keyboard.callbacks[i]();
	}

	clearInterval( mf.Keyboard.intervalClean );
	mf.Keyboard.intervalClean = setInterval( mf.Keyboard.cleanDowns, 1000 );
	
	//mf.Event.killEvent(e);
};
mf.Keyboard.cleanDowns = function()
{
	mf.Keyboard.Downs = new Array();
	clearInterval( mf.Keyboard.intervalClean );
}
mf.Keyboard.onStageKeyUp = function( e )
{
	var e = mf.Keyboard.getEvent(e);
    var pressedKey = mf.Keyboard.getEventKey(e);
	var pressedCharacter = String.fromCharCode(pressedKey);	
	for( var i = 0; i < mf.Keyboard.Downs.length; i++ )
	{
		if( mf.Keyboard.Downs[i] == pressedKey )
		{
			mf.Keyboard.Downs.splice(i,1);
			return;
		}
	}
	//mf.Event.killEvent(e);
};
mf.Keyboard.getKeyCode = function(evt)
{	
    var charCode = (evt.which) ? evt.which : event.keyCode;

    if (charCode == 8) return "backspace"; //  backspace
    if (charCode == 9) return "tab"; //  tab
    if (charCode == 13) return "enter"; //  enter
    if (charCode == 16) return "shift"; //  shift
    if (charCode == 17) return "ctrl"; //  ctrl
    if (charCode == 18) return "alt"; //  alt
    if (charCode == 19) return "pause/break"; //  pause/break
    if (charCode == 20) return "caps lock"; //  caps lock
    if (charCode == 27) return "escape"; //  escape
    if (charCode == 33) return "page up"; // page up, to avoid displaying alternate character and confusing people	         
    if (charCode == 34) return "page down"; // page down
    if (charCode == 35) return "end"; // end
    if (charCode == 36) return "home"; // home
    if (charCode == 37) return "left arrow"; // left arrow
    if (charCode == 38) return "up arrow"; // up arrow
    if (charCode == 39) return "right arrow"; // right arrow
    if (charCode == 40) return "down arrow"; // down arrow
    if (charCode == 45) return "insert"; // insert
    if (charCode == 46) return "delete"; // delete
    if (charCode == 91) return "left window"; // left window
    if (charCode == 92) return "right window"; // right window
    if (charCode == 93) return "select key"; // select key
    if (charCode == 96) return "0"; // numpad 0
    if (charCode == 97) return "1"; // numpad 1
    if (charCode == 98) return "2"; // numpad 2
    if (charCode == 99) return "3"; // numpad 3
    if (charCode == 100) return "4"; // numpad 4
    if (charCode == 101) return "5"; // numpad 5
    if (charCode == 102) return "6"; // numpad 6
    if (charCode == 103) return "7"; // numpad 7
    if (charCode == 104) return "8"; // numpad 8
    if (charCode == 105) return "9"; // numpad 9
    if (charCode == 106) return "multiply"; // multiply
    if (charCode == 107) return "add"; // add
    if (charCode == 109) return "subtract"; // subtract
    if (charCode == 110) return "decimal point"; // decimal point
    if (charCode == 111) return "divide"; // divide
    if (charCode == 112) return "F1"; // F1
    if (charCode == 113) return "F2"; // F2
    if (charCode == 114) return "F3"; // F3
    if (charCode == 115) return "F4"; // F4
    if (charCode == 116) return "F5"; // F5
    if (charCode == 117) return "F6"; // F6
    if (charCode == 118) return "F7"; // F7
    if (charCode == 119) return "F8"; // F8
    if (charCode == 120) return "F9"; // F9
    if (charCode == 121) return "F10"; // F10
    if (charCode == 122) return "F11"; // F11
    if (charCode == 123) return "F12"; // F12
    if (charCode == 144) return "num lock"; // num lock
    if (charCode == 145) return "scroll lock"; // scroll lock
    if (charCode == 186) return ";"; // semi-colon
    if (charCode == 187) return "="; // equal-sign
    if (charCode == 188) return ","; // comma
    if (charCode == 189) return "-"; // dash
    if (charCode == 190) return "."; // period
    if (charCode == 191) return "/"; // forward slash
    if (charCode == 192) return "`"; // grave accent
    if (charCode == 219) return "["; // open bracket
    if (charCode == 220) return "\\"; // back slash
    if (charCode == 221) return "]"; // close bracket
    if (charCode == 222) return "'"; // single quote
    return String.fromCharCode(charCode);
}


mf.Keyboard.hasListener = false;
mf.Keyboard.addListener = function(codes, func)
{
	if( !mf.Keyboard.hasListener ) mf.Keyboard.setupListeners();
	if( typeof(func) != 'function' ) return;
	
	mf.Keyboard.listeners.push( codes );
	mf.Keyboard.callbacks.push( func );
}

mf.Keyboard.setupListeners = function()
{
	mf.Event.addEvent( document, 'keydown', mf.Keyboard.onStageKeyDown, false);
	mf.Event.addEvent( document, 'keyup', mf.Keyboard.onStageKeyUp, false);
	mf.Keyboard.hasListener = true;

	mf.Keyboard.listeners = new Array();
	mf.Keyboard.callbacks = new Array();

	mf.Keyboard.DECIMAL_SHIFT = 16;
	mf.Keyboard.DECIMAL_CTRL = 17;
	mf.Keyboard.DECIMAL_ALT = 18;
	mf.Keyboard.DECIMAL_ENTER = 13;
	mf.Keyboard.DECIMAL_SUPPR = 46;
	mf.Keyboard.DECIMAL_DEL = 8;

	mf.Keyboard.DOWN_SHIFT = false;
	mf.Keyboard.DOWN_CTRL = false;
	mf.Keyboard.DOWN_ALT = false;
	mf.Keyboard.DOWN_SUPPR = false;
	mf.Keyboard.DOWN_DEL = false;
	mf.Keyboard.DOWN_WIN = false;

	mf.Keyboard.LAST_CARACTER = '';
	mf.Keyboard.LAST_KEY = 0;

	mf.Keyboard.Downs = new Array();
	mf.Keyboard.intervalClean = false;
}

///
mf.validateEmail = function(str)
{
	var filter=/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return(filter.test(str));
}



////////////               FLASH VERSION              //////////
function mondoFlashHandlerClass()
{
	var TabFlashDivs = new Array();
	this.TabFlashDivs = TabFlashDivs;

	function register( flashdiv, altdiv, version )
	{
		this.TabFlashDivs.push(new Array( flashdiv, altdiv, version ));
	};
	this.register = register;

	function insert()
	{
		var FlashPlayerVersionObject = 10; //deconcept.SWFObjectUtil.getPlayerVersion();
		var flashdiv;
		var altdiv;
		var version;
		for( var f=0; f < TabFlashDivs.length; f++ )
		{
			version = TabFlashDivs[f][2];
			if( FlashPlayerVersionObject.major < parseInt(version) )
			{
				flashdiv = TabFlashDivs[f][0];
				altdiv = TabFlashDivs[f][1];
				elements(flashdiv).innerHTML = elements(altdiv).innerHTML;
			}
		}
	};
	this.insert = insert;
};
////////////             /  FLASH VERSION              //////////


var CloseThis = false;
var IdOpened = true;
var TabMenuBtns = new Array();
var TabMenuEtat = new Array();
var mondoEaseManager = new mf.Ease.mondoEaseManagerClass();
var mondoXmlClient = new mf.mondoXmlClientClass();
var mondoFlashHandler = new mondoFlashHandlerClass();

mf.Event.addLoadEvent(mf.Event.insertAfterLoad);
//mf.Event.addLoadEvent( function () { new Lightbox(); } );


// entry point
mf.init();
//

//Sitemap






// INTERFACE M
var m = function(id)
{
	return new mfelement(id);
}
m.ajax = function(req,reqtype,resptype,data,callback)
{
	var ajax_tool = new mf.mondoXmlClientClass();
	ajax_tool.LoadResult( req, callback, false, resptype, data );
}
m.easeMenu = function()
{
	var ease_menu = new mf.Ease.AutoOpenCloseMenuClass();
	return ease_menu;
}
var mfelement = function(id)
{
	var o;
	if( !exists(id) )
	{
		o = mf.Object.createElement('div', {'id':Math.random()});
	}
	else
	{
		o = document.getElementById(id);
		if( !o )
		{
			alert('element with id "'+id+'" does not exist');
			return false;
		}

	}
	this.o = o;

	// Style
	function display(p){this.o.style.display = p;return this;};this.display = display;
	function fill(p){this.o.innerHTML = p;return this;};this.fill = fill;
	function setW(p){this.o.style.width = p+"px";return this;};this.setW = setW;
	function getW(){return mf.Object.getWidth(this.o);};this.getW = getW;
	function setH(p){this.o.style.height = p+"px";return this;};this.setH = setH;
	function getH(){return mf.Object.getHeight(this.o);};this.getH = getH;
	function setFloat(p){mf.Object.setFloat(this.o,p);return this;};this.setFloat = setFloat;
	function getFloat(rec)	{return mf.Object.getFloat(this.o, rec);};this.getFloat = getFloat;
	function setClass(p){mf.Object.setClass(this.o,p);return this;};this.setClass = setClass;
	//function getFloat(rec)	{return mf.Object.getFloat(this.o, rec);};this.getFloat = getFloat;
	function getTop(){return mf.Object.getTop(this.o)};this.getTop = getTop;
	function getLeft(){return mf.Object.getLeft(this.o)};this.getLeft = getLeft;
	function setXY(x,y){mf.Object.setPos(this.o,x,y); return this;};this.setXY = setXY;
	
	// misc
	function append(obj){mf.Object.insertAfter(this.o,obj); return this;};this.append = append;
	function prepend(obj){this.o.parentNode.insertBefore(obj,this.o); return this;};this.prepend = prepend;
	
	
	function setAlpha(a){mf.Object.setAlpha(this.o,a); return this;};this.setAlpha = setAlpha;
	function meltErase(cb){mf.Object.meltErase(this.o); return this;};this.meltErase = meltErase;
	function meltShow(cb){mf.Object.meltShow(this.o); return this;};this.meltShow = meltShow;
	function autoFillWithSelection(){mf.Utils.setAutoFillInput(this.o.id); return this;};this.autoFillWithSelection = autoFillWithSelection;
	// auto erase inpu value
	function setDefaultValue(p){mf.Inputs.setDefaultInputValue(this.o.id, p);return this;}this.setDefaultValue = setDefaultValue;
	// Create child
	function createElement(tagname, attributes){this.o.appendChild( mf.Object.createElement(tagname, attributes) ); return this;}this.createElement = createElement;
	function appendChild(obj){this.o.appendChild(obj);return this;};this.appendChild = appendChild;
	//function prependChild(obj){this.o.prependChild(obj);return this;};this.prependChild = prependChild;

	// event
	function addEvent(type,cb){mf.Event.addEvent(this.o, type, cb, true); return this;};this.addEvent = addEvent;
	function removeEvent(type,cb){mf.Event.removeEvent(this.o, type, cb, true); return this;};this.removeEvent = removeEvent;
	function hitTest(obj){return mf.Object.hitTestObject(this.o,obj);};this.removeEvent = removeEvent;
};
// /INTERFACE M



function xmlEntities(txt)
{
	if( typeof(txt) != 'string' )
	{
		return txt;
	}

	var Searches = new Array("(\&)", "(\<)", "(\>)", "(\")");
	var Replaces = new Array('&amp;', '&lt;', '&gt;', '&quot;');
	for( var i = 0; i < Searches.length; i++ )
	{
		txt = txt.replace( Searches[i], Replaces[i] );
	}
	return txt;
}


mf.hasSmartTexts = false;
mf.smartTextFURL = '';
mf.SmartTexts = new Array();

mf.performSmartTextInsertion = function()
{
	for(var f = 0; f < mf.SmartTexts.length; f++)
	{
		//elements(mf.SmartTexts[f][0]).appendChild(mf.SmartTexts[f][1]);
	}
}
mf.insertSmartText = function( divID, text, is_embed, font, size, color )
{	
	var HVars = new Array();
	HVars.push( ['text', text] );
	HVars.push( ['font', "Cantoria MT"] );
	HVars.push( ['embed_font', "true"] );
	HVars.push( ['size', size] );
	HVars.push( ['color', color] );
	//HVars.push( ['url', 24] );

	//														url, width, height, id, quality, autoplay, loop, transparent, flashvars
	mf.SmartTexts.push( [divID, mf.Text.makeFlashObject( mf.smartTextFURL, "300px", "50px", false, "best", true, true, false, HVars ) ]);
	if( !mf.hasSmartTexts )
	{
		mf.hasSmartTexts = true;
		mf.Event.addLoadEvent(mf.performSmartTextInsertion);
	}
}

mf.findIframe = function(id)
{
	if(mf.IE)
	{
		return exists( window.frames[id] );
	}
	else
	{
		return exists( document.getElementById(id) );
	}
}


mf.getIframeContent = function(id)
{
	if(mf.IE)
	{
		if( exists( window.frames[id] ) )
		{
			return window.frames[id].document.body.innerHTML;
		}
		else
		{
			alert('Iframe with id ' + id + ' does not exist');
			return false;
		}
	}
	else
	{
		if( exists( document.getElementById(id) ) )
		{
			return document.getElementById(id).contentDocument.body.innerHTML;
		}
		else
		{
			alert('Iframe with id ' + id + ' does not exist');
			return false;
		}
	}
}
mf.setIframeContent = function(iframeid, content)
{
	if(mf.IE)
		window.frames[iframeid].document.body.innerHTML = content;
	else
		document.getElementById(iframeid).contentDocument.body.innerHTML = content;
}
mf.copyIframeContent = function(iframeid,textareaid)
{
	if(mf.IE)
	{
		document.getElementById(textareaid).value = window.frames[iframeid].document.body.innerHTML;
	}
	else// if(MOZ)
	{
		document.getElementById(textareaid).value = document.getElementById(iframeid).contentDocument.body.innerHTML;
	}
}




// LIST FILTER
var eZFilterArray = new Array();
mf.eZFilter = function(fetch_type,input_id,parent_node_id,content_class,container_id,end_eval,show_all,processor,loader_div_id)
{
	// CONSTRUCTOR
	this.fetch_type = fetch_type;
	this.input_id = input_id;
	this.parent_node_id = parent_node_id;
	this.content_class = content_class;
	this.container_id = container_id;
	this.end_eval = end_eval;
	this.show_all = show_all;
	this.loader_div_id = loader_div_id;
	this.FILTERING = false;
	this.NEXT_REQ = false;
	this.loader = new mf.mondoXmlClientClass();
	this.original_content = elements(this.container_id).innerHTML;
	this.processor = processor;
	this.extra_filter = '';
	this.min_length = 2;
							// shift, ctrl, alt, enter, cmd
	this.noCareUpKeys = new Array(16, 17, 18, 13, 224);
	mf.Event.addEvent(elements(this.input_id), "keyup", mf.eZFilter.onFilterChange, false);
	
	
	// PUBLIC/PRIVATE
	function filter(str, pressed_key)
	{
		if( in_array( pressed_key, this.noCareUpKeys ) ) return false;
	
		if( str.length > this.min_length )
		{
			if( elements( this.loader_div_id ) )
				elements( this.loader_div_id ).style.display = "inline";

			if( this.FILTERING )
			{
				this.NEXT_REQ = elements(this.input_id).value;
				return false;
			}
			this.FILTERING = true;
			_this = this;
			this.loader.LoadResult('/mondocontent/xml/(fetch)/'+this.fetch_type+'/(node)/'+this.parent_node_id+"/(classes)/"+this.content_class+"/(mf_filter)/text_brut[!0]"+str + '/' + this.extra_filter, function(res){_this.displayResult(res)}, false, "ezobject" );
		}
		else if( str.length == 0) // this.show_all &&
		{
			elements(this.container_id).innerHTML = this.original_content;
		}
	}
	this.filter = filter;
	function displayResult( tabResult )
	{
		// this == loader
		if( this.NEXT_REQ )
		{
			var str = this.NEXT_REQ;
			this.NEXT_REQ = false;
			this.FILTERING = false;
			this.filter(str, null);
			return false;
		}
		var output = '';
		
		if( tabResult.length )
		{
			if( typeof( this.processor ) == "function" )
			{
				output = this.processor(tabResult);
			}
			else
			{
				var node = false;
				var output = '';
				for( var r = 0; r < tabResult.length; r++ )
				{
					node = tabResult[r];
					output += '<li><a href="'+node['url']+'">'+node['title']+'</a></li>';
				}
			}
		}
		else
		{
			output = '<li>No matching records</li>';
		}
		elements(this.container_id).innerHTML = output;

		if( exists(this.end_eval) ) eval( this.end_eval );
	
		this.FILTERING = false;
		this.NEXT_REQ = false;
		
		if( elements( this.loader_div_id ) )
			elements( this.loader_div_id ).style.display = "none";

	}
	this.displayResult = displayResult;

	function resetOriginalContent()
	{
		this.original_content = elements(this.container_id).innerHTML;
	}
	this.resetOriginalContent = resetOriginalContent;
	
	eZFilterArray[this.input_id] = this;
};
// STATIC
mf.eZFilter.onFilterChange = function(evt)
{
	var sender = mf.Event.getEventElement( evt );
	var filter_instance = eZFilterArray[sender.getAttribute('id')];	
	filter_instance.filter(sender.value, mf.Keyboard.getKey(evt));
};
mf.alternDiv = function(id, TabObjs, it, avoid_first, id2)
{
	this.id = id;
	this.Tab = TabObjs;
	this.i = Math.floor(Math.random() * this.Tab.length);
	this.IdInterval = 0;
	this.interval = it;
	this.avoid_first = exists(avoid_first) && avoid_first ? true:false;
	this.id2 = exists(id2) && id2 ? id2:false;
	this.ab = true;

	function initAnimation()
	{
		if(!this.avoid_first)	elements(this.id).innerHTML = this.Tab[this.i];
		mf.Object.allowTransparency(elements(this.id));
		_this = this;
		if(this.id2)
		{
			this.i = 0;
			mf.Object.allowTransparency(elements(this.id2));
			this.IdInterval = window.setInterval(function(){_this.doublealternate();}, this.interval );
		}
		else
		{
			this.IdInterval = window.setInterval(function(){_this.alternate();}, this.interval );
		}
	};
	this.initAnimation = initAnimation;


	// SIMULTANE
	function doublealternate()
	{
		this.i++;
		if( this.i >= this.Tab.length ) this.i = 0;

		this.ab = !this.ab;
		if( this.ab )
		{
			elements(this.id).innerHTML = this.Tab[this.i];
			mf.Object.meltErase( elements(this.id2) );
			mf.Object.meltShow( elements(this.id) );
		}
		else
		{
			elements(this.id2).innerHTML = this.Tab[this.i];
			mf.Object.meltErase( elements(this.id) );
			mf.Object.meltShow( elements(this.id2) );
		}
	};
	this.doublealternate = doublealternate;

	// ONE AFTER THE OTHER
	function alternate()
	{
		_this = this;
		mf.Object.meltErase( elements(this.id), function(){_this.eraseCallBack();} );
	};
	this.alternate = alternate;

	function eraseCallBack()
	{
		this.i++;
		if( this.i >= this.Tab.length ) this.i = 0;

		elements(this.id).innerHTML = this.Tab[this.i];
		mf.Object.meltShow(elements(this.id));
	};
	this.eraseCallBack = eraseCallBack;

	_this = this;
	mf.Event.addLoadEvent(function(){_this.initAnimation();});
};

var mondoGraphicalLoader = false;
var mondoGraphicalLoaderShown = false;
function displayLoader(loader_text)
{
	if( mondoGraphicalLoaderShown )
	{
		if( exists( loader_text ) )
		{
			elements('mondo_loader_title').style.display = "block";
			elements('mondo_loader_title').innerHTML = loader_text;
		}
		return;
	}
	mondoGraphicalLoaderShown = true;

	if(!mondoGraphicalLoader)
	{
		createLoader();
	}
	
	if( exists( loader_text ) )
	{
		elements('mondo_loader_title').style.display = "block";
		elements('mondo_loader_title').innerHTML = loader_text;
	}
	else
	{
		elements('mondo_loader_title').style.display = "none";		
	}
	
	mf.Object.allowTransparency(mondoGraphicalLoader, 235)
	mf.Object.setAlpha( mondoGraphicalLoader, 0.5 )

	mondoGraphicalLoader.style.zIndex = "1000";
	mondoGraphicalLoader.style.display = "block";
	mf.Object.Center( mondoGraphicalLoader, 235, 235 );
};
function createLoader()
{
	var loaderHTML = '<h1 id="mondo_loader_title" style="display:none;"></h1><div class="border-box"><div class="border-tl"><div class="border-tr"><div class="border-tc"/></div></div><div class="border-ml"><div class="border-mr"><div class="border-mc float-break">'
					+'<img src="/extension/mondowizard/design/standard/images/wizard/loading.gif"/>'
					+'</div></div></div><div class="border-bl"><div class="border-br"><div class="border-bc"/></div></div></div></div></div></div>';
	mondoGraphicalLoader = mf.Object.createElement('div', {'style':'display:none; position:absolute; left:10px; top:10px;', 'id':'little-wizard-loading' });
	mondoGraphicalLoader.innerHTML = loaderHTML;
	document.body.appendChild( mondoGraphicalLoader );
};
function hideLoader()
{
	if(!mondoGraphicalLoader) return;
	mondoGraphicalLoader.style.display = "none";
	mondoGraphicalLoaderShown = false;
};
function strip_tags(text)
{
	return text.replace(/<\/?[^>]+>/gi, '');
};
var StartAtZero = 0;

var sort_table_it = false;
// Sorts html table


// Body, td ID, table has header
function sortTable(tb, n, h)
{
	document.body.style.cursor = 'wait';
	sort_table_it = setTimeout(function(){performSortTable(tb, n);}, 50);
};
function performSortTable(tb, n, h)
{
	clearInterval( sort_table_it );

	// GET TABLE BODY
	while (!tb.tagName || tb.tagName.toLowerCase() != "table")
	{
		if (!tb.parentNode) return;
		tb = tb.parentNode;
	}
	if (tb.tBodies && tb.tBodies[0]) tb = tb.tBodies[0];

	// GET SORT ORDER
	var sort_order = 1;
	var attr_sort_column = tb.getAttribute('sort_column');
	if( n == attr_sort_column )
	{
		var attr_sort_order = parseInt(tb.getAttribute('sort_order'));
		if( attr_sort_order == 1 ) sort_order = 0;
	}
	tb.setAttribute('sort_column', n);
	tb.setAttribute('sort_order', sort_order);

	var trs = tb.getElementsByTagName('tr');

	// GET ROWS
	var trs_free = new Array();
	while( trs.length > 1 )
	{
		trs_free.push(trs[1].parentNode.removeChild(trs[1]));
	}

	// Sort rows
	var trs_sorted = sortTRTags(trs_free, n, sort_order);
	for( var j = 0; j < trs_sorted.length; j++ )
	{
		tb.appendChild(trs_sorted[j]);
	}

	//
	document.body.style.cursor = '';
};
function sortTRTags(trs, n, sort_order)
{
	var st = 0;
	var lim = st+1;

	var Data = new Array();
	var Nulls = new Array();
	var i = 0;
	var j = 0;
	var last = false;

	for( var t = 0; t < trs.length; t++ )
	{
		var temp_row = trs[t];
		var r = temp_row.getElementsByTagName('td')[n];
		
		if( r.getAttribute('value') )
		{
			var str = trim(strip_tags( r.getAttribute('value') ));
			//alert( r.getAttribute('value') );
		}
		else
		{
			var str = trim(strip_tags( r.innerHTML ));
		}
		
		if( str == null )
		{
			Nulls[j] = [temp_row];
			last = false;
			j++;
		}
		else
		{
			Data[i] = {'node':temp_row, 'str':str};
			last = true;
			i++;
		}		
	}
	Data.sort(compRows);
	
	// Also sort by first column
	if( n > 0 )
	{
		var newdata = new Array();
		var subdata = new Array(Data[0]);
		var str = Data[0]['str'];
		r = Data[0]['node'].getElementsByTagName('td')[0];
		
		if( r.getAttribute('value') )
			Data[0]['str'] = trim(strip_tags( r.getAttribute('value') ));
		else
			Data[0]['str'] = trim(strip_tags( r.innerHTML ));

		//Data[0]['str'] = trim(strip_tags( r.innerHTML ));
		for( var j = 1; j < Data.length; j++ )
		{
			st = Data[j]['str'];
			r = Data[j]['node'].getElementsByTagName('td')[0];

			if( r.getAttribute('value') )
				Data[j]['str'] = trim(strip_tags( r.getAttribute('value') ));
			else
				Data[j]['str'] = trim(strip_tags( r.innerHTML ));

			//Data[j]['str'] = trim(strip_tags( r.innerHTML ));

			if( st  != str )
			{
				str = st;
				subdata.sort(compRows);
				//if(sort_order == 0) subdata.reverse();
				for( var s = 0; s < subdata.length; s++ )
				{
					newdata.push(subdata[s] );
				}
				subdata = new Array();
			}
			subdata.push(Data[j]);
		}
		subdata.sort(compRows);
		for( var s = 0; s < subdata.length; s++ ) newdata.push(subdata[s] );
		Data = newdata;
	}

	// SENS
	if(sort_order == 0) Data.reverse();
	var trs_sorted = new Array();

	// Rebuild table
	for( var j = 0; j < Nulls.length; j++ )
	{
		for( var k = 0; k < Nulls[j].length; k++ )
			trs_sorted.push(Nulls[j][k]);
	}
	for( var j = 0; j < Data.length; j++ )
	{
		//for( var k = 0; k < Data[j]['nodes'].length; k++ )
		//{
			trs_sorted.push(Data[j]['node']);
		//}
	}
	return trs_sorted;
};
function compRows(a, b)
{
	 // Numeric sorting
	if( parseFloat( a['str']) == a['str'] )
	{
		if( parseFloat(a['str']) <= parseFloat(b['str']) ) return -1;
		return 1;
	}
	 // Text sorting
	if( a['str'] <= b['str'] ) return -1;
	return 1;
};
function switchSortClass(element)
{
	var old = element.className;
	var was_nothing = ( old.indexOf('ascending') == -1 );
	var was_asorted = ( old.indexOf('descending') > -1 );

	var childs = element.parentNode.childNodes;
	for( var c = 0; c < childs.length; c++ )
	{
		if( is_element(	childs[c]) )
		{
			if( childs[c].className.indexOf('descending') > -1 )
				childs[c].className = trim(childs[c].className.split('descending').join(''));
			if( childs[c].className.indexOf('ascending') > -1 )
				childs[c].className = trim(childs[c].className.split('ascending').join(''));
		}
	}

	if(was_nothing || was_asorted )
		element.className += ' ascending';
	else
		element.className += ' descending';
};
function addClass(o,classname)
{
	var old = o.className;
	if( old.indexOf(classname) == -1 )
	{
		o.className += " " + classname;
		return;
	}
};
function removeClass(o,classname)
{
	var old = o.className;
	// 1
	if( old.indexOf(classname) == -1 )	return;
	// 2
	if(trim(o.className) == classname)
	{
		o.className = '';
		return;
	}
	// 3
	var class_parts = o.className.split(' ');
	var new_classes = new Array();
	for( var i = 0; i < class_parts.length; i++ )
	{
		if( trim(class_parts[i]) != classname )
			new_classes.push(trim(class_parts[i]));
	}
	o.className = new_classes.join(' ');
};
function setSelect(o,val)
{
	if( o.tagName.toUpperCase() != 'SELECT' ) return;
	
	var opts = o.childNodes;
	for( var i = 0; i < opts.length; i++ )
	{
		if( !is_element(opts[i]) ) continue;
		if( opts[i].value == val )
		{
			opts[i].setAttribute('selected', 'selected');
			return;
		}
	}

	// alternative
};




mf.pngsfix = function(div)
{
	var imgs = div.getElementsByTagName('img');
	for( var i = 0; i < imgs.lenght; i++ )
	{
		if(is_element(imgs[i])) mf.pngfix(imgs[i]);
	}
};
mf.pngfix = function(img)
{
	var imgID = (img.id) ? "id='" + img.id + "' " : ""
	 var imgClass = (img.className) ? "class='" + img.className + "' " : ""
	 var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
	 var imgStyle = "display:inline-block;" + img.style.cssText 
	 if (img.align == "left") imgStyle = "float:left;" + imgStyle
	 if (img.align == "right") imgStyle = "float:right;" + imgStyle
	 if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
	 var strNewHTML = "<span " + imgID + imgClass + imgTitle
	 + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
	 + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
	 + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
	 img.outerHTML = strNewHTML
};
mf.pngFix = function()
{
	var arVersion = navigator.appVersion.split("MSIE")
	var version = parseFloat(arVersion[1])
	if ((version >= 5.5) && (document.body.filters)) 
	{
	   for(var i=0; i<document.images.length; i++)
	   {
		  var img = document.images[i]
		  var imgName = img.src.toUpperCase()
		  if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
		  {
			 var imgID = (img.id) ? "id='" + img.id + "' " : ""
			 var imgClass = (img.className) ? "class='" + img.className + "' " : ""
			 var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
			 var imgStyle = "display:inline-block;" + img.style.cssText 
			 if (img.align == "left") imgStyle = "float:left;" + imgStyle
			 if (img.align == "right") imgStyle = "float:right;" + imgStyle
			 if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
			 var strNewHTML = "<span " + imgID + imgClass + imgTitle
			 + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
			 + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
			 + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
			 img.outerHTML = strNewHTML
			 i = i-1
		  }
	   }
	}
}
//if( mf.IE ) mf.Event.addLoadEvent( mf.pngFix );
// LIBRARY




// eZ Publish !
mf.eZ = {};
mf.eZ.showDatePicker = function(base, id, datatype )
{
    var calIconID = base + '_' + datatype + '_cal_' + id;
    var calContainerID = base + '_' + datatype + '_cal_container_' + id;
    var calContainer = document.getElementById( calContainerID );

	if( calContainer.parentNode.tagName.toUpperCase() != "BODY" ) document.body.appendChild(calContainer.parentNode.removeChild(calContainer) );

    var xy = YAHOO.util.Dom.getXY( calIconID );
	//var xy = mf.Utils.getMouseXY(evt);
	//var xy = [mf.Object.getLeft(evt), mf.Object.getTop(evt)];
	
    calContainer.style.left = ( xy[0] + 26 ) + 'px';
    calContainer.style.top = ( xy[1] + 30 ) + 'px';

    calContainer.style.display = 'block';

    window['cal'+id] = new YAHOO.widget.Calendar( base + '_' + datatype + '_cal_' + id , calContainerID, { close: true, 
                                                                                              mindate: "1/1/1970",
                                                                                              LOCALE_WEEKDAYS: "medium" } );
    window['cal'+id].render();
    window['cal'+id].selectEvent.subscribe( handleSelect, window['cal'+id], true );
}
mf.eZ.handleDatePickerSelect = function(type,args,obj)
{
    var dates = args[0];
    var date = dates[0];
    var year = date[0], month = date[1], day = date[2];

    var objIDArray = obj.id.split( '_' );
    var id = objIDArray[3];
    var datatype = objIDArray[1];
    var base = objIDArray[0];

    var txtYear = document.getElementsByName( base + '_' + datatype + '_year_' + id );
    txtYear[0].value = year;

    var txtMonth = document.getElementsByName( base + '_' + datatype + '_month_' + id );
    txtMonth[0].value = month;

    var txtDay = document.getElementsByName( base + '_' + datatype + '_day_' + id );
    txtDay[0].value = day;

    window['cal'+id].hide();
}
mf.submitForm = function(el,evt)
{
	if( mf.Keyboard.getEventKey(evt) != DECIMAL_ENTER) return true;
	el.form.submit();
	return false;
}

mf.changeExternalLinkTarget = function()
{
	var a;
	var as = document.getElementsByTagName('a');
	for( var i = 0; i < as.length; i++ )
	{
		a = as[i];
		if( !a.getAttribute('href') ) continue;
		if( a.getAttribute('href').indexOf('http') == 0 ) a.setAttribute('target', '_blank');
	}
}

mf.Blink = function(el,c1,c2,it)
{
	var color_1 = c1;
	this.color_1 = color_1;
	var color_2 = c2;
	this.color_2 = color_2;
	var element = el;
	this.element = element;
	var interval = it;
	this.interval = interval;
	var idInterval = false;
	this.idInterval = idInterval;
	var b = false;
	this.b = b;
	this.element.style.color = this.color_1;
	var altern = function()
	{
		if( this.b )
		{
			this.element.style.color = this.color_1;
			this.b = false;
		}
		else
		{
			this.element.style.color = this.color_2;
			this.b = true;
		}
	}
	this.altern = altern;
	_this = this;
	this.idInterval = setInterval(function(){_this.altern();}, this.interval);
}





/************************* GLOSSAIRE BUBBLE *********************************/
mf.glossary = {};
mf.glossary.initialized = false;
mf.glossary.bubblecanvas = false;
mf.glossary.idIntervalHide = 0;
mf.glossary.currentBubbleSource = false;
mf.glossary.hiddingBubble = false;
mf.glossary.idIntervalDisplayBubble = 0;

mf.glossary.hideInterval = 1000;
mf.glossary.wordHoverInterval = 400;

mf.glossary.onWordHover = function(el,id)
{
	mf.Event.addEvent(el,'mouseout',mf.glossary.onWordOut);
	mf.glossary.idIntervalDisplayBubble = setInterval(function(){mf.glossary.displayBubble(el, id);}, mf.glossary.wordHoverInterval);
};
mf.glossary.onWordOut = function()
{
	clearInterval(mf.glossary.idIntervalDisplayBubble);
};
mf.glossary.displayBubble = function(el, id)
{
	clearInterval(mf.glossary.idIntervalDisplayBubble);
	if( mf.glossary.currentBubbleSource )
	{
		mf.Event.removeEvent( mf.glossary.currentBubbleSource, "mouseout", mf.glossary.onBubbleBlur);
		mf.Event.removeEvent( mf.glossary.currentBubbleSource, "mouseover", mf.glossary.onBubbleOver);
		mf.glossary.currentBubbleSource = false;
	}
	mf.glossary.currentBubbleSource = el;

	if( !mf.glossary.bubblecanvas )
	{
		mf.glossary.bubblecanvas = document.createElement('div');
		mf.glossary.bubblecanvas.style.position = 'absolute';
		mf.glossary.bubblecanvas.style.zIndex = 2000;
		mf.glossary.bubblecanvas.setAttribute('id', 'calendar-info-bubble');
		mf.glossary.bubblecanvas.innerHTML = '<div class="border-box">'
												+'<div class="border-tl"><div class="border-tr"><div class="border-tc"></div></div></div>'
												+'<div class="border-ml"><div class="border-mr"><div class="border-mc float-break">'
												+'<div id="calendar-info-bubble-content" style="width: 200px;"></div>'
												+'</div></div></div>'
												+'<div class="border-bl"><div class="border-br"><div class="border-bc"></div></div></div>'
												+'<div id="bubble_arrow"></div>'
												+'</div>';

		mf.Object.setAlpha(mf.glossary.bubblecanvas,0);
		mf.glossary.bubblecanvas.style.display = "none";

		mf.Event.addEvent( mf.glossary.bubblecanvas, "click", mf.glossary.hideBubble, false);		
		mf.Event.addEvent( document.body, "click", mf.glossary.hideBubble, false);

		mf.Event.addEvent( mf.glossary.bubblecanvas, "mouseout", mf.glossary.onBubbleBlur, false);
		mf.Event.addEvent( mf.glossary.bubblecanvas, "mouseover", mf.glossary.onBubbleOver, false);

		document.body.appendChild(mf.glossary.bubblecanvas);
	}

	mf.Event.addEvent( el, "mouseout", mf.glossary.onBubbleBlur, false);
	mf.Event.addEvent( el, "mouseover", mf.glossary.onBubbleOver, false);

	var text = '<h1>'+Words[id]+'</h1>';
	text += "<p>" + Definitions[id] + "</p>";

	elements('calendar-info-bubble-content').innerHTML = text;

	var X = mf.Object.getLeft(el);
	var Y = mf.Object.getTop(el);

	mf.glossary.bubblecanvas.style.display = "block";

	var TheX = X;
	var TheY = Y+5-mf.Object.getHeight(mf.glossary.bubblecanvas);
	
	//if( TheX < mf.Screen.getLeft0() || TheY < mf.Screen.getTop0() ) alert( attribute_name + ' is required' );
	if( TheX < mf.Screen.getLeft0() ) TheX = mf.Screen.getLeft0() 
	if( TheY < mf.Screen.getTop0() ) TheY = mf.Screen.getTop0() 


	mf.glossary.bubblecanvas.style.left = TheX+"px";
	mf.glossary.bubblecanvas.style.top = TheY+"px";

	mf.Object.meltShow( mf.glossary.bubblecanvas );
};
mf.glossary.hideBubble = function()
{
	clearInterval( mf.glossary.idIntervalHide );
	if( !mf.glossary.bubblecanvas )
	{
		mf.glossary.hiddingBubble = false;
		return;
	}
	mf.glossary.hiddingBubble = true;
	if( mf.glossary.currentBubbleSource )
	{
		mf.Event.removeEvent( mf.glossary.currentBubbleSource, "mouseout", mf.glossary.onBubbleBlur);
		mf.Event.removeEvent( mf.glossary.currentBubbleSource, "mouseover", mf.glossary.onBubbleOver);
		mf.glossary.currentBubbleSource = false;
	}
	mf.Object.meltErase( mf.glossary.bubblecanvas, mf.glossary.removeBubble );
};
mf.glossary.onBubbleBlur = function(evt)
{
	if( mf.glossary.hiddingBubble ) return;
	mf.glossary.hiddingBubble = true;
	mf.glossary.idIntervalHide = setInterval(mf.glossary.hideBubble, mf.glossary.hideInterval);
};
mf.glossary.onBubbleOver = function()
{
	clearInterval( mf.glossary.idIntervalHide );
	mf.glossary.hiddingBubble = false;
};
mf.glossary.removeBubble = function()
{
	mf.glossary.hiddingBubble = false;
	mf.glossary.bubblecanvas.style.display = "none";	
};


/* DRAWER BANNER */
mf.drawer = function(id, width, height, unit_width, bg_color, data)
{
	this.element = elements(id);
	this.width = width;
	this.height = height;
	this.bg_color = bg_color;
	this.unit_width = unit_width;
	this.data = data;
	this.offsetX = this.width / this.data.length;

	this.element.style.width = this.width + "px";
	this.element.style.height = this.height + "px";
	this.element.style.backgroundColor = this.bg_color;
	this.element.style.position = 'relative';
	this.element.style.zIndex = 1;
	this.element.style.overflow = 'hidden';
	/*this.element.style.border = '1px solid #000000';*/

	this.elements = new Array();
	this.anim_elements = new Array();
	this.iTransition = 0;
	this.NbImagesTransition = 8;
	this.it = 35;

	this.ChvChmt = this.unit_width - this.width / this.data.length;
	this.PlaceOthers = (this.width - this.unit_width)/( this.data.length-1);

	this.init = function()
	{
		var _this = this;
		for( var i = 0; i < this.data.length; i++ )
		{
			var el = document.createElement('div');
			el.style.height = this.height + 'px';
			el.style.width = this.unit_width + 'px';
			el.style.position = 'absolute';
			el.style.zIndex = i;
			el.style.left = i * this.offsetX + 'px';
			
			//el.setAttribute('id', i);
			el.setAttribute('drawer_id', i);

			el.x = i* (this.unit_width - this.ChvChmt);
			el.xbase = el.xcurr = el.x;
			el.xcible = 0;

			var img = new Image();
			img.src = this.data[i];
			img.style.height = this.height + 'px';
			el.appendChild(img);

			mf.Event.addEvent(el, 'mouseover', function(evt){_this.onMouseOver(evt)});
			mf.Event.addEvent(el, 'mouseout', function(evt){_this.onMouseOut(evt)});

			this.elements.push(el);
			this.element.appendChild(el);
		}
	}
	this.onMouseOver = function(evt)
	{
		clearInterval(this.IdInterval);
		var el = mf.Event.getEventElement(evt);
		while(el.tagName.toUpperCase() != 'DIV') el = el.parentNode;
		this.currentEl = el;	
		//var IdLinkHover = parseInt(this.currentEl.id);
		var IdLinkHover = parseInt(this.currentEl.getAttribute('drawer_id'));
		for(var li=0;li<=IdLinkHover;li++)
		{
			this.elements[li].xcible = li * this.PlaceOthers;
			this.elements[li].xcurr = this.elements[li].x;
		}
		for(li=IdLinkHover+1;li<this.elements.length;li++)
		{
			this.elements[li].xcible = IdLinkHover * this.PlaceOthers + this.unit_width + (li - (IdLinkHover+1)) * this.PlaceOthers;
			this.elements[li].xcurr = this.elements[li].x;
		}
		this.launchAnimation();
	}
	this.onMouseOut = function(evt)
	{
		var li;
		clearInterval(this.IdInterval);
		for(li=0;li<this.elements.length;li++)
		{
			this.elements[li].xcible = this.elements[li].xbase;
			this.elements[li].xcurr = this.elements[li].x;
		}
		this.launchAnimation();
	}
	this.launchAnimation = function()
	{
		this.iTransition = 0;
		var _this = this;
		this.IdInterval = setInterval(function(){_this.animate();}, this.it);
	}
	this.animate = function()
	{
		var ib;
		if(this.iTransition < this.NbImagesTransition)
		{
			for(ib=0;ib<this.elements.length;ib++)
			{
				this.elements[ib].x = parseFloat(this.elements[ib].xcurr) + this.iTransition * ((parseFloat(this.elements[ib].xcible) - parseFloat(this.elements[ib].xcurr))/this.NbImagesTransition);
				this.elements[ib].style.left = parseFloat(this.elements[ib].x) + 'px';
			}
			this.iTransition++;
		}
		else
		{
			for(ib=0; ib < this.elements.length; ib++)
			{
				this.elements[ib].xcurr = this.elements[ib].x = this.elements[ib].xcible;
				this.elements[ib].style.left = parseFloat(this.elements[ib].x) + 'px';
			}
			clearInterval(this.IdInterval);
		}
	}
	this.init();
}


mf.drawer2 = function(id, width, height, unit_width, bg_color, data, equi, first, nb, it, activate_hover)
{
	this.element = elements(id);
	this.width = width;
	this.height = height;
	this.bg_color = bg_color;
	this.unit_width = unit_width;
	this.data = data;
	this.offsetX = this.width / this.data.length;
	this.equi = true;

	this.element.style.width = this.width + "px";
	this.element.style.height = this.height + "px";
	this.element.style.backgroundColor = this.bg_color;
	this.element.style.position = 'relative';
	this.element.style.zIndex = 1;
	this.element.style.overflow = 'hidden';
	/*this.element.style.border = '1px solid #000000';*/

	this.elements = new Array();
	this.anim_elements = new Array();
	this.iTransition = 0;
	this.NbImagesTransition = 8;
	this.it = 35;
	this.first = first;
	this.activate_hover = true;

	if( typeof(it) != 'undefined' ) this.it = it;
	if( typeof(nb) != 'undefined' ) this.NbImagesTransition = nb;
	if( typeof(equi) != 'undefined' ) this.equi = equi;
	if( typeof(activate_hover) != 'undefined' ) this.activate_hover = activate_hover;

	// equi
	this.ChvChmt = this.unit_width - this.width / this.data.length; 
	// selected
	this.PlaceOthers = (this.width - this.unit_width)/( this.data.length-1);
	
	this.callbacks = new Array();

	this.init = function()
	{
		var _this = this;
		for( var i = 0; i < this.data.length; i++ )
		{
			var el = document.createElement('div');
			el.style.height = this.height + 'px';
			el.style.width = this.unit_width + 'px';
			el.style.position = 'absolute';
			el.style.zIndex = i;
			el.setAttribute('drawer_id', i);

			if( this.equi )
			{
				el.style.left = i * this.offsetX + 'px';
				el.x = i* (this.unit_width - this.ChvChmt);
			}
			else if( typeof(this.first) != 'undefined')
			{
				if( i <= this.first )
				{
					el.style.left = i * this.offsetX + 'px';
					el.x = i* (this.unit_width - this.ChvChmt);
				}
				else
				{
					el.x = i * this.PlaceOthers + this.unit_width + (i - (i+1)) * this.PlaceOthers;
					el.style.left = el.x + 'px';
				}
			}
			else
			{
				el.style.left = i * this.PlaceOthers + 'px';
				el.x = i * this.PlaceOthers;
			}
			el.xbase = el.xcurr = el.x;
			el.xcible = 0;

			var img = new Image();
			img.src = this.data[i];
			img.style.height = this.height + 'px';
			el.appendChild(img);

			var elHTML = document.createElement('div');
			elHTML.style.display = 'none';
			elHTML.setAttribute('id', 'banner_html_'+i);			
			el.appendChild(elHTML);

			if( this.activate_hover ) mf.Event.addEvent(el, 'mouseover', function(evt){_this.onMouseOver(evt)});
			if( this.equi )	mf.Event.addEvent(el, 'mouseout', function(evt){_this.onMouseOut(evt)});

			this.elements.push(el);
			this.element.appendChild(el);
		}
	}
	this.addTrigger = function(el, id, callback)
	{
		_this = this;
		el.setAttribute('drawer_id', id);
		el.style.cursor = 'pointer';
		mf.Event.addEvent(el, 'mouseover', function(evt){_this.onMouseOver(evt)});
		if( typeof(callback) == 'function' ) this.addCallBack(id, callback);
	}
	this.addCallBack = function(id,callback)
	{
		if( typeof(this.callbacks[id]) == 'function' )
		{
			var old_cb = this.callbacks[id];
			this.callbacks[id] = function()
			{
				old_cb();
				callback();
			}
		}
		else
		{
			this.callbacks[id] = callback;
		}
	}
	this.addEvent = function(id, type, callback)
	{
		if( typeof(this.elements[id]) == 'undefined' ) return;
		this.elements[id].style.cursor = 'pointer';
		mf.Event.addEvent(this.elements[id], type, callback);	
	}
	this.addHTML = function(id, html, left, top, max_width, max_height, color)
	{
		var elHTML = elements('banner_html_'+id);		
		elHTML.style.color = color;
		elHTML.style.marginLeft = left+'px';
		elHTML.style.marginTop = ( -this.height + top ) + 'px';
		elHTML.style.maxWidth = max_width;
		elHTML.style.maxHeight = max_height;
		elHTML.style.position = 'relative';

		elHTML.style.display = 'block';
		elHTML.innerHTML = html;
	}
	this.onMouseOver = function(evt)
	{
		clearInterval(this.IdInterval);
		var el = mf.Event.getEventElement(evt);
		while(el.tagName.toUpperCase() != 'DIV') el = el.parentNode;
		this.currentEl = el;
		//var IdLinkHover = parseInt(this.currentEl.id);
		var IdLinkHover = parseInt(this.currentEl.getAttribute('drawer_id'));
		// Callback
		if( typeof(this.callbacks[IdLinkHover]) == 'function' ) this.callbacks[IdLinkHover](el);
		for(var li=0;li<=IdLinkHover;li++)
		{
			this.elements[li].xcible = li * this.PlaceOthers;
			this.elements[li].xcurr = this.elements[li].x;
		}
		for(li=IdLinkHover+1;li<this.elements.length;li++)
		{
			this.elements[li].xcible = IdLinkHover * this.PlaceOthers + this.unit_width + (li - (IdLinkHover+1)) * this.PlaceOthers;
			this.elements[li].xcurr = this.elements[li].x;
		}
		this.launchAnimation();
	}
	this.triggerMouseOver = function(id)
	{
		clearInterval(this.IdInterval);
		
		var el = this.elements[id];
		this.currentEl = el;
		
		//var IdLinkHover = parseInt(this.currentEl.id);
		var IdLinkHover = parseInt(this.currentEl.getAttribute('drawer_id'));
		// Callback
		if( typeof(this.callbacks[IdLinkHover]) == 'function' ) this.callbacks[IdLinkHover](el);
		for(var li=0;li<=IdLinkHover;li++)
		{
			this.elements[li].xcible = li * this.PlaceOthers;
			this.elements[li].xcurr = this.elements[li].x;
		}
		for(li=IdLinkHover+1;li<this.elements.length;li++)
		{
			this.elements[li].xcible = IdLinkHover * this.PlaceOthers + this.unit_width + (li - (IdLinkHover+1)) * this.PlaceOthers;
			this.elements[li].xcurr = this.elements[li].x;
		}
		this.launchAnimation();	}
	this.onMouseOut = function(evt)
	{
		var li;
		clearInterval(this.IdInterval);
		for(li=0;li<this.elements.length;li++)
		{
			this.elements[li].xcible = this.elements[li].xbase;
			this.elements[li].xcurr = this.elements[li].x;
		}
		this.launchAnimation();
	}
	this.launchAnimation = function()
	{
		this.iTransition = 0;
		var _this = this;
		this.IdInterval = setInterval(function(){_this.animate();}, this.it);
	}
	this.animate = function()
	{
		var ib;
		if(this.iTransition < this.NbImagesTransition)
		{
			for(ib=0;ib<this.elements.length;ib++)
			{
				this.elements[ib].x = parseFloat(this.elements[ib].xcurr) + this.iTransition * ((parseFloat(this.elements[ib].xcible) - parseFloat(this.elements[ib].xcurr))/this.NbImagesTransition);
				this.elements[ib].style.left = parseFloat(this.elements[ib].x) + 'px';
			}
			this.iTransition++;
		}
		else
		{
			for(ib=0; ib < this.elements.length; ib++)
			{
				this.elements[ib].xcurr = this.elements[ib].x = this.elements[ib].xcible;
				this.elements[ib].style.left = parseFloat(this.elements[ib].x) + 'px';
			}
			clearInterval(this.IdInterval);
		}
	}
	this.init();
}

mf.loadPicture = function(src, callback)
{
	if( !mf.IE8LTE )
	{
		var pic = new Image();
		pic.onload = function(){callback(pic);};
		pic.src = src;
		return;
	}
	var pic = new Image();
	pic.it = setInterval(function(){mf.checkPicture(pic);}, 50);
	pic.callback = callback;
	pic.src = src;
}
mf.checkPicture = function(pic)
{
	if( !pic.complete ) return;
	clearInterval( pic.it );
	pic.callback(pic);
}



