/**
 * KONFIGURACJA
 *
 * Zmienne/parametry ogólnego zastosowania. Pozostałe parametry
 * konfigurowane są na początku pozostałych funkcji
 *
 */
var config =
{
	// zapamiętywanie wybranych kategorii
	projekty_kryteria_pamietaj: false,
	// nazwa cookie, w którym będą zapamiętywane wybrane kategorie
	projekty_kryteria_cookie: "neti_en_save"
}


/**
 * Główny zestaw metod
 *
 */
var main =
{
	// inicjalizacja strony
	init: function() {
	
		// konfiguracja AJAX-a
		$.ajaxSetup({
			cache: false
		});
		
		// formularz zapisu na newsletter
		newsletter_form.init();

		// boczna lista projektów
		projekty_lista.init();
		
		// strona z listą projektów
		projekty.init();
	}
}

/**
 * Boczna przewijana lista projektów
 *
 */ 
var projekty_lista = 
{
	// liczba wyświetlanych projektów
	ile_wyswietlac: 10,
	
	// dane ustawiane przez skrypt
	// liczba projektów na liście
	ile_projektow: 0,
	// przesunięcie listy
	offset: 0,
	// kryteria wyświetlania (kategoria)
	kategoria: 0,
	
	// inicjalizacja listy
	init: function() {
		// jeśli lista nie istnieje w dokumencie
		if ( !$("#projekty").get(0) ) {
			return false;
		}
		
		// jeśli przekazano liczbę wyświetlanych projektów
		var ile_wyswietlac = null;
		if ( ile_wyswietlac = getValueFromClass("show", $("#projekty").get(0)) ) {
			this.ile_wyswietlac = parseFloat(ile_wyswietlac);
		}
	
		// jeśli w cookie są zapisane kryteria, to pobranie
		if ( config.projekty_kryteria_pamietaj && $.cookie(config.projekty_kryteria_cookie) ) {
			var kryteria = $.cookie(config.projekty_kryteria_cookie).split("#");
			this.kategoria = kryteria[0];
		}
		
		// zliczenie liczby projektów odpowiadających podanym kryteriom
		this.count_projects();
		
		// ikonki wyboru kategorii
		$("#projekty_kategorie li").each(function() {
			
			// oprogramowanie wybierania kategorii
			$("a", this).bind("click", function() {
				// pobranie wartości bitowej odpowiadającej wybranej kategorii
				var kategoria = getValueFromClass("cat", this);
				
				// w zależności od tego, czy kategoria była wybrana czy nie, dodanie lub usunięcie kryteriów
				!$(this.parentNode).hasClass("s")
					? projekty_lista.kategoria |= kategoria
					: projekty_lista.kategoria ^= kategoria;
				// zmiana zaznaczenia ikonki
				$(this.parentNode).toggleClass("s");
				
				// zapisanie wyboru w cookie
				if ( config.projekty_kryteria_pamietaj ) {
					$.cookie(config.projekty_kryteria_cookie, projekty_lista.kategoria+"#alfabetycznie#1", { path: '/' });
				}
				
				// zliczenie projektów odpowiadających kryteriom i inicjalizacja listy
				projekty_lista.count_projects();
				projekty_lista.init_scroll();
				// przyciski poprzedni/następny
				projekty_lista.init_prev_next();
				
				return false;
			});
			
			// inicjalizacja ikonek wyboru na podstawie kryteriów
			if ( getValueFromClass("cat", $("a", this).get(0) ) & projekty_lista.kategoria ) {
				$(this).addClass("s");
			}
			
		});
	
		// wyświetlenie listy
		this.init_scroll();
		// przyciski poprzedni/następny
		this.init_prev_next();
		
		// oprogramowanie przycisków do przewijania listy
		$("#projekty_up").bind("click", function() {
			projekty_lista.scroll(-1);
			return false;
		});
		$("#projekty_down").bind("click", function() {
			projekty_lista.scroll(1);
			return false;
		});
	},
	
	// zliczenie liczby projektów odpowiadających kryteriom
	count_projects: function() {
		this.ile_projektow = 0;
		$("#projekty li").each(function() {
			if ( projekty_lista.kategoria == 0 || (getValueFromClass("cat", this) & projekty_lista.kategoria) > 0 ) {
				projekty_lista.ile_projektow++;
			}
		});
	},
	
	// przyciski poprzedni/następny (zapętlone przewijanie!)
	init_prev_next: function() {
		// slug aktualnego projektu
		var projekt = location.href.match(/\/([a-z0-9\-]+)\/?$/)[1];
		
		// link do poprzedniego projektu na liście
		var poprzedni = null;
		// link do następnego projektu na liście
		var nastepny = null;
		// link do pierwszego projektu na liście
		var pierwszy = null;
		// link do ostatniego projektu na liście
		var ostatni = null;		
		// zmienna ustawiana w pętli na true, jeśli na liście jest aktualny projekt
		var aktualny = false;
		$("#projekty li").each(function() {
			// jeśli projekt jest na liście
			if ( projekty_lista.kategoria == 0 || (getValueFromClass("cat", this) & projekty_lista.kategoria) > 0 ) {
				// url linku
				var url = $(this).find("a").attr("href");
				
				// jeśli link do aktualnego projektu
				if ( url.match(/\/([a-z0-9\-]+)$/)[1] == projekt ) {
					aktualny = true;
				}
				// jeśli link do innego projektu
				else {
					// jeśli inny projekt, a aktualny jest na liście za nim
					if ( !aktualny ) {
						poprzedni = url;
					}
					// jeśli inny projekt, a aktualny jest zaraz przed nim
					else if ( !nastepny ) {
						nastepny = url;
					}
					
					// jeśli pierwszy projekt na liście
					if ( !pierwszy ) {
						pierwszy = url;
					}
					// ostatni projekt na liście
					ostatni = url;
				}
			}
		});
		
		// jeśli na liście nie ma aktualnego projektu, to ukrywamy przyciski prev/next
		if ( !aktualny ) {
			$("ul#mp li.pr, li.nx")
				.css("display", "none")
				.attr("href", "#");
		}
		// jeśli na liście jest aktualny projekt, to wyświetlamy przyciski prev/next
		else {
			// jeśli nie ma "naturalnego" poprzedniego projektu, to poprzednim jest ostatni na liście (zapętlamy)
			if ( !poprzedni ) {
				poprzedni = ostatni;
			}
			$("ul#mp li.pr")
				.css("display", "")
				.find("a").attr("href", poprzedni);
			
			// jeśli nie ma "naturalnego" następnego projektu, to nestępnym jest pierwszy na liście (zapętlamy)
			if ( !nastepny ) {
				nastepny = pierwszy;
			}
			$("ul#mp li.nx")
				.css("display", "")
				.find("a").attr("href", nastepny);
		}
		
	},
	
	// inicjalizacja przewijania
	init_scroll: function() {
		this.offset = 0;
		this.scroll();
	},
	
	// przewijanie listy (step - o ile przewinąć)
	scroll: function(step) {
		// jeśli nie określono kierunku przewijania
		if ( step == undefined ) {
			step = 0;
		}
		// jeśli przewijanie w dół
		else if ( step > 0 ) {
			// jeśli przewijanie jest niemożliwe
			if ( this.offset+step > this.ile_projektow ) {
				return false;
			}
			
			// ustawienie przesunięcia
			this.offset += step;
		}
		// jeśli przewijanie w górę
		else if ( step < 0 ) {
			// jeśli przewijanie jest niemożliwe
			if ( this.offset-step < 0 ) {
				return false;
			}
			
			// ustawienie przesunięcia
			this.offset += step;
		}
	
		// reset listy projektów - ukrycie wszystkiego (lista, przyciski)
		$("#projekty li, #projekty_up, #projekty_down").hide();
		
		// usunięcie komunikatu o braku projektów
		$("#projekty .komunikat").remove();
		
		// jeśli są projekty do wyświetlenia (spełniające wybrane kryteria)
		if ( this.ile_projektow > 0 ) {
			var index = 0;
			// analiza listy projektów i wyświetlenie odpowiednich na podstawie kryteriów i przesunięcia
			$("#projekty li").each(function(i) {
				// jeśli projekt spełnia kryteria
				if ( projekty_lista.kategoria == 0 || (getValueFromClass("cat", this) & projekty_lista.kategoria) > 0 ) {
					// jeśli ma być wyświetlony
					if ( index >= projekty_lista.offset && index < (projekty_lista.ile_wyswietlac+projekty_lista.offset) ) {
						// co drugi projekt na liście ma mieć klasę "i"
						index % 2
							? $(this).removeClass("i")
							: $(this).addClass("i");
						
						$(this).show();
					}

					index++;
				}
			});
			
			// wyświetlenie przycisków do nawigacji (góra/dół)
			if ( this.offset > 0 ) {
				$("#projekty_up").show();
			}
			if ( this.offset+this.ile_wyswietlac < this.ile_projektow ) {
				$("#projekty_down").show();
			}
		}
		// jeśli brak projektów spełniających podane kryteria
		else {
			// wyświetlenie komunikatu
			$("#projekty").append('<li class="komunikat">Przy tym filtrowaniu żaden projekt nie jest widoczny. <a href="">Kliknij tutaj aby zobaczyć wszystkie projekty</a>.</li>');
			
			// oprogramowanie linka w komunikacie
			$("#projekty .komunikat a").bind("click", function() {
				projekty_lista.kategoria = 0;
				
				$("#projekty_kategorie li").removeClass("s");
				projekty_lista.count_projects();
				projekty_lista.init_scroll();
				
				return false;
			});
		}
	}
}


