var _URL = document.location.href;
var _HOST = document.location.hostname;
var _sPATH = 'http://'+_HOST;


function anchor(target) {
	var targetOffset = $('#'+target).offset().top;
	$('html').animate({scrollTop: targetOffset}, 1000);
	return false;
}

function defaultValueRestore(selector) {
	$(selector).focus(function(){
		var def = $(this)[0].defaultValue;
		var cur = $(this).val();
		if (def==cur) {
			$(this).attr('value','');
		}
	});
	$(selector).blur(function(){
		var def = $(this)[0].defaultValue;
		var cur = $(this).val();
		if (def==cur || cur=='') {
			$(this).attr('value',def);
			$(this).removeClass('ok');
		}
		else {
			$(this).addClass('ok');
		}
	});	
}

function cufonize(refresh) {
	if (refresh) {
		Cufon.refresh('#menu>ul>li>a', { hover: true } );
	}
	else {
		Cufon.replace('#menu>ul>li>a', { hover: true } );
		Cufon.replace('h2, h3, #main_texts p');
		Cufon.CSS.ready(fpr);
	}
}

$(document).ready(function() {
	cufonize();
	//setTimeout(cufonize, 1000);
});



//$(document).ready(fpr);
function fpr() {
	$('#menu div').mouseleave(function() {
		setTimeout(function(){cufonize(true);},25);
		setTimeout(function(){cufonize(true);},250);
	});

	
	$('#main_texts>*, #main_offers>*').each(function(){
		var h = $(this).outerHeight(true);
		$(this).attr('data-outerHeight',h);
		//$(this).css({visibility:'visible'});
	});
	
	$('#menu>ul>li').mouseenter(function() {
		var ol = $(this)[0].offsetLeft;
		var w = $(this).find('div')[0].clientWidth;
		var ww = $('#menu').width();
		if (ol+w > ww) {
			$(this).find('div').css({right:0});
		}
	});
	
	
	
	$('#backgrounds .background').each(function(){
		var s = $(this).attr('data-src');
		var that = $(this);
		preload([s], function(){
			that.css({backgroundImage:'url("'+s+'")'});
		});
	});
	
	bck.cnt = $('#backgrounds .background').length;
	bck.current = 1;
	bck.timer = null;
	bck.time = 10000;
	bck.slideTime = 1500;
	
	if (bck.cnt>1) {
		//startBck();
	}
	
	var sliderSpecialActions = {
		before: function(id, prev, current) {
			var nav = $('#'+id+' nav');
			var bprev = $('#'+id+' .banner[data-banner='+prev+']');
			var bcurrent = $('#'+id+' .banner[data-banner='+current+']');
			var nav_top = parseInt(nav.css('top'));
			var bprev_h = parseInt(bprev.attr('data-outerHeight'));
			var bcurrent_h = parseInt(bcurrent.attr('data-outerHeight'));
			
			if ((prev==current && nav_top==0) || bprev_h!=bcurrent_h) {
				nav.fadeOut(250, function() {
					$(this).css({top: -51-bcurrent_h-16-15}); // 16 self height 
				});
			}
			if (id=='main_texts') {
				slideBck(current);
			}
		},
		after: function(id, prev, current) {
			var nav = $('#'+id+' nav');
			var bprev = $('#'+id+' .banner[data-banner='+prev+']');
			var bcurrent = $('#'+id+' .banner[data-banner='+current+']');
			var nav_top = parseInt(nav.css('top'));
			var bprev_h = parseInt(bprev.attr('data-outerHeight'));
			var bcurrent_h = parseInt(bcurrent.attr('data-outerHeight'));
			
			if (prev==current || bprev_h!=bcurrent_h) {
				nav.fadeIn(250);
			}
		}
	};
	
	createSlider('main_texts', 5000, 500, false, sliderSpecialActions);
	createSlider('main_offers', 4500, 500, false, sliderSpecialActions);
	slideSlider('main_texts', 1);
	slideSlider('main_offers', 1);
	
	$('#kontakt_form').submit(contact_send);
	$('#comments_form').submit(comment_send);
}



var bck = {};

function startBck() {
	if (bck.timer==null) {
		bck.timer=setInterval(function() {
			slideBck('next');
		}, bck.time);
	}
}

