Object.extend = function(dest, source, replace) {
	for(prop in source) {
		if(replace == false && dest[prop] != null) continue;
		dest[prop] = source[prop];
	}
	return dest;
}
	
Object.extend(window, {
	addNamespace: function(ns) {
		var nsParts = ns.split(".");
		var root = window;
		for(var i=0; i<nsParts.length; i++) {
			if(typeof root[nsParts[i]] == "undefined")
				root[nsParts[i]] = {};
			root = root[nsParts[i]];
		}
	}
}, false);  

addNamespace("MS.Browser");

Object.extend(MS.Browser, {
	isIE: navigator.userAgent.indexOf('MSIE') != -1,
	isFirefox: navigator.userAgent.indexOf('Firefox') != -1,
	isOpera: window.opera != null
}, false);




// In Internet Explorer, the true version is after "MSIE" in userAgent
if ((verOffset=navigator.userAgent.indexOf("MSIE"))!=-1) {
 MS.Browser.BrowserName  = "Microsoft Internet Explorer";
 MS.Browser.FullVersion  = parseFloat(navigator.userAgent.substring(verOffset+5));
 MS.Browser.MajorVersion = parseInt(''+MS.Browser.FullVersion);
}

// In Opera, the true version is after "Opera" 
else if ((verOffset=navigator.userAgent.indexOf("Opera"))!=-1) {
 MS.Browser.BrowserName  = "Microsoft Internet Explorer";
 MS.Browser.FullVersion   = parseFloat(navigator.userAgent.substring(verOffset+6));
 MS.Browser.MajorVersion = parseInt(''+MS.Browser.FullVersion);
}

// In Firefox, the true version is after "Firefox"
else if ((verOffset = navigator.userAgent.indexOf("Firefox")) != -1) {
 MS.Browser.BrowserName = "Firefox";
 MS.Browser.FullVersion = parseFloat(navigator.userAgent.substring(verOffset+8, verOffset+9));
 MS.Browser.MajorVersion = parseInt(''+MS.Browser.FullVersion);   
}

// In most other browsers, "name/version" is at the end of userAgent 
else if ( (nameOffset=navigator.userAgent.lastIndexOf(' ')+1)< (verOffset=navigator.userAgent.lastIndexOf('/')) ) 
{
 MS.Browser.BrowserName  = navigator.userAgent.substring(nameOffset,verOffset);
 MS.Browser.FullVersion  = parseFloat(navigator.userAgent.substring(verOffset+1));
 if (!isNaN(MS.Browser.FullVersion)) MS.Browser.MajorVersion = parseInt(''+MS.Browser.FullVersion);
 else {MS.Browser.FullVersion  = 0; MS.Browser.MajorVersion = 0;}
}

// Finally, if no name and/or no version detected from userAgent...
if (!MS.Browser.BrowserName || MS.Browser.FullVersion==0 || MS.Browser.MajorVersion == 0 )
{
 MS.Browser.BrowserName  = navigator.appName;
 MS.Browser.FullVersion  = parseFloat(navigator.appVersion);
 MS.Browser.MajorVersion = parseInt(navigator.appVersion);
}



addNamespace("Aspacts.Idios3.I_CAP.Scripting.Core")


Aspacts.Idios3.I_CAP.Scripting.Core.AddDirectEvent= function(target, evType, fn) 
{
	if (target.addEventListener) 
	{
		target.addEventListener(evType, fn, true);
		return true;
	} 
	else 
	{
		if (target.attachEvent) 
		{
			var r = target.attachEvent('on'+evType, fn);
			return r;
		} 
		else 
		{
			return false;
		}
	}
}

