	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);

addNamespace("Aspacts.Script.Utils.Core")

Aspacts.Script.Utils.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.Script.Utils.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
			}
		}
	}

	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()
	}