
var statusDiv = document.getElementById('ispisiRijeci');
var div = document.getElementById('textarea');
var debug = document.getElementById('debugText');
var ispravak = document.getElementById('ispravak');//h
var hascheck=document.getElementById('hascheck');
var padIzbDiv=document.getElementById('padIzbDiv');  //h
var padajuciIzbornik=null; //h
var predlozeneRijeci = new Array(); //h
var brojPredlozenihRijeci; //h

var rijec; //h
var rbr_greske; //h
var root;  //h

var pogresneRijeci=[]; //h
var ispravciRijeci=[]; //h
var bioJeNoviZahtjev; //h
var vrijemeZahtjeva,vrijemeOdziva;  //h


function goAhead() {
// kad dablkliknemo na div, ondak treba:
// 1. prenijeti tekst iz tog diva u textarea tako da se prebace brovi i ostalo
// 2. sakriti ovaj div
// 3. prikazati onaj div
// 4. prepraviti label
	/////////h
	posaljiIspravkeServeru();     
	document.getElementById("sendQuery").onclick=makeRequest; 
	document.getElementById("sendQuery").innerHTML="Pronađi pogreške"; 
	////////h
	var localText = ispravak.innerHTML;
	localText = localText.replace(/<br>/ig, "\n");
	div.value = localText.replace(/<.*?>/g, "");
// div.value = localText;
	div.style.display = "inline";	
	ispravak.style.display = "none";
	statusDiv.style.backgroundColor= "";
	statusDiv.innerHTML = "";
}

function resetQuery() {
		document.getElementById("sendQuery").onclick=makeRequest;   //h
		document.getElementById("sendQuery").className="button";  //h
		document.getElementById("sendQuery").innerHTML="Pronađi pogreške"; 
		div.value = "";
		div.style.display = "inline";
		ispravak.style.display = "none";
		statusDiv.style.backgroundColor= "";
		statusDiv.innerHTML = "";
}



function show (elementID) {
	element = document.getElementById(elementID);
	element.style.visibility = "visible";
}

function hide (elementID) {
	element = document.getElementById(elementID);
	element.style.visibility = "hidden";
}

function clearArea() {
	if (div.value.match("dvostrukim klikom unutar sivog prostora")) {
		div.value = "";
	}
	statusDiv.style.backgroundColor= "";
	statusDiv.style.color = "black";
	statusDiv.style.fontWeight = "normal";
	statusDiv.innerHTML = "";
}

function sortPositionNumber(a,b) {
	return a-b;
}

//h



