var busy;
var ajax;
var ajax_invalid;
var ajax_save;
var ajax_register;
var dAskInvalid;
var dError;
var dInfo;
var dRegister;
var stat_fx;

var to_translate;
var current = -1;
var page = -1;
var max_page=0;
//user status
var translated = 0;
var total_translated = 0;
var skipped = 0;
//global stats
var stat_today = 0;
var stat_week = 0;
var stat_month = 0;
var stat_total = 0;
var stat_remaining = 12500;
var stat_users = 400;
//config
var ask_invalid = true;
var vulgar_entry = 0;
var vulgar_words = '';

window.addEvent('domready',function () {
	//initialize ajax requests
	ajax = new Ajax('action.php').addEvent('onSuccess',onAction);
	ajax_invalid = new Ajax('action.php').addEvent('onSuccess',onAction); //this is done so if one request is pending another will not breake previous one
	ajax_save = new Ajax('action.php').addEvent('onSuccess',onAction); //this is done so if one request is pending another will not breake previous one
	ajax_register = new Ajax('action.php').addEvent('onSuccess',onAction); //this is done so if one request is pending another will not breake previous one
	//create dialogs and fx
	dAskInvalid = new mui_customDialog({title:'PotwierdĽ'});
	stat_fx = new Fx.Styles($('stats'),{duration:1000});
	dAskInvalid.addEvent('onYes',function () {
		ask_invalid = !$('dontaskagain').checked;
		doMarkInvalid();
	});	
	busy = new mui_busyBox();
	dError = new mui_customDialog({title:'Bł±d',type:'error'});
	dInfo = new mui_customDialog({title:'Informacja',type:'info'});
	dRegister = new mui_simpleDialog('dregister');
	//initialize general, objects, globals and cookies
	to_translate = new objList();
	page = 0;
	var s = getCookie('suple_total_translated');
	if (s!='') total_translated = s.toInt();
	checkField();
//	var s = getCookie('suple_remaining');
//	if (s!='') stat_remaining = s.toInt(); else stat_remaining = 11000 + (Math.random() * 1000).toInt();
	//special code for dump inmature idiots
	var vulgar_user = getCookie('suple_vulgar_user');
	if (vulgar_user != '') {
		var s = getCookie('suple_vulgar_words');
		$('content').empty();
		$('reg').empty();
		$('content').setHTML('<p class="red">Panu/Pani podziękujemy !<br />Proszę przetłumaczyć to: '+s+'</p>');
		return;
	}
	//OK, start
	getWords();
	$('dest').focus();
});

function register() {
	dRegister.showModal();
}

function doRegister() {
	var email = $('email').value;
	valid = (email.search('[\\._\\w±ę¶żĽćńłóˇĘ¦Ż¬ĆŃŁÓ]+@\\w+.\\w{2,}')==0);
	if (!valid) {
		dError.showModal('Podaj prawidłowy adres email !',{ok:'OK'});
		return;
	}
	dRegister.hide();
	busy.showModal('Rejestracja użytkownika ...');
	ajax_register.request('action=register&email='+encodeURIComponent(email));
}


function stats() {
	var s = 'Przetłumaczyłe¶(a¶) zwrotów (teraz): <strong>'+translated+'</strong>, ogólnie: <strong>'+total_translated+'</strong>';
	s += '<br />pominiętych: <strong>'+skipped+'</strong>';
	s += '<br />Przetłumaczono ogólnie zwrotów: <strong>'+stat_total+'</strong>';
	s += '<br />Dzisiaj przetłumaczono: <strong>'+stat_today+'</strong>';
	s += '<br />W tym tygodniu: <strong>'+stat_week+'</strong>';
	s += '<br />W tym miesi±cu: <strong>'+stat_month+'</strong>';
	$('stats').setHTML(s);
	stat_fx.start({
		'color':['#cc0000','#999']
	});
	$('stat_remaining').setText(stat_remaining);
	$('stat_users').setText(stat_users);
}

