/**
* SoftCOM Spółka jawna - http://www.softcom.wroc.pl
* @author SoftCOM Spółka jawna <biuro@softcom.wroc.pl>
* @copyright Copyright (c) 2007-2008, SoftCOM Spółka jawna
* 
* Funkcje dla formularza oferty
*
*/



//Krok 6 - Pokazuje zdjęcia oferty
function PokazZdjecia(id_oferty, akcja, id_zdjecia) {
	var parametry = '?id_oferty='+id_oferty+"&akcja="+akcja;

	if (akcja=="usun") { 
		if (!confirm(lang_message_pytanie_zdjecie)) { return ; }
		parametry += "&id_zdjecia=" + id_zdjecia;		
	} 
	else if (akcja=="domyslne") { 
		parametry += "&id_zdjecia=" + id_zdjecia;		
	}
	else if (akcja=="kolejnosc") { 
		parametry += "&" + Sortable.serialize("zdjecia");
	} 

	new Ajax.Request('/oferty/zarzadzanie_zdjeciami', {
	 method:'post',
	 parameters: parametry,
	 requestHeaders: {Accept: 'application/json'},
	 onSuccess: WyswietlZdjecia });		
}

//Krok 6 - Wyświetla zdjęcia (przetważa otrzymany JSON)
function WyswietlZdjecia(transport) {
	var json = transport.responseText.evalJSON(true);
	
	//jeżeli jest błąd to go pokazujemy i konczymy
	if (json.error!='') {
		alert(json.error);
		return;
	}
	
	//jeżeli jest informacja to ją pokazujemy	    
	if (json.information!='') {
		alert(json.information);
	}

	//zdjecia
	var zdjecia = json.zdjecia;
	var html = "";
	
	//dla poszczegolnych zdjec
	for (var indeks = 0; indeks<zdjecia.length; indeks++) {
		var klasa = "imageBox";
		if (zdjecia[indeks].doakceptacji==1 || zdjecia[indeks].opisdoakceptacji==1) klasa = "imageBox imageBoxChanged";
		html += "<div id=\"zdjecie_" + zdjecia[indeks].id + "\" class=\""+klasa+"\">";
		html += "<div class=\"image\"><img src=\"" + zdjecia[indeks].path  + "\" /></div>";
		html += "<div class=\"options\">";
		if (!zdjecia[indeks].doakceptacji) {
			if (zdjecia[indeks].domyslny) {
				html += "<img src=\"/images/layout/btn/btn_form_zdjecie_domyslne_aktualnie.gif\" /> ";		
			}
			else {
				html += "<a href=\"javascript:PokazZdjecia("+json.id_oferty+",'domyslne',"+zdjecia[indeks].id+");\" title=\"Ustaw zdjęcie jako domyślne\"><img src=\"/images/layout/btn/btn_form_zdjecie_domyslne.gif\" /></a> ";		
			}
			html += "<a href=\"/noclegi/"+json.id_oferty+"/edytuj_zdjecie?id_zdjecia="+zdjecia[indeks].id+"\" onclick=\"return !aTarget(this, 'zdjecie', 550, 220);\" title=\"Edycja opisu zdjęcia\"><img src=\"/images/layout/btn/btn_form_zdjecie_edytuj.gif\" /></a> ";
		}
		else {
			html += "";
		}
		html += "<a href=\"javascript:PokazZdjecia("+json.id_oferty+",'usun',"+zdjecia[indeks].id+");\" title=\"Usunięcie zdjęcia\"><img src=\"/images/layout/btn/btn_form_zdjecie_usun.gif\" /></a> ";
		html += "</div>";	
		html += "</div>";
	}
	for (var indeks = zdjecia.length; indeks<12; indeks++) {
		html += "<div class=\"noimageBox\"></div>";
	}
	 
	$('zdjecia').update(html);
	Sortable.create("zdjecia", {tag:'div', only:'imageBox', overlap:'horizontal', onUpdate:function() { PokazZdjecia(json.id_oferty, 'kolejnosc'); } });
}