Aspacts.Idios3.I_CAP.Scripting.Core.ImplementEvent= function(target) 
	{ 
		if (target && !(target.addEventListener && target.removeEventListener)) 
		{
			// array of event handlers for that element 
			// ex 'mouseover'=> _myHandlers['mouseoverList'] 
			target._myHandlers= new Array(); 


			


			target.addEventListener= function(type, handler, capture) 
			{ 
				var lstref= type +'List'; 
				if ('undefined' == typeof(this._myHandlers[lstref])) 
				{ 
					this._myHandlers[lstref]= new Array(); 
					// check if there is already a handler 
					if (this['on'+ type]) 
					{ 
						this._myHandlers[lstref][0]= this['on'+ type]; 
					} 
					// ns4 syntax - code may be improved 
					if (this.captureEvents) 
					{ 
						eval('this.captureEvents(Event.'+ type.toUpperCase() +')'); 
					} 
				}// if (!this._myHandlers[lstref]) 
				// check if handler was previously added 
				for (var i=this._myHandlers[lstref].length ; i-->0 ; ) 
				{ 
					if (this._myHandlers[lstref][i] == handler) { return; }
				} 
				this._myHandlers[lstref][ this._myHandlers[lstref].length ]= handler; 
				this['on'+ type]= Function.concat(this._myHandlers[lstref], 'e'); 
			} 
			target.removeEventListener= function(type, handler, capture) 
			{ 
				var groupe= this._myHandlers[type +'List']; 
				if (groupe) 
				{ 
					for (var i=groupe.length ; i-->0 ;) 
					{ 
						if (groupe[i]==handler) { delete groupe[i]; }
					}
				} 
				this['on'+ type]= Function.concat(this._myHandlers(lstref), 'e'); 
			} 
						
		}// if (!(target.addEventListener && target.removeEventListener)) 
	}

	Aspacts.Idios3.I_CAP.Scripting.Core.CancelEvent = function(evt)
	{
		if(evt && evt.preventDefault)
			evt.preventDefault()
		else
		{
			if (!evt && event)
			{
				evt = event
			}
			if(evt)
			{
				evt = event
				evt.cancelBubble = true
				evt.returnValue = false
			}
		}
	}

	Aspacts.Idios3.I_CAP.Scripting.Core.FindElementPosition = function(refElement)
	{
		var curleft = curtop = 0;
		if (refElement.offsetParent) {
			curleft = refElement.offsetLeft
			curtop = refElement.offsetTop
			while (refElement = refElement.offsetParent) {
				curleft += refElement.offsetLeft
				curtop += refElement.offsetTop
			}
		}
		return [curleft,curtop];
	}


	Aspacts.Idios3.I_CAP.Scripting.Core.SubElementOf = function(targetElement, rootElement)
	{
		while (targetElement != null)
		{
			if(targetElement == rootElement)
				return true
			targetElement = targetElement.parentNode
		}
		return false
	}

	Function.prototype.concat= function(groupe, params) 
	{ 

		var retour= new Function(); 
		var tampon= ''; 
		for (var i=0 ; i<groupe.length ; ++i) 
		{ 
			if (groupe[i]) 
			{ 
				tampon+= 'groupe['+ i +'].apply(this, arguments);'; 
			} 
		} 
		//eval('retour= function('+ params +') {return '+ tampon +'; }'); 
		eval('retour= function('+ params +') {'+ tampon +'; }'); 
		return retour; 
	}   
	
	if (!Array.prototype.indexOf)
	Array.prototype.indexOf = function(item, startIndex) {
		var len = this.length;
		if (startIndex == null)
			startIndex = 0;
		else if (startIndex < 0) {
			startIndex += len;
			if (startIndex < 0)
				startIndex = 0;
		}
		for (var i = startIndex; i < len; i++) {
			var val = this[i] || this.charAt && this.charAt(i);
			if (val == item)
				return i;
		}
		return -1;
	};

	
	Array.prototype.deleteNode = function(item)
	{     
		var newArray = new Array()
		for (var i=0 ; i<this.length ; ++i) 
		{
			if (this[i] != item)
			{
				newArray[newArray.length] = this[i]    
			}
		}   
		
		this.clear()
		for (var i=0 ; i<newArray.length ; ++i) 
		{
			this.push(newArray[i])
		}
	}
	
	Array.prototype.clear = function()
	{                                
			while (this.length>0)
				this.pop()
	}