//
//    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 !
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.IE = document.all?true:false;
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)
{
	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.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 = "<br/>";
	var pad = "<span>      </span>";
	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;
};
// /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.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( mf.DEBUG ) alert('getVar');
	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 )
{
	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;

	o.meltIdInterval = setInterval('mf.Object.animateMeltErase( "'+o.id+'")', mf.Object.meltInterval);
};
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 )
{
	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;
	o.meltIdInterval = setInterval('mf.Object.animateMeltShow( "'+o.id+'")', mf.Object.meltInterval);
};
mf.Object.animateMeltShow = function( ido )
{
	o = elements( ido );
	mf.Object.setAlpha(o, o.alpha + mf.Object.meltAlphaStep );
	if( o.alpha >= 1 )
	{
		mf.Object.setAlpha(o, 1);
		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) 
	{ // grab the x-y pos.s if browser is IE
		tempX = event.clientX + document.body.scrollLeft;
		tempY = event.clientY + document.body.scrollTop;
	}
	else 
	{  // grab the x-y pos.s if browser is NS
		tempX = e.pageX;
		tempY = e.pageY;
	}  
	// catch possible negative values in 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( mf.IE )
		obj.attachEvent("on" + type, callback );
	else
		obj.addEventListener(type, callback, prop);
};
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)
{
	// si safari
	//if (/WebKit/i.test(navigator.userAgent))
	/*
	if( navigator.vendor.indexOf("Apple") )
	{
		var oldonload = mf.onload;
		if(typeof mf.onload != 'function')
		{
			mf.onload = func;
		}
		else
		{
			mf.onload = function()
			{
				oldonload();
				func();
			};
		}
	}
	else
	{
		*/
		var oldonload = window.onload;
		if(typeof window.onload != 'function')
		{
			window.onload = func;
		}
		else
		{
			window.onload = function()
			{
				oldonload();
				func();
			};
		}
	//}
};









mf.Event.killEvent = function( evt )
{
	if (evt.stopPropagation) 
		evt.stopPropagation();
	else
		evt.cancelBubble = true;
	
	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' )
	{
		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.makeFlashObject = function( url, width, height, id, quality, autoplay, loop, transparent, flashvars )
{
	if( md.IE)
	{
		
	}
	else
	{
		
	}
}
*/
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.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.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";
		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               ///////////



////////////               DYN               ///////////
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, always_dyn);
		var DynObjectID = dynObject.getAttribute('id');

		this.tabDragObjects.push(DynObjectID);
		this.tabMovingObjects[DynObjectID] = false;

		dynObject.is_dyn = true;
		dynObject.attached = true;
		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 );
			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);
		}
		
		if(exists(always_dyn) && always_dyn)
		{
			mf.Dyn.dragDropHandler.attachDynamic( dynObject );
		}
		
		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 = 40;
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.moveHome = function( objID )
{
	var obj = elements( objID );
	var ease =mf.Dyn.dragDropHandler.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;

		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;

	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;
};
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++ )
	{
		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 )
	{
		switch( obj.dropTargetActions[obj.HitObject])
		{
			case mf.Dyn.dragDropHandler.DROP_ACTION_SWITCH:
			
				var HitObject = elements( obj.HitObject );

				// TEST
				mf.Dyn.dragDropHandler.attachDynamic(HitObject);
				mf.Dyn.dragDropHandler.switchStaticCanvas(HitObject,obj);

				var CurrentObjectHome = mf.Object.getHome(obj);
				
				mf.Object.setHomeByObject( obj, HitObject );
				mf.Object.setHome( HitObject, CurrentObjectHome );


				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;
			
			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;
		}
		if( typeof(obj.dropCallBacks[obj.HitObject]) == "function" )
		{
			obj.dropCallBacks[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 ///////////////////////////////////////
/* DRAG N DROP */
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.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));
};
/* /DRAG N DROP */



/* MOVETO/SIZETO */
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.dynCanvasId+"', '"+o.callbackparam+"')", mf.Dyn.IT);
	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.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)
{
	Top = mf.Object.getTop(staticObject);
	Left = mf.Object.getLeft(staticObject);
	Width = exists(origWidth) ? origWidth : mf.Object.getWidth(staticObject);
	Height = exists(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 );

	var staticObjectCanvas = document.createElement('div');
	staticObjectCanvas.setAttribute('id', StaticCanvasID );
	staticObject.parentNode.insertBefore(staticObjectCanvas, staticObject);
	//staticObjectCanvas.innerHTML = 'SOME CONTENT OR IT WILL NOT BE INSERTED';
	
	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 = true;
	//staticObject.rel = 'hidden';

	// FILL DYNAMIC OBJECT
	dynObject.appendChild( staticObject.parentNode.removeChild(staticObject) );
	
	// FILL STATIC CANVAS
	staticObjectCanvas.appendChild( dynObject );
	staticObjectCanvas.style.width = Width + "px";
	staticObjectCanvas.style.height = Height + "px";
	
	mf.Dyn.moveCurrentID++;
	return dynObject;
};



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();
	}
};

