/***************************************************************************
/*
/* Encode and decode Hebrew text using Latin alphabet v1.0
/* 
/* Written by Alex Sirota (alex@elbrus.com), May 2004
/*
/* Copyright Alex Sirota 2004, all rights reserved
/*
/* Please retain this copyright notice when using this code elsewhere.
/*
/***************************************************************************/

function GetElem(elem) {
	if (document.layers) {
		return document.layers[elem];
	} else if (document.all) {
		return document.all[elem];
	}
	else if (document.getElementById) {
		return document.getElementById(elem);
	} else {
		return null;
	}
}


function Hex(pLngDecimal) {
    var digits = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F')
    if (pLngDecimal < digits.length) {
        return(digits[pLngDecimal])
    }
    var prefix = '' + Math.floor(pLngDecimal / digits.length)
    var suffix = pLngDecimal - prefix * digits.length
    if (prefix > digits.length) {
        return(Hex(prefix) + digits[suffix])
    }
    return(digits[prefix] + digits[suffix])
}

eng2heb = new Array(256);
for(i=0; i < 256; i++) {
	eng2heb[i] = Hex(i);
}	
eng2heb[65] = '05D0';
eng2heb[66] = '05D1';
eng2heb[67] = '05E6';
eng2heb[68] = '05D3';
eng2heb[69] = '05E2';
eng2heb[70] = '05E9'; 
eng2heb[71] = '05D2';
eng2heb[72] = '05D4';
eng2heb[73] = '05D9';
eng2heb[74] = '05D8';
eng2heb[75] = '05DB';
eng2heb[76] = '05DC';
eng2heb[77] = '05DE';
eng2heb[78] = '05E0';
//eng2heb[79] =
eng2heb[80] = '05E4';
eng2heb[81] = '05E7';
eng2heb[82] = '05E8';
eng2heb[83] = '05E1';
eng2heb[84] = '05EA';
eng2heb[85] = '05F4'; // "
//eng2heb[86] = 
eng2heb[87] = '05D5';
eng2heb[88] = '05D7';
//eng2heb[89] 
eng2heb[90] = '05D6';

heb2eng = new Array(1524);
for(i=0; i < 1524; i++) {
	heb2eng[i] = Hex(i);
}	
heb2eng[0x5d0] = '65';
heb2eng[0x5D1] = '66';
heb2eng[0x5E5] = '67'; // zadik sofit
heb2eng[0x5E6] = '67';
heb2eng[0x5D3] = '68';
heb2eng[0x5E2] = '69';
heb2eng[0x5E9] = '70'; 
heb2eng[0x5D2] = '71';
heb2eng[0x5D4] = '72';
heb2eng[0x5D9] = '73';
heb2eng[0x5D8] = '74';
heb2eng[0x5DA] = '75'; // caf sofit
heb2eng[0x5DB] = '75';
heb2eng[0x5DC] = '76';
heb2eng[0x5DD] = '77'; // mem sofit
heb2eng[0x5DE] = '77';
heb2eng[0x5DF] = '78'; // nun sofit
heb2eng[0x5E0] = '78';
//heb2eng[] = 79
heb2eng[0x5E3] = '80'; // pei sofit
heb2eng[0x5E4] = '80';
heb2eng[0x5E7] = '81';
heb2eng[0x5E8] = '82';
heb2eng[0x5E1] = '83';
heb2eng[0x5EA] = '84';
heb2eng[0x5F4] = '85'; // "
//heb2eng[] = 86
heb2eng[0x5D5] = '87';
heb2eng[0x5D7] = '88';
//heb2eng[] = 89
heb2eng[0x5D6] = '90';

function DecodePunctationEng2Heb(str) {
	var outstr = str;
	outstr = outstr.replace(/\bELPS\b/g, "...");
	outstr = outstr.replace(/\bRRB\b/g, ")");
	outstr = outstr.replace(/\bLRB\b/g, "(");
	outstr = outstr.replace(/\bEXCL\b/g, "!");
	outstr = outstr.replace(/\bQM\b/g, "?");
	outstr = outstr.replace(/\bQUOT\b/g, "\"");
	outstr = outstr.replace(/\bDASH\b/g, "-");
	outstr = outstr.replace(/\bCM\b/g, ",");
	outstr = outstr.replace(/\bDOT\b/g, ".");
	outstr = outstr.replace(/\bSCLN\b/g, ";");
	outstr = outstr.replace(/\bCLN\b/g, ":");
	return outstr;
}

function DecodePunctationHeb2Eng(str) {
	var outstr = str;
	outstr = outstr.replace(/\.\.\./g, " ELPS ");
	outstr = outstr.replace(/\)/g, " RRB ");
	outstr = outstr.replace(/\(/g, " LRB ");
	outstr = outstr.replace(/\!/g, " EXCL ");
	outstr = outstr.replace(/\?/g, " QM ");
	outstr = outstr.replace(/\"/g, " QUOT ");
	outstr = outstr.replace(/\-/g, " DASH ");
	outstr = outstr.replace(/\,/g, " CM ");
	outstr = outstr.replace(/\./g, " DOT ");
	outstr = outstr.replace(/\;/g, " SCLN ");
	outstr = outstr.replace(/\:/g, " CLN ");
	return outstr;
}


function TransformEng2Heb(str) {
	var outstr = '';
	var str = str.toUpperCase();
	str = DecodePunctationEng2Heb(str);
	for(i=0; i < str.length; i++) {
		var charCode = str.charCodeAt(i);
		if (charCode < 255) {
			if (charCode != 13) {
				outstr += '&#x' + eng2heb[charCode] + ';';
			} else {
				outstr += "<BR>";
			}
		}
        }
	return outstr;
}

function TransformHeb2Eng(str) {
	var outstr = '';
	var str = DecodePunctationHeb2Eng(str);
	for(i=0; i < str.length; i++) {
		var charCode = str.charCodeAt(i);
		if (((charCode >= 0x5d0)) && (charCode <= 0x5f4)) {
			outstr += '&#' + heb2eng[charCode] + ';';
		} else {
			outstr += str.charAt(i);
		}
        }
	return outstr;
}

function IsHebrew(str) {
	for(i=0; i < str.length; i++) {
		var charCode = str.charCodeAt(i);
		if (((charCode >= 0x5d0)) && (charCode <= 0x5f4)) {
			return true;
		}
	}
	return false;
}

function Transform(str, obj) {
	var str = GetElem('inputText').value;
	var obj = GetElem('outputText');
	if (IsHebrew(str)) {
		obj.style.direction = 'ltr';
		obj.innerHTML = TransformHeb2Eng(str);
	} else {
		obj.style.direction = 'rtl';
		obj.innerHTML = TransformEng2Heb(str);
	}
}

bw_colors = false;
function toggleColors() {
	var input = GetElem('inputText');
	var output = GetElem('outputText');
	var anchor = GetElem('toggleA');
	if (!bw_colors) {
		bw_colors = true;
		input.className = 'bw';
		output.className = 'bw';
		anchor.innerHTML = 'Reset colors';
	        SetCookie('nlp_bw', 1, 365*10);
	} else {
		bw_colors = false;
		input.className = 'normal';
		output.className = 'normal';
		anchor.innerHTML = 'More contrast';
	        SetCookie('nlp_bw', 1, -1);
        }
}

function init() {
	if (GetCookie('nlp_bw') != '') {
		toggleColors();
	}
	GetElem('toggleA').style.visibility = 'visible';
}

SafeAddOnload(init);