/**
 * Główna lista projektów
 *
 */
var projekty =
{
	// adres, z którego pobierane są projekty
	pobierz_url: "/en/clients/portfolio",
	
	// ile maksymalnie razy próbować pobierać nową listę w przypadku wystąpienia błędu
	ajax_ile_prob_max: 3,
	
	// zmienna pomocnicza do pobierania listy z opóźnieniem (nie modyfikować!)
	opoznienie: null,
	
	// wartości parametrów ostatniego zapytania AJAX-owego
	kategoria: 0,
	strona: 1,
	sortuj: 'najnowsze',
	
	// zmienne pomocnicze dla komunikacji AJAX-owej
	// liczba prób pobrania danych
	ajax_ile_prob: 0,
	// określa, czy podmiana listy została zakończona
	ajax_koniec: false,
	
	// inicjalizacja listy projektów
	init: function() {
		// jeśli lista istnieje
		if ( $("ul#port").get(0) || $("#port_komunikat").get(0) ) {
			//$("#paging").css("height", $("#paging").height());
			//$("#paging ul").hide();
		
			// przypisanie elementom listy ich wysokości
			$("ul#port > li").each( function() {
				$(this).css("height", $(this).height());
			});
			// ukrycie elementów opisu projektu
			$("ul#port > li > *").hide();
			// wyświetlenie elementu listy
			$("ul#port > li").css("display", "inline");
			// przypisanie kontenerowi jego wysokości
			$("#cc").css("height", "");
			$("#cc").css("height", $("#cc").height());
			
			// oprogramowanie linków stronicowania
			$("div#paging li").each( function(i) {
				$("a", this).bind("click", function() {
					var strona = i+1;
					//alert('strona nr '+strona);
					projekty.pobierz( projekty.kategoria, projekty.sortuj, strona );
					
					return false;
				});
			});
			
			$("div#cm ul> li").each( function(i) {
				$("a", this).bind("click", function() {
					var kategoria = getValueFromClass("cat", this);
					projekty.pobierz( kategoria, projekty.sortuj, 1 );
					$("div#cm ul> li").each( function(){$(this).removeClass("s");});
					$(this).parent('li').addClass("s");
					return false;
				});
			});
			
			// link do resetowania listy
			$("ul#port .pl_reset").bind("click", function() {
				projekty.pobierz(0);
				return false;
			});
			
			// jeśli w cookie są zapisane kryteria, to pobranie
			if ( config.projekty_kryteria_pamietaj && $.cookie(config.projekty_kryteria_cookie) ) {
				var kryteria = $.cookie(config.projekty_kryteria_cookie).split("#");
				this.kategoria = kryteria[0];
				this.sortuj = kryteria[1];
				this.strona = kryteria[2];
			}
			
			this.init_img_preload();
		}
	},
	
	// druga część inicjalizacji listy projektów - preload obrazków i dopiero potem fade
	init_img_preload: function() {
		// inicjalizacja listy projektów dopiero, gdy wszystkie grafiki są załadowane
		var gotowe = true;
		$("ul#port img").each(function(i) {
			if ( !this.complete ) {
				gotowe = false;
			}
		});
		
		if ( gotowe ) {
			// wyświetlenie projektów
			this.fade_in(0);
		}
		else {
			window.setTimeout("projekty.init_img_preload()", 30);
		}
	},
	
	// wyświetlenie projektów (fade in)
	fade_in: function(i) {
		if ( i < $("ul#port > li").length ) {
			$("ul#port > li:eq("+i+") > *").fadeIn(
				200,
				function() { projekty.fade_in(i+1); }
			);
		}
		else {
			// $("#paging ul").fadeIn(200);
		}
	},
	
	// wyświetlenie projektów
	pokaz: function(i) {
		if ( i < $("ul#port > li").length ) {
			$("ul#port > li:eq("+i+") > *").show(
				200,
				function() { projekty.show(i+1); }
			);
		}
	},
	
	// pobieranie danych z opóźnieniem
	filtruj: function(kategoria, sortuj, strona) {
		if ( kategoria == undefined ) {
			kategoria = 0;
		}
		if ( sortuj == undefined ) {
			sortuj = "alfabetycznie";
		}
		if ( strona == undefined ) {
			strona = 1;
		}
	
		this.opoznienie = window.clearTimeout(this.opoznienie);
		this.opoznienie = window.setTimeout("projekty.pobierz("+kategoria+", '"+sortuj+"', "+strona+")",1000);
	},
	
	// pobieranie danych
	pobierz: function(kategoria, sortuj, strona) {
		
		if ( kategoria == undefined ) {
			kategoria = 0;
		}
		if ( sortuj == undefined ) {
			sortuj = "alfabetycznie";
		}
		if ( strona == undefined ) {
			strona = 1;
		}
		
		if ( this.kategoria != kategoria || this.sortuj != sortuj || this.strona != strona ) {
			this.ajax_ile_prob = 1;
		}
		
		this.kategoria = kategoria;
		this.sortuj = sortuj;
		this.strona = strona;
		
		// zapisanie wyboru w cookie
		if ( config.projekty_kryteria_pamietaj ) {
			$.cookie(config.projekty_kryteria_cookie, kategoria+"#"+sortuj+"#"+strona, { path: '/' });
		}
		
		this.ajax_koniec = false;
		
		// wysłanie żądania AJAX-em
		$.ajax({
			type: "POST",
			url: this.pobierz_url,
			cache: false,
			dataType: "html",
			data: "kategoria="+kategoria+"&sortuj="+sortuj+"&strona="+strona,
			success: function (data, textStatus) { projekty.pobierz_success(data, textStatus, kategoria, sortuj, strona); },
			error: function (XMLHttpRequest, textStatus, errorThrown) { projekty.pobierz_error(); },
			complete: function (XMLHttpRequest, textStatus) {}
		});
	},
	
	// obsługa zdarzenia, gdy pobieranie danych zakończyło się sukcesem
	pobierz_success: function(data, textStatus, kategoria, sortuj, strona) {
		// jeśli wszystko ok
		if ( textStatus == "success" ) {
			// sprawdzenie, czy było to ostatnie AJAX-owe żądanie
			if ( kategoria == this.kategoria && sortuj == this.sortuj && strona == this.strona && this.ajax_koniec == false ) {
				this.ajax_koniec = true;
				
				// ukrycie poprzedniej listy projektów, a następnie podmiana listy na nową i inicjalizacja
				var index = 0;
				var ile = $("ul#port > li > *").length;
				// jeśli były projekty na liście, to fade out listy i inicjalizacja nowej
				if ( ile > 0 ) {
					$("ul#port > li > *").fadeOut(400, function() {
						if ( ++index == ile ) {
							// podmiana listy na nową
							$("#cc").html(data);
							// inicjalizacja
							projekty.init();
						}
					});
				}
				// jeśli nie było projektór na liście
				else {
					// podmiana listy na nową
					$("#cc").html(data);
					// inicjalizacja
					projekty.init();
				}
			}
		}
		// jeśli wystąpił błąd
		else {
			this.pobierz_error();
		}
	},
	
	// obsługa zdarzenia, gdy pobieranie danych zakończyło się niepowodzeniem
	pobierz_error: function() {
		// jeśli liczba prób jest mniejsza niż założona, to ponowienie próby
		if ( !this.ajax_koniec && ++this.ajax_ile_prob < this.ajax_ile_prob_max ) {
			this.pobierz(this.kategoria, this.sortuj, this.strona);
		}
	}
}