function slideBck(mode) {
	if (mode=='next') {
		if (bck.current+1>bck.cnt) { bck.current=1; }
		else { bck.current++; }
	}
	else if (mode=='prev') {
		if (bck.current-1<1) { bck.current = bck.cnt; }
		else { bck.current--; }
	}
	else {
		if (mode>=1 && mode <= bck.cnt) { bck.current = mode; }
		else { bck.current=1; }
	}
	
	$('#backgrounds .background').each(function(){
		var db=$(this).attr('data-banner');
		if (db==bck.current) {
			$(this).stop(true, true).fadeIn(bck.slideTime);
		}
		else {
			$(this).stop(true, true).fadeOut(bck.slideTime);
		}
	});
	
}


var sliders = {};

function createSlider(id, time, slideTime, numbers_on_controls, callbacks) {
	if (!time) { time=5000; }
	if (!slideTime) { slideTime=500; }
	sliders[id]= {time: time, cnt: 0, slideTime: slideTime, timer: null, current: 1, callbacks: callbacks};

	//$('#'+id).append('<div class="controls"></div>');
	//$('#'+id).html('<nav class="controls"></nav>'+$('#'+id).html());
	$('#'+id+' .banner').each(function() {
		$(this).hide();
		sliders[id].cnt++;
		$(this).attr('data-banner',sliders[id].cnt);
		var html = $('#'+id+' .controls').html();
		if (numbers_on_controls) {
			$('#'+id+' .controls').html(html+'<a data-banner="'+sliders[id].cnt+'">'+sliders[id].cnt+'</a>');
		}
		else {
			$('#'+id+' .controls').html(html+'<a data-banner="'+sliders[id].cnt+'"></a>');
		}
	});
	$('#'+id+' .banner:first-child').css({display: 'block'});
	$('#'+id+' .controls a:first-child').addClass('on');
	
	startSlider(id);
	
	$('#'+id+' .controls a').click(function(){
		var db=$(this).attr('data-banner');
		if (sliders[id].current != db) {
			stopSlider(id);
			startSlider(id);
			slideSlider(id, db);
			
		}
	});
	
	$('#'+id).hover(function(){
		stopSlider(id);
	}, function(){
		startSlider(id);
	});
}

function startSlider(id) {
	if (sliders[id].timer==null) {
		sliders[id].timer=setInterval(function() {
			slideSlider(id, 'next');
		}, sliders[id].time);
	}
}

function stopSlider(id) {
	if (sliders[id].timer!=null) {
		clearInterval(sliders[id].timer);
		sliders[id].timer=null;
	}
}

function selectSlider(id, mode) {
	var r=1;
	if (mode=='next') {
		if (sliders[id].current+1>sliders[id].cnt) { r=1; }
		else { r = sliders[id].current+1; }
	}
	else if (mode=='prev') {
		if (sliders[id].current-1<1) { r = sliders[id].cnt; }
		else { r = sliders[id].current-1; }
	}
	else {
		if (mode>=1 && mode <= sliders[id].cnt) { r = mode; }
		else { r = 1; }
	}
	return r;
}

function slideSlider(id, mode) {
	var callbacks = sliders[id].callbacks;

	var prev = sliders[id].current;
	sliders[id].current = selectSlider(id, mode);

	if (callbacks && callbacks.before) {
		callbacks.before(id, prev, sliders[id].current);
	}
	
	$('#'+id+' .banner').each(function(){
		var db=$(this).attr('data-banner');
		if (db==sliders[id].current) {
			if (callbacks && callbacks.after) {
				$(this).stop(true, true).fadeIn(sliders[id].slideTime, function(){ callbacks.after(id, prev, sliders[id].current); });				
			}
			else {
				$(this).stop(true, true).fadeIn(sliders[id].slideTime);				
			}
		}
		else {
			$(this).stop(true, true).fadeOut(sliders[id].slideTime);
		}
	});

	$('#'+id+' .controls a').each(function(){
		var db=$(this).attr('data-banner');
		if (db==sliders[id].current) {
			$(this).addClass('on');
		}
		else {
			$(this).removeClass('on');
		}
	});

}







