/***************************************************************************
 *
 * Spell Checker
 *
 * Author: Logeen [www.kurshtml.boo.pl]
 *
 ***************************************************************************/


var ajax = false;
try {
	ajax = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {
	try {
		ajax = new XMLHttpRequest();
	} catch (e) {}
}

var spelling_el = null;

function spelling_escape(word) {
	for (var i = 0, word2 = '', length_ = word.length; i < length_; i++) {	
		switch (word.charAt(i)) {
			case '%': word2 += ' '; break;
			case '¡': word2 += '%A1'; break;
			case 'Æ': word2 += '%C6'; break;
			case 'Ê': word2 += '%CA'; break;
			case '£': word2 += '%A3'; break;
			case 'Ñ': word2 += '%D1'; break;
			case 'Ó': word2 += '%D3'; break;
			case '¦': word2 += '%A6'; break;
			case '¬': word2 += '%AC'; break;
			case '¯': word2 += '%AF'; break;
			case '±': word2 += '%B1'; break;
			case 'æ': word2 += '%E6'; break;
			case 'ê': word2 += '%EA'; break;
			case '³': word2 += '%B3'; break;
			case 'ñ': word2 += '%F1'; break;
			case 'ó': word2 += '%F3'; break;
			case '¶': word2 += '%B6'; break;
			case '¼': word2 += '%BC'; break;
			case '¿': word2 += '%BF'; break;
			default: word2 += word.charAt(i); break;
		}
	}
	return word2.replace(/[^a-zA-Z0-9%]+/g, ' ');
}

function spelling_add(word) {
	if (spelling_lang["Do you really want to add this word to distionary?"] && !window.confirm(spelling_lang["Do you really want to add this word to distionary?"] + "\n\n" + word)) return 0;
	if (!word) return 0;
	if (!ajax) return false;
	ajax.open('POST', 'spelling_add.php', false);
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajax.send('w=' + spelling_escape(word));
	return ajax.responseText == 1 ? true : false;
}

function spelling_correct(word) {
	var error = spelling_el.childNodes.item(0).nodeValue;
	if (word) {
		var reg = new RegExp('([^a-zA-Z±æê³ñó¶¼¿¡ÆÊ£ÑÓ¦¬¯])' + error + '([^a-zA-Z±æê³ñó¶¼¿¡ÆÊ£ÑÓ¦¬¯])', 'g');
		var txt = (' '+document.forms['post'].elements['message'].value+' ').replace(reg, "$1" + word + "$2").replace(reg, "$1" + word + "$2");
		document.forms['post'].elements['message'].value = txt.substr(1, txt.length-2);
		
		var correct = true;
		if (ajax) {
			ajax.open('GET', 'spelling.php?w=' + spelling_escape(word), false);
			ajax.send('');
			if (ajax.responseText != 1) correct = false;
		}
		
		for (var i = 0, length_ = spelling_el.parentNode.getElementsByTagName('span').length; i < length_; i++) {
			if (spelling_el.parentNode.getElementsByTagName('span').item(i).childNodes.item(0).nodeValue == error) {
				spelling_el.parentNode.getElementsByTagName('span').item(i).childNodes.item(0).nodeValue = word;
				spelling_el.parentNode.getElementsByTagName('span').item(i).className = correct ? 'spelling_correct' : 'spelling_incorrect';
			}
		}
	}
}

function spelling(el, evnt) {
	spelling_el = el;
	var error = spelling_el.childNodes.item(0).nodeValue;
	
	var x = evnt.pageX;
	var y = evnt.pageY;
	if (typeof x == "undefined" || typeof y == "undefined") {
		x = document.body.scrollLeft + evnt.clientX;
		y = document.body.scrollTop + evnt.clientY;
	}

	if (isNaN(x) || isNaN(y) || typeof x == "undefined" || typeof y == "undefined") {
		spelling_correct(window.prompt('', error));
		return;
	}
	
	if (!document.getElementById('spelling')) {
		var dialog = document.createElement('form');
		dialog.action = "javascript:void(0)";
		dialog.onsubmit = function() { spelling_correct(document.getElementById('spelling').getElementsByTagName('input').item(0).value); document.getElementById('spelling').style.display = 'none'; return false }
		dialog.onreset = function() { document.getElementById('spelling').style.display = 'none' };
		dialog.id = "spelling";
		
		var element = document.createElement('input');
		element.type = "text";
		element.className = "post";
		dialog.appendChild(element);
		
		var element = document.createElement('input');
		element.type = "submit";
		element.value = spelling_lang["Confirm"];
		element.className = "mainoption";
		dialog.appendChild(element);
		dialog.appendChild(document.createTextNode(' '));
		
		var element = document.createElement('input');
		element.type = "reset";
		element.value = spelling_lang["Cancel"];
		element.className = "liteoption";
		dialog.appendChild(element);
		dialog.appendChild(document.createTextNode(' '));
		
		var element = document.createElement('a');
		element.href = "spelling_add.php";
		element.onclick = function() { if (!ajax) return true; spelling_add(document.getElementById('spelling').getElementsByTagName('input').item(0).value); spelling_correct(document.getElementById('spelling').getElementsByTagName('input').item(0).value); document.getElementById('spelling').style.display = 'none'; return false }
		element.appendChild(document.createTextNode(spelling_lang["Add to dictionary"]));
		dialog.appendChild(element);
		
		document.getElementsByTagName('form').item(0).parentNode.insertBefore(dialog, document.getElementsByTagName('form').item(0));
	}
	
	var width = document.getElementById('spelling').offsetWidth;
	if (typeof width == "undefined") width = 200;
		
	document.getElementById('spelling').style.display = 'block';
	document.getElementById('spelling').style.left = x - width < 0 ? 0 : x - width;
	document.getElementById('spelling').style.top = y + 15;
	document.getElementById('spelling').getElementsByTagName('input').item(0).value = error;
	document.getElementById('spelling').getElementsByTagName('input').item(0).focus();
}