/**
 * Newsletter - formularz subskrypcji
 *
 */
 
var newsletter_form =
{
	// adres do komunikacji AJAX
	connect_url: '/index/subskrybuj/lang/en',

	// elementy w DOM
	// formularz
	form: null,
	// kontener formularza
	form_container: null,
	
	// zmienna pomocnicza
	trwa_wysylka: false,
	
	// inicjalizacja formularza
	init: function() {
		this.form = $(".newsletter_subscribe").get(0);
		if ( !this.form ) {
			return false;
		}
		
		this.form_container = this.form.parentNode;
		
		// przechwycenie wysyłania formularza
		$(this.form).bind("submit", function() {
			// jeśli nie ma wysyłki w trakcie
			if ( !newsletter_form.trwa_wysylka ) {
				newsletter_form.subskrybuj();
			}
			
			return false;
		});
	},
	
	// wyświetlenie komunikatu o podanym id; brak id = usunięcie komunikatu
	wyswietl_komunikat: function(rodzaj, komunikat_id) {
		if ( rodzaj != undefined && komunikat_id != undefined ) {
			this.wyswietl_komunikat_txt(
				rodzaj,
				$("input[name='komunikat["+komunikat_id+"]']", this.form).val()
			);
		}
		else {
			this.wyswietl_komunikat_txt(rodzaj, '');
		}
	},
	
	// wyświetlenie podanego tekstu w polu komunikatu
	wyswietl_komunikat_txt: function(rodzaj, komunikat) {
		$("ul > li.c1, ul > li.c2", this.form_container).hide();
	
		switch (rodzaj) {
			case 'ok':
				var klasa = "c1";
				break;
			case 'error':
				var klasa = "c2";
				break;
			default:
				return false;
		}
		
		if ( trim(komunikat) != "" ) {
			$("ul", this.form_container).append(
				'<li class="'+klasa+'">'+komunikat+'</li>'
			);
		}
	},
	
	// wysłanie danych do serwera
	subskrybuj: function() {
		// pobranie adresu e-mail z formularza
		var email = trim($("input[name='email']", this.form).val());
		// wstępna walidacja adresu
		if ( email.search(/^(.+?)@(([a-z0-9\.-]+?)\.[a-z]{2,5})$/i) == -1 ) {
			this.wyswietl_komunikat('error', 'email_blad');
			return false;
		}
		
		// pobranie adresu e-mail z formularza
		var zgoda_giodo = $("input:checkbox[name='zgoda_giodo']", this.form).get(0).checked;
		if( !zgoda_giodo ){
			this.wyswietl_komunikat('error', 'zgoda_blad');
			var zgoda_giodo = 0;
			return false;
		}else{
			var zgoda_giodo = 1;
		}
		
		// wyświetlenie komunikatu i zablokowanie pól
		this.trwa_wysylka = true;
		this.wyswietl_komunikat('error', 'wysylka');
		$("input, button", this.form).attr("disabled", "disabled");
		
		// wysłanie danych AJAX-em
		$.ajax({
			type: "POST",
			url: this.connect_url,
			cache: false,
			dataType: "json",
			data: "email="+email+'&zgoda_giodo='+zgoda_giodo,
			success: function (data, textStatus) { newsletter_form.subskrybuj_success(data); },
			error: function (XMLHttpRequest, textStatus, errorThrown) { newsletter_form.subskrybuj_error(); },
			complete: function (XMLHttpRequest, textStatus) {
				newsletter_form.trwa_wysylka = false;
				$("input, button", this.form).removeAttr("disabled");
			}
		});
	},
	
	// obsługa prawidłowej odpowiedzi serwera
	subskrybuj_success: function(data) {
		// jeśli udało się zapisać adres w bazie
		if ( data.status == 1 ) {
			// wyświetlenie komunikatu
			this.wyswietl_komunikat('ok', 'ok');
			
			// wyczyszczenie formularza
			$("input[name='email']", this.form).val("");
			$("input:checkbox[name='zgoda_giodo']", this.form).get(0).checked = false;
		}
		// jeśli wystąpił błąd w trakcie dodawania/walidacji adresu
		else {
			// określenie komunikatu błędu
			var komunikat_id = 'blad';
			
			if ( data.bledy.email != undefined ) {
				data.bledy.email != 'emailDuplicateEntry'
					? komunikat_id = 'email_blad'
					: komunikat_id = 'email_duplicate';
			}
			else if ( data.bledy.zgoda_giodo != undefined ) {
				komunikat_id = 'zgoda_blad';
			}
			
			// wyświetlenie komunikatu
			this.wyswietl_komunikat('error', komunikat_id);			
		}
	},
	
	// obsługa błędu komunikacji lub błędnej odpowiedzi serwera
	subskrybuj_error: function() {
		this.wyswietl_komunikat('error', 'blad');
	}
	
}

$(document).ready(function() {
	main.init();
});

try {document.execCommand('BackgroundImageCache', false, true);} catch(e) {}
