var serverTime = new Date();//jeśli zbyt długo nie będzie odpowiedzi z serwera - próbujemy jeszcze raz
var backendURL = "zamowonline_backend.php";
var interacting = false;//czy przeglądarka jest w trakcie interakcji z serwerem
var f_name = '';//trzon pliku do wymiany z serwerem Sawa (bez rozszerzenia)
var pe;//"pusty" periodical executer
var updateInterval = 4;//w s.
var updateIntervalPZ = 15;//w s. - do ponownego zamawiania
var updateIntervalAccept = 70;//w s. - do potwierdzenia - jeśli klient czeka zbyt długo, otrzymuje komunikat z błędem

var checkFileTime = new Date();

var teksty;
var teksty_pl = new Array();
teksty_pl['potw_1']='Godzina przyjazdu taksówki';
teksty_pl['potw_2']='Miejscowość';
teksty_pl['potw_3']='Nazwa miejsca';
teksty_pl['potw_4']='Niejednoznaczna nazwa miejsca, proszę wybrać z listy';
teksty_pl['potw_5']='Nr budynku / nr mieszkania';
teksty_pl['potw_6']='Dodatkowa informacja dla kierowcy';
teksty_pl['potw_7']='Bezgotówkowa forma płatności';
teksty_pl['tak']='tak';
teksty_pl['nie']='nie';
teksty_pl['popraw']='Popraw';
teksty_pl['potwierdz']='Potwierdź';

teksty_pl['finalaccept_1']='Jesteśmy w stanie zrealizować Państwa zamówienie na nastepującą godzinę.';
teksty_pl['finalaccept_2']='Godzina&nbsp;przyjazdu&nbsp;taksówki:';
teksty_pl['finalaccept_3']='Prosimy o potwierdzenie zamówienia.';
teksty_pl['finalaccept_4']='Data';
teksty_pl['finalaccept_5']='Nazwisko lub nr karty';
teksty_pl['finalaccept_6']='Miejscowość';
teksty_pl['finalaccept_7']='Ulica';
teksty_pl['finalaccept_8']='Numer budynku/mieszkania';
teksty_pl['finalaccept_9']='Telefon';
teksty_pl['finalaccept_10']='Płatność kartą';
teksty_pl['zrezygnuj']='Zrezygnuj';
teksty_pl['zamow']='Zamów';

teksty_pl['przekroczono']='Przekroczono czas oczekiwania';
teksty_pl['zamow_ponownie']='Zamów ponownie';

teksty_pl['dziekujemy_zapraszamy']='Dziękujemy i zapraszamy ponownie';
teksty_pl['dziekujemy_za_zamowienie']='Dziękujemy za zamówienie!';

teksty_pl['wyst_bledy']='Wystąpiły błędy. Prosimy je poprawić i spróbować jeszcze raz.';
teksty_pl['niepr_nazwisko']='Nieprawidłowe nazwisko lub numer karty.';
teksty_pl['niepr_telefon']='Nieprawidłowy telefon.';
teksty_pl['niepr_data']='Nieprawidłowa data.';
teksty_pl['niepr_godzina']='Nieprawidłowa godzina.';
teksty_pl['niepr_ulica']='Nieprawidłowa ulica.';
teksty_pl['niepr_nr']='Nieprawidłowy nr bloku.';

var teksty_de = new Array();
teksty_de['potw_1']='Godzina przyjazdu taksówki';
teksty_de['potw_2']='Miejscowość';
teksty_de['potw_3']='Nazwa miejsca';
teksty_de['potw_4']='Niejednoznaczna nazwa miejsca, proszę wybrać z listy';
teksty_de['potw_5']='Nr budynku / nr mieszkania';
teksty_de['potw_6']='Dodatkowa informacja dla kierowcy';
teksty_de['potw_7']='Bezgotówkowa forma płatności';
teksty_de['tak']='tak';
teksty_de['nie']='nie';
teksty_de['popraw']='Popraw';
teksty_de['potwierdz']='Potwierdź';

