var autils = {
	Version					: '1.0',
	className				: 'autils',
	corpArrayFind			: Array(),
	_editor					: null,
	//autils_nsx				: false,

	_fileloaded_arr 		: Array(),


	onAfterload: function( event ){
		autils.textarea2ln();
	},
	
	/**
	 *	initialize Object
	 */
	_initialize: function() { 
		this.createCorpArrayFind();
		JEvent.addEvent( 'afterload', this.onAfterload );
	},

	setEditorClass: function( editor ){
		this._editor =	editor;
	},
	
	getContentEditor: function( editor ){
		return this._editor.getContent();
	},

	checklengthtextarea: function(t, iSize){ 
		return (t.value.length <= iSize);  
	},

	loadFile: function ( src, type ){
		if ( !autils.is_fileloaded( type, src ) ) return false;
		var link = null;
		switch( type ){
			case 'script':
				link = autils.loadScript( src );
			break;
			case 'style':
				link = autils.loadStyle( src );
			break;
		}
		if  ( link == null ) return false;
		document.getElementsByTagName('head')[0].appendChild(link);
		return true;
	},

	is_fileloaded: function( type, value ){
		var t = this;
		if ( !t._fileloaded_arr[ type ] )
			t._fileloaded_arr[ type ] = Array();
		return ( !t._fileloaded_arr[ type ][ value ] );	 
	},
	
	header2string: function( script ){
		var _link = document.getElementsByTagName('LINK');
		var _script = document.getElementsByTagName('SCRIPT');
		var result = '<head>';
		for( key in _link )
			if ( _link[key].href != null )
				result += '<link href="'+ _link[key].href +'" rel="'+ _link[key].rel +'" />\n';
		if ( script == true ){
			for( key in _script ){
				if ( (_script[key].src != null && _script[key].src != '') || (_script[key].data != null && _script[key].data) ){
					result += '<script';
					result += _script[key].type != null && _script[key].type != '' ? ' type="'+ _script[key].type +'"' : '';
					result += _script[key].src != null && _script[key].src != '' ? ' src="'+ _script[key].src +'"' : '';
					result += '>';
					result += _script[key].data != null && _script[key].data != ''  ? _script[key].data : '';
					result += '</script>\n';
				}
			}
		}
		result += '</head>';
		return result;
	},
	
	loadScript: function( value ) {
		var script = document.createElement('script');
	    script.type = 'text/javascript';
	    script.src = value;
		return script;
	    //document.getElementsByTagName('head')[0].appendChild(script);
	    //return true;
	},
	
	loadStyle: function( value ) {
	    var link = document.createElement('link');
	    link.rel = 'stylesheet';
	    link.href = value;
		return link;
	    //document.getElementsByTagName('head')[0].appendChild(link);
	   // return true;
	},
	
	is : function(o, t) {
		var n = typeof(o);
		if (!t)
			return n != 'undefined';

		if (t == 'array' && (o.hasOwnProperty && o instanceof Array))
			return true;
		return n == t;
	},
	
		
	toBoolean: function( value ){
		if ( is(value, 'string') ){
			//alert( 'string: '+ (value != 'false' && (value != '0')) ); 
			return (value != 'false' && (value != '0'));
		}
		if ( is(value, 'numeric') ){
			//alert( 'numeric: '+ (value >= 1) ); 
			return  (value >= 1);
		}
	},
	
	each : function(o, cb, s) {
		var n, l;

		if (!o)
			return 0;

		s = s || o;

		if (typeof(o.length) != 'undefined') {
			// Indexed arrays, needed for Safari
			for (n=0, l = o.length; n<l; n++) {
				if (cb.call(s, o[n], n, o) === false)
					return 0;
			}
		} else {
			// Hashtables
			for (n in o) {
				if (o.hasOwnProperty(n)) {
					if (cb.call(s, o[n], n, o) === false)
						return 0;
				}
			}
		}

		return 1;
	},
	
	getById: function( obj_id ){
		var d = document, da = document.all;
		if ( isIE )
			return eval('da.'+ obj_id);
		else if ( isFireFox )
			return document.getElementById(obj_id);
		else
			return eval('d.'+ obj_id);
	},
	
	getByName: function( obj_name ){
		var d = document, da = document.all;
		if ( isIE )
			return eval('da.'+ obj_name);
		else 
			return eval('d.'+ obj_name);
	},
	
	getForm: function( _name, _param ){
		if ( _param == null ) var _param = new Array();
		
		var f = autils.getByName( _name ); 
		if ( f ) { //return _param;
			// Step through the form elements 
			for( var i = 0; i < f.elements.length; i++ )
				if ( _param[ f.elements[i].name ] == null ){
					if ( f.elements[i].className  == 'mce_editable' && !autils._editor ){
						_param[ f.elements[i].name ] = autils.getContentEditor();
					}else
						_param[ f.elements[i].name ] = f.elements[i].value; 
				}
		}
		return _param;
	},
	
		
	class_exist: function( v ){
		if ( typeof v == 'string' ){
			var t = null;
			try {
				var t = eval( v );
				return ( typeof t == 'object' );
			}catch(err){
					return false;
			}
		}
		return false;
	},
	
	MM_reloadPage: function(init) {  //reloads the window if Nav4 resized
	  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
		document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
	  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
	},
	
	
	createCorpArrayFind: function(){
			var ArraySearch = Array();
			for (var i in this.ArraySearch ){
					this.corpArrayFind.push( i );
			}
	},
	
	getBrowserInnerTop: function() {
		if (document.documentElement) return document.documentElement.scrollTop;
		else if (document.body)	return document.body.scrollTop;
		else if (self.pageYOffset) return self.pageYOffset;
		return 0;
	},
	
	Arrayfind: function(str, _array) {
		result = false;
		for ( var i in _array ){
			if ( _array[i] === str ) return true;//result = true;
		}
		return result;
	},
	
	replaceAndComByTild: function(Param){
		var regneg		= new RegExp('-', 'g');
		var regandco	= new RegExp('&', 'g');		
		var str			= Param.replace(regneg, '&ndash;');
		return str.replace(regandco, '-');
	},
	
	generaterandomcle: function(nbre){
		var cle = ''; 
		if (!nbre) nbre = 16;
		var s='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
		for (var i=0; i < nbre; i++) 
		{ 
			cle = cle + s.substr(Math.random()*61, 1);
		}
		return cle;
	},
	
	alert_r: function( tab, t){
		alert( autils.print_r( tab, t ) );
	},
	
	print_r: function(tab, t){
		result = '';
		if (!t) t='';
		for(var i in tab){
			if(typeof(tab[i]) == 'object')
				result = result + autils.print_r(tab[i],t+'['+i+']');
			else
				result = result + t + '['+ i + ']=' + tab[i] + '\n';
		}
		return result;
	},
	
	setDefaultScrollTop: function(){
		if (document.documentElement) var __act_clientheight = document.documentElement.clientHeight;
		else if (document.body) var __act_clientheight = document.body.clientHeight;
		else if (self.pageYOffset) var __act_clientheight = self.clientHeight;	
		if ( __act_clientheight < __act_scrollTop){
			if (document.documentElement) document.documentElement.scrollTop = 0;
			else if (document.body)	document.body.scrollTop = 0;
			else if (self.pageYOffset) self.pageYOffset = 0;	
		}
	},
	
	setScrollTop: function( _value ){
			if (document.documentElement) document.documentElement.scrollTop = _value;
			else if (document.body)	document.body.scrollTop = _value;
			else if (self.pageYOffset) self.pageYOffset = _value;	
	},
		
	getDefaultScrollTop: function(){
		if (document.documentElement) __act_scrollTop = document.documentElement.scrollTop;
		else if (document.body)	__act_scrollTop = document.body.scrollTop;
		else if (self.pageYOffset) __act_scrollTop = self.pageYOffset;
	},
	
	addslashes: function (ch) {
		ch = ch.replace(/\\/g,"\\\\")
		ch = ch.replace(/\'/g,"\\'")
		ch = ch.replace(/\"/g,"\\\"")
		return ch
	},
	
	areArraysEqual: function( arr_1, arr_2 ) {
		  var result = true;
		  if ( !arr_1 || !arr_2 ) return false;
		  if ( arr_1.length != arr_2.length ) return false;
		  		
		  for(key in arr_1){ //in a and b but different values
			    if ( typeof( arr_1[ key ] ) != 'function' ){
					//alert( arr_1[ key ] +'\n\n'+ arr_2[key] );
					/*if ( typeof( arr_1[key] ) == 'object' && typeof( arr_2[key] ) == 'object' )
						result = this.areArraysEqual( arr_1[key], arr_2[key] );
					else*/
						if(arr_1[key] != 'undefined' && arr_2[key] != 'undefined' && arr_1[key]!=arr_2[key]){
							result = false;
						}
				}
		  }
		  return result;
	},
	
	textarea2ln: function(){
		var _objects = document.getElementsByTagName('TEXTAREA');
		if ( _objects.length > 0 ){
			var reg = new RegExp( '<br />', 'gi');
			for( key in _objects ){
				if ( isIE ){
					var _item = _objects.item( key );
					if (_item != null )
						_item.value = _item.value.replace(reg, '\n');
				}else
					_objects[key].value = _objects[key].value.replace(reg, '\n');
			}
		}
	},
	
	numberElement: function(value){
		var allParas = document.getElementsByTagName(value);
		var num = allParas.length;
		alert("There are " + num + " "+ value +" elements in this document");
	},
	
	printElement: function(value){
		//var allParas = document.getElementsByTagName(value);
		//var num = allParas.length;
		var string = '';
		var noeuds = document.getElementsByTagName(value)[0].firstChild;
		while (noeuds!=null) {
			string += noeuds.nodeName + ":"+ noeuds.src + " - "+ noeuds.nodeValue + "\n";
			noeuds = noeuds.nextSibling;
		}
		alert(string);
	},
	
	printTagProperty: function(value, htmlreturn ){
		if ( typeof value == 'string' )
			var a = autils.getById( value );
		else
			var a = value;
		var j = 0;
		var list = new Array();
		var str = '';
		for (var i in a) {
			list[j] = i;
			j++;
		}
		list.sort();
		if ( !htmlreturn ){
			for (var i=0; i<j; i++) {
				var _object = eval( ('value.'+list[i]) );
				str += list[i];
				if ( _object != null ){
					str += '='+ _object;
				}
				str +="\n";
			}
			alert( str );
		}else{
			for (var i=0; i<j; i++) str += list[i] + "<br>";
			return str;
		}
	}
};

// Initialize the API
//var AUtils = window.autils = autils;


var getNavigator = {
	Version					: '1.0',
	className				: 'getNavigator',
	_is_init : false,
	/**
	 *	initialize Object
	 */
	_initialize: function() { 
		if ( this._is_init ) return;
		var t = this, d = document, w = window, na = navigator, ua = na.userAgent;
		
		t.navOpera		= w.opera && opera.buildNumber;
		t.navWebKit		= /WebKit/.test(ua);
		t.navIE4		= !t.navWebKit && !t.navOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);
		t.navIE6		= t.navIE && /MSIE [56]/.test(ua);
		t.navIE			= t.navIE4||t.navIE6;
		t.navGecko		= !t.navWebKit && /Gecko/.test(ua);
		t.navMac		= ua.indexOf('Mac') != -1;
		t.navAir		= /adobeair/i.test(ua);
		t.navFireFox	= t.navGecko;
		
		t.nav_ffx		= document&&navigator.userAgent.indexOf('Firefox')!=-1;
		t.nav_ie4		= document.all&&navigator.userAgent.indexOf('Opera')==-1;
		t.nav_ns6		= document.getElementById&&!document.all;
		t.nav_ns4		= document.layers;
		t.nav_nsx		= (t.nav_ns6||t.nav_ns4);
		
		t._is_init	= true;
	},
	
	/* fisrt version - compatibility */
	test: function( s ){
			if ( !s ) return false;
			var result	= false;
			var reg		= new RegExp("(ffx|ie4|ns4|ns6|nsx)", "gi");
			var str		= 'result=('+ s.replace( reg, 'getNavigator.nav_$1' ) +');';
			try { 
				eval( str );
			}catch(err){
				return false;
			}

			if ( result == true ) return result;
			return false;
	},
	
	/* last version */
	is: function ( s ){
			if ( !s ) return false;
			var result	= false;
			var reg		= new RegExp("(Opera|WebKit|IE|IE6|Gecko|Mac|Air|FireFox)", "gi");
			var str		= 'result=('+ s.replace( reg, 'getNavigator.nav$1' ) +');';
			try { 
				eval( str );
			}catch(err){
				return false;
			}

			if ( result == true ) return result;
			return false;
	},
	
	getScreenWidth: function(){
		if (document.documentElement) return document.documentElement.clientWidth;
		else if (document.body) return document.body.clientWidth;
		else if (self.pageYOffset) return self.clientWidth;	
	},
	
	getScreenHeight: function(){
		if (document.documentElement) return document.documentElement.clientHeight;
		else if (document.body) return document.body.clientHeight;
		else if (self.pageYOffset) return self.clientHeight;	
	},
	
	isOpera:		function(){ return this.navOpera; },
	isWebKit:		function(){ return this.navWebKit; },
	isIE:			function(){ return this.navIE; },
	isIE4:			function(){ return this.navIE4; },
	isIE6:			function(){ return this.navIE6; },
	isGecko:		function(){ return this.navGecko; },
	isMac:			function(){ return this.navMac; },
	isAir:			function(){ return this.navAir; },
	isFireFox:		function(){ return this.navFireFox; }
};

