/**
 * Przechodzi po wszystkich elementach na stronie i sprawdza czy maja
 * ustawiony parametr 'class' na wartosc podana w 'className'.
 * 
 * @param className
 * @return elements tablica elementow o 'class' rownym 'className'
 */
function getElementsByClass( className ) {  
	var all = document.all ? document.all : document.getElementsByTagName('*');  
	var elements = new Array();  
	for( var e = 0; e < all.length; e++ ) {  
		var classes = all[e].className.split(/\s/g);  
		for( var c = 0; c < classes.length; c++ ) {  
			if( classes[c] == className ) {  
				elements[elements.length] = all[e];  
			}  
		}  
	}  
	return elements;  
} 

function toggleSection(id) {
	var nameBox = document.getElementById('name'+id);
	var descBox = document.getElementById('desc'+id);
	if (descBox.style.display == 'block') {
		descBox.style.display = 'none';
		nameBox.className  = nameBox.className.replace(" open",""); 
	}
	else {
		descBox.style.display = 'block';
		nameBox.className  += " open"; 		
	}
}

function toggleNavBranch(branch) {
	branch = $(branch);
	if (branch.hasClassName('closed'))
		branch.removeClassName('closed');
	else
		branch.addClassName('closed');
}

function getDOMChildElements(element, tagName) {
	return $A(element.childNodes).findAll(function(child) {
		return child.nodeType == 1 && (tagName == undefined || child.tagName == tagName);
	});
}

function getDOMChildText(element, tagName) {
	var tagNode = $A(element.childNodes).find(function(child) {
		return child.nodeType == 1 && (tagName == undefined || child.tagName == tagName);
	});
	if (tagNode == undefined)
		return undefined;
	var node = tagNode.firstChild;
	return node == undefined ? '' : node.nodeValue;
}

//sprawdzenie, czy nie ma redirectu - czy jest na dozwolonej stronie - musi byc atrybut location
function checkSessionRedirect(){
	new Ajax.Request("/p4webportal/controller", {
		method: 'get',
		parameters: {location: document.location.href},
		onSuccess: function(transport) {
			if (transport.responseXML.getElementsByTagName("script")[0]){
				eval(transport.responseXML.getElementsByTagName("script")[0].childNodes[0].nodeValue);
			}
			else if (transport.responseXML.getElementsByTagName("message")[0]){
				var redirectNode = transport.responseXML.getElementsByTagName("redirect")[0];
				if (redirectNode){
					if(document.location.href != redirectNode.childNodes[0].nodeValue){
						document.location.href = redirectNode.childNodes[0].nodeValue;
					}
				}
			}
		},
		onException: function(request, e) {
			throw e;
		}
	});
}

function createActionResult(responseXML) {
	var msgNode = getDOMChildElements(responseXML, 'message')[0];
	var actionResult = { errors: new Object() };
	['status', 'infoMessage', 'redirect'].each(function(s) {
		actionResult[s] = getDOMChildText(msgNode, s);
	});
	var errorsNode = getDOMChildElements(msgNode, 'errors')[0];
	if (errorsNode != undefined) {
		getDOMChildElements(errorsNode, 'error').each(function(errNode) {
			var fieldId = getDOMChildText(errNode, 'id');
			var errValue = getDOMChildText(errNode, 'value');
			var errClear = getDOMChildElements(errNode, 'clear').length > 0;
			var fieldError = actionResult.errors[fieldId];
			if (fieldError == undefined)
				actionResult.errors[fieldId] = { value: errValue, clear: errClear };
			else {
				fieldError.value += ' ' + errValue;
				fieldError.clear = fieldError.clear || errClear;
			}
		});
	}
	return actionResult;
}

function clearActionResult() {
	[$$('.wpErrorMessage'), $('formResult')].flatten().each(function(elem) {
		elem.removeClassName('msgError');
		elem.removeClassName('msgSuccess');
		while (elem.firstChild != undefined)
			elem.removeChild(elem.firstChild);
	});
}

function showActionResult(actionResult) {
	clearActionResult();
	var anuMessage = false;
	var resultElem = $('formResult');
	if (resultElem != undefined) {
		switch (actionResult.status) {
		case 'valid':
			resultElem.addClassName('msgSuccess');
			break;
		case 'invalid':
			resultElem.addClassName('msgError');
			break;
		}
		if (actionResult.infoMessage != undefined) {
			resultElem.appendChild(document.createTextNode(actionResult.infoMessage));
			anyMessage = true;
		}
	}
	for (field in actionResult.errors) {
		var errElem = $('errMsg_' + field);
		errElem.removeClassName('msgSuccess');
		errElem.addClassName('msgError');
		while (errElem.firstChild != undefined)
			errElem.removeChild(errElem.firstChild);
		errElem.appendChild(document.createTextNode(actionResult.errors[field].value));
		if (actionResult.errors[field].clear)
			$(field).value = '';
		anyMessage = true;
	}
	return anyMessage;
}

function processActionResult(responseXML) {
	var script = getDOMChildText(responseXML, 'script');
	if (script != undefined) {
		eval(script);
		return;
	}
	var actionResult = createActionResult(responseXML);
	var anyMessage = showActionResult(actionResult);
	if (actionResult.redirect != undefined) {
		var f = function() { window.location = actionResult.redirect; };
		if (anyMessage)
			window.setTimeout(f, 3000);
		else
			f();
	}
	return actionResult;
}

function removeflash(idflash) {
	$(idflash).remove();
}


/**
 * Zwraca wartosc parametru GET.
 * strParamName - nazwa parametru.
 */
function getURLParam(strParamName){
	var strReturn = "";
	var strHref = window.location.href;
	if ( strHref.indexOf("?") > -1 ){
		var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
		var aQueryString = strQueryString.split("&");
		for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
			if (aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ){
				var aParam = aQueryString[iParam].split("=");
				strReturn = aParam[1];
				break;
			}
		}
	}
	return unescape(strReturn);
}


/**
 * Zwraca liste parametrow GET.
 * Zwracana jest tablica tablic dwuelementowych. Tablice dwuelementowe to parametry - 
 * indeks 0 to nazwa parametru, indeks 1 to wartosc parametru.
 */
function getURLParams(){
	var params = new Array();
	var strHref = window.location.href;
	if ( strHref.indexOf("?") > -1 ){
		var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
		var aQueryString = strQueryString.split("&");
		params = new Array(aQueryString.length);
		for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
			var aParam = aQueryString[iParam].split("=");
			if(aParam[0].indexOf("?") == 0){
				aParam[0] = aParam[0].substring(1);
			}
			aParam[1] = unescape(aParam[1]);
			params[iParam] = aParam;
		}
	}
	return params;
}
