/**
 * @author smok
 */
//var I_COUNT_MEIRU=0;
function Meiru()
{
	// begin
	//	Private fields.
	/*
	 * String adres akcji na serwerze.
	 */
	var _s_serv_req_url="";
	
	
	/*
	 * Object referencja do formulmularza
	 */
	var _o_Form=null;
	
	
	/*
	 * String akcja formularza
	 */
	var _s_form_action="";

	
	/*
	 * Object referencja do glownego wezla interfejsu
	 */
	var _o_Main_Container=null;
	
	
	/*
	 * Object referencja do wezla na odpowiedz serwera 
	 */
	var _o_Response_Info_Container=null;
	
	
	/*
	 * Object referencja do wezla onLoading serwera
	 */
	var _o_On_Loading_Container=null;
	
	
	/*
	 * Object zawierajacy forme prezentacji informacji odpowiedzi serwera
	 */
	var _o_On_Response_Info_Container_Desc=null;
	
	
	/*
	 * String Tresc trigger'a powrotu.
	 */
	var _s_on_exit_value="";
	
	
	/*
	 * Object Informacje opisujace budowe triggera powrotu.
	 */
	var _o_on_exit_trigger_desc=null;
	
	
	/*
	 * Object Wspolzedne uzyskiwane na podstawie polozenia glownego kontenera.
	 */
	var _o_position={
						"i_x"	:	0,
						"i_y"	:	0
					};
	
	
	/*
	 * Boolean Dzialanie klasy z efektami.
	 */
	var _b_with_fx=false;
	// end
	//	Private fields.
	
	
	// begin
	//	Private methods.
	function _mOnLoadingInfo()
	{
		if(!_o_On_Loading_Container)
		{
			_o_position.i_x=_o_Main_Container.offsetLeft;
			_o_position.i_y=_o_Main_Container.offsetTop;
			var s_aditional_info_style = (_o_On_Response_Info_Container_Desc.style) ? _o_On_Response_Info_Container_Desc.style : "";
			_o_On_Loading_Container = document.createElement(_o_On_Response_Info_Container_Desc.element);
			_o_On_Loading_Container.setAttribute("style","top:" + _o_position.i_y + "px;" +
														 "left:" +	_o_position.i_x +	"px;" +
														 "position:absolute;" +
														 "display:none;" +
														 s_aditional_info_style);
			
			_o_On_Loading_Container.innerHTML = "<center>Wysyłanie...<br/><br/><img src=\"../../system/application/libraries/msg_sender/sending.gif\" /></center>";
			_o_Main_Container.parentNode.appendChild(_o_On_Loading_Container);
		}
		if(_b_with_fx) 
		{
			dojo.fadeOut
					({
						node:_o_Main_Container
					}).play();
			
			dojo.fadeIn
			({
				node:_o_On_Loading_Container
			}).play();
		}
		else
		{
			_o_Main_Container.style.display="none";
			_o_On_Loading_Container.style.display="block";
		}
		
	}
	
	function _mOnResponseInfo(o_Srv_Response)
	{
		if(!_o_Response_Info_Container)
		{
			var s_aditional_info_style=(_o_On_Response_Info_Container_Desc.style) ? _o_On_Response_Info_Container_Desc.style : "";
			_o_Response_Info_Container=document.createElement(_o_On_Response_Info_Container_Desc.element);
			_o_Response_Info_Container.setAttribute(
															"style","top:"+_o_position.i_y+"px;"+
																	"left:"+_o_position.i_x+"px;"+
																	"position:absolute;"+
																	"display:inline;"+
																	s_aditional_info_style
													  );
													  
			_o_Main_Container.parentNode.appendChild(_o_Response_Info_Container);
			
		}
		
		var o_On_Exit_Trigger=document.createElement(_o_on_exit_trigger_desc.element);
			o_On_Exit_Trigger.appendChild(document.createTextNode(_o_on_exit_trigger_desc.value))
			_o_Response_Info_Container.innerHTML=o_Srv_Response.s_value;
			_o_Response_Info_Container.appendChild(o_On_Exit_Trigger);
			addEvent(o_On_Exit_Trigger,"click",function()
			{
				if(_b_with_fx)
				{
					dojo.fadeIn
					({
						node: _o_Main_Container
					}).play();
					dojo.fadeOut
					({
						node: _o_Response_Info_Container
					}).play();
				}
				else
				{
					_o_Main_Container.style.display="block";
					_o_Response_Info_Container.style.display="none";
				}
			});
		
		if(_b_with_fx)
		{
			dojo.fadeOut
					({
						node: _o_On_Loading_Container
					}).play();
			dojo.fadeIn
			({
				node:_o_Response_Info_Container
			}).play();
		}
		else
		{
			_o_On_Loading_Container.style.display="none";
			_o_Response_Info_Container.style.display="block";
		}
		
	}
	
	/**
	 * @author smok
	 */
	function _mURLRecon(s_serv_req_url)
	{
		if(typeof s_serv_req_url!="string" || s_serv_req_url.length<4)
		{
		
		return false;	
		}
		
		if(s_serv_req_url.substring(0,7)=="http://")
		{
			s_serv_req_url=s_serv_req_url.substring(7,s_serv_req_url.length);
		}
	
		var s_is_www_loc=new String(window.location).substring(7,10);
		if(s_serv_req_url.substring(0,3)=="www")
		{
			if(s_is_www_loc!="www")
			{
				s_serv_req_url=s_serv_req_url.substring(4,s_serv_req_url.length);
			}
		}
		else
		{
			if(s_is_www_loc=="www")
			{
				s_serv_req_url="www."+s_serv_req_url;
			}
		}
		
	return s_serv_req_url;
	}
	// end
	//	Private methods.
	
	
	// begin
	//	Public methods.
	/*
	 * 
	 */
	this.mInitialise=function(s_serv_req_url,_form,s_form_action,_main_container,o_On_Response_Info_Container_Desc,o_on_exit_trigger_desc,b_with_fx)
	{
		// begin
		//	Required libs.
		try
		{
			advAJAX.post({url:''});
		}
		catch(e)
		{
			throw("Meiru requires advAJAX library!");
		}
		
		try
		{
			new Haken();
		}
		catch(e)
		{
			throw("Meiru requires Haken form manipulation library!");
		}
		
		if(typeof dojo=="undefined")
		{
			throw ("Meiru requires Dojo Effects library!");
		}
		// end
		//	Required libs.
		
		
		// begin
		//	Validiation of arguments.
		if(!s_serv_req_url || _form<0 || !s_form_action || !_main_container)
		{
			
		return false;
		}
		
		if(typeof _form=="string" || typeof _form=="number")
		{
			_o_Form=document.forms[_form];
			
			if(!_o_Form)
			{
				
			return false;
			}
		}
		else if(typeof _form=="object")
		{
			_o_Form=_form;
		}
		else
		{
			
		return false;
		}
		
		if(typeof _main_container=="string")
		{
			_o_Main_Container=document.getElementById(_main_container);
			if(!_o_Main_Container)
			{
					
			return false;
			}
		}
		else if(typeof _main_container=="object")
		{
			_o_Main_Container=_main_container;
		}
		else
		{
			
		return false;
		}
		
		if(typeof o_on_exit_trigger_desc=="object")
		{
			if(!o_on_exit_trigger_desc.element || !o_on_exit_trigger_desc.value)
			{
			
			return false;
			}
			
			_o_on_exit_trigger_desc=o_on_exit_trigger_desc;
		}
		else
		{
		
		return false;
		}
		
		if(typeof o_On_Response_Info_Container_Desc=="object")
		{
			if(!o_On_Response_Info_Container_Desc.element)
			{
				
			return false;
			}
			
			_o_On_Response_Info_Container_Desc=o_On_Response_Info_Container_Desc;
		}
		else
		{
		
		return false;
		}
			
		_s_form_action=(typeof s_form_action=="string") ? s_form_action : false;
		_b_with_fx=b_with_fx;
		// end
		//	Validiation of arguments.
		
		_s_serv_req_url=_mURLRecon(s_serv_req_url);
		
		if(_s_serv_req_url && _s_form_action)
		{
		
		return true;
		}

	return false;
	}
	
	this.mPrepareForm=function()
	{
		
		// begin 
		//	Replace form action.
		_o_Form.action=_s_form_action;
		// end
		//	Replace form action.
		
			
		// begin
		//	Add AJAX flag as hidden input.
		var o_AJAX_Flag=document.createElement("input");
			o_AJAX_Flag.setAttribute("name","b_AJAX_Flag");
			o_AJAX_Flag.setAttribute("value","true");
			o_AJAX_Flag.setAttribute("type","hidden");
		_o_Form.appendChild(o_AJAX_Flag);
		// end
		//	Add AJAX flag as hidden input.
	}
	
	this.mServerAction=function()
	{
		
		var o_mail_me_data=new Haken();
			o_mail_me_data.hSetForm(_o_Form);
		advAJAX.post
		({
			url:"http://"+_s_serv_req_url,
			
			queryString:o_mail_me_data.hCrtQuery(),
			
			onLoading:function(obj)
			{
				_mOnLoadingInfo();
			},
			
			onSuccess:function(obj)
			{
				var o_Srv_Response=obj.responseJSON;
				var s_error_msg="<span style=\"color:red\">BŁĄD!</span><br/>Nieprawidłowa odpowiedź serwera.<br/> Prosimy o <a href=\"mailto:tcez.admin@gmail.com\">kontakt</a> z administratorem. ";
				try
				{
					if (!o_Srv_Response.s_exit_code || !o_Srv_Response.s_value) 
					{
						o_Srv_Response={
											"s_exit_code"	: "ERROR:MSG_NOT_SEND",
											"s_value"		: s_error_msg
									   };
					}				
				}
				catch(e)
				{
					o_Srv_Response={
											"s_exit_code"	: "ERROR:MSG_NOT_SEND",
											"s_value"		: s_error_msg
								   };
				}
				_mOnResponseInfo(o_Srv_Response);
				
			},
			
			onError:function(obj)
			{
				var o_Srv_Response={
										"s_exit_code"	:	"ERROR:SRV_FAILURE",
										"s_value"		:	"<span style=\"color:red\">BŁĄD!</span><br/>Wystapił poważny problem z serwerem.<br/> Prosimy o <a href=\"mailto:tcez.admin@gmail.com\">kontakt</a> z administratorem. "
								   };
				_mOnResponseInfo(o_Srv_Response);
			}
		});
	}
	// end
	//	Public methods.
	
}


