// WebGim v1.1.3
// (C) 2005 by Barak Shoshani
// Homepage: http://baraksh.co.il/
// Email: baraksh "at" gmail.com

var req, oldText = '', oldForce = '', oldNum = 0;
var numChanged = false, forceChanged = false, forceEnabled = false, doForce = false, switchForce = false;

function calculate() {
	if (!(forceEnabled && !doForce)) {
		var newText = filterHeb(document.getElementById('text').value);
		if (newText == '') {
			if (numChanged) {
				sendRequest(oldNum, '');
				numChanged = false;
			} else if (forceChanged) {
				sendRequest(oldNum, '');
				forceChanged = false;
			}
		} else if (newText != oldText) {
			if (gimatria(newText) != gimatria(oldText)) sendRequest(gimatria(newText), newText);
			oldText = newText;
		} else if (forceChanged && doForce) {
			sendRequest(gimatria(newText), newText);
			forceChanged = false;
		}
	}
	setTimeout('calculate()', 1000);
}

function forceCalculate() {
	if (!(forceEnabled && (newForce == 0))) sendRequest(document.getElementById('value').value, document.getElementById('text').value);
	if (document.getElementById('combi2').checked) document.getElementById('combi2more').style.display = ''
	else  document.getElementById('combi2more').style.display = 'none';
	if (document.getElementById('combi3').checked) document.getElementById('combi3more').style.display = ''
	else  document.getElementById('combi3more').style.display = 'none';
}

function getCursorPos(el) {
	var sel, rng, r2, i = -1;
	if (document.selection && el.createTextRange) {
		sel = document.selection;
		if (sel) {
			rng = el.createTextRange();
			r2 = sel.createRange();
			rng.setEndPoint("EndToStart", r2);
			i = rng.text.length;
		}
	} else i = el.selectionStart;
	return i;
}

function setCursorPos(field, pos) {
	if (field.createTextRange) {
		var r = field.createTextRange();
		r.moveStart('character', pos);
		r.collapse();
		r.select();
	} else field.selectionStart = field.selectionEnd = pos;
}

function filterText() {
	var oldPos = getCursorPos(document.getElementById('text'));
	var oldLen = document.getElementById('text').value.length;
	oldNum = document.getElementById('value').value = gimatria(document.getElementById('text').value = filterHeb(document.getElementById('text').value));
	var newLen = document.getElementById('text').value.length;
	setCursorPos(document.getElementById('text'), oldPos - oldLen + newLen);
	if (oldNum == 0) {
		document.getElementById('results').innerHTML = '<span style="color: #999999">(נא לרשום טקסט או ערך מספרי)</span>';
	}
}

function filterNum() {
	var v = parseInt(document.getElementById('value').value.replace(/^0*/g, ''));
	if (v > 0)
		document.getElementById('value').value = v;
	else
		document.getElementById('value').value = 0;
	var newNum = document.getElementById('value').value;
	if (newNum == 0) {
		document.getElementById('results').innerHTML = '<span style="color: #999999">(נא לרשום טקסט או ערך מספרי)</span>';
		oldNum = 0;
	} else if (newNum != oldNum) {
		oldText = '';
		oldNum = newNum;
		document.getElementById('text').value = '';
		numChanged = true;
	}
}

function filterForce() {
	doForce = true;
	var fgim = document.getElementById('fvalue').innerHTML = gimatria(newForce = document.getElementById('ftext').value = filterHeb(document.getElementById('ftext').value));
	if (fgim == 0) {
		document.getElementById('results').innerHTML = '<span style="color: #999999">(נא לרשום את הביטוי המבוקש)</span>'
		doForce = false;
	}
	if (newForce != oldForce) {
		if (gimatria(newForce) != gimatria(oldForce)) forceChanged = true;
		oldForce = newForce;
	}
	if (fgim > oldNum) {
		switchForce = true;
	} else if (fgim == oldNum) {
		document.getElementById('results').innerHTML = '<span style="color: #999999">(על הערכים להיות שונים זה מזה)</span>';
		doForce = false;
	} else {
		switchForce = false;
	}
}

function gimatria(text) {
	var value = 0;
	for (i = 0; i < text.length; i++) {
		var ascii = text.charCodeAt(i);
		if (ascii >= 1488 && ascii <= 1497) value += ascii - 1487; // א עד י
		if (ascii >= 1498 && ascii <= 1499) value += 20; // כ, ך
		if (ascii == 1500) value += 30; // ל
		if (ascii >= 1501 && ascii <= 1502) value += 40; // מ, ם
		if (ascii >= 1503 && ascii <= 1504) value += 50; // נ, ן
		if (ascii >= 1505 && ascii <= 1506) value += 10 * (ascii - 1499); // ס, ע
		if (ascii >= 1507 && ascii <= 1508) value += 80; // פ, ף
		if (ascii >= 1509 && ascii <= 1510) value += 90; // צ, ץ
		if (ascii >= 1511 && ascii <= 1514) value += 100 * (ascii - 1510); // ק, ר, ש, ת
	}
	return value;
}

function filterHeb(text) {
	var newtext = '';
	var oldascii = 0;
	for (i = 0; i < text.length; i++) {

		var ascii = text.charCodeAt(i);
		if (ascii >= 1488 && ascii <= 1514) newtext += String.fromCharCode(ascii);
		else if ((ascii == 32 || ascii == 34 || ascii == 39 || ascii == 45) && ascii != oldascii) {
			newtext += String.fromCharCode(ascii);
		}
		var oldascii = ascii;
	}
	return newtext;
}