teksty_de['finalaccept_1']='Jesteśmy w stanie zrealizować Państwa zamówienie na nastepującą godzinę.';
teksty_de['finalaccept_2']='Godzina&nbsp;przyjazdu&nbsp;taksówki:';
teksty_de['finalaccept_3']='Prosimy o potwierdzenie zamówienia.';
teksty_de['finalaccept_4']='Data';
teksty_de['finalaccept_5']='Nazwisko lub nr karty';
teksty_de['finalaccept_6']='Miejscowość';
teksty_de['finalaccept_7']='Ulica';
teksty_de['finalaccept_8']='Numer budynku/mieszkania';
teksty_de['finalaccept_9']='Telefon';
teksty_de['finalaccept_10']='Płatność kartą';
teksty_de['zrezygnuj']='Zrezygnuj';
teksty_de['zamow']='Zamów';

teksty_de['przekroczono']='Przekroczono czas oczekiwania';
teksty_de['zamow_ponownie']='Zamów ponownie';

teksty_de['dziekujemy_zapraszamy']='Dziękujemy i zapraszamy ponownie';
teksty_de['dziekujemy_za_zamowienie']='Dziękujemy za zamówienie!';

teksty_de['wyst_bledy']='Wystąpiły błędy. Prosimy je poprawić i spróbować jeszcze raz.';
teksty_de['niepr_nazwisko']='Nieprawidłowe nazwisko lub numer karty.';
teksty_de['niepr_telefon']='Nieprawidłowy telefon.';
teksty_de['niepr_data']='Nieprawidłowa data.';
teksty_de['niepr_godzina']='Nieprawidłowa godzina.';
teksty_de['niepr_ulica']='Nieprawidłowa ulica.';
teksty_de['niepr_nr']='Nieprawidłowy nr bloku.';
					
var lang='pl';
if (lang=='pl') teksty=teksty_pl;
if (lang=='de') teksty=teksty_de;

function checkSerwer() {
	var serwerAktT=new Date();
	var sMinely = Math.round((serwerAktT.getTime() - serverTime.getTime())/1000);
	if(interacting&&sMinely<20) return;
	interacting = true;
	serverTime = new Date();//zerujemy czas interakcji z serwerem
	
	var params = {};
	params.action = 'checkZamow';
	$("debug").innerHTML = params.action;
	
	var ar = new Ajax.Request(backendURL, {
		method: 'post',
		parameters: params,
		onFailure: function(tr) {
			//alert('Error code: ' + tr.status + '\n');
			$("debug").innerHTML = (tr.responseText);
			interacting = false;
			throwErr();
			},
		onSuccess: function(tr) {
			interacting = false;
			var resp = '';
			try {
				resp = tr.responseText.evalJSON();
				if(resp.f_name!='') {
					$("debug").innerHTML = resp.f_name;
					f_name = resp.f_name;
					checkFileTime = new Date();//zerujemy czas sprawdzania pliku
					checkFile();
					pe = new PeriodicalExecuter(checkFile, updateInterval);
				}
				else {
					throwErr();
					pe.stop();
				}
			}
			catch(err) {
				$("debug").innerHTML = tr.responseText;
			}
			//if (tr.responseText) $("debug").innerHTML = (tr.responseText);
		}
	});
}

function checkFile() {
	showWait();
	var serwerAktT=new Date();
	var sMinely = Math.round((serwerAktT.getTime() - serverTime.getTime())/1000);
	if(interacting&&sMinely<20) return;
	interacting = true;
	serverTime = new Date();//zerujemy czas interakcji z serwerem
	
	var params = {};
	params.action = 'checkFile';
	$("debug").innerHTML = params.action;
	var ar = new Ajax.Request(backendURL, {
		method: 'post',
		parameters: params,
		onFailure: function(tr) {
			//alert('Error code: ' + tr.status + '\n');
			$("debug").innerHTML = (tr.responseText);
			interacting = false;
			throwErr();
			},
		onSuccess: function(tr) {
			interacting = false;
			var resp = '';
			try {
				resp = tr.responseText.evalJSON();
				$("debug").innerHTML = resp.f_exists;
				if(resp.f_exists=='1') showForm();
				else {
					var sMinelyCF = Math.round((serwerAktT.getTime() - checkFileTime.getTime())/1000);
					if(sMinelyCF>20) throwErr();
				}
			}
			catch(err) {
				$("debug").innerHTML = tr.responseText;
			}
			//if (tr.responseText) $("debug").innerHTML = (tr.responseText);
		}
	});
}