$(document).ready(dready);
function dready() {
	defaultValueRestore('input[type=text].default, textarea.default');
	maxLengthCounter('input.counter');
	validation('form.validation_enabled');
	
	// mutiple galleries
	$("a.LB").attr('rel','prettyPhoto[gal1]');
	// regex allowing to use classes like pp-GALLERY_TAG_HERE to merge images
	// into galleries w/out need to use incorrect rel tagging 
	$("a:regex(class, pp-.*)").each(function(){
		var cl=$(this).attr('class');
		var clexp = explode(' ',cl);
		for (key in clexp) {
			var val = clexp[key];
			var matches = val.match(/^pp-(.*)/);
			if (matches) {
				$(this).removeClass(matches[0]);
				$(this).attr('rel','prettyPhoto['+matches[1]+']');
			}
		}
	});
	$("a[rel^='prettyPhoto']").prettyPhoto({hideflash:true, social_tools:false, deeplinking: false});
	
	// single images
	$("a.LB2").prettyPhoto({hideflash:true, social_tools:false, deeplinking: false});
}




function contact_send(e) {
	var h=$('#kontakt_form').height();
	$('#kontakt_form').css({height: h});
	var is_booking=$('#kontakt_form').hasClass('booking');
	
	if (!e.isDefaultPrevented()) {
		var selector = '#kontakt_form';
		var rules = $(this).find('.rules').html();

		var arr = Array();
		$(selector).find('input[type=text],input[type=password],input[type=radio]:checked,input[type=checkbox]:checked,textarea,select').each(function(){
			var name=$(this).attr('name');
			var val=$(this).val();
			arr[name]=val;
		});
		
		validation_triggered=true;
		var result = validateArray(arr, rules);
		
		if (result===true) {
			var w=$('#kontakt_form').width();
			var h=$('#kontakt_form').height();
			$('#kontakt_form').css({height: h});
			$('#kontakt_form .loading').css({width: w, height: h});
			$('#kontakt_form .loading').fadeOut(0);
			$('#kontakt_form .content').animate({opacity: 0.1}, 500);
			$('#kontakt_form .loading').fadeIn(500, function(){
				$.ajax({
					type: "POST",
					url: "/ajax/contact/",
					cache: true,
					data: {
						"v1": $('#kontakt_form [name=v1]').val(),
						"v2": $('#kontakt_form [name=v2]').val(),
						"v3": $('#kontakt_form [name=v3]').val(),
						"v4": $('#kontakt_form [name=v4]').val(),
						is_booking: is_booking
					},
					timeout: 25000, // 25 sec
					error: function() {
						$('#kontakt_form .loading').fadeOut(500);
						$('#kontakt_form .content').animate({opacity: 1}, 500, function() {
							alert('Błąd przetwarzania żądania. Spróbuj wysłać formularz ponownie. Jeżeli sytuacja się powtórzy - proszę użyj innej metody kontaktu.');
						});
					},
					success: function(info) {
						if (info && info=="OK") {
							$('#kontakt_form .loading').fadeOut(500);
							$('#kontakt_form .content').slideUp(500);
							$('#kontakt_form .success').fadeIn(500);
						}
						else {
							$('#kontakt_form .loading').fadeOut(500);
							$('#kontakt_form .content').animate({opacity: 1}, 500, function() {
								alert('Błąd przetwarzania żądania. Spróbuj wysłać formularz ponownie. Jeżeli sytuacja się powtórzy - proszę użyj innej metody kontaktu.');
							});
						}
			         } // success
				});// ajax
			});
			return false;
		}
	}
}

function comment_send(e) {
	var h=$('#comments_form').height();
	$('#comments_form').css({height: h});
	var id_a=$('#comments_form').attr('data-id_a');
	
	if (!e.isDefaultPrevented()) {
		var selector = '#comments_form';
		var rules = $(this).find('.rules').html();

		var arr = Array();
		$(selector).find('input[type=text],input[type=password],input[type=radio]:checked,input[type=checkbox]:checked,textarea,select').each(function(){
			var name=$(this).attr('name');
			var val=$(this).val();
			arr[name]=val;
		});
		
		validation_triggered=true;
		var result = validateArray(arr, rules);

		if (result===true) {
			var w=$('#comments_form').width();
			var h=$('#comments_form').height();
			$('#comments_form').css({height: h});
			$('#comments_form .loading').css({width: w, height: h});
			$('#comments_form .loading').fadeOut(0);
			$('#comments_form .content').animate({opacity: 0.1}, 500);
			$('#comments_form .loading').fadeIn(500, function(){
				$.ajax({
					type: "GET",
					url: "/ajax/comments/add/",
					cache: true,
					data: {
						"nick": $('#comments_form [name=v1]').val(),
						"text": $('#comments_form [name=v2]').val(),
						id_a: id_a
					},
					timeout: 25000, // 25 sec
					error: function() {
						$('#comments_form .loading').fadeOut(500);
						$('#comments_form .content').animate({opacity: 1}, 500, function() {
							alert('Błąd przetwarzania żądania. Spróbuj wysłać formularz ponownie. Jeżeli sytuacja się powtórzy - proszę użyj innej metody kontaktu.');
						});
					},
					success: function(info) {
						if (info && info=="OK") {
							$('#comments_form .loading').fadeOut(500);
							$('#comments_form .content').slideUp(500);
							$('#comments_form .success').fadeIn(500);
						}
						else {
							$('#comments_form .loading').fadeOut(500);
							$('#comments_form .content').animate({opacity: 1}, 500, function() {
								alert('Błąd przetwarzania żądania. Spróbuj wysłać formularz ponownie. Jeżeli sytuacja się powtórzy - proszę użyj innej metody kontaktu.');
							});
						}
			         } // success
				});// ajax
			});
			return false;
		}
	}
	return false;
}

