/*========================================================================*\
 *  LMGT4U :: Javascript                                                  *
 *                                                                        *
 *  Copyright is owned by Ghost Bear (Zanin Andrey) as an original author *
 *  Copyright is shared with Simon Perlaki, allowing him to use this      *
 *  software in any way                                                   *
 *                                                                        *
 *  Contact me for details <ghost.bear.ru@gmail.com>, http://excesto.com/ *
\*========================================================================*/

//Generic values
var isIE = 0;
var isOpera = 0;
var isFirefox =0;
switch(navigator.appName) {
	case "Microsoft Internet Explorer": isIE = 1; break;
	case "Opera":                       isOpera = 1; break;
	case "Netscape":                    isFirefox = 1; break;
}
var thisSite = "http://"+document.domain;
darr = document.domain.split(".");
var domSite = darr[darr.length-2]+"."+darr[darr.length-1];
var baseSite = "http://"+domSite;
var isDocumentLoaded = 0;
//$(document).ready(function() {isDocumentLoaded = 1;});

var iShowState = 0;
var iCursorX = 100;
var iCursorY = 100;
var iCursorFloatX = parseFloat(iCursorX);
var iCursorFloatY = parseFloat(iCursorY);
var iCursorTargetX = 0;
var iCursorTargetY = 0;
var iCursorSpeed = 10;
var bCursorMove;
var iSymbolTimeout = 4; //Chars
var iSymbolTimeout2 = 10; //Spaces
var iSymbolTimer = 20; //First timeout
var iSymbolIndex = 0;
var iFinalTimer = 0;
var iFinalTimeout = 60; //Timeout before searching
var iButtonX;
var strMsg1;
var strMsg2;
var strQuery;
var strQueryNow = "";
var bResult = false;

function processShow() {
	if(bCursorMove) {
		dist = Math.round(Math.sqrt(Math.pow(iCursorTargetX - iCursorX, 2) + Math.pow(iCursorTargetY - iCursorY, 2)));
		speed = dist > 80 ? iCursorSpeed : (dist / 80) * iCursorSpeed;
		if(speed < 1) speed = 1;
		mx = ((iCursorTargetX - iCursorX) / dist) * speed;
		my = ((iCursorTargetY - iCursorY) / dist) * speed;
		iCursorFloatX += mx;
		iCursorFloatY += my;
		iCursorX = Math.round(iCursorFloatX);
		iCursorY = Math.round(iCursorFloatY);
		$("#cursor").css({"left": iCursorX, "top": iCursorY});
	}

	switch(iShowState) {
		case 0:
			$("#cursor").css({"display":"block"});
			$("#query").val("");
			$(window).focus();
			iShowState = 1;
			bCursorMove = true;
			$("#message").html(strMsg1);
		break;
		case 1:
			moveCursorTo("query", 20, 18);
			if(dist < 6) {
				$("#query").focus();
				bCursorMove = false;
				iShowState = 2;
			}
		break;
		case 2:
			iSymbolTimer--;
			if(iSymbolTimer < 0) {
				symb = strQuery.substr(iSymbolIndex, 1);
				iSymbolTimer = (symb!=" "?iSymbolTimeout:iSymbolTimeout2);
				strQueryNow += symb;
				iSymbolIndex++;
				$("#query").val(strQueryNow);
			}
			if(iSymbolIndex >= strQuery.length) {
				$("#message").html(strMsg2);
				moveCursorTo("button", iButtonX, 10);
				bCursorMove = true;
				iShowState = 3;
			}
		break;
		case 3:
			moveCursorTo("button", iButtonX, 10);
			if(dist < 6) {
				bCursorMove = false;
				iShowState = 4;
			}
		break;
		case 4:
			if(iFinalTimer == iFinalTimeout - 10) {
				$("#cursor").css({"left": iCursorX, "top": iCursorY+2});
			}
			if(iFinalTimer == iFinalTimeout - 7) {
				$("#cursor").css({"left": iCursorX, "top": iCursorY});
			}
			iFinalTimer++;
			if(iFinalTimer > iFinalTimeout) {
//				if(jQuery.browser.msie) doGo();
//				else $("#search_form").submit();
				$("#search_form").submit();
				iShowState = 5;
			}
		break;
	}
//	$("#debug").html(iShowState);
	setTimeout("processShow()", 20);
}

