var searchTerms = [];
var originalContent = "";
var originalTitle = "";

//	incarca pagina din campul de URL
function loadPage() {
	var urlField = document.getElementById('pageURL');
	getPage(urlField.value, "searchPage");
	//document.getElementById('searchPage').innerHTML = urlField.value;
	return false;
}

//	adauga un termen de cautare
function addSearchTerm() {
	var searchTermField = document.getElementById('searchTerm');
	var fraza = document.getElementById('searchTypePhrase');
	var cuvant = document.getElementById('searchTypeWord');
	
	var addTerms = [];
	
	if (cuvant.checked == true) {
		//	pentru Cuvinte se adauga toti termenii
		addTerms = searchTermField.value.split(/[\s]+/);
	} else if (fraza.checked == true) {
		//	pentru Fraza se adauga un termen cu toate cuvintele
		addTerms[addTerms.length] = searchTermField.value;
	}
	
	
	//	termenii noi se cauta in termenii curenti (ca sa nu existe duplicate)
	for (var j = 0; j < addTerms.length; j++) {
		var found = false;
		for (var i = 0; i < searchTerms.length; i++) {
			if (searchTerms[i] == addTerms[j]) {
				found = true;
				break;
			}
		}
		if (!found) searchTerms[searchTerms.length] = addTerms[j];
		else continue;
	}
	
	//	se updateaza lista, si se reface cautarea
	return updateSearchTerms();
}

//	scoate un termen de cautare.
function removeSearchTerm(index) {
	for (var i = 0; i < index && i < searchTerms.length; i++);
	for (var j = i; j < searchTerms.length - 1; j++) {
		searchTerms[i] = searchTerms[i + 1];
	}
	
	searchTerms.length--;
	return updateSearchTerms();
} 

//	face update-ul pentru lista cu termenii de cautare si reface colorarea
function updateSearchTerms() {
	var html = "";
	
	//	genereaza lista
	html += "<ul>";
	for (var i = 0; i < searchTerms.length; i++) {
		html += '<li><span class = "searchTermColor' + i % 6 + '">' + searchTerms[i] + '</span> <a href = "#" onClick = "removeSearchTerm(' + i + ')">x</a></li>';
	}
	html += "</ul>";
	
	document.getElementById("searchTermList").innerHTML = html;
	//	reface colorarea
	highlight();
	return true;
}

//	creeaza un obiect HTTPRequest si face o cerere catre 
function getPage(url, target) {
  document.getElementById(target).innerHTML = ' Getting page..';
  if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  if (req != undefined) {
    req.onreadystatechange = function() {requestDone(url, target);};
    req.open("GET", url, true);
    req.send("");
  }
}  


//	
function highlight() {
	var continut = document.getElementById("searchPage");
	var titlu = document.getElementById("searchPageTitle");
	var strContinut = originalContent;
	var strTitlu = originalTitle;
	
	for (var i = 0; i < searchTerms.length; i++) {
		strContinut = strContinut.replace(new RegExp("\\b("+ searchTerms[i] + ")\\b", "gi"), "<span class = 'searchTermColor" + i % 6 + "'>" + "$1" + "</span>");
		strTitlu = strTitlu.replace(new RegExp("\\b("+ searchTerms[i] + ")\\b", "gi"), "<span class = 'searchTermColor" + i % 6 + "'>" + "$1" + "</span>");
	}	
	
	if (strTitlu == "") {
		strTitlu = "No title";
	}
	
	continut.innerHTML = strContinut;
	titlu.innerHTML = strTitlu;
}

//	functie asociata evenimentului de terminare a unei cereri
function requestDone(url, target) {
  if (req.readyState == 4) { // only if req is "loaded"
    if (req.status == 200) { // only if "OK"
      	var newContent = req.responseText;
      	
      	//	se scot toate newline-urile - probleme cu string cu newline la cautare cu regexp, nu afecteaza modul in care arata
      	newContent = newContent.replace(/[\r\n]/g, "");
      	//	se extrage body-ul
      	var expr = new RegExp("<body[^>]*>(.*)<\/body>", "ig");
      	//	se extrage titlul
      	var exprTitlu = new RegExp("<title[^>]*>(.*)<\/title>", "ig");

      	var matchTitlu = exprTitlu.exec(newContent);
      	var match = expr.exec(newContent);
 
		originalContent = match != null ? match[1] : "Error getting body of page. Is the page correctly formatted?";
		originalTitle = matchTitlu != null ? matchTitlu[1] : "";
		
		//	se elimina taguri care ar impiedica cautare - scopul e sa se vada termenii cautati, nu neaparat sa pastrez cum arata pagina

		tagsToRemove = [];
		tagsToRemove[1] = "strong";
		tagsToRemove[2] = "b";
		tagsToRemove[3] = "i";
		tagsToRemove[4] = "span";
		
		for (var i = 0; i < tagsToRemove.length; i++) {
			var exprStart = new RegExp("<" + tagsToRemove[i] + "[^>\/]*>", "ig");
			var exprEnd = new RegExp("<\/" + tagsToRemove[i] + ">", "ig");
			
			originalContent = originalContent.replace(exprStart, "");
			originalContent = originalContent.replace(exprEnd, "");
		}
		
		highlight();
    } else {
     document.getElementById(target).innerHTML=" Error:\n"+ req.status + "\n" +req.statusText;
    }
  }
}

function noEnter() {
	if (window.event && window.event.keyCode == 13) {
  		return false;
  	}
  	return true;
}