// Initialize the API
window.getNavigator = getNavigator;
getNavigator._initialize();
/*var isOpera			= getNavigator.is('Opera');
var isWebKit		= getNavigator.is('WebKit');
var isIE			= getNavigator.is('IE');
var isIE6			= getNavigator.is('IE6');
var isGecko			= getNavigator.is('Gecko');
var isMac			= getNavigator.is('Mac');
var isAir			= getNavigator.is('Air');
var isFireFox		= getNavigator.is('Gecko');	*/

/**
*
*  Base64 encode / decode
*  http://www.webtoolkit.info/
*
**/	 
var Base64 = {
		Version					: '1.0',
	 	className				: 'Base64',
		// private property
		_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
	 
		// public method for encoding
		encode : function (input) {
			var output = "";
			var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
			var i = 0;
	 
			input = Base64._utf8_encode(input);
	 
			while (i < input.length) {
	 
				chr1 = input.charCodeAt(i++);
				chr2 = input.charCodeAt(i++);
				chr3 = input.charCodeAt(i++);
	 
				enc1 = chr1 >> 2;
				enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
				enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
				enc4 = chr3 & 63;
	 
				if (isNaN(chr2)) {
					enc3 = enc4 = 64;
				} else if (isNaN(chr3)) {
					enc4 = 64;
				}
	 
				output = output +
				this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
				this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
	 
			}
	 
			return output;
		},
	 
		// public method for decoding
		decode : function (input) {
			if ( input == '' || typeof( input ) == 'object' || typeof( input ) == 'function' ) return '';
			var output = "";
			var chr1, chr2, chr3;
			var enc1, enc2, enc3, enc4;
			var i = 0;
			input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
	 
			while (i < input.length) {
	 
				enc1 = this._keyStr.indexOf(input.charAt(i++));
				enc2 = this._keyStr.indexOf(input.charAt(i++));
				enc3 = this._keyStr.indexOf(input.charAt(i++));
				enc4 = this._keyStr.indexOf(input.charAt(i++));
	 
				chr1 = (enc1 << 2) | (enc2 >> 4);
				chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
				chr3 = ((enc3 & 3) << 6) | enc4;
	 
				output = output + String.fromCharCode(chr1);
	 
				if (enc3 != 64) {
					output = output + String.fromCharCode(chr2);
				}
				if (enc4 != 64) {
					output = output + String.fromCharCode(chr3);
				}
	 
			}
	 
			output = Base64._utf8_decode(output);
	 
			return output;
	 
		},
	 
		// private method for UTF-8 encoding
		_utf8_encode : function (string) {
			string = string.replace(/\r\n/g,"\n");
			var utftext = "";
	 
			for (var n = 0; n < string.length; n++) {
	 
				var c = string.charCodeAt(n);
	 
				if (c < 128) {
					utftext += String.fromCharCode(c);
				}
				else if((c > 127) && (c < 2048)) {
					utftext += String.fromCharCode((c >> 6) | 192);
					utftext += String.fromCharCode((c & 63) | 128);
				}
				else {
					utftext += String.fromCharCode((c >> 12) | 224);
					utftext += String.fromCharCode(((c >> 6) & 63) | 128);
					utftext += String.fromCharCode((c & 63) | 128);
				}
	 
			}
	 
			return utftext;
		},
	 
		// private method for UTF-8 decoding
		_utf8_decode : function (utftext) {
			var string = "";
			var i = 0;
			var c = c1 = c2 = 0;
	 
			while ( i < utftext.length ) {
	 
				c = utftext.charCodeAt(i);
	 
				if (c < 128) {
					string += String.fromCharCode(c);
					i++;
				}
				else if((c > 191) && (c < 224)) {
					c2 = utftext.charCodeAt(i+1);
					string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
					i += 2;
				}
				else {
					c2 = utftext.charCodeAt(i+1);
					c3 = utftext.charCodeAt(i+2);
					string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
					i += 3;
				}
	 
			}
	 
			return string;
		}
	 
};