//Krok 6
//Zwraca false jeżeli już jest 12 zdjęć w ofercie
function sprawdzIloscZdjec() {
	var tablica = $$('div.imageBox');
	if (tablica.length==12) {
		alert(lang_message_zdjecia);
		return false;
	}
	return true;
}



//Krok 7 
//funkcja formatująca miesiąc i dzien do postaci dwucyfrowej np. zamiast 5 będzie 05
function FormatDatePart(number) { return (number < 10) ? '0' + number : number; }

// konwertuje string w formacie Y-m-d do daty
function getDateFromString(str) { year = str.substring(0,4); month = str.substring(5,7); day = str.substring(8,10);  return new Date(year, month-1, day, 0, 0, 0); }

// konwertuje datę do stringa w formacie Y-m-d
function getStringFromDate(date) { year = date.getFullYear(); month = date.getMonth()+1; day = date.getDate();  return year+"-"+month+"-"+day; }


// konwertuje id warstwy w formacie dYYYYmmdd do daty
function getDateFromId(str) { year = str.substring(1,5); month = str.substring(5,7); day = str.substring(7,9);  return new Date(year, month-1, day, 0, 0, 0); }


var selOkresStart = "";
var selOkresKoniec = "";

var selMiesiac = ""; //nazwa warstwy miesiąca, który jest aktualnie zaznaczony - nazwa w postaci m1109 - listopad 2009

//Krok 7 - Pokazuje grafik dostepnosci
function PokazDostepnosc(id_oferty) {
	new Ajax.Request('/noclegi/'+id_oferty+'/zarzadzanie_dostepnoscia', {
	 method:'get',
	 requestHeaders: {Accept: 'application/json'},
	 onSuccess: WyswietlDostepnosc });		
}

