/*		
*/
/*
	Table of Contents
	1. General Javascript
	2. Utilities
*/

var tSource=null; var clear=1;
/* =Translation Source
-------------------------------------------------*/
function loadTranslateSource(){
	tSource = $('translateSource');
	Event.observe('translateSource', 'click', focusOnSource);
	Event.observe('translateSource', 'keydown', watch_keys, true);
	Event.observe('translateSource', 'keyup', findAccents, true);
	Event.observe('translateSource', 'paste', pasted, false);
	
}
function focusOnSource(){
	if(clear && translatorList.length){
		tSource.value = "";
		clear=0;
	}
	if(isMobile){
		switchTab('translators');
	}
}
function chSrcValue(){
	if(clear){
		if(translatorList.length>0){
			tSource.value=langProf.startTypingSent;
			if(isMobile){
				tSource.value="Just type here, ntmobi will do the rest.";
			}
		}
		else{
			tSource.value=langProf.addTransSent;
			if(isMobile){
				tSource.value="Add a translator below then start typin' here.";
			}
		}
	}
}
function changeSrc(code, lang){
	if($(setSource+'-srcButton')){
		$(setSource+'-srcButton').className= $(setSource+'-srcButton').className.replace("on", "");
	}
	$(code+'-srcButton').className += " on";
	setSource = code;
	if(code=="auto"){
		lang=lang.toLowerCase();
	}
	$('sourceLanguage').innerHTML = lang;
	if(!clear){
		translate();
	}
}
function fixWhiteSpace(){
	/*var start = tSource.selectionStart; 
	var end = tSource.selectionEnd;
	tSource.value = tSource.value.replace(/[ \t\r\n]+/g, " ");
	tSource.selectionStart=start; 
	tSource.selectionEnd=end;*/
}
function resetSource(){
	if( (tSource.value == "" || tSource.value == " ") ){
		clear=1;
		chSrcValue();
	}
}
function addTransImg_over(){
	if(!areTranslators() && !isMobile){
		$('addTransAlert').className="addTransAlertOver";
	}
}
function addTransImg_out(){
	if(!areTranslators() && !isMobile){
		$('addTransAlert').className="addTransAlertOut";
	}
}
function chAddTransImg(){
	if(!isMobile){
		if(translatorList.length>0){
			$('addTransAlert').className="addTransAlertOff";
		}
		else{
			$('addTransAlert').className="addTransAlertOn";
			$('addTransAlert').className="addTransAlertOut";
		}
	}
}

/* =Translator Handling
-------------------------------------------------*/
function toggleTranslator(code, lang){
	if( ( $(code+'-tButton').className=="on" ) ){
		$(code+'-tButton').className="";
		closeTranslator(code);
	}
	else{
		$(code+'-tButton').className="on";
		createTranslator(code, lang);
	}
	chSrcValue();
	chAddTransImg();
}
function createTranslator(code, lang){
	if(!lang){
		lang = getLangName(code);
	}
	translatorList.push(new Translator(code));
	$('translators').innerHTML += "<div class=\"aTranslator\" id=\""+code+"-trans\"><div class=\"language\">"+lang+"</div><div class=\"translatedText\" id=\""+code+"-transtxt\">&nbsp;</div></div>";
	saveTranslators();
	doATranslation(code);
}
function closeTranslator(code){
	$('translators').removeChild($(code+"-trans"));
	translatorList[getSerialFromLang(code)]=null;
	translatorList=translatorList.compact();
	saveTranslators();
}
function saveTranslators(){
	var transCodes=[];
	for(var t=0; t<translatorList.length; t++){
		transCodes[t] = translatorList[t].$lang();
	}
	createCookie("translators", transCodes, 30);
}
function areTranslators(){
	if(translatorList.length>0){
		return true;
	}
	else{
		return false;
	}
}