/********************************
 * 
 * COUNTER STUFF
 * 
 ********************************/

loaded_ml = false;
function maxLengthCounter(selector) {
	if (!loaded_ml) {
		loaded_ml= true;
		$(selector).focus(function(){
			var x = $(this).offset().left + $(this).outerWidth() - 20;
			var y = $(this).offset().top + parseInt($(this).css('border-top-width')) + parseInt($(this).css('padding-top'));

			var lh = $(this).outerHeight();
			$(this).prev().css({left: x, top: y, 'line-height': lh+'px'});
			$(this).prev().fadeIn(250);
		});
		$(selector).blur(function(){
			$(this).prev().stop(true,true);
			$(this).prev().fadeOut(250);
		});
		$(selector).each(function(){
			var x = $(this).offset().left + $(this).outerWidth() - 20;
			var y = $(this).offset().top + parseInt($(this).css('border-top-width')) + parseInt($(this).css('padding-top'));
			var lh = $(this).outerHeight();

			var ml = $(this).attr('maxlength');
			var cl = $(this).val().length;
			var iLeft = ml-cl;
			
			$(this).before('<div style="display:none; position:absolute; top: '+y+'px; left: '+x+'px; line-height: '+lh+'px; text-align: center; width: 20px;">'+iLeft+'</div>');
			$(this).keyup(function(event){
				var val=$(this).val();
				var ml = $(this).attr('maxlength');
				var cl = htmlspecialchars(val,'ENT_QUOTES').length;
				var iLeft = ml-cl;
				$(this).prev().html(iLeft);

				if (iLeft<=3) {
					$(this).prev().css({color:'red'});
				}
				else {
					$(this).prev().css({color:'black'});
				}
				
				if (iLeft<=0) {
					var newval = cutAt(val,ml,true);
					$(this).val(newval);
					
					var val=$(this).val();
					var cl = htmlspecialchars(val,'ENT_QUOTES').length;
					var iLeft = ml-cl;
					$(this).prev().html(iLeft);
				}

			});
		});
	}
}
function cutAt(str,len,html) {
	if (html) {
		while (htmlspecialchars(str,'ENT_QUOTES').length>len) {
			str=substr(str,0,-1);
		}
	}
	else {
		while (str.length>len) {
			str=substr(str,0,-1);
		}	
	}
	return str;
}

/********************************
 * 
 * VALIDATION STUFF
 * 
 ********************************/



/**
 * Waliduje formularze
 * @param id - [atrybut html] id formularza 
 * @return bool - jezeli wszystko ok to true
 * TODO przepisac
 */