//Krok 7 - Wyświetla grafik dostepnosci (przetważa otrzymany JSON)
function WyswietlDostepnosc(transport) {
	var json = transport.responseText.evalJSON(true);
	
	//jeżeli jest błąd	    
	if (json.error!='') {
		alert(json.error);
		return;
	}
	
	//czyścimy zaznaczenie okresu	
	selOkresStart = "";
	selOkresKoniec = ""; 
	
	
	//kod html dla grafika
	var html = "";
	//kod html dla nazw miesięcy
	var html_miesiace = "";
	//ilosc miesiecy
	var ilosc_miesiecy = parseInt(json.ilosc_miesiecy);
	//data początkowa
	var data = new Date(json.data_od);
	
	//dostepnosci
	var dostepnosci = json.pozycje;
	//ilosc dostepnosci
	var ilosc_dostepnosci = dostepnosci.length;
	var indeks_dostepnosci = 0; 
	
	//weź pierwszą dostępnosc
	if (indeks_dostepnosci<ilosc_dostepnosci) { biezaca_dostepnosc = dostepnosci[indeks_dostepnosci]; }
	else { biezaca_dostepnosc = null; }

	var test = "";

	//dla poszczegolnych miesiecy
	for (var miesiac = 1; miesiac<=ilosc_miesiecy; miesiac++) {
		//kolumna z nazami miesięcy
		var rok = data.getFullYear().toString();
		html_miesiace += "<div id=\"label_m"+data.getMonth()+rok.substring(2,4)+"\" class=\"miesiac\">"+miesiace[data.getMonth()]+" "+rok.substring(2,4)+"</div>";
		//kolumna grafika - wtawiamy koleny miesiąc
		html += "<div id=\"m"+data.getMonth()+rok.substring(2,4)+"\" class=\"miesiac clearfix\">";
		//wyliczamy i wystawiamy puste dni na początku (id warstwy pustego dnia informuje o miesiącym jaki należy pokazać)
		if (data.getDay()>0) { puste_dni = data.getDay() - 1; } else { puste_dni = 6; }
		for (var i = 1; i<=puste_dni; i++) { html += "<div id=\"pusty_"+data.getMonth()+rok.substring(2,4)+"_"+i+"\" class=\"d pusty\">&nbsp;</div>"; }
		
		var biezacy_miesiac = data.getMonth();
		//dla każdego dnia miesiąca
		while (data.getMonth() == biezacy_miesiac) {
			//nadawanie id
			id = "d"+data.getFullYear()+FormatDatePart(data.getMonth()+1)+FormatDatePart(data.getDate());
			klasa = "d n";

			//sprawdzamy, czy w danym dniu, nie ma jakieoś okresu dostępności
			if (biezaca_dostepnosc!=null) {
				//jeżeli aktualnie wyświetlany dzien jest w okresie biezacej dostepnosci
				if ((getDateFromString(biezaca_dostepnosc.data_od)<=data) && (data<=getDateFromString(biezaca_dostepnosc.data_do))) {
					//test += "dostepnosc["+getDateFromString(biezaca_dostepnosc.data_od)+" - "+getDateFromString(biezaca_dostepnosc.data_do)+"] ";

					var klasa = "d";
					var status  = biezaca_dostepnosc.status;
					//na początku nowy status (chodzi o dni zachodzace na siebie) jest taki sam jak status poczatkowy
					var nowy_status = status;

					//jeżeli to ostatni dzien biezacego okresu to biezemy następny i sprawdzamy poczatek następnego okresu
					if (data-getDateFromString(biezaca_dostepnosc.data_do)==0) {
						indeks_dostepnosci++; 
						//weź następną dostępnosc
						if (indeks_dostepnosci<ilosc_dostepnosci) { biezaca_dostepnosc = dostepnosci[indeks_dostepnosci]; }
						else { biezaca_dostepnosc = null; }
						
						//sprawdzamy, czy początek nastepnej dostepnosci przypada na aktualny dzien
						if (biezaca_dostepnosc) {
							if (data-getDateFromString(biezaca_dostepnosc.data_od)==0) {
								nowy_status = biezaca_dostepnosc.status;
							}
						}
					}

					switch (status) {
						//dostepny
						case 1:
							if (nowy_status==2) { klasa += " doz"; } else {	klasa += " do"; }
						break;
						//zarezerwowany
						case 2:
							if (nowy_status==1) { klasa += " zdo"; } else {	klasa += " z"; }
						break;
					}
				}
			}

			if ((data.getDay()==0) || (data.getDay()==6)) { klasa += "w"; }
			html += '<div id="'+id+'" class="'+klasa+'">'+data.getDate()+'</div>';
			data.setDate(data.getDate()+1);
		}
		html += "</div>";
	}

	$('grafik').update(html);
	$('col_miesiace').update(html_miesiace);
}


function selWiersz(event) {
	var element = Event.element(event);
	if (element.id) {

		//usuwamy zaznaczony wiersz
		if (selMiesiac!="") {
			$(selMiesiac).removeClassName("miesiac_selected");
			$("label_"+selMiesiac).removeClassName("miesiac_selected");			
		}

		//sprawdzamy, czy najechaliśmy na jakiś dzień, który nie jest dniem pustym (puste nie mają identyfikatorów pasujących do numeru miesiąca bo są dniami poprzedniego miesiąca)
		if ( $(element.id).hasClassName('d') && !$(element.id).hasClassName('pusty') ) {
			var akt_data = getDateFromId(element.id);
			var rok = akt_data.getFullYear().toString();
			var div_miesiac = "m"+akt_data.getMonth() + rok.substring(2,4);
			var div_label_miesiaca = "label_"+div_miesiac;
			$(div_miesiac).addClassName("miesiac_selected");
			$(div_label_miesiaca).addClassName("miesiac_selected");
			selMiesiac = div_miesiac;
		}
		
		//sprawdzamy, czy najechaliśmy na pusty dzień
		if ( $(element.id).hasClassName('d') && $(element.id).hasClassName('pusty') ) {
			//identyfikator pustego dnia ma postać pusty_1109_1 gdzie 11 - miesiąc, 09 - rok - 1 nr pustego dnia
			var parts = element.id.split("_");
			var div_miesiac = "m"+parts[1];
			var div_label_miesiaca = "label_"+div_miesiac;
			$(div_miesiac).addClassName("miesiac_selected");
			$(div_label_miesiaca).addClassName("miesiac_selected");
			selMiesiac = div_miesiac;			
		}
		
		//sprawdzamy, czy najechaliśmy na jakiś miesiąc po stronie grafika (pomiędzy dniami lub na końcu miesiąca na pustych polach)
		if ($(element.id).hasClassName('miesiac') ) {
			$(element.id).addClassName("miesiac_selected");
			$("label_"+element.id).addClassName("miesiac_selected");			
			selMiesiac = element.id;			
		}
		

	}
}

