// JavaScript Document
//alert('including AjaxHandler');
serverUrl='http://www.brasov.us/belu/src/index/ajax_interface.php?';
//serverUrl='http://zl3/noriel/src/admin/page/resources/ajax_intarface.php?';

/*************************************************************************************/
/*obiect care pe baza unei conexiuni AJAX returneaza date de pe server				*/
/*************************************************************************************/

function AjaxHandler(interfaceObj){

	AjaxHandler.prototype.interfaceObj=interfaceObj;

/*******************************************************************/
//creeaza un obiect XmlHttpRequest si returneaza o referinta catre acesta
	this.getInstance=function(){
		try{
			if(window.XMLHttpRequest)	{				// branch for native XMLHttpRequest object
				//netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
				req = new XMLHttpRequest();
			}
			else 
				if(window.ActiveXObject) {			 // branch for IE/Windows ActiveX version
					try {
						req = new ActiveXObject("Microsoft.XMLHTTP");
					}catch(e){
						req = new ActiveXObject("Msxml2.XMLHTTP");
					}
				}
		}catch(e){
			alert('Nu se poate instantia obiectul XMLHttpRequest: AjaxHandler.js!\n'+e.message);
			return false;
		}
	return(req);
	}


/*******************************************************************/
//conectarea in background cu serverul si trimiterea de date
	this.transferData=function(){
		var url=serverUrl+AjaxHandler.prototype.interfaceObj.getUrlPostVars();
		req=this.getInstance();
		if(typeof(index)=='boolean')
			return;
		//alert('url: '+url);
		//document.write(url);
		req.open('GET', url, true);
		req.onreadystatechange=this.stateChanged;
		req.send(null);
	}

/*******************************************************************/
//operatiile de executat dupa returnarea datelor de pe server
	this.stateChanged=function(){ 
		if (req.readyState==4 || req.readyState=="complete"){ 
			//alert("data received");
			AjaxHandler.prototype.interfaceObj.handleResult(req.responseText);	
		} 
	}
}




/*************************************************************************************/
/*obiect care specifica parametrii de conectare cu serverul si comportamentul dupa primirea datelor	*/
//!!!!!ACESTE OBIECT NU ESTE FOLOSIT IN SITE, EL E DOAR UN MODEL (DACA ERA JAVA L-AS FI FACUT O INTERFATA SAU CEVA DE GENUL)
/*************************************************************************************/
function AjaxInterfaceObjectModel(urlPostVars){
	
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		//implement behaviour
		//alert('providing post vars!');
	}

/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour
		alert('data returned: '+responseText);
	}
	
}



/********************************************************************************************************/
/*obiect interfata AJAX care specifica parametrii de conectare cu serverul si comportamentul dupa primirea datelor	*/
//se foloseste pentru formularele dinamice ajax cu un singur control
/********************************************************************************************************/
function TitleAdderAjaxInterface(urlPostVars,tableId,selectId){

	this.urlPostVars=urlPostVars;
	this.tableId=tableId;
	this.selectId=selectId;
	
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		url=this.urlPostVars;
		var code='';
		var tRef=document.getElementById(this.tableId);
		for(var i=1;i<tRef.rows.length-1;i++){
			var elemRef=tRef.rows[i].cells[1].childNodes[0];
			code+='&'+elemRef.id+'='+elemRef.value;
			//alert(document.getElementById(id).value);
		}
		return url+code;
	}

/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour
		//alert('data returned: '+responseText);

		//parsingul datelor primite
		var dom=new XMLParser(responseText);
		var data=dom.parseToMatrix();

		//completarea optiunilor selectoarelor
		var sRef=document.getElementById(this.selectId);
		sRef.options.length=0;
		sRef.options[0] = new Option('Selectati o valoare','');		
		for(var i=0;i<data.length;i++){
			sRef.options[i+1] = new Option(data[i][1],data[i][0]);
		}

		//stergerea valorilor din inputurile formularului
		var tRef=document.getElementById(this.tableId);
		for(var i=1;i<tRef.rows.length-1;i++){
			tRef.rows[i].cells[1].childNodes[0].value='';
		}
		
		//ascunderea formularului ajax
		tRef.parentNode.style.display="none";
	}
	
}