function moveCursorTo(elid, offsetx, offsety) {
	pos = $("#"+elid).position();
	iCursorTargetX = pos.left + offsetx;
	iCursorTargetY = pos.top + offsety;
}

function createURL(what, tinyurl) {
	query = $("#query").val();
	query = query.replace(/ /g, "+");
	switch(what) {
		case 0:
			lnk = thisSite+"/?q="+query;
		break;
		case 1:
			lnk = thisSite+"/l?q="+query;
		break;
		case 2:
			lnk = thisSite+"/y?q="+query;
		break;
	}
	if(tinyurl) {
		if(!bResult) $("#ajax").css({"display":"block"});
		$.post(thisSite+"/tinyurl", {"url":lnk}, function(answer) {
			showResult(answer);
		});
	} else {
		showResult(lnk);
	}
	return false;
}

function showResult(lnk) {
	if(!bResult) {
		$("#ajax").css({"display":"none"});
		$("#result").fadeIn(800);
		$("#resultgo").fadeIn(800);
		bResult = true;
	}
	$("#result").val(lnk);
	getEl("resultform").action = lnk;
	return false;
}

function doGo() {
//	alert($());
//	retrun false;
/*	if(jQuery.browser.msie && jQuery.browser.version == "6.0") {
		window.location.href = $("#result").val();
		return false;
	}*/
	return true;
}

var aQueryPreloaded;

var iQueryTimer = 0;
var iQueryTimeout = 100; //100 timeout = 1 second
var iQueryState = 0;
var iQueryY = 0; //Default item height - 36px
var iQueryIndex = 0;
var iQueryCount = 10; //Start count. Change this if you changing count inside php script
var bQueryLoading = false;
var iQueryTime;

function processStream() {
	switch(iQueryState) {
		case 0:
			iQueryTimer++;
			if(iQueryTimer == iQueryTimeout) {
				iQueryTimer = 0;
				iQueryState = 1;
				iQueryY = 36;
			}
		break;
		case 1:
			//If less than 5 queries left - request another portion
			if(iQueryCount - iQueryIndex < 5 && !bQueryLoading) {
				bQueryLoading = true;
				$.post(thisSite+"/more-searches", {"time":iQueryTime}, function(answer) {
					iQueryTime = answer.time;
					for(i in answer.queries) {
						aQueryPreloaded[iQueryCount] = answer.queries[i];
						iQueryCount++;
					}
					bQueryLoading = false;
				}, "json");
			}
			//Switch to next query only if index not reached end of list
			if(iQueryCount -1 != iQueryIndex) {
				iQueryIndex++;
				qry = aQueryPreloaded[iQueryIndex];
				str = "<li><a href='/"+(qry["engine"]?qry["e"]:"")+"?q="+qry["q"]+"'>"+qry["q"]+" <img src='img/"+qry["e"]+".gif' alt='' /></li>";
				getEl("searcheslist").innerHTML = str + getEl("searcheslist").innerHTML;
				getEl("latestsearches").scrollTop = iQueryY;
	//			$("#searcheslist").prepend(str);
				iQueryState = 2;
			}
		break;
		case 2:
			if(iQueryY) iQueryY--;
			else {
				iQueryState = 0;
				$(getEl("searcheslist").childNodes[getEl("searcheslist").childNodes.length-1]).remove();
			}
			getEl("latestsearches").scrollTop = iQueryY;
		break;
	}
	setTimeout("processStream();", 10);
//	$("#debug").html("scrollTop:"+getEl("latestsearches").scrollTop);
}

//==========================
//==========================
//==========================

function getEl(elId) {
	return document.getElementById(elId);
}

function trim (str) {
	var str = str.replace(/^\s\s*/, ''),
	ws = /\s/,
	i = str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
}

function debugParams(obj, retr) {
	var pstr = "";

	for (i in obj) {
		pstr += "event." + i + "=" + obj[i] + "\n";
	}
	if(retr == -1) document.write(pstr);
	if(!retr) alert(pstr);
	else return pstr;
}

function makeInput(name, value) {
	return "<input type='hidden' value='"+value+"' id='"+name+"' name='"+name+"' />";
}