/**
*
*  JEvent 
*
**/
if ( autils.class_exist( 'Scriptaculous' ) ){
	var aevent = ({ 
			Version					: '1.0',
			className				: 'aevent',
			/*_initialize: function() {},*/
			addEvent: function( eventName, fn, observer ){
				if ( observer == null ) observer = isIE? document:window;
				return Event.observe( observer, eventName, fn);		
			},
			
			removeEvent: function(  eventName, fn, observer ){
				if ( observer == null ) observer = isIE? document:window;
				return Event.stopObserving( observer, eventName, fn);		
			},				  
			
			fireEvent: function( eventName, observer ){
				if ( observer == null ) observer = isIE? document:window;
				return Event.fire( observer, eventName );		
			}	
	});
}else if ( autils.class_exist( 'MooTools' ) ){
	var aevent = new Events ({ 
			Version					: '1.0',
			className				: 'aevent'
			/*_initialize: function() {},*/
	});
}else{
	var aevent = ({
			Version					: '1.0',
			className				: 'aevent',
			/*_initialize: function() {},*/
			addEvent: function( eventName, fn ){
				return true;		
			},
			
			removeEvent: function( eventName, fn ){
				return true;		
			},	
			
			fireEvent: function( eventName ){
				return true;	
			}
	});
}