/********************************************************************************************************/
/*obiect interfata AJAX care specifica parametrii de conectare cu serverul si comportamentul dupa primirea datelor	*/
//se foloseste pentru formularul de adaugare de actegorii
/********************************************************************************************************/
function CategoryAdderAjaxInterface(){
	
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		var name=document.getElementById("xmlTable_attr_value[4]").rows[1].cells[1].childNodes[0].value;
		var category=document.getElementById("xmlTable_attr_value[4]").rows[2].cells[1].childNodes[0].value;
		return 'menu_item=Subcategorii&operation=add_record&aux_value[1]='+name+'&aux_value[4]='+category;
	}
/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour

		//parsarea datelor primite de pe server
		var dom=new XMLParser(responseText);
		var data=dom.parseToMatrix();

		//adaugarea optiunilor selectorului de categorii
		sRef=document.getElementById('attr_value[4]');
		sRef.options.length=0;
		sRef.options[0]=new Option('Selectati o valoare','');
		for(var  i=0;i<data.length;i++){
			if(data[i][0].toString()>0){
				var opt=new Option('   '+data[i][1],data[i][0]);	//carpaceala asta a trebuit facuta ca sa scrie subcategoriile mai la dreaptea si pe mozilla si pe ie-ul vietzii Long live Microsoft!!! stupid faggots!!!
				opt.style.marginLeft="10px";						//linie de cod ptr mozilla
			}
			else
				var opt=new Option(data[i][1],data[i][0]);
			sRef.options[i+1]=opt;
		}

		//setarea controalelor pe valori initiale
		document.getElementById("xmlTable_attr_value[4]").rows[1].cells[1].childNodes[0].value='';
		document.getElementById("xmlTable_attr_value[4]").rows[2].cells[1].childNodes[0].selectedIndex=0;

		//ascunderea formularului ajax
		document.getElementById("xmlTable_attr_value[4]").parentNode.style.display="none";

	}
}




/********************************************************************************************************/
/*obiect interfata AJAX care specifica parametrii de conectare cu serverul si comportamentul dupa primirea datelor	*/
//se foloseste pentru cautarea inregistrarilor in quicksearch
/********************************************************************************************************/
function AjaxQuickSearchInterface(urlPostVars,recordLink){
	this.urlPostVars=urlPostVars;
	this.recordLink=recordLink;
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		//implement behaviour
		//alert('providing post vars: '+serverUrl+this.urlPostVars+"&operation=search_record&name="+document.getElementById("quickSearch").value);
		return serverUrl+this.urlPostVars+"&operation=search_record&name="+document.getElementById("quickSearch").value;
	}

/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour
		//alert('data returned: '+responseText);
		try{
			var resultsLayer=document.getElementById("QuickSearchResults");
			var qsLayer=document.getElementById("quickSearchLayer");		
			var containerLayer=resultsLayer.parentNode;
		}
		catch(e){
			return;
		}
		
		//parsingul datelor primite
		var dom=new XMLParser(responseText);
		var data=dom.parseToMatrix();

		//daca nu avem nici un rezultat se ascunde layer-ul de rezultate
		if(!data.length){
			containerLayer.style.display='none';
			return;
		}
		
		//scrierea informatiilor furnizate de server pe layer-ul 
		var html='';
		for(i=0;i<data.length;i++)
			html+='<a href="edit.php?&record_id='+data[i][0]+'&'+this.recordLink+'">'+data[i][1]+'</a><br />';

		//this.findPos(qsLayer);
		containerLayer.style.marginTop=(this.findPos(qsLayer)+7)+'px';			
		//trecerea codului html pe layer-ul de quicksearch	
		resultsLayer.innerHTML=html;
		resultsLayer.style.display='block';
		containerLayer.style.display='block';
		
	}
	
	
	this.findPos=function(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		//alert(curtop);
		return curtop;
	}
	
}

/********************************************************************************************************/
/*obiect interfata AJAX care specifica parametrii de conectare cu serverul si comportamentul dupa primirea datelor	*/
//se foloseste pentru schimbarea persoanelor de contact in functie de firma selectata
/********************************************************************************************************/
function OnChangeFirmAjaxInterface(){
	
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		var companie=document.getElementById("attr_value[1]").value;
		return 'menu_item=Contracte&operation=combo_list&companie='+companie;
	}
/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour
		//alert('   raspuns   \n\r'+responseText);
		

		//setarea optiunilor comboului de persoane contact
		sRef=document.getElementById('contracte[]');
		sRef.options.length=0;

		
		if (responseText!=''){
			//parsarea datelor primite de pe server
			var dom=new XMLParser(responseText);
			var data=dom.parseToMatrix();
		
			for(var  i=0;i<data.length;i++){
				var opt=new Option(data[i][1],data[i][0]);
				sRef.options[i]=opt;
			}
		}

	}
}
	