function submitForm() {
	var serwerAktT=new Date();
	var sMinely = Math.round((serwerAktT.getTime() - serverTime.getTime())/1000);
	if(interacting&&sMinely<20) return;
	interacting = true;
	serverTime = new Date();//zerujemy czas interakcji z serwerem
	showWait();

	var params = {};
	params.action = 'submitForm';
	params.zo_nazwisko = $('zo_nazwisko').value;
	params.zo_telefon = $('zo_telefon').value;
	params.zo_data = $('zo_data').value;
	params.zo_godzina = $('zo_godzina').value;
	params.zo_miasto = $('zo_miasto').value;
	params.zo_lokalizacja = $('zo_lokalizacja').value;
	params.zo_nr_bloku = $('zo_nr_bloku').value;
	params.zo_nr_mieszkania = $('zo_nr_mieszkania').value;
	params.zo_opis = $('zo_opis').value;
	params.zo_chce_karte = $('zo_chce_karte').value;
	
	$("debug").innerHTML = params.action;
	var ar = new Ajax.Request(backendURL, {
		method: 'post',
		parameters: params,
		onFailure: function(tr) {
			//alert('Error code: ' + tr.status + '\n');
			$("debug").innerHTML = (tr.responseText);
			interacting = false;
			throwErr();
			},
		onSuccess: function(tr) {
			interacting = false;
			var resp = '';
			try {
				resp = tr.responseText.evalJSON();
				$("debug").innerHTML = tr.responseText;
				var err_cnt = parseInt(resp.submit_output.err_cnt);//ilość błędów
				var err_str = resp.submit_output.err_str;//lista błędów
				if(err_cnt>0) {
					var alert_str = teksty['wyst_bledy'];
					if(err_str.nazwisko) alert_str+="\n"+teksty['niepr_nazwisko'];
					if(err_str.telefon) alert_str+="\n"+teksty['niepr_telefon'];
					if(err_str.data) alert_str+="\n"+teksty['niepr_data'];
					if(err_str.godzina) alert_str+="\n"+teksty['niepr_godzina'];
					if(err_str.lokalizacja) alert_str+="\n"+teksty['niepr_ulica'];
					if(err_str.nr_bloku) alert_str+="\n"+teksty['niepr_nr'];
					showForm();
					alert(alert_str);
				}
				else {
					var lokalizacje = resp.submit_output.lokalizacje;
					showConfirm(lokalizacje);
				}
			}
			catch(err) {
				$("debug").innerHTML = tr.responseText;
			}
			//if (tr.responseText) $("debug").innerHTML = (tr.responseText);
		}
	});
}

