/*
 * TO DO:
 * * Trzeba zamiast innerHTML dać DOM, może wtedy nie będzie znikał ten znacznik na polach tekstowych
 * 
 */



/*
 * Skrót + drobna funkcjonalność dla wiadomej funkcji
 */
function $(a) {try{return document.getElementById(a);}catch(e){return false;}}

/*
 * W związku z tym, że IE ssie pałę, to trzeba było stworzyć tę oto funkcję
 */
function addEvent(obj, event, callback) {
	if(document.addEventListener) obj.addEventListener(event, callback, false);
	else obj.attachEvent('on'+event, callback);
}

/*
 * Taka tam funkcja do podstawowego wywalania właściwości obiektów na jakieś wyjście,
 * jeśli np. potrzebuję zobaczyć jak się zmieniają "w locie" - czego Firebug mi nie daje
 * Przydałaby się rekursywność :(
 */
function dump(o, name) {
	var t = '';
	for(i in o) {
		t+=name+'.'+i+'.'+o[i]+"\n<br />";
	}
	return t;
}

/*
 * Tutaj jest wszystko, co ma się odpalić przy załadowaniu strony
 */
function init() {
	if($('koszyk')) {
		var table = $('koszyk');
		var rows = table.rows, x = rows.length;
		for(var i=0; x>i; i++) {
			var cells = rows[i].cells, y = cells.length;
			for(var j=0; y>j; j++) {
				addEvent(cells[j], 'mouseover', koszyk_over);
				addEvent(cells[j], 'mouseout', koszyk_out);
				cells[j].setAttribute('cellNum', j);
			}
		}
	}
	/*if($('koszyk2')) {
		//uh, wyszlo, ze w pewnym miejscu sa dwie tabelki. Juz niech tak zostanie...
		var table = $('koszyk2');
		var rows = table.rows, x = rows.length;
		for(var i=0; x>i; i++) {
			var cells = rows[i].cells, y = cells.length;
			for(var j=0; y>j; j++) {
				addEvent(cells[j], 'mouseover', koszyk_over);
				addEvent(cells[j], 'mouseout', koszyk_out);
				cells[j].setAttribute('cellNum', j);
			}
		}
	}*/
}

/*
 * TO JEST TAKIE COŚ OD MIGAJĄCYCH BANERKÓW
 */
		function insertGallery(images, urls) {
			var div = document.getElementById('paziekGallery');
			//var buttons = document.createElement('div');
			//buttons.id = 'galleryButtons';
			for(var i=0; images.length>i; i++) {
				var hyper = document.createElement('a');
				hyper.href = urls[i];
				hyper.className = 'galleryItem';
				if(i===0) {
					hyper.style.opacity = '1';
					hyper.style.filter = 'alpha(opacity=100)';
					hyper.style.display = 'block';
					//hyper.style.position = 'relative';
				}
				var img = new Image;
				img.src = images[i];
				img.alt = '';
				hyper.appendChild(img);
				div.appendChild(hyper);
				/*var button = document.createElement('a');
				button.href = 'javascript:displayGalleryItem('+(i+1)+', true);';
				var text = document.createTextNode(i+1);
				button.appendChild(text);
				buttons.appendChild(button);*/
			}
			//div.appendChild(buttons);
		}
		var fadeOutTimer = null;
		var fadeInTimer = null;
		var fadeOutOpacity = 1;
		var fadeInOpacity = 0;
		var outItem = null;
		var inItem = null;
		function fadeOutGalleryItem(item) {
			//document.getElementById('right').innerHTML += fadeOutOpacity+'=>';
			fadeOutOpacity = (fadeOutOpacity - 0.05).toFixed(2);
			//document.getElementById('right').innerHTML += fadeOutOpacity+'<br />';
			if(fadeOutOpacity<0) fadeOutOpacity = 0;
			outItem.style.opacity = fadeOutOpacity;
			outItem.style.filter = 'alpha(opacity='+fadeOutOpacity*100+')';
			if(fadeOutOpacity===0) {
				//outItem.style.position = 'absolute';
				outItem.style.display = 'none';
				//inItem.style.position = 'relative';
				inItem.style.display = 'block';
				window.clearInterval(fadeOutTimer);
				fadeInTimer = window.setInterval("fadeInGalleryItem();", 25);
				currentItem = item;
			}
		}
		function fadeInGalleryItem() {
			//fadeOutOpacity = fadeInOpacity = (fadeInOpacity + 0.05).toFixed(2);
			fadeOutOpacity = fadeInOpacity = fadeInOpacity + 0.05;
			if(fadeInOpacity>1) fadeInOpacity = 1;
			inItem.style.opacity = fadeInOpacity;
			inItem.style.filter = 'alpha(opacity='+fadeInOpacity*100+')';
			if(fadeInOpacity===1) {
				window.clearInterval(fadeInTimer);
				intervalGallery = startRotateGallery();
				fadeOutOpacity = 1;
				fadeInOpacity = 0;
			}
		}
		var pauseRotate = false;
		function displayGalleryItem(item, pauseRotate) {
			if(currentItem === item) return;
			window.clearInterval(fadeInTimer);
			window.clearInterval(fadeOutTimer);
			pauseRotate = pauseRotate;
			window.clearInterval(intervalGallery);
			if(pauseRotate) galleryRotateI = item+1;
			else galleryRotateI++;
			if(galleryRotateI>galleryRotateX) galleryRotateI=1;
			var container = document.getElementById('paziekGallery');
			outItem = container.childNodes[currentItem-1];
			inItem = container.childNodes[item-1];
			fadeInOpacity = 0;
			inItem.style.opacity = fadeInOpacity;
			inItem.style.filter = 'alpha(opacity='+fadeInOpacity*100+')';
			inItem.style.display = 'none';
			//inItem.style.position = 'absolute';
			fadeOutTimer = window.setInterval("fadeOutGalleryItem("+item+");", 25);
		}
		function startRotateGallery() {
			return window.setInterval("displayGalleryItem("+galleryRotateI+", false);", galleryRotateCycle);
		}
