/**
 * @author Ela Dulko
 */
var eajax = new function()
{

	this.request_method = "POST";
	this.request_url 	= "/ajax";
	this.request_data 	= "";
	this.call_method 	= "";
	this.handleResponse = "";
	this.dataType		= "json";
	this.GET_URL		= false;
	
	this.do_method = function( callBack , handleResponse ,data )
	{
		this.request_data = this.prepare_data(data);
		this.call_method = callBack;
		this.handleResponse = handleResponse;
		
		if( this.check_data() ) {
			
			if( this.GET_URL ) 
				return this.request_url+"?rs="+this.call_method+"&"+this.request_data;

			var reqObj = this.init_httpObject();
			reqObj.open(this.request_method,this.request_url,true);
			if( this.request_method == "POST" ) {
				reqObj.setRequestHeader("Method", "POST " + this.request_url + " HTTP/1.1");
				reqObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			}

			reqObj.onreadystatechange = function(){
				if( reqObj.readyState==4 ) {
					try {
						var dataText = reqObj.responseText;
						var txt = dataText.replace(/^\s*|\s*$/g,"");
						var data = eval("("+txt+")");
						handleResponse(data);
					} catch( e ){
						alert( e.description );
						return false;
					}
				} else {
					return;
				}
			}
			reqObj.send( 'rs='+this.call_method+'&'+this.request_data+'' );
			delete reqObj;
			return true;
		}
		return false;
	}
	
	this.check_data = function()
	{
		var error = true;
		if( this.handleResponse == '' ) {
			error = false;
		}
		if( this.request_method == '' ) {
			error = false;
		}
		
		return error;
	}
	
	this.init_httpObject = function(){
		var req;
		
		if( window.ActiveXObject ) {
			var version = [ 'Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
			for( var i = 0; i < version.length; i++ ) {
				try{
					req = new ActiveXObject( version[ i ] );
					return req;
				} catch(e){
					continue;
				}
			}
		}
		if (!req && typeof XMLHttpRequest!='undefined')
	    {
	        try {
	            // firefox,opera and safari
	            req = new XMLHttpRequest();
	        } catch (e) {
	            throw new Error("XMLHttp object could not be created.");
	        }
	    }
		return req;
	}
	
	this.prepare_data = function( data )
	{
		var prepared_data = "";
		var len = jQuery(data).length;
		jQuery(data).each( function(Index, Object){
			if(Object instanceof Array) {
				var Olen = $(Object).length;
				jQuery(Object).each(function(OIndex,OObject){
					prepared_data += "rsargs["+Index+"]["+OIndex+"]="+OObject;
					if( OIndex != (Olen-1) ) {
						prepared_data += "&";
					}
				});
			}else {
				prepared_data += "rsargs["+Index+"]="+Object;
			}
			if( Index != (len -1) ) {
				prepared_data += "&";
			}
		} );
		var d = new Date()
		prepared_data += ('&time='+d.getTime());
		return prepared_data;
	}
	
}