function showConfirm(lokalizacje) {//ekran z potwierdzeniem
	showConf();
	
	var confTxt = '<strong>'+teksty['potw_1']+':</strong> '+$('zo_data').value+' '+$('zo_godzina').value+'<br />';
	confTxt += '<strong>'+teksty['potw_2']+':</strong> '+$('zo_miasto').options[$('zo_miasto').selectedIndex].text+'<br />&nbsp;<br />';
	confTxt += '<strong>'+teksty['potw_3']+':</strong><br />';

	if(lokalizacje.length==0) {
		confTxt += $('zo_lokalizacja').value;
	}
	else if(lokalizacje.length==1) {
		confTxt += '<input type="hidden" id="lokalizacja_id" value="'+lokalizacje[0]['id']+'">'+lokalizacje[0]['lokalizacja'];
	}
	else {
		confTxt += teksty['potw_4']+':<br /><select id="lokalizacja_id">';
		for(var i=0;i<lokalizacje.length;i++) confTxt+='<option value="'+lokalizacje[i]['id']+'">'+lokalizacje[i]['lokalizacja']+'</option>';
		confTxt += '</select>';
	}
	confTxt += '<br />&nbsp;<br />';
	confTxt += '<strong>'+teksty['potw_5']+':</strong> '+$('zo_nr_bloku').value+($('zo_nr_mieszkania').value!=''?'/'+$('zo_nr_mieszkania').value:'')+'<br />';
	if($('zo_opis').value!='') confTxt += '<strong>'+teksty['potw_6']+':</strong> '+$('zo_opis').value+'<br />';
	confTxt += '<strong>'+teksty['potw_7']+':</strong> '+($('zo_chce_karte').checked?teksty['tak']:teksty['nie'])+'<br />&nbsp;<br />';
	confTxt += '<input type="button" onclick="showForm();" style="cursor:pointer" value="'+teksty['popraw']+'" />&nbsp;'+
				'<input type="button" onclick="acceptData();" style="cursor:pointer" value="'+teksty['potwierdz']+'" />';
	$('confHTML').innerHTML = confTxt;
}

function acceptData() {
	showWait();
	var lokalizacja_id = 0;
	if($('lokalizacja_id')) lokalizacja_id = parseInt($('lokalizacja_id').value);
	
	var params = {};
	params.action = 'zamow';
	params.zo_nazwisko = $('zo_nazwisko').value;
	params.zo_telefon = $('zo_telefon').value;
	params.zo_data = $('zo_data').value;
	params.zo_godzina = $('zo_godzina').value;
	params.zo_miasto = $('zo_miasto').value;
	params.zo_lokalizacja = $('zo_lokalizacja').value;
	params.zo_lokalizacja_id = lokalizacja_id;
	params.zo_nr_bloku = $('zo_nr_bloku').value;
	params.zo_nr_mieszkania = $('zo_nr_mieszkania').value;
	params.zo_opis = $('zo_opis').value;
	params.zo_chce_karte = $('zo_chce_karte').value;
	
	$("debug").innerHTML = params.action;
	
	var ar = new Ajax.Request(backendURL, {
		method: 'post',
		parameters: params,
		onFailure: function(tr) {
			//alert('Error code: ' + tr.status + '\n');
			$("debug").innerHTML = (tr.responseText);
			interacting = false;
			throwErr();
			},
		onSuccess: function(tr) {
			interacting = false;
			var resp = '';
			try {
				resp = tr.responseText.evalJSON();
				$("debug").innerHTML = tr.responseText;
				if(resp.submit_output.errors.length>0) {
					throwErr();
				}
				else {
					checkFileTime = new Date();//zerujemy czas sprawdzania pliku
					pe = new PeriodicalExecuter(checkFileAccept, updateInterval);
				}
			}
			catch(err) {
				$("debug").innerHTML = tr.responseText;
			}
			//if (tr.responseText) $("debug").innerHTML = (tr.responseText);
		}
	});
}

function checkFileAccept() {
	showWait();
	var serwerAktT=new Date();
	var sMinely = Math.round((serwerAktT.getTime() - serverTime.getTime())/1000);
	if(interacting&&sMinely<20) return;
	interacting = true;
	serverTime = new Date();//zerujemy czas interakcji z serwerem
	
	var params = {};
	params.action = 'checkFileAccept';
	$("debug").innerHTML = params.action;
	var ar = new Ajax.Request(backendURL, {
		method: 'post',
		parameters: params,
		onFailure: function(tr) {
			//alert('Error code: ' + tr.status + '\n');
			$("debug").innerHTML = (tr.responseText);
			interacting = false;
			throwErr();
			},
		onSuccess: function(tr) {
			interacting = false;
			var resp = '';
			try {
				resp = tr.responseText.evalJSON();
				$("debug").innerHTML = tr.responseText;
				if(resp.submit_output.f_exists=='1') {
					pe.stop();
					showFinalAccept(resp.submit_output.dane_org);
				}
				else {
					var sMinelyCF = Math.round((serwerAktT.getTime() - checkFileTime.getTime())/1000);
					if(sMinelyCF>20) throwErr();
				}
			}
			catch(err) {
				$("debug").innerHTML = tr.responseText;
			}
			//if (tr.responseText) $("debug").innerHTML = (tr.responseText);
		}
	});
}