/*
 * KONIEC MIGAJĄCYCH BANERKÓW
 */

/*
 * Rekursywna (oby) funkcja, mająca na celu wyłączyć wszystkie dodatkowe elementy koszyka
 */
/*
 * Tym sprawdzimy, czy mamy do czynienia z elementem tabelki, czy jakimś innym tagiem
 */
function elementTabelki(a) {
	return a.tagName==='TD' || a.tagName==='TR' || a.tagName==='TBODY' || a.tagName==='THEAD' || a.tagName==='TABLE';
}
/*
 * Koszykowe stopPropagation.
 * Coś tam chyba nie działało z najechaniem na linka i trzeba by używać
 * specyficznych wartości eventa dla W3C i przypominać sobie
 * odpowiedniki tego dla IE aby określić, czy wlazłem na tego zasranego linka, czy zlazłem z tabelki.
 * NIE!
 */
function stopPropagationKoszyk(e) {
	var target = e?e.target:window.event.srcElement;
	e.stopPropagation(); //IE ma coś innego, returnValue = false; czy jakoś tak - trzeba sprawdzić
	koszyk_over(target.parentNode);
}

/*
 * To jest taka tam funkcja do walidacji pól formularzy
 */
function checkField(field, out) {
	if(typeof out === 'undefined') out = field.getAttribute('errors');

	var errorMsg = '<ul>';
	var val = field.value;
	
	switch(field.getAttribute('xtype')) {
		case 'email':
			if(!val.match(/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/i)) errorMsg += '<li>Należy podać poprawny adres e-mail.</li>';
			break;
		default:
	}

	if(field.getAttribute('required') == 'true' || val.length) {
		var minLength = field.getAttribute('minlength');
		if(minLength && val.length<minLength) errorMsg += '<li>Te pole musi składać się z przynajmniej <b>'+minLength+'</b> znaków.</li>';
	}

	var allowedChars = field.getAttribute('allowedchars');
	if(allowedChars) {
		var notAllowedChars = new RegExp('[^'+allowedChars+']', 'i'); //kiepska nazwa, wiem :P
		if(notAllowedChars.test(val)) errorMsg += '<li>Dozwolone znaki w tym polu to: <b>'+allowedChars+'</b>.</li>';
	}

	var doesNotStartWith = field.getAttribute('doesnotstartwith');
	if(doesNotStartWith) {
		var dNSW = new RegExp('^['+doesNotStartWith+']', 'i');
		if(dNSW.test(val)) errorMsg += '<li>Te pole <u>nie może</u> zaczynać się od następujących znaków: <b>'+doesNotStartWith+'</b>.</li>';
	}

	var doesNotEndWith = field.getAttribute('doesnotendwith');
	if(doesNotEndWith) {
		var dNEW = new RegExp('['+doesNotEndWith+']$', 'i');
		if(dNEW.test(val)) errorMsg += '<li>Te pole <u>nie może</u> kończyć się następującymi znakami: <b>'+doesNotEndWith+'</b>.</li>';
	}

	var restrictedValues = field.getAttribute('restrictedvalues');
	if(restrictedValues) {
		var rV = restrictedValues.split(/*/[^\\],\s/*//,\s/), x = rV.length;
		for(var i = 0; x > i; i++) {
			if(val == rV[i]) {
				//errorMsg += '<li>Te pole <u>nie może</u> być równe następującym wartościom: <b>'+restrictedValues+'</b>.</li>';
				errorMsg += '<li>Wybrany adres jest już zajęty.</li>';
				break;
			}
		}
	}
	
	var checkFor = field.getAttribute('checkfor');
	if(checkFor && val != $(checkFor).value) errorMsg += '<li>Te pole musi się równąć wartości pola poprzedniego.</li>';

	errorMsg += '</ul>';
	
	if(errorMsg != '<ul></ul>') {
		field.className = 'error';
		
		if($(out)) $(out).innerHTML = errorMsg;
		else $('errorsOutput').innerHTML = errorMsg;
		//else alert(errorMsg);
		/*
		 * ^
		 * |
		 * zły pomysł, aby przy każdym przyciśnięciu klawisza,
		 * pojawiał się alert.
		 * Trzeba walnąć jakieś bardziej ludzkie rozwiązanie.
		 */
		field.form.submit.disabled = true;
	} else {
		field.className = 'good';

		if($(out)) $(out).innerHTML = '';
		else $('errorsOutput').innerHTML = '';
		
		var checkedBy = field.getAttribute('checkedby');
		if(checkedBy && $(checkedBy)) return checkField($(checkedBy));
		
		var fields = field.form.elements, x = fields.length;
		for(var i = 0; x>i; i++) {
			if(fields[i].className != 'good' && fields[i].type != 'submit' && fields[i].getAttribute('skipcheck') != 'true') return false;
		}
		field.form.submit.disabled = false;
	}
}