function showMessage (s,type) {
	var col;
	var l = 25;
	var t = 10;
	var fl = 50;
	switch (type) {
		case 'OK':
			col = '#0077B0';
		break;
		case 'lazy':
			col = '#cc0000';
		break;
		case 'reward':
			col = '#008040';
			break;
		default:
			col = '#000000';
		break;
	}
//	var l = Math.random() * 120;
//	var fl = Math.random() * 600;
//	fl = fl.round() - 300;
//	var t = Math.random() * 220;
//	l = l.round();
//	t = t.round();
	
	var div = new Element('div').setStyles({
		color:col,
		'font-size':'18px',
		'position':'relative',
		top:t,
		left:l
	}).injectTop('messages');
	div.setText(s);
	var fx = div.effects({duration:100}).start({
		'font-size':'24px',
		top:t-10,
		left:l-10
	}).chain(function () {
		this.options.duration = 100;
		this.start({
			'font-size':'18px',
			top:t,
			left:l
		});
	}).chain(function () {
		this.options.duration = 700;
		this.start.delay(10000,this,{
			'font-size':'12px',
			top:'260px',
			left:fl,
			opacity:0
		});
	}).chain(function () {
		div.remove();
		delete div;
	});		
}

function getWords() {
	busy.showModal('Pobieranie ...');
	stat_users = 380 + (Math.random() * 40).toInt();
	ajax.request('action=get&page='+page);
}

function onAction() {
	busy.hide();
	var r = this.response.text;
	var action = r.match(/<action>([^<]*)<\/action>/);
	if (action==null) { alert(r); return;}
	action = action[1];
	switch (action) {
		case 'get': 
			var java = r.match(/<java>([^<]*)<\/java>/);
			java = java[1];
			eval(java);
			stat_remaining = 12000 - stat_total;
			showNext();
		break;
		case 'invalid':
			var res = r.match(/<response>([^<]*)<\/response>/);
			showMessage(res[1]);
		break;
		case 'save':
			var res = r.match(/<response>([^<]*)<\/response>/);
			showMessage(res[1]);
			doneTranslated();
		break;
		case 'register':
			var res = r.match(/<response>(.*)<\/response>/);
			dInfo.showModal(res[1],{ok:'OK'});
		break;
		case 'notify':
			var res = r.match(/<response>(.*)<\/response>/);
			dInfo.showModal(res[1],{ok:'OK'});
		break;
		default:
			alert('Nieprawidlowa odpowiedz serwera !');
		break;
	}
}

function randomMessage(msg_list) {
	var idx = Math.random() * (msg_list.length-1);
	idx = idx.round();
	return msg_list[idx];
}

function skip() {
	skipped++;
	updateRemaining();
	showNext();
	if (skipped % mod_lazy == 0) {
		showMessage(randomMessage(message_lazy),'lazy');
	}
}

function doMarkInvalid() {
	ajax_invalid.request('action=invalid&id='+to_translate.list[current].id);
	showNext();
}
	
function markInvalid() {
	if (ask_invalid) {
		dAskInvalid.showModal('<p>Zaznaczyć jako nieprawidłowy ?</p><hr><p class="small"><input type="checkbox" id="dontaskagain" value="1"> Nie pytaj ponownie.</p>',
			{yes:'Tak',cancel:'Anuluj'}
		);  	
	}else {
		doMarkInvalid();
	}
}

function showNext() {
	current++;
	page++;
	if (page > max_page) page = 0;
	if (current > to_translate.length-1) {
		getWords();
		return;
	}
	var s = to_translate.list[current].text;
	var source = '<a href="http://www.google.pl/search?q='+encodeURIComponent(s)+'&hl=pl&lr=lang_pl" target="_blank">'+s+'</a>';
	$('source').setHTML(source);
	$('dest').value = '';
	stats();
}

function clearTranslate() {
	to_translate.clear();
	current = -1;
}

function addToTranslate(id,text) {
	to_translate.add({id:id,text:text});
}

function updateRemaining() {
	stat_remaining -= 1;
	setCookie('suple_remaining',stat_remaining);
}