function showFinalAccept(dane_org) {
	pe = new PeriodicalExecuter(tooLong, updateIntervalAccept);
	var finalAccept = '';
	if(dane_org['godzina']!=dane_org['godzreal']) finalAccept += teksty['finalaccept_1']+"<br />";
	if(dane_org['godzina']!=dane_org['godzreal']) finalAccept += "<font color=\"#FF0000\"><strong>"+teksty['finalaccept_2']+"</strong></font> ";
	else finalAccept += "<strong>"+teksty['finalaccept_2']+"</strong> ";
	if(dane_org['godzina']!=dane_org['godzreal']) finalAccept += "<font color=\"#FF0000\">"+dane_org['godzreal']+"</font>";
	else finalAccept += dane_org['godzreal'];
	finalAccept += "<br /><br />";
	finalAccept += "<strong>"+teksty['finalaccept_3']+"</strong>";
	finalAccept += "<br /><br />";
	
	//finalAccept += "<br /><br />";
	

	if(dane_org['data']!=dane_org['datareal']) finalAccept += "<font color=\"#FF0000\">Data:</font>&nbsp;";
	else finalAccept += "<strong>"+teksty['finalaccept_4']+":</strong>&nbsp;";
	//finalAccept += "<br /><br />";
	if(dane_org['data']!=dane_org['datareal']) finalAccept += "<font color=\"#FF0000\">"+dane_org['datareal']+"</font>";
	else finalAccept += dane_org['datareal'];
	finalAccept += "<br />";
	finalAccept += "<strong>"+teksty['finalaccept_5']+":</strong>&nbsp;"+dane_org['nazwisko'];
	finalAccept += "<br /><strong>"+teksty['finalaccept_6']+":</strong>&nbsp;"+dane_org['miejsce'];
	finalAccept += "<br /><strong>"+teksty['finalaccept_7']+":</strong>&nbsp;"+dane_org['ulica'];
	if(dane_org['ulica_numer']!='') {
		finalAccept += "<br />"+teksty['finalaccept_8']+":&nbsp;";
		finalAccept += dane_org['ulica_numer'];
		if(dane_org['mieszkanie']!='') finalAccept += "&nbsp;/&nbsp;"+dane_org['mieszkanie'];
	}
	finalAccept += "<br /><strong>"+teksty['finalaccept_9']+":</strong>&nbsp;"+dane_org['telefon'];
	finalAccept += "<br /><strong>"+teksty['finalaccept_10']+":</strong>&nbsp;"+dane_org['chce_karte'];
	finalAccept += "<br /><br />";
	
	
	finalAccept += "<input type=\"button\" onclick=\"zrezygnuj();\" value=\""+teksty['zrezygnuj']+"\" style=\"cursor:pointer;\">&nbsp;";
	finalAccept += "<input type=\"button\" onclick=\"finalZamow();\" value=\""+teksty['zamow']+"\" style=\"cursor:pointer;\">";
	$('confHTML').update(finalAccept);
	showConf();
}

function tooLong() {
	pe.stop();
	var confTxt = teksty['przekroczono']+'<br />&nbsp;<br /><input type="button" onclick="showForm();" style="cursor:pointer" value="'+teksty['zamow_ponownie']+'" />';
	$('confHTML').innerHTML = confTxt;
	showConf();
	pe = new PeriodicalExecuter(ponowneZamowienie, updateIntervalPZ);
}

function zrezygnuj() {
	$('confHTML').update(teksty['dziekujemy_zapraszamy']);
	showConf();
	pe = new PeriodicalExecuter(ponowneZamowienie, updateIntervalPZ);
}

