var currentBrowser = navigator.userAgent;
var currentResolution = screen.width + 'x' + screen.height;
var currentReferrer = document.referrer;
var counterInterval = undefined;
var dialog = {
	'show': function(){
		if(this.showCallbacks[this.stepName()] != undefined) this.showCallbacks[this.stepName()](this);
		else {
			$('#videos').show();
			this.dialogs.addClass('hidden');
			this.dialog.removeClass('hidden');
			$(window).trigger('resize');	
		}
	},
	'debug': function(text) {
		$('#debug').prepend((new Date).getTime() + ":	" + text + "<br/ >");
	},
	'dialog': undefined,
	'dialogs': $('div.fereastra'),
	'errorDialogs': $('div.error'),
	'destroy': function(){
		this.dialogs.remove();
		this.errorDialogs.remove();
		dialog = null;
		return false;
	},
	'error': function(mesaj){
		if(this.errors[this.stepName()] != undefined) this.dialog = $('#' + this.errors[this.stepName()]);
		else this.dialog = $('#' + this.errors['default']);
		this.dialog.find('p.show').text(mesaj);
		return this;
	},
	'errorCallback': function(obiect){
		obiect.dialog = $('#' + obiect.steps[obiect.step]);
		obiect.show();
		return false;
	},
	'errors': {'ghici-strada': 'raspuns-gresit', 'default': 'eroare'},
	'extractToken': function(responseText){
		var response = eval(responseText);
		this.sToken = response[2];
		this.reqToken = response[3];
		return response;
	},
	'step': 0,
	'showCallbacks': {
		'castigator': function(_this){
			_this.submit([{'name': 'actiune', 'value': 'alege'}]);
		},
		'date-personale': function(_this){
			$('#videos').hide();
			_this.dialogs.addClass('hidden');
			_this.dialog.removeClass('hidden');
			$(window).trigger('resize');
		}
	},
	'sumbitCallbacks': {
		'ghici-strada': function(response, _this) {
			_this.debug(response.join(' '));
			if(response[4] != 'informari') {
				var chainCallback = _this.sumbitCallbacks['default'];
				chainCallback(response, _this);
			}
			else {
				_this.dialog = $('#raspuns-gresit');
				var chainCallback = _this.sumbitCallbacks['date-personale'];
				chainCallback(response, _this);
				if (response[0] == 'OK') _this.destroy(); // status OK
			}
		},
		'date-personale': function(response, _this) {
			_this.debug(response.join(' '));
			try {
				var status = response[0];
				var mesaj = response[1];
				if(status == 'OK') _this.next().show();
				else {
					// prezumptia de nevinovatie
					_this.dialog.addClass('incomplet').find('fieldset').removeClass('error');
					erori = mesaj; //mesaj vine JSON in cazul asta
					$.each(erori, function(field, message){
						// fieldset-ul in care se afla minunata eroare primeste o clasa
						_this.dialog.find("input[name='" + field + "']").parent().addClass('error');
						// avem explicatii pentru eroarea asta
						if(message != '1') _this.dialog.find("input[name='" + field + "']").parent().children('label').children('span').text(' - ' + message);
					});
				}
			}
			catch(e) {
				alert(e);
				_this.error(mesaj).show();
			}
		},
		'default': function(response, _this){
			_this.debug(response.join(' '));
			try{
				var status = response[0];
				var mesaj = response[1];
				if(status == 'OK') _this.next().show();
				else _this.error(mesaj).show();
			}
			catch(e) {
				alert(e);
				_this.error(mesaj).show();
			}
		}
	},
	'steps': ['start', 'ghici-strada', 'date-personale', 'date-trimise'],
	'stepName': function(){return this.steps[this.step]},
	'reqToken': '',
	'rpcURL': 'rpc/',
	'start': function(){
		//$('#debug').show();
		var _this = this;
		$.each(this.dialogs.find('form'), function(){
			$(this).unbind('submit').bind('submit', function(){
				return _this.submit($(this).serializeArray());
			});
		});
		// TEST
		$.each($('div.test').find('form'), function(){
			$(this).unbind('submit').bind('submit', function(){
				return _this.submit($(this).serializeArray());
			});
		});
		$('#eroare a.navigare-link').unbind('click').bind('click', function(){
			return _this.errorCallback(_this);
		});
		$('#raspuns-gresit a.navigare-link').attr('target', '_blank').bind('click', function(){_this.errorCallback(_this); return true;});
		$('#date-trimise a.navigare-link').attr('target', '_blank').unbind('click').bind('click', function(){_this.destroy();return true});
		this.submit([{'name': 'actiune', 'value': 'start'}]);
	},
	'sToken': '',
	'submit': function(data, hideOverlay){
		var _this = this;
		var formData = new Object;
		$.each(data, function(i, cimp){
			formData[cimp.name] = cimp.value;
		});
		formData.sToken = this.sToken;
		formData.reqToken = this.reqToken;
		formData.rezolutie = currentResolution;
		formData.browser = currentBrowser;
		formData.referrer = currentReferrer;
		var debugText = '';
		$.each(formData, function(cheie, valoare){
			debugText += cheie + ":" + valoare + "	";
		});
		_this.debug(debugText);
		if(!hideOverlay) $('#overlay').removeClass('hidden');
		$.post(this.rpcURL + "?" + (new Date).getTime(), formData, function(responseText){
			// extrag token-uri
			var response = eval(responseText);
			if(response[0] == 'REDIRECT') {
				location.href=response[1];
				_this.destroy();
				return false;
			}
			_this.sToken = response[2];
			_this.reqToken = response[3];
			// daca are un callback mai ciudat, il chem
			var callbackFunction;
			if(_this.sumbitCallbacks[_this.stepName()] != undefined) callbackFunction = _this.sumbitCallbacks[_this.stepName()];
			else callbackFunction = _this.sumbitCallbacks['default'];
			callbackFunction(response, _this);
			$('#overlay').addClass('hidden');
		});
		return false;
	},
	'next': function(){
		var nextStep = this.step + 1;
		if(nextStep < this.steps.length) this.step = nextStep;
		else this.destroy();
		this.dialog = $('#' + this.steps[this.step]);
		return this;
	} // verifica daca exista urmatorul step
};