function validacja_formy(id, or_ok) {
	var blad='';
	$('#'+id+' .req_text').each (function () {
		var def = $(this)[0].defaultValue;
		var cur = $(this).val();
		if (cur=='' || cur==def) {
			blad += "- " + $(this).attr('title') + ".\n";
		}
	});
	$('#'+id+' .req_mail').each (function () {
		if (!isEmail($(this).attr('value'))) {
			blad += "- " + $(this).attr('title') + "\n";
		}
	});
	$('#'+id+' .type_mail').each (function () {
		if (!isEmail($(this).attr('value')) && ($(this).attr('value')!='')) {
			blad += "- Niepoprawny " + $(this).attr('title') + "\n";
		}
	});

	$('#'+id+' .req_date').each (function () {
		var $regexp = new RegExp('^[0-9]{2}/[0-9]{2}/[0-9]{4}$');
		var $val = $(this).attr('value');
		if ($val==undefined || !$val.match($regexp)) {
			blad += "- Niepoprawny format daty w polu "+$(this).attr('title')+ "\n";
		}
	});
	
	$('#'+id+' .req_checkbox').each (function () {
		if (!$(this).attr('checked')) {
			blad += "- " + $(this).attr('title') + "\n";
		}
	});
	
	if (or_ok != undefined) {
		or_ok = false;
		dodaj_txt = "Podaj ";
		$('#'+id+' .req_or').each (function () {
			dodaj_txt += $(this).attr('title')+" lub ";
			if ($(this).attr('value')!='') {
				or_ok=true;
			}
		});
		dodaj_length=dodaj_txt.length;
		dodaj_txt=dodaj_txt.substring(0, dodaj_length-5)+'.';
		
		if (or_ok==false) {
			blad += "- "+dodaj_txt+"\n";
		}
	}
	

	if (blad != '') {
		alert(blad);
		return false;
	}
	else {
		return true;
	}
}

function isEmail(email) {
	email = email.replace(/[ ]/g, '');
	var regEmail = /^([a-zA-Z0-9._-]{1,})@([a-zA-Z0-9._-]{1,})\.([a-zA-Z]{2,4})$/;
	if (!regEmail.test(email)) return false;
	else return true;
}