function finalZamow() {
	checkFileTime = new Date();//zerujemy czas sprawdzania pliku
	showWait();
	pe = new PeriodicalExecuter(checkKoniec, updateInterval);
}

function checkKoniec() {
	showWait();
	var serwerAktT=new Date();
	var sMinely = Math.round((serwerAktT.getTime() - serverTime.getTime())/1000);
	if(interacting&&sMinely<20) return;
	interacting = true;
	serverTime = new Date();//zerujemy czas interakcji z serwerem
	
	var params = {};
	params.action = 'checkKoniec';
	$("debug").innerHTML = params.action;
	var ar = new Ajax.Request(backendURL, {
		method: 'post',
		parameters: params,
		onFailure: function(tr) {
			//alert('Error code: ' + tr.status + '\n');
			$("debug").innerHTML = (tr.responseText);
			interacting = false;
			throwErr();
			},
		onSuccess: function(tr) {
			interacting = false;
			var resp = '';
			try {
				resp = tr.responseText.evalJSON();
				$("debug").innerHTML = tr.responseText;
				if(resp.submit_output.f_exists=='1') {
					checkFileTime = new Date();//zerujemy czas sprawdzania pliku
					pe.stop();
					pe = new PeriodicalExecuter(checkKoniecSawa, updateInterval);
				}
				else {
					var sMinelyCF = Math.round((serwerAktT.getTime() - checkFileTime.getTime())/1000);
					if(sMinelyCF>20) {
						throwErr();
						pe.stop();
					}
				}
			}
			catch(err) {
				$("debug").innerHTML = tr.responseText;
			}
			//if (tr.responseText) $("debug").innerHTML = (tr.responseText);
		}
	});
}

function checkKoniecSawa() {
	showWait();
	var serwerAktT=new Date();
	var sMinely = Math.round((serwerAktT.getTime() - serverTime.getTime())/1000);
	if(interacting&&sMinely<20) return;
	interacting = true;
	serverTime = new Date();//zerujemy czas interakcji z serwerem
	
	var params = {};
	params.action = 'checkKoniecSawa';
	$("debug").innerHTML = params.action;
	var ar = new Ajax.Request(backendURL, {
		method: 'post',
		parameters: params,
		onFailure: function(tr) {
			//alert('Error code: ' + tr.status + '\n');
			$("debug").innerHTML = (tr.responseText);
			interacting = false;
			throwErr();
			},
		onSuccess: function(tr) {
			interacting = false;
			var resp = '';
			try {
				resp = tr.responseText.evalJSON();
				$("debug").innerHTML = tr.responseText;
				if(resp.submit_output.f_exists=='0') {
					pe.stop();
					thankYou();
				}
				else {
					var sMinelyCF = Math.round((serwerAktT.getTime() - checkFileTime.getTime())/1000);
					if(sMinelyCF>20) {
						throwErr();
						pe.stop();
					}
				}
			}
			catch(err) {
				$("debug").innerHTML = tr.responseText;
			}
			//if (tr.responseText) $("debug").innerHTML = (tr.responseText);
		}
	});
}

function thankYou() {
	$('confHTML').update(teksty['dziekujemy_za_zamowienie']);
	showConf();
	pe = new PeriodicalExecuter(ponowneZamowienie, updateIntervalPZ);
}

function ponowneZamowienie() {
	pe.stop();
	checkSerwer();
}

//pomocnicze
function showWait() {
	$('zo_wait').show();
	$('zo_err').hide();
	$('zo_form').hide();
	$('zo_conf').hide();
}

function showForm() {
	$('zo_wait').hide();
	$('zo_err').hide();
	$('zo_form').show();
	$('zo_conf').hide();
	pe.stop();
	$('zo_submit').observe('click',submitForm);
}

function throwErr() {
	$('zo_wait').hide();
	$('zo_err').show();
	$('zo_form').hide();
	$('zo_conf').hide();
	pe.stop();
}

function showConf() {
	$('zo_wait').hide();
	$('zo_err').hide();
	$('zo_form').hide();
	$('zo_conf').show();
}