/* =Translating
-------------------------------------------------*/
function doTranslations(){
	$('message').innerHTML="";
	for(var t=0; t<translatorList.length; t++){
		lang = translatorList[t].$lang();
		doATranslation(lang);
	}
}
function waitThenTranslate(then){
	now = tSource.value.length;
	if(then>=(now-1)){
		translate();
	}
}
function makePassableCode(code){
	var pCode="";
	var ps=code.length;
	for(var p=0; p<ps; p++){
		pCode+=code.charCodeAt(p);
		if(p<(ps-1)){
			pCode+="*";
		}
	}
	pCode+="|";
	return pCode;
}
function parseResult(result){
	var endOfCode =  result.indexOf('|');
	var rawCode = result.substring(0, endOfCode);
	var codeApart = rawCode.split("*");
	var cleanResult = result.substring((endOfCode+1));
	var cleanCode = "";
	for(var r=0; r<codeApart.length; r++){
		cleanCode += String.fromCharCode(codeApart[r]);
	}
	cleanCode = cleanCode.toLowerCase();
	return new Array(cleanCode, cleanResult);
}
/* =Key Handling
-------------------------------------------------*/
function watch_keys(e){
	var key  = (window.event) ?    // MSIE or Firefox?
                event.keyCode : e.keyCode;
				key = 1*key;
    var esc = (window.event) ?   
                27 : e.DOM_VK_ESCAPE; // MSIE : Firefox
	var blurred = 0;	
	closeNews();
	if(!translatorList.length){
		e.stopPropagation();
		e.preventDefault();
		return false;
	}
	if(clear){
		switch(key){
			case 16: case 17: case 18: case 19: case 20: case 27: case 35: case 36: case 37: case 38: case 39: case 40: case 45: case 46: tSource.value=''; break;
			default:
				tSource.value=String.fromCharCode(key);
			break;
		}
		clear=false;
	}
	switch(key){
		case 9:
			resetSource();
		break;

		case 13:
			translate();
			e.stopPropagation();
			e.preventDefault();
			return false;
		break;
		
		case 32:
			setTimeout('fixWhiteSpace()', 100);
			translate();
		break;
		
		case 27:
			setTimeout(function(){tSource.value="";}, 100);		
		break;
	
		default:
			setTimeout("waitThenTranslate('"+tSource.value.length+"')", 750);
		break;
	}
}
function pasted(){
	closeNews();
	setTimeout('fixWhiteSpace()', 100);
	setTimeout('translate()', 850);
}
function findAccents(){
	var accents = {
		"[`A":192,
		"['a":224, 
		"[`E":200,
		"[`e":232,
		"[`I":204,
		"[`i":236,
		"[`O":210,
		"[`o":242,
		"[`U":217,
		"[`u":249,
		"['A":193,
		"['a":225, 
		"['E":201,
		"['e":233,
		"['I":205,
		"['i":237,
		"['O":211,
		"['o":243,
		"['U":218,
		"['u":250,
		"['Y":221,
		"['y":253,
		"[^A":194,
		"[^a":226, 
		"[^E":202,
		"[^e":234,
		"[^I":206,
		"[^i":238,
		"[^O":212,
		"[^o":244,
		"[^U":219,
		"[^u":251,
		"[~A":195,
		"[~a":227, 
		"[~N":209,
		"[~n":241,
		"[~O":213,
		"[~o":245,
		"[:A":196,
		"[:a":228, 
		"[:E":203,
		"[:e":235,
		"[:I":202,
		"[:i":239,
		"[:O":214,
		"[:o":246,
		"[:U":220,
		"[:u":252,
		"[:Y":159,
		"[:y":255,
		"[!]":161,
		"[?]":191,
		"[C]":199,
		"[c]":231,
		"[OE":140,
		"[oe":156,
		"[ss":223,
		"[O]":216,
		"[o]":248,
		"[A]":197,
		"[a]":229,
		"[AE":198,
		"[ae":230,
		"[P]":222,
		"[p]":254,
		"[D]":208,
		"[d]":240,
		"[S]":138, 
		"[s]":154,
		"[Z]":142,
		"[z]":158
	};
	var cPos = getCaretPosition(tSource);
	if(cPos-3>-1){
		var recent = tSource.value.substr(cPos-3, 4);
		var foundAccent=false;
		var rL = recent.length;
		for(var a in accents){
			if(recent.indexOf(a)>-1){
				recent = recent.replace(a, String.fromCharCode(accents[a]));
				foundAccent=true;
			}
		}
		if(foundAccent){
			tSource.value = tSource.value.substr(0, cPos-3) + recent.substr(0, recent.length) + tSource.value.substr(cPos-3+rL) ;
		}
	}
}
function setCaretPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);
	if(elem != null) {
		if(elem.createTextRange) {
			var range = elem.createTextRange();
			range.move('character', caretPos);
			range.select();
		}
		else {
			if(elem.selectionStart) {
				elem.setSelectionRange(caretPos, caretPos);
						elem.focus();
							// Workaround for FF overflow no scroll problem
						// Trigger a "space" keypress.
						var evt = document.createEvent("KeyboardEvent");
						evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 0, 32);
						elem.dispatchEvent(evt);
						// Trigger a "backspace" keypress.
						evt = document.createEvent("KeyboardEvent");
						evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 8, 0);
						elem.dispatchEvent(evt);
			}
			else
				elem.focus();
		}
	}
}

/* =Content Handling
-------------------------------------------------*/
var newsOn = true; var newsVisChanging=false;
function toggleNews(){
	if(newsOn){
		closeNews();
		createCookie(newsTitle.replace(/ /g, "-"), "1", 365);
	}
	else{
		showNews();
	}
}
function closeNews(){
	if(newsOn && !newsVisChanging){
		newsVisChanging=true;
		$('newsVisibility').innerHTML = "Show";
		new Effect.BlindUp($('newsContent'), {duration:.5, afterFinish:function(){newsVisChanging=false;}});
		newsOn=false;
	}
}
function showNews(){
	if(!newsOn && !newsVisChanging){
		newsVisChanging=true;
		$('newsVisibility').innerHTML = "Hide";
		new Effect.BlindDown($('newsContent'), {duration:.5, afterFinish:function(){newsVisChanging=false;}});
		newsOn=true;
	}
}