function doneTranslated() {
	translated++;
	total_translated++;
	if (translated % mod_reward == 0) {
		var m = randomMessage(message_reward);
		m = m.replace(/%s/,translated);
		showMessage(m,'reward');
	}
	stat_total++;
	stat_today++;
	stat_week++;
	stat_month++;
	stat_remaining--;
	updateRemaining();
	setCookie('suple_total_translated',total_translated,60);
	showNext();
}
		
function checkAndSave() {
	var s = $('dest').value.trim();
	if (s=='') {
		dError.showModal('Podaj prawidłowo przetłumaczony zwrot !',{ok:'OK'});
		return;
	}
	//check vulgar sickos !
	if (vulgar.indexOf(s.toLowerCase())>-1) {
		vulgar_entry++;
		if (vulgar_words != '') vulgar_words += ',';
		vulgar_words += s;
		if (vulgar_entry==1) {
			showMessage('!!! -- Nie wpisuj wulgaryzmów, zostałe¶(a¶) ostrzeżony(a) -- !!!','lazy');
			return;
		}else{
			if (vulgar_entry < 5) {
				busy.showModal('Zapisuje .....');
				(function () { 
					busy.hide();
					showMessage("OK !!!!!");
					translated++;
					showNext();
				}).delay(650);
				return;
			}else{
				//haha let's fuck the sucker ;)
				setCookie('suple_vulgar_user',1,60);
				setCookie('suple_vulgar_words',vulgar_words,60);
				showMessage(vulgar_words);
				showMessage('ponieważ wpisujesz wulgaryzmy takie jak:','lazy');
				showMessage('ignoruje Twoje wpisy ...','lazy');
				showMessage('oh, chyba zapomniałem napisać że ...','lazy');
				$('dest_cont').setHTML('<span style="font-size:24px">'+vulgar_words+'</span>');
				return;
			}
		}		
	}
	busy.showModal('Zapisuje ...');
	ajax_save.request('action=save&id='+to_translate.list[current].id+'&word='+encodeURIComponent(s));
}

function link(s) {
	var t = to_translate.list[current].text;
	switch (s) {
		case 'google' :
			return 'http://www.google.pl/search?q='+encodeURIComponent(t)+'&hl=pl&lr=lang_pl';
		break;
		case 'onet':
			return 'http://portalwiedzy.onet.pl/tlumacz.html?qs='+encodeURIComponent(t)+'&tr=ang-auto&x=0&y=0';
		break;
		case 'wiki':
			return 'http://pl.wikipedia.org/wiki/Specjalna:Szukaj?search='+encodeURIComponent(t);
		break;
		case 'wikitionary':
			return 'http://pl.wiktionary.org/wiki/Specjalna:Szukaj?search='+encodeURIComponent(t)+'&fulltext=Szukaj';
		break;
	}
}
	
//cookie functions are from -> w3schools
function getCookie(c_name) {
	if (document.cookie.length>0) {
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1) { 
			c_start=c_start + c_name.length+1; 
			c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) c_end=document.cookie.length;
			return unescape(document.cookie.substring(c_start,c_end));
		}
	}
	return "";
}

function setCookie(c_name,value,expiredays) {
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value)+
		((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function checkField(force) {
	if ($('dest').value!='') {
		$('dest').removeClass('empty');
	}
}

function destKeyUp(e) {
	var event = new Event(e);
	event.stop();
	if (event.key=='enter') {
		checkAndSave();
		return true;
	}
	checkField();
	return true;
}

function notifyFriend() {
	var from = $("not_sname").value.trim();
	var to = $("not_dname").value.trim();
	var email = $('not_email').value.trim();
	if (from=='') {
		dError('Podaj swoje imię / pseudonim !',{ok:'OK'});
		return;
	}
	if (to=='') {
		dError('Podaj imię / pseudonim odbiorcy !',{ok:'OK'});
		return;
	}
	if (email=='') {
		dError('Podaj adres email odbiorcy !',{ok:'OK'});
		return;
	}
	busy.showModal('Wysyłamy powiadomienie do: '+to);
	ajax.request('action=notify&from='+encodeURIComponent(from)+'&to='+encodeURIComponent(to)+'&email='+encodeURIComponent(email));
}
