

$(document).ready(function() { 
	
	// hover menu glowne
	$('#mainNav .mainLink').hover(
		 	SerJS.MenuGlowne.hoverIn, 
		 	SerJS.MenuGlowne.hoverOut 
		).filter(':first').filter('.active').parent().parent().addClass('firstActive'); // - jeśli zaznaczono pierwszy element to maly fix
	
	SerJS.wlaczPokazywanieBledowValidacji();
	SerJS.Like.pokazKomunikat();
	
	$(window).load(	SerJS.loadFacebook ); // load FB jak wszystko sie zaladuje i DOM i obrazki 
});


var SerJS = 
{
	/**
	 * Mala klasa do obslugi rozwijanego menu glownego
	 */
	MenuGlowne : {
		hoverIn: function()
		{
			if($(this).hasClass('lastLink') && !$(this).hasClass('moved')) {

			}
			else {
				if($(this).hasClass('hover')) return false;  
				var sub = $(this).find('.subnavi');  
//				if($(this).hasClass('lastLink') && !$(this).hasClass('moved')) {
//				var move = $(this).outerWidth() - sub.outerWidth() - 4;   
//				sub.css('left',move+'px');
//				$(this).addClass('moved');
//				}
				$(this).addClass('hover');
				sub.before('<div class="fakeBorder" style="width: '+($(this).outerWidth()-8)+'px;">&#160;</div>').fadeIn(100);
			}
		},
		hoverOut: function(e)
		{
			var that = this;
			
			if(['SELECT', 'OPTION', 'INPUT'].indexOf($(e.target)[0].tagName) != -1 ) {
				$(this).tirgger('hover');
				return false;
			}  
			$(this).find('.fakeBorder').remove().end().find('.subnavi').fadeOut(50,function() {
				$(that).removeClass('hover');
			});
		}
	},
	
	/**
	 * Klasa sterowania Overlay'em
	 */
	Overlay: {
		
		/**
		 * Dodajemy Overlay'a
		 */
		showOverlay: function(modal) {
			// jak by juz overlay istnial to nie tworzymy kolejnego
			if ($('#layer').length) return false;
				
			var layer = $('<div/>', {
				  id: 'layer',
				  css: {
					height : $('body').height(),
					opacity : '0.6',
					display: 'none'
				  }
				}).prependTo('body').show();

			if (modal != true) 
				layer.click(this.cleanUpOverlay);
		},
		/**
		 * Dodajemy Overlay, ale modalny - czyli zamykanie tylko poprzez okienko ktore sie pojawiny na ovelay'u
		 */
		showOverlayModal: function() {
			SerJS.Overlay.showOverlay(true);
		},
		/**
		 * Pozbywa sie overlay'a animacja fadeOut
		 * @param callback Funkcja ktora wywylamy kiedy zakonczy sie animacja i usuniemy ovelay'a
		 */
		cleanUpOverlay: function(callback) {

			$('#layerContent').remove();
			$('#layer').remove();
			if (callback != undefined && typeof(callback) == 'function') {
				callback();
			}
			return false;
		},
		
		/**
		 * otwieramy okienko na warstwie i pokazujemy message
		 * @param msg string - to co mamy pokazac w okienku na warstwie
		 * @param setFocusToCssSelector string - css selector 
		 */
		showMessage: function(msg, setFocusToCssSelector) {
			var top = $('body');
			if($('#layerContent').length==0) {
				top.prepend('<div id="layerContent"><div class="shadow"></div></div>');
			}
	
			var layerContent = $('#layerContent');
			if(layerContent.find('.content').length==0) {
				layerContent.prepend('<div class="content"><div id="message"></div><span class="loader"><!-- --></span></div>');

				//Przycisk Close 
				$('<a href="#close" class="close" title="zamknij">X</a>')
					.click(this.cleanUpOverlay)
					.prependTo(('#layerContent .content'));
			}
			
			$('#message').html(msg);
			
			loader = $('span.loader');
			loader.css({display:'block'});
	
	
			layerContentWidth = layerContent.width();
			layerContentHeight = layerContent.height();
	
			var contentWidth = top.width();
			var center = (contentWidth-layerContentWidth)/2;
			layerContent.css({'left':center});
	
			layerContent.fadeIn('fast', function() {
				if (setFocusToCssSelector && typeof(setFocusToCssSelector) == 'string')
					layerContent.find(setFocusToCssSelector).focus();				
			});
	
			var shadow = $('div.shadow');
			shadow.css({'width':layerContentWidth,'height':layerContentHeight,'opacity': 0.2});
	
			loader.css({display:'none'});
	

		},
		/**
		 * Ajax Modal box dla linku gdzie url jest w relu
		 */
		modalLinkClick_event: function(event) {
			$.ajax({
				url: this.rel,
				type: "GET",
				beforeSend: SerJS.Overlay.showOverlayModal,
				success: function(data) {
					SerJS.Overlay.showMessage(data);
				} 
			});
			return false;
		}
	}, // koniec klasy Overlay
	
	Glosowanie: {
		/**
		 * najechanie na gwiazdeczki powiduje odpowiednie podswietlenie - czasami sa inne kolory - przekazujemy w data
		 */
		starsMouseover: function(e) {
			// defaultowe:
			if (e.data == undefined) e.data = {};
			if (e.data.cssClass1 == undefined) e.data.cssClass1 = 'starWhite';
			if (e.data.cssClass2 == undefined) e.data.cssClass2 = 'starGreen';

			$(this).parent().prevAll().andSelf().not('h4').children()
				.addClass(e.data.cssClass1).removeClass(e.data.cssClass2);
			$(this).parent().nextAll().children()
				.addClass(e.data.cssClass2).removeClass(e.data.cssClass1);
		},
		/**
		 * klikniecie na gwiazdeczkę - wyslanie ajax request
		 */
		starVote: function() {
			hrefUrl = $(this).attr('href');
			$.ajax({
				url: hrefUrl,
				type: "POST",
				dataType: "json",
				beforeSend: SerJS.Overlay.showOverlay,
				success: function(xml) {
					if(xml.result === true){
						SerJS.Overlay.showMessage(xml.msg);

						var ocena = $('#stars');
						ocena.html('<h4>Twoja ocena</h4>');
				
						url=hrefUrl.split('=');
						var moja_ocena=url[1];
				
						for (i=1;i<=5;i++) {
							if (i <= moja_ocena) {
								ocena.append('<span class="starWhite"></span>');
							}
							else {
								ocena.append('<span class="starGreen"></span>');
							}
						}

					} else {
						SerJS.Overlay.showMessage(xml.msg);
					}
				} 
			});
			return false;
		},
		/**
		 * Ehhh bardzo podobna funkcja do starVote, ale niestety sa roznice i tak bedzie prosciej ;/
		 */
		starVoteCoverImage: function() {
			hrefUrl = $(this).attr('href');
			$.ajax({
				url: hrefUrl,
				type: "POST",
				dataType: "json",
				beforeSend: SerJS.Overlay.showOverlay,
				success: function(j) {
					
					if(j.result === true){
						SerJS.Overlay.showMessage('Dziękujemy za ocene.');

						$('#ratingForm strong').after(j.project_avg_rating);

					} else {
						var info = (typeof(j.errors.internal) == 'string')?': '+j.errors.internal:'.';
						SerJS.Overlay.showMessage('Wystąpił błąd podczas dodawania oceny'+info);
					}
				} 
			});
			return false;
		} 
	},// koniec klasy glosowanie
	
	Przepisy: {
		
		odpalTabySkladnikow: function() {
			$('ul#tabComponent > li > a').click(function() {
				var activeUL = $(this).parent().addClass('active')
									.siblings('.active').removeClass('active')
									.end().find('ul'); // powracamy do Li aktualnego i bierzmy ze srodka Ul
									
				activeUL.parents('ul#tabComponent').css({'height': activeUL.height() + 61});
				
				return false;
			}).filter('li.active :parent').click(); // klikamy aktywny na starcie
		},
		
		bindFilterFormSubmit: function() {
			 $('#formRecipeScore').submit(function(){ /* HS 20100728 */
					var baseUrl = $(this).attr('action');
					 var locUrl = ''; 
					 baseUrl = baseUrl.replace('/przepisy/serowe-przepisy','');
					 baseUrl = baseUrl.replace(/\/kategorie\/[^\/]*\//gi,'/'); 
					 baseUrl = baseUrl.replace(/\/skladniki\/[^\/]*\//gi,'/'); 
					 if($(this).find('input[name="ingredients"]').val() != '') locUrl += "/skladniki/" + $(this).find('input[name="ingredients"]').val();
					 if($(this).find('input[name="categories"]').val() != '') locUrl += "/kategorie/" + $(this).find('input[name="categories"]').val(); 
					 $(this).find('input:not([type="submit"])').remove(); 
					 baseUrl = unescape(baseUrl);
					 baseUrl = '/przepisy/serowe-przepisy' + locUrl + baseUrl;
					 window.location = escape(baseUrl);
					 return false;
			});
		},
		
		bindPaginationSubmit: function() {
			$('#formPagination').submit(function() {
				var form = $('#formRecipeScore');
				var baseUrl = form.attr('action');
				baseUrl = baseUrl.replace(/\/strona\/[\d+]/gi, '/strona/'+parseInt($(this).find('#formPaginationPage').attr('value')));
				window.location.href = baseUrl;
				return false;
			});
		},
		
		dodajFiltr_SkladnikLubKryterium: function(formObj, parentContainerObj, elementsContainerCssPath, formInputName) {
			parentContainerObj.find('li ul li a').click(function() {

				var ComponentContainer = formObj.find(elementsContainerCssPath);

				if ($(this).toggleClass('active').hasClass('active')) {
					$('<li><a href="#" rel="' + $(this).attr('rel') +'">' + $(this).attr('title') + '</a></li>')
						.appendTo(ComponentContainer)
						.find('a').click(function(e){ // podpinamy usuwanie z listy filtów
							parentContainerObj.find('a[rel='+e.target.rel+']').click();
							return false;
						});
					formObj.fadeIn();
				}
				else { 
					formObj.find('a[rel=' + $(this).attr('rel') +']').parent().remove();
				}
				
				var skladnikiArr = [];
				ComponentContainer.find('a').each(function(){ skladnikiArr.push(this.rel); }); // przygotowanie arr
				formObj.find('input[name='+formInputName+']').val( skladnikiArr.join(',')  ); // zapisanie arr w inpucie
				
				// sprawdzmy czy nie ma filtrow i jak nie ma to reload
				if (formObj.find('li a').length == 0)
				  window.location = formObj.find('.clearAll').attr('href');	
				
				return false;
			})
			// filtrujemy juz atywne na starcie, na chwile wywalamy klasę i klikamy - klasa bedzie ponownie nadana
			// (tak bylo najszybiciej :) )
			.filter('.active').removeClass('active').click(); // wykonywane TYLKO raz na document ready
		},
		
		// param clearBehavior okresla jakie ma byc zachowanie "wyczysc wszystkie"
		dodajKryteria_dodajPrzepis: function(formObj, parentContainerObj, elementsContainerCssPath, formInputName, bindClearAll) {
			parentContainerObj.find('li ul li a').click(function() {
				var ComponentContainer = formObj.find(elementsContainerCssPath);

				// jak teraz jest NIE aktywny (a zaraz bedzie) to sprawdzamy
				// czy to nei jest wybor typu 'single' bo wtedy trzeba odznaczyc poprzedni
				if (!$(this).hasClass('active'))
				{
					var parentObj = $(this).parents('.single');
					if (parentObj.length > 0)
						parentObj.find('a.active').click();
				}
				
				if ($(this).toggleClass('active').hasClass('active')) {
					$('<li><a href="#" rel="' + $(this).attr('rel') +'">' + $(this).attr('title') + '</a></li>')
						.appendTo(ComponentContainer)
						.find('a').click(function(e){ // podpinamy usuwanie z listy filtów
							parentContainerObj.find('a[rel='+e.target.rel+']').click();
							return false;
						});
					
					// pokazujemy aktywne
					formObj.find('#yourCriterion:not(:visible)').fadeIn();
				}
				else { 
					formObj.find('#criterion a[rel=' + $(this).attr('rel') +']').parent().remove();
				}
				
				var skladnikiArr = [];
				ComponentContainer.find('a').each(function(){ skladnikiArr.push(this.rel); }); // przygotowanie arr
				formObj.find('input[name='+formInputName+']').val( skladnikiArr.join(',')  ); // zapisanie arr w inpucie

				// czy podpinamy usuwanie z listy filtów ? // to jest uzywane tylko w poradach
				if (bindClearAll === true) 
				{
					formObj.find('.clearAll').click(function(e){ // podpinamy usuwanie z listy filtów
						formObj.find('ul.yourCategories li a').each(function() {
							parentContainerObj.find('a[rel='+this.rel+']').click();
						});
						return false;
					});
				}
				
				return false;
			})
			// filtrujemy juz atywne na starcie, na chwile wywalamy klasę i klikamy - klasa bedzie ponownie nadana
			// (tak bylo najszybiciej :) )
			.filter('.active').removeClass('active').click(); // wykonywane TYLKO raz na document ready
		},
		
		odpalKryteriaAkordeon: function() {
			$('#tabCategories h4').click(function(){
				$(this).next().slideToggle('fast')
				.parent().toggleClass('active') // toggleClass specjalnie NIE w callbacku animacji
				.siblings('.active').removeClass('active').find('ul').slideUp('fast'); // szukamy teraz innego aktywnego i zwijamy go
			});
		},
		
		odpalEdycjeTagow: function(inputObj) {
			if (typeof(TagEditor) != "undefined") { // czy plugin zaladoawny?
				TagEditor.init(inputObj);
			}
			else
			{
				$.ajax({ // load skryptu...
					url: '/static/_js/tag.editor.js',
					dataType: 'script',
					success: function(data, textStatus){
						// hack na dziwnie dzialanie w FF 
						try {
							TagEditor.init(inputObj);
						} catch (e) {
							eval(data);
							TagEditor.init(inputObj);
						}
					}
				});
			}
		},
		
		odpalPrzegladanieObrazkow: function() {
			var imgSliderLength = $("ul.imgSlider li").length;
			var imgContainer = $("#imgContainer");
			var position = 0;
			var heightImg = 0;
			$('#imgContainer li img').load(function(){
				$('#imgContainer li img:first').hide();
				heightImg = $('#imgContainer li img').eq(position).height();
				$("ul.imgSlider").animate({height:heightImg},300);
				$('#imgContainer li img:first').show();
			});
			heightImg = $('#imgContainer li img').eq(position).height();
			$("ul.imgSlider").animate({height:heightImg},300);
			$('#imgContainer li img:first').show();
			if (imgSliderLength > 1) {
				imgContainer.append('<ul class="imgPaginator"><li><a class="prev" href="" title="Poprzednie">Poprzednie</a></li><li class="imgPosition">1 z ' + imgSliderLength +'</li><li><a class="next" href="" title="Następne">Następne</a></li></ul>');
			}
			$('.imgPaginator li a.next').live('click',function() {
				if ((position + 1)< imgSliderLength) {
					$('#imgContainer li img').hide();
					position = position + 1;
					heightImg = $('#imgContainer li img').eq(position).height();
					$("ul.imgSlider").animate({height:heightImg},300);
					$('.imgPaginator li.imgPosition').text((position + 1) + ' z ' + imgSliderLength);
					$('#imgContainer li img').eq(position).fadeIn(1000);
				}
				return false;
			});
			$('.imgPaginator li a.prev').live('click',function() {
				if (position > 0) {
					$('#imgContainer li img').hide();
					position = position - 1;
					heightImg = $('#imgContainer li img').eq(position).height();
					$("ul.imgSlider").animate({height:heightImg},300);
					$('.imgPaginator li.imgPosition').text((position + 1) + ' z ' + imgSliderLength);
					$('#imgContainer li img').eq(position).fadeIn(1000);
				}
				return false;
			});
		},
		
		uploadRemoveFile: function() {
			$(this).parent().remove();
			return false;
		}
		
	}, // koniec klasy Przepisy
	
	
	Porady: { // Klasa Porady
		
		bindFilterFormSubmit: function() {
			 $('#formRecipeScore').submit(function(){ /* HS 20100728 */
					var baseUrl = $(this).attr('action');
					 var locUrl = ''; 
					 baseUrl = baseUrl.replace('/porady/lista-porad','');
					 baseUrl = baseUrl.replace(/\/kategorie\/[^\/]*\//gi,'/'); 
					 if($(this).find('input[name="categories"]').val() != '') locUrl += "/kategorie/" + $(this).find('input[name="categories"]').val(); 
					 $(this).find('input:not([type="submit"])').remove(); 
					 baseUrl = unescape(baseUrl);
					 baseUrl = '/porady/lista-porad' + locUrl + baseUrl;
					 window.location = escape(baseUrl);
					 return false;
			});
		},
		
		bindPaginationSubmit: function() {
			$('#formPagination').submit(function() {
				var form = $('#formRecipeScore');
				var baseUrl = form.attr('action');
				baseUrl = baseUrl.replace(/\/strona\/[\d+]/gi, '/strona/'+parseInt($(this).find('#formPaginationPage').attr('value')));
				window.location.href = baseUrl;
				return false;
			});
		},
		
		dodajFiltr_SkladnikLubKryterium: function(formObj, parentContainerObj, elementsContainerCssPath, formInputName) {
			//dokladnie ta sama funckjonalnosc co w przepisach 
			return SerJS.Przepisy.dodajFiltr_SkladnikLubKryterium(formObj, parentContainerObj, elementsContainerCssPath, formInputName);
		},
																								

		dodajKryteria_dodajPorade: function(formObj, parentContainerObj, elementsContainerCssPath, formInputName) {
			// ta sama funckja - ostatni paramter tylko inny
			return SerJS.Przepisy.dodajKryteria_dodajPrzepis(formObj, parentContainerObj, elementsContainerCssPath, formInputName, true);
		},
		
		odpalKryteriaAkordeon: function() { // identycznie w przepsiach
			return SerJS.Przepisy.odpalKryteriaAkordeon(); 
		}
	},		// Koniec klasy Porady
	
	Like: {
		pokazKomunikat: function() {
			$('#ratingForm a.auth-link').live('click',function() {
				if(Auth.status==false) {
					return false;
				} else {
					var id = $(this).attr('rel'),
						url = '/badz-seromaniakiem/konkursowa-galeria-opakowan/glosuj.html',
						likeit = '<a href="#likeIt" class="likeIt" rel="'+id+'"><img src="/static/_img/front/btn_LubieTo.png" alt="Lubię to" /></a>';
					$.ajax({
						url: url,
						type: "GET",
						data: 'id='+id,
						dataType: 'json',
						beforeSend: SerJS.Overlay.showOverlayModal,
						success: function(data) {
							var button = '';
							if (data.status == true) button = '<p class="confirmLike">'+likeit+'</p>';
							
 							SerJS.Overlay.showMessage('<p class="messageLike">'+data.message+'</p>'+button);
							
							var likeButton = $('#message a.likeIt');
							
							likeButton.click(function() {
								var loader = $('span.loader'),
									message = $('#message');
									
								$.ajax({
									url: url+'?id='+id,
									type: "POST",
									data: 'submit=1',
									dataType: 'json',
									beforeSend: function() {
										SerJS.Overlay.showOverlayModal;
										loader.css({'display':'block'});
									},
									success: function(data) {
										loader.hide();
										SerJS.Overlay.showMessage('<p class="messageLike">'+data.message+'</p>');
										var votes = $('a[rel='+id+']').prev('em.likeCounter').html();
										$('a[rel='+id+']').prev('em.likeCounter').html(parseInt(votes)+1);
										$('a[rel='+id+']').after('<p class="uLikeIt" title="Lubisz już ten projekt">Lubisz to!</p>')
										$('a[rel='+id+']').remove();
									},
									error: function() {
										SerJS.Overlay.showMessage('Ajax Error');
									}
								});
								return false;
							});
						},
						error: function() {
							SerJS.Overlay.showMessage('Ajax Error');
						}
					});
				}
				return false;
			});
		}	
	},
	
	Seropedia: {
		odpalPrzegladanieObrazkow: function() {
			$.getScript('/static/_js/jquery.jcarousel.min.js', function() {
			    if ($('.jcarousel li').length > 3) {
			        $('.jcarousel').jcarousel({
			            vertical: true,
			            scroll: 3
			        });        
			    }
			});
		},
		uploadRemoveFile: function() {
			$(this).parent().remove();
			return false;
		}
	},
	
	PomyslNaSer: {
		ustawFormularz: function() {
			$('#formAddRecipe').submit(function() {
				var form = $(this);
				if(Auth.status==false) {
					Auth.login(function() {
						form.submit();
					});
					return false;
				} else {
					return true;
				}
			});
		}
	},
	
	Komentarze: {
		/**
		 * wczytuje do podanego kontenera - obsluga pagera przez params
		 */
		wczytajListe: function( containerObj, urlParamas ) {
			var adres = containerObj.attr('rel'); // bierzemy adres z kontenera komantarzy
			if (urlParamas != undefined)
				adres+='?'+urlParamas;

			containerObj.load(adres, function(){
					// podpinamy new koment form
					$(this).find('.btn_newComment.modalbox').click(SerJS.Komentarze.showDodajForm);
					
					//podpinamy pager'a (przekazujemy obiekt aby go pozniej nie szukac)
					$(this).find('.commentLoad').bind('click', {'containerObj': containerObj}, SerJS.Komentarze.liveAjaxPager_event);
				});
		},
		
		/**
		 * Event dla przyciskow pagera komentarzy
		 */
		liveAjaxPager_event: function(e){
			var param = e.target.href.substr(e.target.href.indexOf('#')+1); //bierzemy substring po #
			SerJS.Komentarze.wczytajListe( e.data.containerObj, param ); 
			return false;
		}
		,
		/**
		 * Poboeranie i wyswietlenie forlumarza dodawania komantarza
		 */
		showDodajForm: function(event){
			// pobieramy html'a formularza
			$.ajax({
				url: event.target.rel,
				type: "GET",
				beforeSend: SerJS.Overlay.showOverlayModal,
				success: function(data) {
					dataObj = $(data); // jQ object aby bylo wygodniej
					SerJS.Overlay.showMessage( dataObj );
					
					// odpalnie TinyMCE
					SerJS.initTinyMCE_Run( 'cont_editor' );
					
					dataObj.find('#captchaRefresh a').click(function(){
						$('#captcha').attr('src', '/captcha.gif?r='+Math.random());
						return false;
					});
					
					// Bind ajax form
					dataObj.find('#commentsForm').submit(function(){
						$.ajax({
							type: 'POST',
							url: this.action,
							data: $(this).serialize(),
							dataType: 'json',
							success: SerJS.Komentarze.dodajSucces
						});
						return false;
					});
				}
			});

			return false;
		},
		dodajSucces: function(data){
			if (data.result) // true - poprawnie dodano
			{
				SerJS.Overlay.cleanUpOverlay();
				SerJS.Komentarze.wczytajListe( $('#commentsContent') );
				SerJS.Overlay.showMessage('Dziękujemy za dodanie komentarza');
				return;
			}
			$('#captcha').attr('src', '/captcha.gif?t='+((Math.random()+'').substr(2)));
			if (data.msg)
				var msg = data.msg;
			else
				var msg = 'Wystąpił nieznany błąd, spróbuj ponownie.';
			
			$('#commentsForm .contComment').empty().append('<em class="i"><!-- --></em><span class="err">'+data.msg+'</span>');
		}
		
	}, // koniec klasy Komentarze


	/**
	 * wlasciwa inicjalizacja TinyMCE na textarea - czyli skrypt jest zaladowany
	 */
	initTinyMCE_Run: function(id) { // 
		tinyMCE.init({
			 mode : "exact",
			 elements : id,
			 theme : "advanced",
			 theme_advanced_buttons1 : "bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,bullist",   //,link
			 theme_advanced_buttons2 : "",
			 theme_advanced_buttons3 : "",
			 theme_advanced_buttons4 : "",
			 theme_advanced_toolbar_location : "top",
			 theme_advanced_blockformats : "h3,h4,h5",
			 remove_linebreaks : false,
			 plugins : "smbbcode,paste",
			 entity_encoding : "raw",
			 language: "pl"
		});
	},
	
	/**
	 * Globany event - pokazywanie informacji o bledach validacji 
	 */
	wlaczPokazywanieBledowValidacji: function() { 
		$('em.i')
			.live('mouseover',function() { $(this).next().css('display', 'block'); })		// Info o błędach rozjeżdża się, gdy dostaje 'inline'
			.live('mouseout', function() { $(this).next().hide(); });

	},
	dodajDoUlubionych: function() { // dodania przepisu do ulubionych
		$.ajax({
			url: $(this).attr('href'),
			type: "POST",
			dataType: "json",
			beforeSend: SerJS.Overlay.showOverlay,
			success: function(xml) {
				SerJS.Overlay.showMessage(xml.msg);
			} 
		});
		return false;
	},
	
	loadFacebook: function() {        
        SMFB.init(Config.facebook.api_key);
        /*
		$.ajax({ // load skryptu...
			url: 'http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/pl_PL',
			dataType: 'script',
			success: function(data, textStatus){
				// hack na dziwnie dzialanie w FF 
				try {
					SMFB.init(Config.facebook.api_key);
				} catch (e) {
					eval(data); // to i ten timeout tez dla FF ;/
					setTimeout(function(){ SMFB.init(Config.facebook.api_key); }, 500);
				}
			}
		});        */
	}
	

};


/**
 * ----------------------------------------
 * PLUGINY itp
 * ----------------------------------------
 */


function cssInject(rules, media) {
	// make a new stylesheet
	var ns = document.createElement('style');
	if (media) {
		ns.media = media;
	}
	document.getElementsByTagName('head')[0].appendChild(ns);
	// Safari does not see the new stylesheet unless you append something.
	// However!  IE will blow chunks, so ... filter it thusly:
	if (!window.createPopup) {
		ns.appendChild(document.createTextNode(''));
	}
	var s = document.styleSheets[document.styleSheets.length - 1];
	// loop through and insert
	for (var selector in rules) {
		if (s.insertRule) {
			 // it's an IE browser
			try { 
				s.insertRule(selector + rules[selector], s.cssRules.length); 
			} catch(e) {}
		}
		else {
			// it's a W3C browser
			try { 
				s.addRule(selector, rules[selector]); 
			} catch(e) {}
		}               
	}
}

/**
 * Fix dla IE kiedy nie ma array indexOf
 */
if (!Array.prototype.indexOf) {
 Array.prototype.indexOf = function(elt) {
  var len = this.length;
  var from = Number(arguments[1]) || 0;
  from = (from < 0) ? Math.ceil(from) : Math.floor(from);
  if (from < 0) from += len;
  for (; from < len; from++) {
   if (from in this && this[from] === elt) return from;
  }
  return -1;
 };
}



/**
 * plugin do ładnych checkboxów
 */
jQuery.fn.cssCheckbox = function () {
	 return this.each( function(){
	  if ( jQuery(this).prev().is(":checked") )
	   jQuery(this).addClass("checked");
	  else
	   jQuery(this).addClass("unchecked");
	 }).click( function() {
	  jQuery(this).toggleClass("checked").prev().checked = !jQuery(this).prev()[0].checked;
	  jQuery(this).toggleClass("unchecked").prev().checked = jQuery(this).prev()[0].checked;
	 }).prev().css({
	  position: "absolute",
	  top: "-99999999px"
	 });
	};



/**
 * Plugin serializeObject
 *  
 */
jQuery.serializeObject = function(_obj) {
	// Let Gecko browsers do this the easy way
	if (typeof _obj.toSource !== 'undefined' && typeof _obj.callee === 'undefined') {
		return _obj.toSource();
	}
	// Other browsers must do it the hard way
	switch (typeof _obj) {
		// numbers, booleans, and functions are trivial:
		// just return the object itself since its default .toString()
		// gives us exactly what we want
		case 'number':
		case 'boolean':
		case 'function':
			return _obj;
			break;

		// for JSON format, strings need to be wrapped in quotes
		case 'string':
			return '\'' + _obj + '\'';
			break;

		case 'object':
			var str;
			if (_obj.constructor === Array || _obj.length || typeof _obj.callee !== 'undefined') {
				str = '[';
				var i, len = _obj.length;
				for (i = 0; i < len-1; i++) { str += jQuery.serializeObject(_obj[i]) + ','; }
				str += jQuery.serializeObject(_obj[i]) + ']';
			} else {
				str = '{';
				var key;
				for (key in _obj) { str += key + ':' + jQuery.serializeObject(_obj[key]) + ','; }
				str = str.replace(/\,$/, '') + '}';
			}
			return str;
			break;
		default:
			return 'UNKNOWN';
			break;
	}
};