/* /MOVETO/SIZETO */

// SCROLL DIV
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 = 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] ) )
			{
				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);
			//if( dont_act !== false )
				this.EaseManager.Register( EventElement.getAttribute('divId'), false, false, false, true );
			//else
				divId = EventElement.getAttribute('divId')
		}
		else
		{
			EventElement = mf.Event.getEventElement(evt);
			if(EventElement.getAttribute('divId') != null) divId = EventElement.getAttribute('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 )
			{
				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;

	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.activatedRunOnceSources = new Array();
mf.activatedRunOnceScripts = new Array();
mf.activateScripts = function(div)
{
	var AllScripts = div.getElementsByTagName("script");
	for (var i=0; i<AllScripts.length; i++)
	{
		//try
		//{
			var s=AllScripts[i];
			if( s.src && s.src != "" )
			{
				window.eval(mf.getFileContent(s.src));
			}
			else if( s.innerHTML != null )
			{
				//alert( 'Eval : ' + s.innerHTML );
				window.eval(s.innerHTML);
			}
		/*
		}
		catch(e)
		{
			alert(e);	
		}
		*/
	}
};
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....';
/*
Propriétés de XMLHttpRequest

    * onreadystatechange : Spécifie la fonction à appeler lorsque la propriété readyState varie. lecture/écriture. (Cf. section 3 pour les valeurs)
    * readyState : Représente l'état d'avancement de la requête. lecture seule.
    * responseText : Chaîne de caractères contenant la réponse à la requête. lecture seule.
    * responseXML : Objet XML contenant la réponse à la requête. lecture seule.
    * status : Représente le code HTTP retourné par la requête. lecture seule. (Cf. section 3 pour les valeurs)

Méthodes de XMLHttpRequest

    * abort() : Annule la requête courante.
    * getAllResponseHeaders() : Retourne les noms et les valeurs de tous les en-têtes HTTP sous forme d'une chaîne.
    * getResponseHeader(headerName) : Récupère la valeur d'un certain en-tête HTTP (headerName) sous forme d'une chaîne.
    * open(method, url[, asynchrone[, user[, password]]]) : Initialise une requête en spécifiant la méthode (method), l'URL (url), si le mode est asynchrone (asyncFlag vaut true ou false) et en indiquant d'éventuelles informations d'identification (user et password).
    * send(data) : Envoie la requête HTTP au serveur en transmettant éventuellement des données (data doit alors être différent de null) sous forme d'une « postable string » (je suis preneur pour une traduction) ou sous forme d'un objet DOM.
    * setTimeouts(timeout) : Spécifie la durée maximale (timeout) accordée à une requête pour quelle s'effectue complètement.
    * setRequestHeader(headerName, headerValue) : Spécifie un en-tête HTTP (headerName et headerValue) à envoyer avec la requête.
*/

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 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 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;
	}
};
// /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" : "");
};

// TEST KEYBOARD
var DECIMAL_SHIFT = 16;
var DECIMAL_CTRL = 17;
var DECIMAL_ALT = 18;
var DECIMAL_ENTER = 13;
var DECIMAL_SUPPR = 46;
var DECIMAL_DEL = 8;

var DOWN_SHIFT = false;
var DOWN_CTRL = false;
var DOWN_ALT = false;
var DOWN_SUPPR = false;
var DOWN_DEL = false;

var LAST_CARACTER = '';
var LAST_KEY = 0;

// DONT MODIFY HERE
mf.DEBUG = false;
mf.DEBUG_KEY = DECIMAL_SHIFT;
mf.DEBUG_KEY_COUNT = 0;


function getEventKey(e)
{
    if (mf.IE)
	{
		e = window.event;
		return e.keyCode;
	}
	return e.which;
}