function encodeHeb(text) {
	var newtext = '';
	for (i = 0; i < text.length; i++) {
		var ascii = text.charCodeAt(i);
		if (ascii >= 1488 && ascii <= 1514) newtext += String.fromCharCode(ascii - 1391);
		if (ascii == 32 || ascii == 34 || ascii == 39 || ascii == 45) newtext += String.fromCharCode(ascii);
	}
	return newtext;
}

function newRequest() {
	try {
		req = new ActiveXObject("Msxml2.XMLHTTP");
	} catch(e) {
		try	{
			req = new ActiveXObject("Microsoft.XMLHTTP");
		} catch(er) {
			req = null;
		}
	}
	if (!req && typeof XMLHttpRequest != "undefined")
		req = new XMLHttpRequest();

	return req;
}

function sendRequest(num, text) {
	document.getElementById('results').innerHTML = '<span style="color: #999999">(שולח, נא להמתין...)</span>';
	text = encodeHeb(text);
	var ieBypass = '';
	var force = '';
	if (forceEnabled) {
		force = encodeHeb(document.getElementById('ftext').value);
		var opts = switchForce ? 's' : 'f';
	} else {
		var opts = 'n';
		if (document.getElementById('multi').checked) opts = 'm';
		if (document.getElementById('div').checked) opts = 'd';
		if (document.getElementById('bible').checked) opts = 'b';
		if (document.getElementById('combi2').checked) {
			opts = 'c2';
			ieBypass = '&r=' + Math.random();
		}
		if (document.getElementById('combi3').checked) {
			opts = 'c3';
			ieBypass = '&r=' + Math.random();
		}
	}

	var req = newRequest();
	req.onreadystatechange = processReply;
	req.open('GET', 'gimatria.php?n=' + num + '&w=' + text + '&o=' + opts + '&f=' + force + ieBypass, true);
	req.send(null);
}

function processReply() {
	if (req.readyState == 4) {
		if (req.status == 200) {
			if(req.responseText == "")
				document.getElementById('results').innerHTML = '<span style="color: #999999">(אין התאמות)</span>';
			else
				document.getElementById('results').innerHTML = req.responseText;
		} else {
			document.getElementById('results').innerHTML = 'נתקלתי בבעיה: ' + req.statusText;
		}
	}
}

function getComments(start) {
	document.getElementById('comments').innerHTML = '<span style="color: #999999">(טוען תגובות...)</span>';
	var ieBypass = '&r=' + Math.random();
	var req = newRequest();
	req.onreadystatechange = displayComments;
	req.open('GET', 'comments.php?m=get&s=' + start + ieBypass, true);
	req.send(null);
}

function displayComments() {
	if (req.readyState == 4) {
		if (req.status == 200) {
			if(req.responseText == "")
				document.getElementById('comments').innerHTML = '<span style="color: #999999">(אין תגובות)</span>';
			else
				document.getElementById('comments').innerHTML = req.responseText;
		} else {
			document.getElementById('comments').innerHTML = 'נתקלתי בבעיה: ' + req.statusText;
		}
	}
}

function sendComment() {
	dontsend = false;
	var author = document.getElementById('author').value;
	if (author.length < 2) {
		document.getElementById('commentrsp').innerHTML = 'נא לרשום שם.';
		dontsend = true;
	}
	var content = document.getElementById('content').value;
	if (content.length < 3) {
		document.getElementById('commentrsp').innerHTML = 'נא לרשום תוכן לתגובה.';
		dontsend = true;
	}
	if (!dontsend) {
		show('commentlnk');
		hide('commentfrm');
		document.getElementById('commentrsp').innerHTML = '(שולח, נא להמתין...)';
		var req = newRequest();
		req.open("POST", "comments.php?m=add", true);
		req.onreadystatechange = processComment;
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		queryString = 'a=' + encodeURIComponent(escape(author)) + '&c=' + encodeURIComponent(escape(content));
		req.setRequestHeader("Content-Length", queryString.length);
		req.send(queryString);
	}
}

function processComment() {
	if (req.readyState == 4) {
		if (req.status == 200) {
			document.getElementById('commentrsp').innerHTML = req.responseText;
			getComments(0);
		} else {
			document.getElementById('commentrsp').innerHTML = 'נתקלתי בבעיה: ' + req.statusText;
		}
	}
}

function showHideForce() {
	if (document.getElementById('force').checked) {
		document.getElementById('forcearea').style.display = '';
		document.getElementById('optsarea').style.display = 'none';
		document.getElementById('dots').innerHTML = ':';
		forceEnabled = true;
	} else {
		document.getElementById('forcearea').style.display = 'none';
		document.getElementById('optsarea').style.display = '';
		document.getElementById('dots').innerHTML = '...';
		forceEnabled = false;
	}
}

function prepareForm() {
	document.getElementById('commentrsp').innerHTML = '';
	hide('commentlnk');
	document.getElementById('content').value = '';
	show('commentfrm');
	document.getElementById('author').focus();
}

function showHide(id) {
	document.getElementById(id).style.display = document.getElementById(id).style.display ? '' : 'none';
}

function show(id) {
	document.getElementById(id).style.display = '';
}

function hide(id) {
	document.getElementById(id).style.display = 'none';
}