var validation_triggered=false;
function validation(selector) {
	$(selector).submit(function(e){
		var rules = $(this).find('.rules').html();

		var arr = Array();
		$(selector).find('input[type=text],input[type=password],input[type=radio]:checked,input[type=checkbox]:checked,textarea,select').each(function(){
			//var type=$(this).attr('type');
			var name=$(this).attr('name');
			var val=$(this).val();
			arr[name]=val;
		});
		
		if (!validation_triggered) {
			$(selector).find('input[type=text],input[type=password],input[type=radio]:checked,input[type=checkbox]:checked,textarea,select').blur(function(){
				$(selector).trigger('submit');
			});
			$(selector).find('input[type=text],input[type=password],input[type=radio]:checked,input[type=checkbox]:checked,textarea,select').click(function(){
				$(selector).trigger('submit');
			});
		}

		validation_triggered=true;
		var result = validateArray(arr, rules);

		if (result===false) {
			alert("Niepoprawne reguły"); return false;
		}
		else if (result===true) {
			$(selector).find('.error').removeClass('error');
			$(selector).find('.errorbox').html('');
			if (e.originalEvent) {
		        return true;
		    } else {
		    	return false;
		    };  
		}
		else {
			$(selector).find('.error').removeClass('error');
			$(selector).find('.errorbox').html('');
			var errs = 0;
			for(var prop in result) {
				if ($(this).find('[name='+prop+']').is(':visible')) {
					errs++;
			        $(this).find('[name='+prop+']').addClass('error');
			        for (err in result[prop]) {
			        	var msg = result[prop][err];
			        	$(this).find('[name='+prop+']').parent().find('.errorbox').append('<li>'+msg+'</li>');
			        }
			        $(this).find('[name='+prop+']').parent('div').addClass('error');
				}
			}
			if (errs==0) {
				return true;
			}
			else {
				return false;
			}
		}
	});
}
function validateArray($arr, $rules) {
	$rules=str_replace(Array("\r\n", "\r"), "\n", $rules);
	var $aRules = explode("\n",$rules);
	var $aNames = Array();
	
	if (is_array($aRules)) {
		for (i in $aRules) {
			var $rule=$aRules[i];
			
			$rule = trim($rule);
			if (!empty($rule)) {
				var exp = explode(',',$rule,5);
				var $name = exp[0];
				var $type = exp[1];
				var $matching = exp[2];
				var $fullname = exp[3];
				var $addional = exp[4];
				$aNames[$name]=$fullname;
			}
		}
		
		var $err=Array();
		
		for (i in $aRules) {
			var $rule=$aRules[i];
			$rule = trim($rule);
			if (!empty($rule)) {
				var exp = explode(',',$rule,5);
				var $name = exp[0];
				var $type = exp[1];
				var $matching = exp[2];
				var $fullname = exp[3];
				var $addional = exp[4];
				// $aNames.$name=$fullname;
				
				var $val = $arr[$name];
				if ($val==undefined) { $val=''; } // incorrect rule
				
				switch ($type) {
					case 'int':
						var exp = explode('-', $addional);
						var $vMin = exp[0];
						var $vMax = exp[1];
						if ($val==undefined || !$val.match(/^[0-9-]+$/)) {
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Wartość pola "+$fullname+" nie jest liczbą");
						}
						else {
							$val = parseInt($val);
							if (($vMax && $val>$vMax) || ($vMin && $val<$vMin)) {
								if ($err[$name]==undefined) { $err[$name]=Array(); }
								$err[$name].push("Wartość pola "+$fullname+" nie mieści się w dopuszczalnym zakresie");
							}
						}
						break;
					case 'regexp':
						$addional = new RegExp($addional);
						if ($val==undefined || !$val.match($addional)) {
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Wartość pola "+$fullname+" jest w niepoprawnym formacie");
						}
						break;
					case 'string':
						var exp = explode('-', $addional);
						var $lMin = exp[0];
						var $lMax = exp[1];
						var $iLength = $val.length;
						if ($val==undefined || ($lMax && $iLength>$lMax) || ($lMin && $iLength<$lMin)) {
							var add1='';
							if ($lMin && !$lMax) {
								add1=' (minimum '+$lMin+' znaków)';
							}
							else if (!$lMin && $lMax) {
								add1=' (maksimum '+$lMax+' znaków)';
							}
							else {
								if ($lMin==$lMax) {
									add1=' (wymagane dokładnie: '+$lMin+' znaków)';
								}
								else {
									add1=' (przedział: '+$lMin+'-'+$lMax+' znaków)';
								}
							}
							
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Wartość pola "+$fullname+" jest niepoprawnej długości"+add1);
						}
						break;
					case 'enum':
						var $accepted = explode('|',$addional);
						if ($val==undefined || !in_array($val, $accepted)) {
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Pole "+$fullname+" zawiera niedozwoloną wartość");
						}
						break;
					case 'mail':
						var $regexp = new RegExp('^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$','i');
						if ($val==undefined || !$val.match($regexp)) {
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Wartość pola "+$fullname+" nie jest poprawnym adresem e-mail");
						}
						break;
					case 'date':
						var $regexp = new RegExp('^[0-9]{4}-[0-9]{2}-[0-9]{2}$');
						if ($val==undefined || !$val.match($regexp)) {
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Wartość pola "+$fullname+" nie jest w spodziewanym formacie daty");
						}
						break;
					case 'datetime':
						var $regexp = new RegExp('^[0-9]{4}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2}$');
						if ($val==undefined || !$val.match($regexp)) {
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Wartość pola "+$fullname+" nie jest w spodziewanym formacie daty i czasu");
						}
						break;
					case 'alphanum':
						var $regexp = new RegExp('^[a-zA-Z0-9_-]*$');
						
						var exp = explode('-', $addional);
						var $lMin = exp[0];
						var $lMax = exp[1];
						var $iLength = $val.length;
						
						if ($val==undefined || !$val.match($regexp)) {
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Pole "+$fullname+" może zawierać tylko znaki a-z i cyfry");
						}
						else if (($lMax && $iLength>$lMax) || ($lMin && $iLength<$lMin)) {
							var add1='';
							if ($lMin && !$lMax) {
								add1=' (minimum '+$lMin+' znaków)';
							}
							else if (!$lMin && $lMax) {
								add1=' (maksimum '+$lMax+' znaków)';
							}
							else {
								if ($lMin==$lMax) {
									add1=' (wymagane dokładnie: '+$lMin+' znaków)';
								}
								else {
									add1=' (przedział: '+$lMin+'-'+$lMax+' znaków)';
								}
							}
							
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Wartość pola "+$fullname+" jest niepoprawnej długości"+add1);
						}
						break;
					case 'float':
						if ($addional) { $addional=preg_quote($addional,'/'); }
						else { $addional='.'; }
						
						var $regexp = new RegExp('^[0-9]+['+$addional+']?[0-9]*$');
						if ($val==undefined || !$val.match($regexp)) {
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Wartość pola "+$fullname+" nie jest liczbą zmiennoprzecinkową");
						}
						break;
					case 'check':
						if ($val=='') {
							if ($err[$name]==undefined) { $err[$name]=Array(); }
							$err[$name].push("Zaznacz pole "+$fullname);
						}
						break;
					default:
						break;
				}
				if ($matching) {
					if ($val!=$arr[$matching]) {
						if ($err[$name]==undefined) { $err[$name]=Array(); }
						$err[$name].push("Wartość pola "+$fullname+" różni się od wartości pola "+$aNames[$matching]);
					}
				}
			}
		}
		
		if (!empty($err)) {
			return $err;
		}
		else {
			return true;
		}
	}
	else { return false; }
}