//Krok 7 - Zaznacza okres (zdarzenie click w elemencie Grafik -> event.observe w krok7.phtml)
function selOkres(event) {
	var element = Event.element(event);
	if (element.id) {
		//sprawdzamy, czy kliknięty element to dzień (musi mieć klasę d - dzień)
		if ($(element.id).hasClassName('d')) {
			if (selOkresStart && !selOkresKoniec) {
				if (selOkresStart != element.id) {
					selOkresKoniec = element.id;
					showSelection(true);
				}
				else {
					alert(lang_message_kalendarz_zaznaczanie_okresu);
				}
			}
			else {
				showSelection(false);
				selOkresStart = element.id;
				selOkresKoniec = "";
			}
		}
		else { alert('Proszę kliknąć na dzień !'); }
	}
}

//Krok 7 - Pokazuje / ukrywa wybrany okres
function showSelection(show) {
	if (selOkresStart && selOkresKoniec) {
		data_od = getDateFromId(selOkresStart);
		data_do = getDateFromId(selOkresKoniec);
		if (data_od > data_do) { tmp = data_od; data_od = data_do; data_do = tmp; }
		data = data_od;
		while (data<=data_do) {
			id = "d"+data.getFullYear()+FormatDatePart(data.getMonth()+1)+FormatDatePart(data.getDate());
			if (show) {
				$(id).addClassName("s");
			}
			else {
				$(id).removeClassName("s");
			}
			data.setDate(data.getDate()+1); 
		} 
	}
}

//Krok 7 - usuwa zaznaczenie
function removeSelection() {
	showSelection(false);
	selOkresStart = "";
	selOkresKoniec = ""; 
}

//Krok 7 - zaznacza wybrany okres jako dostępny, zarezerwowany lub niewiadomy
function saveSelection(id_oferty, status) {
	if (selOkresStart && selOkresKoniec) {
		data_od = getDateFromId(selOkresStart);
		data_do = getDateFromId(selOkresKoniec);
		if (data_od > data_do) { tmp = data_od; data_od = data_do; data_do = tmp; }
		
		new Ajax.Request('/noclegi/'+id_oferty+'/zarzadzanie_dostepnoscia', {
	 		method:'get',
	 	 	parameters: '?data_od='+getStringFromDate(data_od)+'&data_do='+getStringFromDate(data_do)+"&status="+status,
		 	requestHeaders: {Accept: 'application/json'},
	 		onSuccess: WyswietlDostepnosc });		
	}
	else {
		alert(lang_message_brak_okresu);
	}
}

//Krok 7 - zaznacza wszystkie niewiadome jako dostępne
function setAvailable(id_oferty) {
	if (confirm(lang_message_pytanie_dostepnosc)) {
		new Ajax.Request('/noclegi/'+id_oferty+'/zarzadzanie_dostepnoscia', {
	 		method:'get',
	 	 	parameters: '?status=3',
		 	requestHeaders: {Accept: 'application/json'},
	 		onSuccess: WyswietlDostepnosc });		
	}
}

//Krok 8 - aktualizacja wartości zamówienia
function AktualizujWartosc() {
	var wartosc = 0;
	if ($F("form_oferta_podstawowa")) {
		wartosc += parseFloat($F("form_oferta_op"));
	}

	if ($F("form_oferta_wyrozniona")>0) {
		wartosc += parseFloat($F("form_oferta_ow_"+$F("form_oferta_wyrozniona")));
	}

	if ($F("form_oferta_punkty")>0) {
		wartosc += parseFloat($F("form_oferta_pu_"+$F("form_oferta_punkty")));
	}
	
	html = wartosc;
	$("kwota").update(html);
}