/*
 * To są funkcje od bajerowania tabelki z koszykiem ( ale powinno działać na jakiejkowliek, triger jest w init() ),
 * taki hover na kolumny, zamiast rzędów!
 * Rzędy trzeba walnąć już z ręki CSSem
 * No i kolorki dobrać!
 */
function koszyk_over(e) {
	try{
		var target = e?e.target:window.event.srcElement;
	} catch(e) {
		var target = e;
	}
	if(typeof target === 'undefined') target = e;
	var cellNum = target.getAttribute('cellNum');
	/*
	 * Pierwsza kolumna w tych koszykach z cenami to taka kolumna opisowa, nie ma się podświetlać!
	 */
	//if(cellNum==0 && ( target.className === 'k1 bg' || target.className.indexOf('ignore')!==-1 )) return false;
	if( (cellNum==0 && target.className === 'k1 bg') || target.className.indexOf('ignore')!==-1 ) return false;

	var table = $('koszyk');
	/*var target2 = target;
	while(target2 = target2.parentNode) {
		if(target2.tagName == 'TABLE') {
			var table = target2;
			break;
		}
	}*/
		var rows = table.rows, x = rows.length;
		rowy:
		for(var i=0; x>i; i++) {
			var cells = rows[i].cells, y = cells.length;
			for(var j=0; y>j; j++) {
				if(cells[j].getAttribute('ignore')=='over') continue rowy;
				if(j==cellNum) {
					cells[j].style.backgroundColor = '#DBDBDB';
					continue rowy;
				}
			}
		}
	/*
	 * Czy to działa?
	 * Ma niby zapobiegać... nie ważne
	if(target.tagName!=='TD' && target.tagName!=='TR' && target.tagName!=='TBODY' && target.tagName!=='THEAD' && target.tagName!=='TABLE') {
		while(target=target.parentNode) {
			if(target.tagName==='TD' || target.tagName==='TR' || target.tagName==='TBODY' || target.tagName==='THEAD' || target.tagName==='TABLE') break;
		}
	}
	 */
	if(target.getAttribute('ignore')!=='over' && target.tagName == 'TD') target.style.backgroundColor = '#C4C4C4';
	else if(target.parentNode.tagName == 'TD') koszyk_over(target.parentNode);
}
function koszyk_out(e) {
	/*try{
		var target = e?e.target:window.event.srcElement;
	} catch(e) {
		var target = e;
	}*/
	var table = $('koszyk');
	/*while(target2 = target2.parentNode) {
		if(target2.tagName == 'TABLE') {
			var table = target2;
			break;
		}
	}*/

		var rows = table.rows, x = rows.length;
		for(var i=0; x>i; i++) {
			var cells = rows[i].cells, y = cells.length;
			for(var j=0; y>j; j++) {
				cells[j].style.backgroundColor = '';
			}
		}
}

/*
 * Odpalamy skrypt inicjujący różne pierdoły.
 * Tam gdzie działa addEventListener, to korzystamy z tego
 * Tam gdzie przeglądarka to końskie łajno - dajemy onload.
 * Nie będzie specyficznych trigerów pod IE, bo IE to (patrz wyżej),
 * a tak czy siak będzie działać
 */
if(document.addEventListener) document.addEventListener('DOMContentLoaded', init, false);
else window.onload=init;