/********************************
 * 
 * LOADERS STUFF
 * 
 ********************************/

$(document).ready(iframe_loader);
function iframe_loader() {
	$('.iframe_loader').each(function(){
		$(this).removeClass('iframe_loader');
		$(this).removeClass('din');
		var html = $(this).html();
		html = trim(html);
		html = htmlspecialchars_decode(html);
		$(this).html(html);
	});
	
	$('.iframe_loader2').each(function(){
		$(this).removeClass('iframe_loader2');
		$(this).removeClass('din');
		var title = $(this).attr('data-iframe');
		var html = trim(title);
		html = htmlspecialchars_decode(html);
		$(this).html(html);
		$(this).attr('title', '');
	});

}

$(document).ready(link_loader);
function link_loader() {
	$('a.link_loader').each(function(){
		var href=$(this).attr('href');
		var that=$(this);
		$.ajax({
			type: "GET",
			url: href,
			cache: false,
			success: function(info) {
				if (info) {
					$(that).replaceWith(info);
					dready();
				}
				else {
				}
	         }, // success
	         error: function() {
	         },
	         timeout: 5000
		});// ajax
	});
}

/********************************
 * 
 * CALENDAR STUFF
 * 
 ********************************/

$(document).ready(cal1);
function cal1() {
	$('.cal_prev, .cal_next').live('click', function() {
		var btn = '.cal_link_next';
		if ($(this).hasClass('cal_prev')) {
			btn = '.cal_link_prev';
		}
		var href = $(this).closest('.calendar_').find(btn).html();
		var that = $(this).closest('.calendar_');
		$.ajax({
			type: "GET",
			url: href,
			cache: false,
			success: function(info) {
				if (info) {
					$(that).html(info);
					dready();
				}
				else {
				}
	         }, // success
	         error: function() {
	         },
	         timeout: 5000
		});// ajax
	});
}


/********************************
 * 
 * VOTING STUFF
 * 
 ********************************/

$(document).ready(stars_vote);
function stars_vote() {
	var rm = $(".rates_vote_enabled img.star").live({
		mouseenter: function() {
			var which = rm.index(this)+1;
			var i=0;
			for (i=1; i<=5; i++) {
				if (which>=i) {
					$(this).closest('.rates_vote_enabled').find(':nth-child('+i+')').addClass('star_over_on');
				}
				else {
					$(this).closest('.rates_vote_enabled').find(':nth-child('+i+')').addClass('star_over_off');
				}
			}
		},
		mouseleave: function() {
			$(this).closest('.rates_vote_enabled').find('img.star').removeClass('star_over_off').removeClass('star_over_on');
		},
		click: function() {
			var which = rm.index(this)+1;
			var rate_root = $(this).closest('.rates_vote_enabled');
			$(rate_root).find('.loading').show();
			$(rate_root).find('img:not(.loading)').hide();
			
			$(rate_root).removeClass('rates_vote_enabled');
			var item = $(rate_root).find('.item_info');
			var id_a=$(item).attr('id_a');
			var id=$(item).attr('id');
			var mode=$(item).attr('mode');
			$.ajax({
				type: "GET",
				url: '/ajax/rates/rate/'+id_a+'/'+id+'/'+mode+'/'+which+'/?smarty=true',
				cache: false,
				success: function(info) {
					if (info) {
						switch (info) {
						case 'OK':
							$.ajax({type:"GET",url:'/ajax/rates/get_html/'+id_a+'/'+id+'/'+mode+'/?smarty=true',cache:false,success: function(info){
								$(rate_root).html(info);
								$(rate_root).find('.loading').hide();
								$(rate_root).find('img:not(.loading)').show();
							},error:function(){},timeout:5000});
							break;
						case 'ERROR':
							$(rate_root).find('.loading').hide();
							$(rate_root).find('img:not(.loading)').show();
							alert('Wystąpił nieoczekiwany błąd.');
							break;
						case 'ALREADY-VOTED':
							$(rate_root).find('.loading').hide();
							$(rate_root).find('img:not(.loading)').show();
							alert('Już głosowałeś.');
							break;
						case 'NOT-LOGGED-IN':
							$(rate_root).find('.loading').hide();
							$(rate_root).find('img:not(.loading)').show();
							alert('Błąd identyfikacji. Odśwież stronę i zaloguj się, aby móc głosować.');
							break;
						default:
							$(rate_root).find('.loading').hide();
							$(rate_root).find('img:not(.loading)').show();
							alert('Wystąpił błąd przetwarzania danych. Proszę spróbuj ponownie. Jeżeli błąd będzie się powtarzał - skontaktuj się z administratorem');
							break;
						}
					}
					else {
					}
		         }, // success
		         error: function() {
		         },
		         timeout: 5000
			});// ajax
		}
	});
}


