// JavaScript Document

//alert('including AjaxHandler');

//serverUrl='http://86.123.164.146/2devel/work_in_progress/integrame/src/index/ajax_interface.php?';
serverUrl='http://www.integrameonline.ro/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 params=AjaxHandler.prototype.interfaceObj.getUrlPostVars();

		var url=serverUrl+params;

		req=this.getInstance();

		if(typeof(index)=='boolean')

			return;

		//alert('url: '+url);

		//document.write(url);

		if(AjaxHandler.prototype.interfaceObj.RequestMethod=='POST'){

			req.open('POST', serverUrl.substr(0,serverUrl.length-1), true);

			req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

			req.setRequestHeader("Content-length", params.length);

			req.setRequestHeader("Connection", "close");

		}

		else{

			req.open('GET', url, true);

		}

		req.onreadystatechange=this.stateChanged;

		if(AjaxHandler.prototype.interfaceObj.RequestMethod=='POST'){

			req.send(params);

		}

		else{

			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;

			}

		}



	}

}

/********************************************************************************************************/

/*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 LocalitiesSelectAjaxInterface1(){

	

/*******************************************************************/	

//furnizarea datelor aditionale ce trebuiesc trimise pe server

	this.getUrlPostVars=function(){

		var county=document.getElementById("Judet1").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('Localitate1');

		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];

			//document.getElementById('totalc').innerHTML=data[2];

		}

	}

}

/********************************************************************************

//verifica daca integrama a fost completata corect sau nu

/********************************************************************************/

var TheErrorsTimeOutArr=new Array();
function saveIntegrama(Saved, IdIntegrama, Timp, Ignore){

	var prepared = Saved.replace(/\n/g,''); 
	prepared = prepared.replace(/\r/g,'');
	prepared = prepared.replace(/\"&nbsp;\"/g,'null');
	this.Saved=prepared;

	this.IdIntegrama = IdIntegrama;

	this.Timp = Timp;

	this.RequestMethod='POST';

	this.Ignore=Ignore;

	this.getUrlPostVars=function(){

		return 'operation=salvare_integrama&saved='+this.Saved+'&integrama_id='+this.IdIntegrama+'&timp='+this.Timp+'&ignora='+this.Ignore;

	}

	this.handleResult=function(responseText){
		
		alert('Integrama salvata');
			
	}

}


function checkIntegrama(Solutie, IdIntegrama, Timp, Ignore){

	this.Solutie=Solutie;

	this.IdIntegrama = IdIntegrama;

	this.Timp = Timp;

	this.RequestMethod='POST';

	this.Ignore=Ignore;
/************************************************************************

//furnizarea datelor pentru server*/

	this.getUrlPostVars=function(){

		return 'operation=validare_solutie&solutie='+this.Solutie+'&integrama_id='+this.IdIntegrama+'&timp='+this.Timp+'&ignora='+this.Ignore;

	}

/***********************************************************************

//handle date de la server*/

	this.handleResult=function(responseText){

		var errorDisplayTimeSec=30;

	

		var dom=new XMLParser(responseText);

		var data=dom.parseToArray();

	

		if(data[0]=='corect'){

			stop = true;

			//alert('E corect! Bravo! '+data[1]);
			//alert(document.location);
			//alert('E corect! Bravo! ');
			//document.getElementById('checkCrosswordButton').onclick="Alert('Ai rezolvat integrama. Felicitari!')";\
			document.getElementById('pointsDiv').innerHTML = data[1];
			document.getElementById('integramaDiv').style.display = 'none';
			document.getElementById('successDiv').style.display = 'block';
			
		}

		if(data[0]=='incorect'){

			if(typeof(TheErrorsTimeOutArr) != "undefined"){

				while(TheErrorsTimeOutArr.length>0){

					var tt=TheErrorsTimeOutArr.shift();

					clearTimeout(tt);

					//console.log("ClearedTimeOUT="+tt);

				}

			}

			for(var i=1;i<data.length;i++){

				var cellCoord=data[i].split(',');

				$(table.rows[cellCoord[0]].cells[cellCoord[1]]).addClass('errorCell');

				

				TheErrorsTimeOutArr[TheErrorsTimeOutArr.length]=window.setTimeout("$(table.rows["+cellCoord[0]+"].cells["+cellCoord[1]+"]).removeClass('errorCell');", errorDisplayTimeSec*1000);

				//console.log("SetTimeOUT="+TheErrorsTimeOutArr[TheErrorsTimeOutArr.length-1]);

			}

			alert('Rezolvare incorecta. Verifica corectitudinea celulelor rosii.');

		}

	}

}



/********************************************************************************

//afiseaza solutia integramei

/********************************************************************************/

function showIntegrama(IdIntegrama){

	this.IdIntegrama = IdIntegrama;

/************************************************************************

//furnizarea datelor pentru server*/

	this.getUrlPostVars=function(){

		return 'operation=afisare_solutie&integrama_id='+this.IdIntegrama;

	}

/***********************************************************************

//handle date de la server*/

	this.handleResult=function(responseText){

		var dom=new XMLParser(responseText);

		var data=dom.parseToMatrix();

		//console.log(data);

	

		for(var i=0;i<data.length;i++){

			for(var j=0;j<data[i].length;j++){	

				var cell=data[i][j].split(',');

				table.rows[cell[1]].cells[cell[2]].innerHTML=cell[0];

			}	

		}

	}

}