function onStageKeyDown( e )
{
    var pressedKey;
    if (document.all)
		e = window.event;

    if (document.all)    
		pressedKey = e.keyCode;
	else
		pressedKey = e.which;
		
	// DEBUG
	if( pressedKey == mf.DEBUG_KEY )
	{
		mf.DEBUG_KEY_COUNT++;
		if(mf.DEBUG_KEY_COUNT > 5)
		{
			if( !mf.DEBUG )
			{
				mf.DEBUG = true;
				//alert( 'JS DEBUG ENABLED' );
				mf.DEBUG_KEY_COUNT = 0;
			}
			else
			{
				mf.DEBUG = false;
				//alert( 'JS DEBUG DISABLED' );
				mf.DEBUG_KEY_COUNT = 0;
			}
		}
		return;
	}

    pressedCharacter = String.fromCharCode(pressedKey);	
	
	LAST_CARACTER = pressedCharacter;
	LAST_KEY = pressedKey;
};
function onStageKeyUp( e )
{
    var pressedKey;
    if (document.all){e = window.event;}

    if (document.all){pressedKey = e.keyCode;}
	else{pressedKey = e.which;}
};
mf.Event.addEvent( document, "keydown", onStageKeyDown, false);
mf.Event.addEvent( document, "keyup", onStageKeyUp, 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

function showSitemap()
{
	if(exists(elements("mondoheadercontent")))
	{
		elements("mondoheadercontent").style.display = "none";
	}
	elements("sitemap").style.display = "block";
}

function hideSitemap()
{
	elements("sitemap").style.display = "none";
	if(exists(elements("mondoheadercontent")))
	{
		elements("mondoheadercontent").style.display = "block";
	}
}

//Tagcloud
function showTagcloud()
{
	if(exists(elements("mondoheadercontent")))
	{
		elements("mondoheadercontent").style.display = "none";
	}
	elements("tagcloud").style.display = "block";
}
function hideTagcloud()
{
	elements("tagcloud").style.display = "none";
	if(exists(elements("mondoheadercontent")))
	{
		elements("mondoheadercontent").style.display = "block";
	}
}

//Login

function showLogin()
{
	elements("fast-login").style.display = "block";
}

function hideLogin()
{
	elements("fast-login").style.display = "none";
}

//Mondochallenge
function showMondochallenge()
{
	if(exists(elements("mondoheadercontent")))
	{
		elements("mondoheadercontent").style.display = "none";
	}
	elements("mondochallenge").style.display = "block";
}
function hideMondochallenge()
{
	elements("mondochallenge").style.display = "none";
	if(exists(elements("mondoheadercontent")))
	{
		elements("mondoheadercontent").style.display = "block";
	}
}






// 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.getIframeContent = function(iframeid)
{
	if(mf.IE)
		return window.frames[iframeid].document.body.innerHTML;
	else
		return document.getElementById(iframeid).contentDocument.body.innerHTML;
}
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;
		
		/*
		edoc = window.frames[iframeid].document;
		document.getElementById(textareaid).value = edoc.body.innerHTML;
		*/
	}
	else// if(MOZ)
	{
		document.getElementById(textareaid).value = document.getElementById(iframeid).contentDocument.body.innerHTML;
		/*
		edoc = document.getElementById(iframeid).contentDocument;
		document.getElementById(textareaid).value = document.getElementById(iframeid).contentDocument.body.innerHTML;
		*/
	}
}


mf.Keyboard = {};
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(evt)
{
    var pressedKey;
    if (document.all) evt = window.event;

    if (document.all) pressedKey = evt.keyCode;
	else pressedKey = evt.which;

	return pressedKey;
};
mf.Keyboard.getChar = function(keyCode)
{
	return String.fromCharCode(keyCode);	
};

// 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;
		}
		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;
	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)
{
	this.id = id;
	this.Tab = TabObjs;
	this.i = Math.floor(Math.random() * this.Tab.length);
	this.IdInterval = 0;
	this.interval = it;
	
	function initAnimation()
	{
		elements(this.id).innerHTML = this.Tab[this.i];
		mf.Object.allowTransparency(elements(this.id));
		_this = this;
		this.IdInterval = window.setInterval(function(){_this.alternate();}, this.interval );
	};
	this.initAnimation = initAnimation;
	
	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 ) 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()
{
	mondoGraphicalLoader.style.display = "none";
	mondoGraphicalLoaderShown = false;
};


function strip_tags(text)
{
	return text.replace(/<\/?[^>]+>/gi, '');
};

var StartAtZero = 0;
// Sorts html table
function sortTable(tb, n, h)
{
	var st = 0;
	if( h ) st = 1;
	var lim = st+1;

	while (!tb.tagName || tb.tagName.toLowerCase() != "table")
	{
		if (!tb.parentNode) return;
		tb = tb.parentNode;
	}
	if (tb.tBodies && tb.tBodies[0]) tb = tb.tBodies[0];

	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 Data = new Array();
	var Nulls = new Array();

	var trs = tb.getElementsByTagName('tr');
	var i = 0;
	var j = 0;
	var last = false;
	while(true)
	{
		var temp_row = trs[st].parentNode.removeChild(trs[st]);
		
		if( temp_row.getAttribute('sort') == "false" )
		{
			if( last )
				Data[i-1]['nodes'].push(temp_row);
			else
				Nulls[j-1].push(temp_row);
		}
		else
		{
			var r = temp_row.getElementsByTagName('td')[n];
			var str = trim(strip_tags( r.innerHTML ));
			if( str == null )
			{
				Nulls[j] = [temp_row];
				last = false;
				j++;
			}
			else
			{
				Data[i] = {'nodes':[temp_row], 'str':str};
				last = true;
				i++;
			}
		}
		if( trs.length < lim ) break;
	}
	Data.sort(sortRows);
	if(sort_order == 0)
		Data.reverse();

	for( var j = 0; j < Nulls.length; j++ )
	{
		for( var k = 0; k < Nulls[j].length; k++ )
			tb.appendChild(Nulls[j][k]);
	}
	for( var j = 0; j < Data.length; j++ )
	{
		for( var k = 0; k < Data[j]['nodes'].length; k++ )
			tb.appendChild(Data[j]['nodes'][k]);
	}
}
function sortRows(a, b)
{
	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(' ');
};


// LIBRARY