$(document).ready(load1);
function load1() {
	var x = 50.118975;
	var y = 21.970725;
	var zoom=10; 
	
	if (GBrowserIsCompatible()) {
		var point = new GLatLng(x,y);  
		var marker = new GMarker(point);

		var mapka1 = document.getElementById("mapka");
		if (mapka1) {
			var mapa = new GMap2(document.getElementById("mapka")); 
			GEvent.addListener(marker, "click", function(){
				var myHtml = document.getElementById("text_mapka").innerHTML;
			    mapa.openInfoWindowHtml(point, myHtml);
			});
			mapa.addControl(new GSmallMapControl());
			mapa.addControl(new GMapTypeControl());
			mapa.setCenter(new GLatLng(x,y), zoom); 
			mapa.addOverlay(marker);
		}
	}
}





/*
$(document).ready(function(){
	eraseCookie('eighteen');
	if (readCookie('eighteen2')=='ok') { }
	else {
		dimAndBox();
		scrolled();
		$('#dim').live('click',hideDim);
		$('#dimbox span.close').live('click',hideDim);
		showDim();
	}
});



function scrolled() {
	var viewportHeight = window.innerHeight ? window.innerHeight : $(window).height();
	var viewportWidth = window.innerWidth ? window.innerWidth : $(window).width();
	dimAndBox(viewportWidth, viewportHeight, $(window).scrollTop());
}

function dimAndBox(vw_, vh_, st_) {
	var h_ = $('#main_container').outerHeight(true);
	$('#dim').height(h_);
	if (vh_) {
		var bh_ = $('#dimbox').height();
		var bw_ = $('#dimbox').width();
		var posTop = (vh_-bh_)/2;		
		var posLeft = (vw_-bw_)/2;
		$('#dimbox').css({top:(posTop+st_)+'px',left:posLeft+'px'});
	}
}

function showDim(showClose) {
	$(window).scroll(scrolled);
	$(window).resize(scrolled);
	scrolled();
	$('#dim, #dimbox').fadeIn(500);
	scrolled();
}
function hideDim() {
	createCookie('eighteen2', 'ok', 7);
	$('#dim, #dimbox').fadeOut(500);
	$(window).unbind('scroll');
	$(window).unbind('resize');
}
*/



var pl_preloaded_files = [];

function isPreloaded(path) {
	for (key in pl_preloaded_files) {
		if (pl_preloaded_files[key] == path || pl_preloaded_files[key]==_sPATH+path) { return true; }
	}
	return false;
}

var preload = function(files, onloaded, interval) {
	if (!interval) { interval=250; }
	for (key in files) {
		var file = files[key];
		preloadFile(file);
	}
	var ID = window.setInterval(function(){
		var all_loaded = true;
		for (key in files) {
			var file = files[key];
			if (!isPreloaded(file)) { all_loaded = false; }
		}
		if (all_loaded) {
			window.clearInterval(ID);
			onloaded();
		}
	}, interval);
};

// preloads a file
function preloadFile(path) {
	var isIE = navigator.appName.indexOf('Microsoft') === 0;
	if (isIE) {
        var o = new Image();
        o.src = path;
	    o.onload = function() {
	    	pl_preloaded_files.push(this.src);
	    };
    }
	else {
		var o = document.createElement('object');
		o.data = path;
		o.width = 0;
	    o.height = 0;
	    o.onload = function() {
	    	pl_preloaded_files.push(this.data);
	    	$(this).remove();
	    };
	    var obj = document.getElementById('preloading').appendChild(o);
	}
}