/********************************************************************************************************/
/*obiect interfata AJAX care specifica parametrii de conectare cu serverul si comportamentul dupa primirea datelor	*/
//se foloseste pentru schimbarea localitatilor in functie de judetul selectat
/********************************************************************************************************/
function LocalitiesSelectAjaxInterface(){
	
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		var county=document.getElementById("Judet").value;
		return 'operation=locality_select&county='+county;
	}
/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour
		//alert('   raspuns   \n\r'+responseText);
		

		//setarea optiunilor comboului de persoane contact
		sRef=document.getElementById('Localitate');
		sRef.options.length=0;

		
		if (responseText!=''){
			//parsarea datelor primite de pe server
			var dom=new XMLParser(responseText);
			var data=dom.parseToMatrix();
		
			for(var  i=0;i<data.length;i++){
				var opt=new Option(data[i][1],data[i][0]);
				sRef.options[i]=opt;
			}
		}

	}
}


function CategorySelectAjaxInterface(){
	
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		var category=document.getElementById("Category").value;
		return 'operation=category_select&category='+category;
	}
/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour
		//alert('   raspuns   \n\r'+responseText);
		

		//setarea optiunilor comboului de persoane contact
		sRef=document.getElementById('SubCategory');
		sRef.options.length=0;

		
		if (responseText!=''){
			//parsarea datelor primite de pe server
			var dom=new XMLParser(responseText);
			var data=dom.parseToMatrix();
		
			for(var  i=0;i<data.length;i++){
				var opt=new Option(data[i][1],data[i][0]);
				sRef.options[i]=opt;
			}
		}

	}
}

/********************************************************************************************************/
/*obiect interfata AJAX care specifica parametrii de conectare cu serverul si comportamentul dupa primirea datelor	*/
//se foloseste pentru marcarea in baza de date statului de offline al unui user
/********************************************************************************************************/
function MarkOfflineUser(){
	
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		var userId=document.getElementById("user_id").value;
		alert("userId="+userId);
		return 'operation=user_offline&user_id='+userId;
		
	}
/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour
		//alert("we have results");
		//alert("raspuns="+responseText);
	}
}
/********************************************************************************************************/
/*obiect interfata AJAX care specifica parametrii de conectare cu serverul si comportamentul dupa primirea datelor	*/
//se foloseste pentru schimbarea numarului de produse din cosul de cumpparaturi
/********************************************************************************************************/
function SetShoppingAmountAjaxInterface(ProductId){
	
	this.ProdId=ProductId;
	
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		var amount=document.getElementById("amount_"+this.ProdId).value;
		return 'operation=set_shopping_amount&product_id='+this.ProdId+'&amount='+amount;
	}
/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour
		//alert('   raspuns   \n\r'+responseText);
		
		if (responseText!=''){
			//parsarea datelor primite de pe server
			var dom=new XMLParser(responseText);
			var data=dom.parseToArray();
			alert(data[0]);
			
			//alert(data);
			document.getElementById('sum_price_'+this.ProdId).innerHTML=data[1];
			document.getElementById('totalCost').innerHTML=data[2];
		}
	}
}

/********************************************************************************************************/
/*obiect interfata AJAX care specifica parametrii de conectare cu serverul si comportamentul dupa primirea datelor	*/
//se foloseste pentru schimbarea localitatilor in functie de judetul selectat
/********************************************************************************************************/
function NewsletterSelectAjaxInterface(){
	
/*******************************************************************/	
//furnizarea datelor aditionale ce trebuiesc trimise pe server
	this.getUrlPostVars=function(){
		var county=document.getElementById("Agency").value;
		return 'operation=package_select&agency='+county;
	}
/*******************************************************************/
//specificarea instructiunulor de executat dupa ce serverul a trimis datele in background
	this.handleResult=function(responseText){
		//implement behaviour
		//alert('   raspuns   \n\r'+responseText);
		

		//setarea optiunilor comboului de persoane contact
		sRef=document.getElementById('Package');
		sRef.options.length=0;

		
		if (responseText!=''){
			//parsarea datelor primite de pe server
			var dom=new XMLParser(responseText);
			var data=dom.parseToMatrix();
		
			for(var  i=0;i<data.length;i++){
				var opt=new Option(data[i][1],data[i][0]);
				sRef.options[i]=opt;
			}
		}

	}
}