function prikaziPadajuciIzbornik(i,evt,index_greske)
{
     	if(bioJeNoviZahtjev==true)
    	{
			for(var k=0;k<rbr_greske;k++)
			{
				pogresneRijeci[k]=document.getElementById("g"+k).firstChild.nodeValue; 
				ispravciRijeci[k]=pogresneRijeci[k];
			}
			bioJeNoviZahtjev=false;
       }

	predlozeneRijeci.length=0;
	var greska = root.getElementsByTagName("error")[index_greske];
	predlozenaRijec = "";
	brojPredlozenihRijeci=0;
	var tag;
	if((tag=greska.getElementsByTagName("suggestions"))!==null)
		brojPredlozenihRijeci=tag.length;			
	if (greska.getElementsByTagName("word")[0] != null)
	{
		brojPredlozenihRijeci=greska.getElementsByTagName("word").length; //h
		for(var k=0; k<brojPredlozenihRijeci; k++) //h
		{
			predlozenaRijec = greska.getElementsByTagName("word")[k].firstChild.nodeValue;
			predlozeneRijeci.push(predlozenaRijec); //h
		}
	}
	


	rijec=document.getElementById("g"+i);

	padajuciIzbornik=document.getElementById("padajuciIzbornik");
     		
	if(padajuciIzbornik!==null)
	{
		padIzbDiv.removeChild(padajuciIzbornik);	
	
	}
	padIzbDiv.innerHTML="<table id=\"padajuciIzbornik\"><tbody id=\"tableTijelo\"></tbody></table>";
	padajuciIzbornik=document.getElementById("padajuciIzbornik");
	YAHOO.util.Dom.setStyle("padajuciIzbornik","visibility","visible");
	zaustaviEvent(evt);				
	var j,redak,cell;
	for(j=0;j<=brojPredlozenihRijeci;j++)
	{
	    	redak = padajuciIzbornik.insertRow(j);
		cell=redak.insertCell(0);
		if(j<brojPredlozenihRijeci) 
			cell.innerHTML="<div id=\"izbornikItemDiv\" name=\"obicniItem\" onclick=\"odaberiIspravak(this.innerHTML,"+i+")\">"+predlozeneRijeci[j]+"</div>";
		else cell.innerHTML="<div id=\"izbornikItemDiv\" name=\"obicniItem\" class=\"pogresnaItem\" onclick=\"odaberiIspravak(this.innerHTML,"+i+")\">"+pogresneRijeci[i]+"</div>";
		cell.setAttribute("id","izbornikItem");	    
	}

	
	
	redak=padajuciIzbornik.insertRow(j++);
	var inputBox="<input id=\"inputBox\" size=\"5\" value=\""+rijec.innerHTML+"\"></input>";
	var cell=redak.insertCell(0);
	cell.innerHTML=inputBox;
	var ok="<span id=\"ok\" onclick=\"odaberiIspravakInputBox()\">ok</span>";
	cell.innerHTML+=ok;
	cell.innerHTML="<div id=\"izbornikItemDiv\">"+cell.innerHTML+"<div>";

	redak=padajuciIzbornik.insertRow(j);
	var cell=redak.insertCell(0);
	var checkBox="<input id=\"izbornikCheckBox\" checked=true type=\"checkbox\">Promijeni sve</input>";
	cell.innerHTML="<div id=\"izbornikCheckBoxDiv\">"+checkBox+"</div>";
	
		
	var top=getY(rijec)+rijec.offsetHeight-ispravak.scrollTop;
	var left=getX(rijec);

	YAHOO.util.Dom.setStyle(padIzbDiv,"left",left+"px");	
	YAHOO.util.Dom.setStyle(padIzbDiv,"top",top+"px");
	ispravak.onscroll=scrollPadajuciIzbornik;
	document.onclick=sakrijAkoJeKlikIzvan;
}


function getX( oElement )
{
	var iReturnValue = 0;
	while( oElement != null )
	 {
		iReturnValue += oElement.offsetLeft;
		oElement = oElement.offsetParent;
	}
	return iReturnValue;
}

function getY( oElement )
{
	var iReturnValue = 0;
	while( oElement != null )
	 {
		iReturnValue += oElement.offsetTop;
		oElement = oElement.offsetParent;
	}
	return iReturnValue;
}

function zaustaviEvent(event) 
{
	if (event.stopPropagation)
	{
		event.stopPropagation();// Mozilla 	
	}
	else if (window.event) 
	{		
		window.event.cancelBubble = true;  //  IE
	}
}

function sakrijPadajuciIzbornik()
{
	YAHOO.util.Dom.setStyle("padajuciIzbornik","display","none");
	document.onclick=null;
}

function nijePotomak(a,b)
{
	while(a!==null)
	{
		if(a.offsetParent==b)
			return false;
		a=a.offsetParent;
	}
	return true;
}

function sakrijAkoJeKlikIzvan(event)
{
	if(navigator.appName=="Microsoft Internet Explorer")
	{
		if(nijePotomak(window.event.srcElement,padIzbDiv)) sakrijPadajuciIzbornik();
	}
	else
	{
		if(nijePotomak(event.target,padIzbDiv)) sakrijPadajuciIzbornik();
	}
}

function scrollPadajuciIzbornik()
{
	var top=getY(rijec)+rijec.offsetHeight-ispravak.scrollTop;
	if(top<getY(ispravak)) 
		sakrijPadajuciIzbornik();
	else if(top>(getY(ispravak)+ispravak.offsetHeight))
		sakrijPadajuciIzbornik();
	else
		YAHOO.util.Dom.setStyle(padIzbDiv,"top",top+"px");
}