/* =Mobile Specific
-------------------------------------------------*/
var activeTab='translators';
function switchTab(name){
	$(activeTab+'-tab').className='tabOff';
	makeInvisible($(activeTab));
	activeTab=name;
	$(activeTab+'-tab').className='tabOn';
	makeVisible($(activeTab));
}

/* =Utilities
-------------------------------------------------*/
function collectionToArray(col){
	a = new Array();
	for (i=0; i<col.length; i++)
	a[a.length] = col[i];
	return a;
}
function getElementsByClass(name){
	elm = document.getElementsByTagName('div');
	var j=0;
	var cl = new Array()
	for(i=0;i<d.length;i++){
		if(d[i].className == name){
			cl[j] = d[i];
			j++;
		}
		return cl;
	}
}
function toggleVisibility(elm){
	if(elm.className.indexOf('invisible')>-1){
		makeVisible(elm);
	}
	else{
		makeInvisible(elm);
	}
}
function makeInvisible(elm){
	var curClass = elm.className;
	var newClass = curClass;
	if(curClass.indexOf('invisible')<0){
		newClass = curClass.replace("visible", "invisible");
		if(newClass.indexOf('invisible')<0){
			newClass +=" invisible";
		}
	}
	elm.className=newClass;
}
function makeVisible(elm){
	var curClass = elm.className;
	var newClass = curClass.replace("invisible", "visible");
	if(newClass.indexOf('visible')<0){
		newClass +=" visible";
	}
	elm.className=newClass;
}
function addSlashes(str) {
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\0/g,'\\0');
	return str;
}
function stripSlashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\\\/g,'\\');
	str=str.replace(/\\0/g,'\0');
	return str;
}
function getLangName(code){
	var langs ={
		"ar":"Arabic", 
		"bg":"Bulgarian", 
		"ca":"Catalan", 
		"zh":"Chinese", 
		"hr":"Croatian", 
		"cs":"Czech", 
		"da":"Danish", 
		"nl":"Dutch", 
		"en":"English", 
		"tl":"Filipino", 
		"fi":"Finnish", 
		"fr":"French", 
		"de":"German", 
		"el":"Greek", 
		"iw":"Hebrew", 
		"hi":"Hindi", 
		"id":"Indonesian", 
		"it":"Italian", 
		"ja":"Japanese", 
		"ko":"Korean", 
		"lv":"Latvian", 
		"lt":"Lithuanian", 
		"no":"Norwegian", 
		"pl":"Polish", 
		"pt":"Portuguese", 
		"ro":"Romanian", 
		"ru":"Russian", 
		"sr":"Serbian", 
		"sk":"Slovak", 
		"sl":"Slovenian", 
		"es":"Spanish", 
		"sv":"Swedish", 
		"uk":"Ukrainian", 
		"vi":"Vietnamese"
	};
	return langs[code];
};
function fixDrop() {
	if (document.all&&document.getElementById) {
		navRoot = document.getElementById("trul");
		for (i=0; i<navRoot.childNodes.length; i++) {
			node = navRoot.childNodes[i];
			if (node.nodeName=="LI") {
				node.onmouseover=function() {
					$('intrul').style.display="block";
					$('intrul2').style.display="block";
				}
				node.onmouseout=function() {
					$('intrul').style.display="none";
					$('intrul2').style.display="none";
				}
			}
		}
		navRoot = document.getElementById("trul2");
		for (i=0; i<navRoot.childNodes.length; i++) {
			node = navRoot.childNodes[i];
			if (node.nodeName=="LI") {
				node.onmouseover=function() {
					$('intrul3').style.display="block";
					$('intrul4').style.display="block";
				}
				node.onmouseout=function() {
					$('intrul3').style.display="none";
					$('intrul4').style.display="none";
				}
			}
		}
	}
}
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
	do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
return {x:curleft,y:curtop};
	}
}
function getCaretPosition (oField) {

// Initialize
var iCaretPos = 0;

// IE Support
if (document.selection) {

// Set focus on the element
oField.focus ();

// To get cursor position, get empty selection range
var oSel = document.selection.createRange ();

// Move selection start to 0 position
oSel.moveStart ('character', -oField.value.length);

// The caret position is selection length
iCaretPos = oSel.text.length;
}

// Firefox support
else if (oField.selectionStart || oField.selectionStart == '0')
iCaretPos = oField.selectionStart;

// Return results
return (iCaretPos);
}

/* =Cookie Handling
-------------------------------------------------*/
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	value = escape(Object.toJSON(value));
	document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return (unescape(c.substring(nameEQ.length,c.length))).evalJSON();
	}
	return null;
}
function eraseCookie(name) {
	createCookie(name,"",-1);
}

