if (typeof ajax == 'undefined') {
  ajax = {};
  
}
var http_request;
var initialize=0;
var opened=1;
var sent=2
var loading=3
var completed=4;

var i = 0;
var j = 0;
var tmp;
var tmpValue; 

ajax.makeRequest = function(params) 
{
	function defaultParam(pname, def){ if (typeof params[pname] == "undefined"){ params[pname] = def; } };
	defaultParam('loadObject', undefined);
	defaultParam('inLoadObject', undefined);
	defaultParam('mimeType', 'text/html');
	defaultParam('method', 'POST');
	defaultParam('form', null);
	defaultParam('names', '');
	defaultParam('values', '');
	
	i = 0;
	j = 0;
	this.headers=new Array();
	this.urlParams="";
	this.postSent = null;
	
	switch (params.method){
		  case 'POST':
				if(params.form != null){//an exi dilo8i forma pare ta data tis formas pou exhs dilosei
					this.urlParams=ajax.makeUrlFromParameter(params.names, params.values);//perni ta data tis formas 
					this.urlParams+=getFormElements($(params.form));//pernei ta extra data
				}else{
					this.urlParams=ajax.makeUrlFromParameter(params.names, params.values);
					this.urlParams=this.urlParams.substr(0,(this.urlParams.length - 1)); 
				}
				this.urlParams==''?this.postSent=null:this.postSent=this.urlParams;
				this.headers[this.headers.length]=new Array("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
				this.headers[this.headers.length]=new Array("Content-Length",this.postSent.length);
				break;
		 case 'GET':
				if(params.form != null){//an exi dilo8i forma pare ta data tis formas pou exhs dilosei
					this.urlParams='?'+ajax.makeUrlFromParameter(params.names, params.values);//perni ta data tis formas 
					this.urlParams+=getFormElements($(params.form));//pernei ta extra data
				}else{
					this.urlParams='?'+ajax.makeUrlFromParameter(params.names, params.values);
					this.urlParams=this.urlParams.substr(0,(this.urlParams.length - 1)); 
				}
				this.urlParams!=''?params.url+=this.urlParams:params.url+='';
				this.headers[this.headers.length]=new Array("Content-Type", "charset=utf-8;");
				break;
	}
	http_request = ajax.make_http_request(params.mimeType);
	if (!http_request){
	  alert('Giving up :( Cannot create an XMLHTTP instance');
	  return false;
	}
	
	// elenxei to alertContents ola ta readyState einai dipla
	http_request.onreadystatechange = function(){
		// 0 Object is not initialized
		// 1 Loading object is loading data
		// 2 Loaded object has loaded data
		// 3 Data from object can be worked with
		// 4 Object completely initialized
		ajax.alertContents(http_request, params.inObject,params.loadObject,params.inLoadObject);
	};
	
	http_request.open(params.method, params.url, true);
	for(i=0;i<this.headers.length;i++){
		http_request.setRequestHeader(this.headers[i][0], this.headers[i][1]);
	}
	http_request.send(this.postSent);
	return http_request;
};

ajax.make_http_request = function(mimeType){
   http_request = false;
   if (window.XMLHttpRequest){ // Mozilla, Safari, ...
	  http_request = new XMLHttpRequest();
	  if (http_request.overrideMimeType){
		 http_request.overrideMimeType(mimeType); 
	  }
   }
   else if(window.ActiveXObject){// IE
	  try{
		 http_request = new ActiveXObject("Msxml2.XMLHTTP");
	  }
	  catch(e){
		 try{
			http_request = new ActiveXObject("Microsoft.XMLHTTP");
		 }
		 catch(e){}
	  }
   }
   return http_request;
};

ajax.makeUrlFromParameter = function(names, values)
{
   var parameters = '';

	names = names.split(',');
	values = values.split(',');
	if(names.length>=1){
		for(var i = 0; i < names.length; i ++ ){
		  parameters += names[i] + '=' + values[i] + '&';
		}
	}
   return parameters;
};



ajax.alertContents = function(http_request, inObject,loadObject,inLoadObject)
{
	//alert(http_request.readyState)
/*if(inObject!='gallery'){
	if(http_request.readyState<completed){
		//alert(j);
		if(j==0){
			create_layer();	
			j++;
		}
	}else{
		destroy_layer();
		j=0;
	}
}*/
	
	if(navigatorIs() == 'Explorer'){
		if(loadObject != undefined){	
			if(i == 0){
				if(document.getElementById(loadObject).type != 'select-one' ){
					tmp = document.getElementById(loadObject).innerHTML;
				}
				i++;
			}
			if (http_request.readyState < 4){
				if(tmp != undefined){
					document.getElementById(loadObject).innerHTML = inLoadObject;
				}
			}else if (http_request.readyState == 4){// an to status = 200 tote simenei oti den eiparxei kanena server error
				if (http_request.status == 200){// ektelei ton kodika pou 8eloumai
					if(tmp != undefined){
						document.getElementById(loadObject).innerHTML = tmp;
					}
					requestOutput({http_request : http_request, inObject : inObject});
					i=0;
				}
				else{
					alert('There was a problem with the request.');
				}
			}
		}else{
			if (http_request.readyState == 4){
				if (http_request.status == 200){// an to status = 200 tote simenei oti den eiparxei kanena server error
					requestOutput({http_request : http_request, inObject : inObject});
				}else{
					alert('There was a problem with the request.');
				}
			}
		}
	}else{
		if(loadObject != undefined){	
			if(i == 0){
				tmp = document.getElementById(loadObject).innerHTML;
				if(document.getElementById(loadObject).type == 'select-one'){
					tmpValue=document.getElementById(loadObject).selectedIndex;
				}
				i++;
			}
			if(http_request.readyState < 4){
				document.getElementById(loadObject).innerHTML = inLoadObject;
			}
			else if(http_request.readyState == 4){
				if(http_request.status == 200){// an to status = 200 tote simenei oti den eiparxei kanena server error
					document.getElementById(loadObject).innerHTML = tmp;
					if(tmpValue != undefined){
						document.getElementById(loadObject).selectedIndex = tmpValue;
					}
					requestOutput({http_request : http_request, inObject : inObject});
					i=0;
				}else{
					alert('There was a problem with the request.');
				}
			}
		}else{
			if(http_request.readyState == 4){
			// an to status = 200 tote simenei oti den eiparxei kanena server error
				if(http_request.status == 200){
					requestOutput({http_request : http_request, inObject : inObject});
				}else{
					alert('There was a problem with the request.');
				}
			}
		}
	}
};