// Initialize the API
var JEvent = AEvent = window.aevent = aevent;
//aevent._initialize();

var alanguage = {
	Version					: '1.0',
	className				: 'alanguage',
	defaultLanguage			: 'en',
	baseURL					:'',
	_showErrorTranslate		: false,
	_language				: Array(),

	_initialize: function() {},

	init: function( v ){
		if ( !v ) return;
		if ( v.document_base_url ){ alanguage.baseURL = v.document_base_url; }
	},
	
	loadLangs: function ( u ){
		if (!u) return false;
		var t = alanguage;  
		var url = u.indexOf( t.baseURL ) != -1 ? u : t.baseURL + u;
		autils.loadFile( url, 'script' );
	},

	setLanguage: function( className, p ){
			var lo, _language = alanguage._language;
			_language[ className ] = new Array();
			if (!is(p, 'string')) {
				each(p, function(o, lc) {
					each(o, function(o, g) {
						each(o, function(o, k) {
							if (g === 'common')
								_language[ className ][lc + '.' + k] = o;
							else
								_language[ className ][lc + '.' + g + '.' + k] = o;
						});
					});
				});
			} else {
				each(o, function(o, k) {
					_language[ className ][p + '.' + k] = o;
				});
			}
	},

	translate: function( t, s ){
			var cn = t.className ? t.className : 'common';
			var tl = t.language ? t.language : this.defaultLanguage;
			if (!s)
				return '';
			if ( alanguage._language[ cn ] == undefined ){
				if ( alanguage._showErrorTranslate )
					return s +" (Translate error)";
				else
					return s;
			}

			var str = alanguage._language[ cn ][tl + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {																		
				return alanguage._language[ cn ][tl + '.' + b] || '{#' + b + '}';
			});
			
			if ( arguments.length > 2 )
				for (var i = 2; i < arguments.length; i++) {
					var reg = new RegExp( '{#'+ (i-1) +'}', 'g' );
					str = str.replace( reg, arguments[i] );	
				}

			return str;
	}
	
};

// Initialize the API
var ALanguage = window.alanguage = alanguage;
//alanguage._initialize();
var loadLangs	= alanguage.loadLangs;
var translate	= alanguage.translate;
var setLanguage	= alanguage.setLanguage;

/**/
var navigatorTest	= getNavigator.test;
var nis				= getNavigator.is;
var isOpera			= getNavigator.isOpera();
var isWebKit		= getNavigator.isWebKit();
var isIE			= getNavigator.isIE();
var isIE4			= getNavigator.isIE4();
var isIE6			= getNavigator.isIE6();
var isGecko			= getNavigator.isGecko();
var isMac			= getNavigator.isMac();
var isAir			= getNavigator.isAir();
var isFireFox		= getNavigator.isFireFox();
/**/
var MM_reloadPage	= autils.MM_reloadPage;
var each			= autils.each;
var is				= autils.is;
var toBoolean		= autils.toBoolean;
var loadFile		= autils.loadFile;
var getById			= autils.getById;
var getByName		= autils.getByName;
var getForm			= autils.getForm;
var class_exist		= autils.class_exist;
var alert_r			= autils.alert_r;
var Arrayfind		= autils.Arrayfind;