function odaberiIspravak(tekst,i)
{
	ispravciRijeci[i]=tekst;
	var pogresnaRijec=rijec.innerHTML;
	if(document.getElementById("izbornikCheckBox").checked==true)
	{
		var greske=document.getElementsByName("greska");
		for(var j=0;j<greske.length;j++)
		{
			if(greske[j].innerHTML==pogresnaRijec)
			{
				greske[j].innerHTML=tekst;
				greske[j].className="promijenjenaRijec";
			}
		}
			
	}
	else
	{
		rijec.innerHTML=tekst;
		rijec.className="promijenjenaRijec";
	}
	
	
	
	sakrijPadajuciIzbornik();
}

function odaberiIspravakInputBox()
{	
	var tekst=document.getElementById("inputBox").value;
	var pogresnaRijec=rijec.innerHTML;
	if(document.getElementById("izbornikCheckBox").checked==true)
	{
		var greske=document.getElementsByName("greska");
		for(var j=0;j<greske.length;j++)
		{
			if(greske[j].innerHTML==pogresnaRijec)
			{
				greske[j].innerHTML=tekst;
				greske[j].className="promijenjenaRijec";
			}
		}
			
	}
	else 
	{
		rijec.innerHTML=tekst;
		rijec.className="promijenjenaRijec";
	}
	
	sakrijPadajuciIzbornik();
}


///////slanje ispravaka i dobivanje odgovora

function posaljiIspravkeServeru()
{
	var sUrl = "/acceptUserInput.pl";   //h             URL servera za dodati
	var postData="";	
	for(var i=0;i<ispravciRijeci.length;i++)
		if(ispravciRijeci[i]!==pogresneRijeci[i])
			postData+=pogresneRijeci[i]+" -> "+ispravciRijeci[i] + "|";    //format: "pogresnaRijec -> ispravljenaRijec | "
	var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback_ispravci, postData);		
}


var ispravciSuccess=function(o)
{
 	statusDiv.innerHTML = "Vaši ispravci uspješno su preneseni Haschecku. Hvala!";
	statusDiv.style.backgroundColor = "green";
};

var ispravciFailure=function(o)
{
	//nije ok
};

var callback_ispravci=
{
	success: ispravciSuccess,
	faliure: ispravciFailure
};

function getCDATA(element){

var ie = (typeof window.ActiveXObject != 'undefined');
var returnText;

if(ie)	{
	if(element.hasChildNodes){
		returnText = element.childNodes[0].nodeValue;
	}
}
else	{
	if(element.hasChildNodes){
		returnText = element.textContent;
	}

}

return returnText;
}

///////////////h

