/**
 * Obiekt odpowiadający za obsługę cookies. Po wywołaniu metody GET staje się
 * też tablicą asocjacyjną dostępnych na stronie cookies.
 */   
$_COOKIE={
	/**
	 * Metoda odczytująca cookies. Musimy ją wywołać zanim będziemy chcieli coś odczytać.
	 * Nie przyjmuje żadnych argumentów.	 	 
	 */
	GET:function(i,t){
		if(t=document.cookie){
			t=t.split(/; ?/g)
			while(t[0])$_COOKIE[(i=t.pop().split('='))[0]]=unescape(i[1]||'')
		}
	},
	/**
	 * Metoda zapisująca cookies.
	 * @param N nazwa ciasteczka
	 * @param V wartość ciasteczka, typu string
	 * @param E czas wygaśnięcia ciasteczka, liczony w sekundach, od aktualnej daty. parametr ten jest opcjonalny	 	 	 
	 */
	SET:function(N,V,E){
		document.cookie=N+'='+escape(V)+(E?'; expires='+new Date(+new Date()+E*1e3).toGMTString():'')+'; path=/'
		$_COOKIE.GET()
	}
}

/**
 * Funkcja, która rozszerza natywny obiekt Array o metodę sprawdzającą, czy dany
 * element występuje w tablicy i zwracający jego indeks. 
 * @param  x szukany w tablicy element
 * @return   jeśli wyszukiwanie się powiodło zwraca indeks wyszukanego elementu, w przeciwnym wypadku zwraca -1
 */
Array.prototype.indexOf = function(x){
	for(var i=0; this[i]; i++)
	  if(this[i]==x) return i;
	return -1;
}

// oryginalny obiekt leadUp jest nie do końca kompatybilny z tym skryptem, więc tutaj go modyfikuję (tymczasowo)
leadUp.init = function(){}

/**
 * Obiekt, który zawiera funkcje niezbędne do obsługi modułu [LZ]
 */
