__error__	= 0x000;
__warning__	= 0x001;
__notice__	= 0x002;

/*
Effect.DropShadow = function(element){
	element = $(element);

	var i1 = new Element('div', { 'class': 'i1' });
	var i2 = new Element('div', { 'class': 'i2' });
	var i3 = new Element('div', { 'class': 'i3 cf' });
	
	i2.appendChild(i3);
	i1.appendChild(i2);
	
	$A(element.childNodes).each(function(e){ i3.appendChild(e); });
	
	var bfunc = function(className){
		var e = new Element('div', { 'class': className });
		e.appendChild(new Element('div'));
		return e;
	};		
	
	element.addClassName('cp');
	element.appendChild(bfunc('bt'));
	element.appendChild(i1);
	element.appendChild(bfunc('bb'));		
};*/



var amessage = {	
	Version					: '1.0',
	className				: 'amessage',
	_key_valide				: new Array( '__error__', '__warning__', '__notice__' ),
	_message				: null,
	_is_init				: true,
	_first_run				: true,
	_timer_Show				: null,
	_timer_Hide				: null,
	_timer_fadeOI			: null,
	/**/
	language				: 'en',
	divMessage				: '',
	showOnSet				: true,
	_position_save			: true,
	_horizontal_center		: true,
	_vertical_center		: true,
	_draggable				: true,
	_shadow_enable			: true,	//EXPERIMENTAL
	_shadow_spaceX			: 3,	//EXPERIMENTAL
	_shadow_spaceY			: 2,	//EXPERIMENTAL
	_durationShow			: 0.7,
	_durationHide			: 0.5,
	_durationFadeIn			: 1,
	_durationFadeOut		: 0.7,

	returnKey: function( _type ){
		return this._key_valide[_type];
	},
		
	translate: function( s ){
			return translate( this, s );
	},	
	
	init: function(v){
		var t = this;
		if ( v.document_base_url ){ t.baseURL = v.document_base_url; }
		if ( v.language ){ t.language = v.language; }
		if ( v.draggable ){ t._draggable = v.draggable; }
		if ( v.save_position ){ t._position_save = v.save_position; }
		if ( v.horizontal_center ){ t._horizontal_center = v.horizontal_center; }
		if ( v.vertical_center ){ t._vertical_center = v.vertical_center; }
		if ( v.shadow_enable ){ t._shadow_enable = v.shadow_enable; }
		if ( v.shadow_spaceX ){ t._shadow_spaceX = v.shadow_spaceX; }
		if ( v.shadow_spaceY ){ t._shadow_spaceY = v.shadow_spaceY; }
		if ( v.durationShow ){ t._durationShow = v.durationShow; }
		if ( v.durationHide ){ t._durationHide = v.durationHide; }
		if ( v.durationFadeIn ){ t._durationFadeIn = v.durationFadeIn; }
		if ( v.durationFadeOut ){ t._durationFadeOut = v.durationFadeOut; }
		if ( v.showOnSet ){ t.showOnSet = v.showOnSet; }
		if ( v.divMessage ){ t.divMessage = v.divMessage; }else{t.divMessage = t.className+'Div' };	
		loadLangs( t.baseURL +'/plugins/system/amessage/langs/'+ t.language +'.js' );
		//document.write( '<div id="'+ t.divMessage +'Body" ><div id="'+ t.divMessage +'"></div></div>');
		var writing_doc = '';
		if ( t._shadow_enable )
			writing_doc += '<div id="'+ t.divMessage +'BodyShadow" style="display:none; position:absolute;"></div>';
		writing_doc += '<div id="'+ t.divMessage +'Body" style="display:none;"><div id="'+ t.divMessage +'"></div></div>';
		document.write( writing_doc );
		t.eventInit();
		t.hide();
	},
	
	eventInit: function(){
		JEvent.addEvent( 'beforeload', amessage.onBeforeload );
		JEvent.addEvent( 'afterload', amessage.onAfterload );
	},

	ondrag: function(e){
		if ( amessage._shadow_enable )
			amessage.shadow_position();
	},
	
	onBeforeload: function(){
		amessage.reset();
	},
	
	onAfterload: function(){
		if ( amessage.is_show() && amessage.is_reset() ) amessage.hide();
	},
	
	ondblclick: function(e){
		amessage.hide();
	},	
	
	center: function( element_id ){
		element = $( element_id );
		var result = false;
		var reg	= new RegExp("(px)", "g");
		if ( amessage._horizontal_center == true ){	
			var width = element.getDimensions().width;
			if ( typeof( width ) == 'string' )
				width	= parseInt(width.replace(reg, ''));
			var clientWidth = getNavigator.getScreenWidth();
			if ( typeof( clientWidth ) == 'string' )
				clientWidth	= parseInt(clientWidth.replace(reg, ''));
			var _x = ( clientWidth - width ) / 2;
			element.style.left = Math.floor(_x) +'px';
			result = true;
		}
		if ( amessage._vertical_center == true ){
			var height = element.getDimensions().height;
			if ( typeof( height ) == 'string' )
				height	= parseInt(height.replace(reg, ''));
			var clientHeight = getNavigator.getScreenHeight();
			if ( typeof( clientHeight ) == 'string' )
				clientHeight	= parseInt(clientHeight.replace(reg, ''));
			var _y = ( clientHeight - height ) / 2;
			element.style.top = Math.floor(_y) +'px';
			result = true;
		}
		
		if ( result == true ) element.style.position = 'absolute';
		if ( this._shadow_enable ) this.shadow_position( _x, _y);
	},
	
	shadow_position: function( _x, _y ){
		var t = amessage;
		var parent = $( t.divMessage+'Body' );
		var shadow = $( t.divMessage+'BodyShadow' );
		if ( !_x ) _x = parent.offsetLeft;
		if ( !_y ) _y = parent.offsetTop;
		shadow.setOpacity(0.7);
		shadow.style.top = _y+'px';
		shadow.style.left = _x+'px';
		shadow.style.height = (parent.getDimensions().height+t._shadow_spaceY)+'px';
		shadow.style.width = (parent.getDimensions().width+t._shadow_spaceX)+'px';
	},
	
	sets: function( v ){
		if ( this.is_reset() ) this._message = new Array();
		for (var key in v){
			this._message[ key ] = new Array();
			this._message[ key ] = v[ key ].split( '|;' );
		}
		if ( this.showOnSet == true ) {
				this.show( this._message );
		}
	},
	
	set: function( _string, _type ){
		var t = amessage;
		if ( typeof( _type ) != 'string' ) _type = t.returnKey( _type );
		if ( _type == null ) _type = '__error__';
		if ( t.is_reset() ) t._message = new Array();
		t._message[ _type ] = new Array();
		t._message[ _type ].push( Base64.encode(_string) );
		if ( t.showOnSet == true ) {
				t.show( t._message );
		}
	},
	
	is_show: function( element ){
		if ( element == null ) element = amessage.divMessage+'Body';
		return Element.getStyle(element, 'display')!='none';	
	},
	
	draw: function ( array ){
		amessage._is_init = false;
		var message = '';
		message += '<div id="'+ amessage.divMessage +'TitleBar" ><div id="'+ amessage.divMessage +'Close" >'+ this.translate( 'closemethod' ) +'</div></div>';
		for( key in array ){
			if ( Arrayfind( key, amessage._key_valide ) === true ){
				message += '<div id="'+ amessage.divMessage + key +'Title"><img src="'+ amessage.baseURL+'/plugins/system/amessage/images/'+ key +'.png" width="18px" height="18px" /><span valign="center">&nbsp;-&nbsp;'+ this.translate( key ) +'&nbsp;:</span></div>';
				for( i in array[key] ){
					if ( typeof( array[key][i] ) === 'string' )
						message += '<div id="'+ amessage.divMessage + key +'Msg">'+ Base64.decode(array[key][i]) +'</div>';
				}
			}
		}
		return message+'<br />';
	},
	
	html: function( array ){
		var f = $( amessage.divMessage );
		if ( !f ) return false;
		f.innerHTML = amessage.draw( array );
		return true
	},
	
	fadeOutIn: function(){
		this.fadeOut();
		this._timer_fadeOI = setTimeout("amessage.fadeIn()", (amessage._durationFadeOut*1000));
	},
	
	fadeOut: function(){
		new Effect.Opacity(amessage.divMessage+'Body', { duration: amessage._durationFadeOut, from: 1, to: 0.3 });
		if ( amessage._shadow_enable )
			new Effect.Opacity(amessage.divMessage+'BodyShadow', { duration: amessage._durationFadeOut, from: 1, to: 0.3 });
	},
	
	fadeIn: function(){
		if ( this._timer_fadeOI != null ) {clearTimeout(this._timer_fadeOI); this._timer_fadeOI = null;}
		amessage.html( amessage._message );
		new Effect.Opacity(amessage.divMessage+'Body', { duration: amessage._durationFadeIn, from: 0.3, to: 1 });
		if ( amessage._shadow_enable ){
			amessage.shadow_position();
			new Effect.Opacity(amessage.divMessage+'BodyShadow', { duration: amessage._durationFadeIn, from: 0.3, to: 1 });
		}
		if ( !amessage._position_save || amessage._first_run ) amessage.center( amessage.divMessage+'Body' );
	},

	show: function( array ){
		if ( !amessage.is_show() ){
			amessage.html( array );
			if ( !amessage._position_save || amessage._first_run ) amessage.center( amessage.divMessage+'Body' );
			amessage._first_run = false;
			amessage._timer_Show = setTimeout("amessage.onshowBody()", 10);
			if ( amessage._draggable )
				new Draggable(amessage.divMessage+'Body', { /*revert: true,*/ scroll: window, onDrag:amessage.ondrag, onEnd:amessage.ondrag });
			JEvent.addEvent( 'dblclick', amessage.ondblclick, amessage.divMessage+'Body' );
			JEvent.addEvent( 'dblclick', amessage.ondblclick, amessage.divMessage+'BodyShadow' );
			$( amessage.divMessage+'Body' ).fade( { duration: amessage._durationShow, from: 0, to: 1 } );
			if ( amessage._shadow_enable ){
				$( amessage.divMessage+'BodyShadow' ).fade( { duration: amessage._durationShow, from: 0, to: 1 } );
			}
		}else{
			amessage.fadeOutIn( array );
		}
	},
	
	onshowBody: function(){
		if ( amessage._timer_Show != null ) {clearTimeout(amessage._timer_Show); amessage._timer_Show = null;}
		$( amessage.divMessage+'Body' ).show();
		if ( amessage._shadow_enable ) $( amessage.divMessage+'BodyShadow' ).show();
	},
		
	hide: function(){
		if ( this.is_show() ){
			amessage._timer_Hide = setTimeout("amessage.onhideBody()", (amessage._durationHide*1000) );
			$( amessage.divMessage+'Body' ).fade( { duration: amessage._durationHide, from: 1, to: 0 } );
			if ( amessage._shadow_enable )
				$( amessage.divMessage+'BodyShadow' ).fade( { duration: amessage._durationHide, from: 1, to: 0 } );
		}
	},
	
	onhideBody: function(){
			if ( amessage._timer_Hide != null ) {clearTimeout(amessage._timer_Hide); amessage._timer_Hide = null;}
			//JEvent.removeEvent( 'dblclick', amessage.ondblclick, amessage.divMessage+'Body' );
			//JEvent.removeEvent( 'dblclick', amessage.ondblclick, amessage.divMessage+'BodyShadow' );
			if ( amessage._draggable )
				Droppables.remove(amessage.divMessage+'Body');
	},
	
	reset: function(){
		this._message = null;
	},
	
	is_reset: function(){
		return ( this._message == null );
	}
	
};