var handleSuccess = function(o){

//	alert(o.responseText);

	if(o.responseXML !== undefined){
		var temp = o.responseText;
		temp = temp.replace(/>/g,"&gt;");
		temp = temp.replace(/</g,"&lt;");
		temp = temp.replace(/"/g,"&quot;");
		debug.innerHTML = "<pre>" + temp + "</pre>"; 	
		root = o.responseXML.documentElement; //h
		var preBegin = "";
		var preEnd = "";
// ako je zadan URL ili PDF, tad je u content upisani tekst i treba ga prebaciti u polje
		var queryType = root.getElementsByTagName("content")[0].getAttribute("type");
		vanjskiText = root.getElementsByTagName("content");
//		if ((vanjskiText) && (vanjskiText.length > 1)) {
		if (queryType != "input") {
			var sadrzaj = getCDATA(vanjskiText[0]);
			div.value = sadrzaj;
			debug.value = temp;
			if ((queryType == "WWW") || (queryType == "PDF")) {
				preBegin = "<pre>";
				preEnd = "</pre>";
			};
		};
		var oldText = div.value;
		oldText = oldText.replace(/^\n/g, "");
//		oldText = oldText.replace(/\n/g, "<br>");

		var preserveText = oldText;
		brojGresaka = root.getElementsByTagName("results")[0].getAttribute("errors");
		var ubacivanja = new Array();
		var polozaji = new Array();
		// radi petlju koja se vrti brojGresaka puta //

		rbr_greske=0; //h
		bioJeNoviZahtjev=true;

	   if (brojGresaka >0) {

		/////h
		document.getElementById("sendQuery").onclick=goAhead; 
		document.getElementById("sendQuery").innerHTML="Nastavi unos teksta";		
		/////h
		
		for (var i=0; i<brojGresaka; i++) {

			greska = root.getElementsByTagName("error")[i];
			brojPonavljanja = greska.getAttribute("occurrences");
			severity = greska.getAttribute("severity");
			
			len = greska.getElementsByTagName("length")[0].firstChild.nodeValue;

			

			for (var j=0; j< brojPonavljanja; j++) {
		 		position = greska.getElementsByTagName("position")[j].firstChild.nodeValue;
				polozaji.push(position);
				//ubacivanja[position] = "<a class=\"" + severity + "\" title=\"" + predlozenaRijec + "\" href=\"#\" id=\"i" + i + "\">";
				ubacivanja[position] = "<a name=\"greska\" class=\""+severity+"\" id=\"g" + rbr_greske + "\" onclick=\"prikaziPadajuciIzbornik(" + rbr_greske+",event,"+i+")\">";  //h
				drugi = parseInt(position) + parseInt(len);
				polozaji.push(drugi);
				ubacivanja[drugi] = "</a>";
				 //				statusDiv.innerHTML += "Provjereno!" + 'pos: ' + position + ', len: ' + len + 'drugi: ' + drugi;
				rbr_greske++;  //h
	    		}
		}
		polozaji.sort(sortPositionNumber);
		div.value += polozaji.toString();

		var offset = 0;
		for (var x in polozaji) {
			totalLength = oldText.length;
			indeks = polozaji[x]; 
			var umetak = ubacivanja[indeks];
//			statusDiv.innerHTML += "<br>indeks: " + indeks + ", umetak=" + umetak + "<br>";
			popravniIndeks = parseInt(indeks) + parseInt(offset);
			var prvi = oldText.substr(0, popravniIndeks);
			var drugi = oldText.substr(popravniIndeks,totalLength);
			oldText = prvi + umetak + drugi; 
			offset += oldText.length - prvi.length - drugi.length;

		}
		
		ispravak.innerHTML = oldText.replace(/\n/g, "<br>");   //h
//		ispravak.innerHTML = oldText;
		ispravak.innerHTML = preBegin + ispravak.innerHTML + preEnd;
		div.value = preserveText;
		div.style.display = "none";
		ispravak.style.display = "block";

		vrijemeOdziva=(new Date()).getTime(); //h
		var intervalObrade=vrijemeOdziva-vrijemeZahtjeva;   //h
		var serverskoVrijeme=root.getElementsByTagName("time")[0].firstChild.nodeValue;
		serverskoVrijeme=parseInt(serverskoVrijeme.replace(",",".")*1000); 
		statusDiv.innerHTML = "Broj pogrešaka: " + brojGresaka + ", vrijeme obrade: "+intervalObrade+ " ms ("+serverskoVrijeme+" ms)"; //h
		statusDiv.style.backgroundColor = "red";
		statusDiv.style.color = "white";
	   }
	   else {
		statusDiv.innerHTML = "Nema pogrešaka!";
		statusDiv.style.backgroundColor = "lightgreen";
 	   }	
	}
};

var handleFailure = function(o){
	if(o.responseText !== undefined){
		statusDiv.innerHTML = "Neuspjeh!";
	}
};

var callback =
{
  success:handleSuccess,
  failure:handleFailure
};


// http://www.fileformat.info/info/unicode/category/Pd/list.htm

function makeRequest(){	
	var sUrl = "/xml.pl";

// brise HTML tagove

	var re = /(<([^>]+)>)/gi;
	div.value = div.value.replace(re, "")

	if ( div.value != "") {
		var postData = "tekst=" + div.value;
		var formObject = document.getElementById('hacheck'); 
		YAHOO.util.Connect.setForm(formObject); 
		vrijemeZahtjeva=(new Date()).getTime();
		var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback);
		
		statusDiv.style.backgroundColor = "orange";
		statusDiv.style.color = "black";
		statusDiv.innerHTML = "Trenutak!";
	}
	else {
		statusDiv.style.backgroundColor = "red";
		statusDiv.style.color = "white";
		statusDiv.style.fontWeight = "bold";
		statusDiv.innerHTML = "Upišite tekst u prazno polje!";
	}

}

