/**
 * 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_pl_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: "/klienci/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) || $("ul#port2").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());
			});
			
			$("ul#port2 > li").each( function() {
				$(this).css("height", $(this).height());
			});			
			
			// ukrycie elementÃ³w opisu projektu
			$("ul#port > li > *").hide();
			
			$("ul#port2 > li > *").hide();			
			// wyÅ?wietlenie elementu listy
			$("ul#port > li").css("display", "inline");
			
			$("ul#port2 > 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;
			});
			
			$("ul#port2 .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;
			}
		});
		
		$("ul#port2 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);
		}

		if ( i < $("ul#port2 > li").length ) {
			$("ul#port2 > 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); }
			);
		}

		if ( i < $("ul#port2 > li").length ) {
			$("ul#port2 > 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',

	// 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;
		}
		
		// 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,
			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("");
		}
		// 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';
			}
			
			// 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) {}