var  zakupy = {

	/**
	 * Dodaje do listy (do kodu HTML listy) kategorię
	 * @param id    atrybut ID elementu
	 * @param text  nazwa kategorii
	 * @param where atrybut ID listy produktów do której dodajemy kategorię	 	 
	 */	 	
	addCategory: function(id,text,where){

		var newCategory = document.createElement('li');
		newCategory.setAttribute('id', id);

		var newCategoryLabel = document.createElement('span');
		newCategoryLabel.appendChild(document.createTextNode(text));
		newCategory.appendChild(newCategoryLabel);

		var newCategoryProductsList = document.createElement('ul');
		newCategory.appendChild(newCategoryProductsList);

		document.getElementById(where).appendChild(newCategory);

	},

	/**
	 * Dodaje produkt do listy, pod odpowiednią kategorią
	 * @param ident identyfikator produktu	 
	 */	 	
	addProduct: function(ident){

		var produkt = zakupy_dane.produkty[ident];

		if(!document.getElementById(produkt[1])) return!1;

		var newProduct = document.createElement('li');
		newProduct.setAttribute('id', 'LZ'+ident);

		newProduct.innerHTML =
		  '<input type="checkbox" name="'+ident+'" id="P'+ident+'" '+($_COOKIE['lista_zakupow']&&($_COOKIE['lista_zakupow'].indexOf(ident)+1)?'checked="checked"':'')+' />'+
			'<label for="P'+ident+'">'+produkt[0]+'</label>'
		;

		document.getElementById(produkt[1]).getElementsByTagName('ul')[0].appendChild(newProduct);

	},

	/**
	 * Pokazuje leadup z listą produktów, z której można te produkty dodawać i odejmować
	 * @param cat kategoria produktów jakie mają zostać wyświetlone. jeśli nie podamy parametru wyświetlone zostaną wszystkie, jeśli podamy jako parametr wartość 'choosen' wtedy pojawi się lista wybranych już wcześniej przez użytkownika produktów.	 
	 */	 	
	show: function(cat) {

		document.getElementById('leadupZakupy').innerHTML = '';
		if(cat&&(cat!='choosen'))
			this.addCategory(cat,zakupy_dane.kategorie[cat],'leadupZakupy');
		else
			for(var i in zakupy_dane.kategorie)
				this.addCategory(i,zakupy_dane.kategorie[i],'leadupZakupy');

		if(cat!='choosen'){

			for(var i in zakupy_dane.produkty)
				this.addProduct(i);

		} else {

			var choosenProducts = $_COOKIE['lista_zakupow']?$_COOKIE['lista_zakupow'].split(','):[];

			for(var i in zakupy_dane.produkty)
				if(choosenProducts.indexOf(i)+1)this.addProduct(i);

		}

		var leadupZakupy = document.getElementById('leadupZakupy');

		for(var i=0; leadupZakupy.childNodes[i]; i++){
			if(leadupZakupy.childNodes[i].nodeName=="LI")
				if(leadupZakupy.childNodes[i].getElementsByTagName('ul')[0].getElementsByTagName('li').length==0){
					leadupZakupy.removeChild(leadupZakupy.childNodes[i]);
					i--;
				}
		}
		
		document.getElementById('leadupBox').style.height = Math.max(document.documentElement.offsetHeight,document.body.clientHeight) + 'px';
		document.getElementById('leadupBox').style.width = Math.max(document.documentElement.offsetWidth,document.body.clientWidth) + 'px';
		document.getElementById('leadupBox').style.display='block';
	

	},

	/**
	 * Metoda generująca listę wybranych przez użytkownika produktów, na podstawie danych z cookies
	 */
	createPrawaLista: function(){

		var choosenProducts = $_COOKIE['lista_zakupow']?$_COOKIE['lista_zakupow'].split(','):[];

		var listaPrawa = document.getElementById('listaPrawa');
		var newLI;

		listaPrawa.innerHTML = '';

		for(var i in zakupy_dane.kategorie)
			this.addCategory('listPrawa_'+i,zakupy_dane.kategorie[i],'listaPrawa');

		for(var i = 0; choosenProducts[i]; i++){
			newLI = document.createElement('li');
			newLI.appendChild(document.createTextNode(zakupy_dane.produkty[choosenProducts[i]][0]));
			document.getElementById('listPrawa_'+zakupy_dane.produkty[choosenProducts[i]][1]).getElementsByTagName('ul')[0].appendChild(newLI);
		}

		for(var i=0; listaPrawa.childNodes[i]; i++){
			if(listaPrawa.childNodes[i].nodeName=="LI")
				if(listaPrawa.childNodes[i].getElementsByTagName('ul')[0].getElementsByTagName('li').length==0){
					listaPrawa.removeChild(listaPrawa.childNodes[i]);
					i--;
				}
		}
		
		if(listaPrawa.getElementsByTagName('li').length){
		  document.getElementById('listaPrawaInstrukcja').style.display = 'none';
			document.getElementById('listaPrawaPrzyciski').style.display = 'block'
		} else {
		  document.getElementById('listaPrawaInstrukcja').style.display = 'block';
			document.getElementById('listaPrawaPrzyciski').style.display = 'none'
		}

	},

	/**
	 * Odznacza wszystkie checkboksy na liście, w leadupie
	 */
	uncheck: function(){
	
		if(confirm('Czy na pewno chcesz usunąć z listy wszystkie widoczne na tej liście produkty?')){

			var leadupZakupyCheckboxes = document.getElementById('leadupZakupy').getElementsByTagName('input');

			for(var i = 0; leadupZakupyCheckboxes[i]; i++)
				leadupZakupyCheckboxes[i].checked = false;

		}

	},

	/**
	 * Zapisuje notatki do cookies
	 */
	saveNotes: function(){

		$_COOKIE.SET('lista_zakupow_notes',document.getElementById('zakupyNotes').value,7*24*60*60);

	},

	/**
	 * Metoda zamykająca leadup, powodująca zapisanie wybranych produktów do cookies i odświerzenie listy z prawej strony.
	 */
	update: function() {

		var productCheckbox = document.getElementById('leadupZakupy').getElementsByTagName('input');

		var choosenProducts = $_COOKIE['lista_zakupow']?$_COOKIE['lista_zakupow'].split(','):[];
		var choosenProductIndex;

		for(var i = 0; productCheckbox[i]; i++){
			choosenProductIndex = choosenProducts.indexOf(productCheckbox[i].name);
			if(productCheckbox[i].checked){
			  if(choosenProductIndex<0)choosenProducts.push(productCheckbox[i].name);
			} else {
				if(choosenProductIndex+1)choosenProducts.splice(choosenProductIndex,1);
			}
		}

		$_COOKIE.SET('lista_zakupow',choosenProducts.join(','),7*24*60*60);

		this.createPrawaLista();

		leadUp.close();

	},

	/**
	 * Metoda zamykająca leadup bez zapisywania zmian.
	 */	 
	close: function(){
		if(confirm('Czy na pewno chcesz porzucić dokonane zmiany?'))
			leadUp.close();
	},

	/**
	 * Metoda, która usuwa/czyści listę wybranych produktów (z cookies).
	 */	 	
	reset: function(){
		$_COOKIE.SET('lista_zakupow','',1);
		this.createPrawaLista();
	},

	/**
	 * Metoda, która powoduje wyświetlenie okienka z listą wybranych produktów i notatkami oraz przyciskiem 'drukuj'.
	 */
	print: function() {
		var w = window.open('','w','width=300,height=400,scrollbars=yes');
		w.document.body.innerHTML += '<button onclick="window.print()">drukuj</button>';
		w.document.body.innerHTML += '<ul>'+document.getElementById('listaPrawa').innerHTML+'</ul>';
		w.document.body.innerHTML += '<p>'+document.getElementById('zakupyNotes').value+'</p>';
	},

	/**
	 * Metoda inicjująca obiekt.
	 */	 	
	init: function(){
		$_COOKIE.GET();
		this.createPrawaLista();
		document.getElementById('zakupyNotes').value = $_COOKIE['lista_zakupow_notes']||'';
	}

}
