/**********************************************************************
*
* Jacek Smyda (C) 2001-2006
*
* First item of select is '--------'
*
***********************************************************************/

function getFormObj(formName, fieldName) {
	return document.forms[formName]["form["+fieldName+"]"];
}

function check_selection(formName,checkName,itemName) {
	checkObj = document.forms[formName][checkName];
	for (var i = 0; i < document.forms[formName].elements.length; i++) {
		obj = document.forms[formName].elements[i];
		if ((obj.type == 'checkbox') && (obj.name.indexOf(itemName, 0) > 0)) {
			obj.checked = checkObj.checked;
		}
	}
}

function moveSelectItems(fromSelect, toSelect) {
	fromselect	= $(fromSelect);
	toselect 	= $(toSelect);

	fromselectoptions	= fromselect.childNodes;
	toselectoptions	= toselect.childNodes;

	if (fromselectoptions.length > 0) {
		remArray = new Array();
		idxArray = 0;

		for (i = 0; i < fromselectoptions.length; i++) {
			element = fromselectoptions[i];
			if (element.selected && element.value != 0) {
				oText = element.text;
				oValue = element.value;
				toselect.options[toselectoptions.length] = new Option(oText, oValue, 0, 0);
				remArray[idxArray++] = i;
			}
		}

		toremove = new Array();
		for (var i = 0; i < remArray.length; i++) {
			idxItem = remArray[i];
			toremove[i] = fromselectoptions[idxItem];
		}
		toremove.each(function(option) {
			Element.remove(option);
		});
	}
}

function SelectColumnFilter(word, SelectName) {
	if ($(SelectName) != '') {
		fromselect	= $(SelectName);
		fromselectoptions	= fromselect.childNodes;
		for (i = 0; i < fromselectoptions.length; i++) {
			element = fromselectoptions[i];
			if (element) {
				oText = element.text.toLowerCase();
				oValue = element.value;
				if ((oText.search(word.toLowerCase()) == -1) && (word != '')) {
					element.style.display = 'None';
				}
				else {
					element.style.display = 'block';
				}
			}
		}
	}
}

function moveSelectAll(fromSelect, toSelect) {
	if (!(fromObject = $(fromSelect)) || !(toObject = $(toSelect))) return;
	len = fromObject.length;
	if (len > 1) {
		for (i = 1; i < len; i++) {
			oText  = fromObject.options[1].text;
			oValue = fromObject.options[1].value;
			fromObject.options[1] = null;
			toObject.options[toObject.length] = new Option(oText, oValue, 0, 0);
		}
		fromObject.selectedIndex = -1;
	}
}

function moveInputToSelect(formName, fromInput, toSelect) {
	if (!(fromObject = getFormObj(formName, fromInput)) || !(toObject = getFormObj(formName, toSelect))) return;
	len    = toObject.length;
	oValue = fromObject.value;
	toObject.options[len] = new Option(oValue, oValue, 0, 0);
}

function moveSelectUp(formName, selectName) {
	if (!(fromObject = getFormObj(formName, selectName))) return;
	len = fromObject.length;
	if (len > 2) {
		for (i = 2; i < len; i++) {
			optionObject = fromObject.options[i];
			if (optionObject.selected) {
				oText     = optionObject.text;
				oValue    = optionObject.value;
				fromObject.options[i].text     = fromObject.options[i - 1].text;
				fromObject.options[i].value    = fromObject.options[i - 1].value;
				fromObject.options[i].selected = false;
				fromObject.options[i - 1].text     = oText;
				fromObject.options[i - 1].value    = oValue;
				fromObject.options[i - 1].selected = true;
			}
		}
	}
}

function moveSelectDown(formName, selectName) {
	if (!(fromObject = getFormObj(formName, selectName))) return;
	len = fromObject.length;
	if (len > 2) {
		for (i = (len - 2); i > 0 ; i--) {
			optionObject = fromObject.options[i];
			if (optionObject.selected) {
				oText     = optionObject.text;
				oValue    = optionObject.value;
				fromObject.options[i].text     = fromObject.options[i + 1].text;
				fromObject.options[i].value    = fromObject.options[i + 1].value;
				fromObject.options[i].selected = false;
				fromObject.options[i + 1].text     = oText;
				fromObject.options[i + 1].value    = oValue;
				fromObject.options[i + 1].selected = true;
			}
		}
	}
}

function removeSelectItems(formName, fromSelect) {
	if (!(fromObject = getFormObj(formName, fromSelect))) return;
	len = fromObject.length;
	if (len > 1) {
		remArray = new Array();
		idxArray = 0;
		for (i = 1; i < len; i++) {
			optionObject = fromObject.options[i];
			if (optionObject.selected) {
				remArray[idxArray++]  = i;
			}
		}
		for (i = 0; i < remArray.length; i++) {
			idxItem = remArray[i] - i;
			fromObject.options[idxItem] = null;
		}
		fromObject.selectedIndex = -1;
	}
}

function clearSelect(formName, fromSelect) {
	if (!(fromObject = getFormObj(formName, fromSelect))) return;
	len = fromObject.length;
	for (i = 1; i < len; i++) {
		fromObject.options[1] = null;
		fromObject.selectedIndex = -1;
	}
}

function getSelectCommaValue(formName, fromSelect) {
	if (!(fromObject = getFormObj(formName, fromSelect))) return;
	len = fromObject.length;
	val = "";
	for (i = 1; i < len; i++) {
		if (i != 1) { val += ","; }
		val += fromObject.options[i].value;
	}
	return val;
}

function submitSelect(formName, fromSelect, toText) {
	if (obj = getFormObj(formName, toText)) {
		obj.value = getSelectCommaValue(formName, fromSelect);
	}
	return true;
}

function insertValueToHidden(formName, toInput, itemValue) {
	if (this.forms.length > 0) {
		toObject = this.forms[formName]["form[" + toInput + "]"];
		if (toObject) {
			toObject.value = itemValue;
		}
	}
}

function hiddenOptionsByText(srchText, nodeId, beginSearch) {
	var nodes = $A($(nodeId).getElementsByTagName('option'));
	var selected = false;
	nodes.each(
		function(node) {
			var style = 'block';
			if (srchText.length > 0) {
				inner = node.innerHTML.toLowerCase();
				inner = inner.substr(inner.indexOf('- ') + 2);
				if (beginSearch) {
					if (inner.indexOf(srchText.toLowerCase()) != 0) {
						style = 'none';
					}
				}
				else {
					if (inner.indexOf(srchText.toLowerCase()) < 0) {
						style = 'none';
					}
				}
				if (style == 'block' && !selected) {
					node.selected = true;
					selected = true;
				}
			}
			node.style.display = style;
		}
	);
}

function autocompleteSelectInit(sE, tE, cE, I) {
	sE.op = [];
	sE.tE = tE;
	tE.sE = sE;
	tE.cE = cE;
	for (var i = 0; i < sE.options.length; i++) {
		sE.op[sE.op.length] = { t: sE.options[i].text, v: sE.options[i].value };
	}
	tE.onkeyup = function() {
		var o, r = new RegExp((this.cE.checked ? '^' : '') + this.value, 'i');
		with (o = this.sE.options) {
			length = 0;
			for (var i = 0; i < this.sE.op.length; i++) {
				inner = this.sE.op[i].t;
				inner = inner.substr(inner.indexOf('- ') + 2);
				if (r.test(inner)) {
					with (o[length++]) {
						text  = this.sE.op[i].t;
						value = this.sE.op[i].v;
					}
				}
			}
		}
	}
	tE.onfocus = function() { this.sE.style.display = 'inline'; }
	sE.onchange = function() {
		var inner = this.options[this.selectedIndex].text;
		this.tE.value = inner.substr(inner.indexOf('- ') + 2);
		I.value = this.options[this.selectedIndex].value;
		this.style.display = 'none';
	}
}

function clearField(formName, fieldName) {
	getFormObj(formName, fieldName + "_name").value = "";
}

function clearChooseField(formName, fieldName) {
	getFormObj(formName, fieldName).value = 0;
	getFormObj(formName, fieldName + "_name").value = "";
}

function openRemote(params) {
	window.open(params, 'popup', 'directories=no,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,width=400,height=400');
}

function openRemoteCheck(formName, fieldName, params, alertText) {
	checkObj = getFormObj(formName, fieldName);
	if (checkObj.value && checkObj.value > 0) {
		openRemote(params + "&depfld=" + checkObj.value);
	} else {
		alert(alertText);
		getFormObj(formName, fieldName + "_name").focus();
	}
}

function chooseItem(id, name, elem) {
	var nEl  = elem + id;
	var oEl  = $(nEl);
	var oDst = $(elem + '/dst');

	oDst.style.display = 'block'; //wyswietlenie
	if ($(elem + '/name')) {
		// Jeżeli jest name to wybór pojedyńczy
		//expandForm(elem+'/src');
		if (oEl) {
			oDst.innerHTML             = '&nbsp;';
			$(elem).value              = 0;
			$(elem + '/name').value    = '';
		}
		else {
			oDst.innerHTML             = '<span id="' + nEl + '" class="expand-element">' + name + '<img class="expand-close" src="'+ImgRoot+'spacer.gif" onclick="if (confirm(\'Usunąć ' + name + '?\')) { chooseItem(\''+id+'\', \''+name+'\',\''+ elem+'\'); } event.cancelbubble = true;"><br /></span>';
			$(elem).value              = id;
			$(elem + '/name').value    = name;
		}
		return;
	}
	// Wybór multi
	// wyczyszczenie pola na wypadek wystapienia tylko spacji
	if (oDst.innerHTML == '&nbsp;') oDst.innerHTML = '';
	if (oEl) {
		Element.remove(nEl);
	}
	else {
		// jeszcze nie ma takiego elementu wiec go wstawiam
		oDst.innerHTML += '<span id="' + nEl + '" class="expand-element">' + name + '<img class="expand-close" src="'+ImgRoot+'spacer.gif" onclick="if (confirm(\'Usunąć ' + name + '?\')) { chooseItem(\''+id+'\', \''+name+'\',\''+ elem+'\'); } event.cancelbubble = true;"><br /></span>';
	}
	// uzupelnienie pola spacja na wypadek pustego pola
	if (oDst.innerHTML == '') oDst.innerHTML = '&nbsp;';

	// zapisanie wyniku do pola ukrytego
	var tab = $(elem).value.split(',');
	var pos = -1;
	for (var i = 0; i < tab.length; i++) {
		if (tab[i] == id) pos = i;
	}
	if (pos == -1) {
		var next = (tab[tab.length - 1]) ? tab.length : tab.length - 1;
		tab[next] = id
	}
	else {
		var tab1 = tab.slice(0, pos);
		var tab2 = tab.slice(pos + 1);
		tab = tab1.concat(tab2);
	}
	$(elem).value = tab.join(',');
}

function checkRolePerm(id) {
	var inputs = $('box-'+id).getElementsByTagName('input');
	if (Element.hasClassName('status-'+id, 'checked')) {
		for (var i = 0; i < inputs.length; i++) {
			inputs[i].checked = false;
		}
		Element.removeClassName('status-'+id, 'checked');
	}
	else {
		for (var i = 0; i < inputs.length; i++) {
			inputs[i].checked = true;
		}
		Element.addClassName('status-'+id, 'checked');
	}
	CheckRolesCount(id);
}

function slideBox(id) {
	/*
	** Funkcja odpowiedzialna za zawijanie boxa
	*/
	parents = $(id).childNodes;
	for (var i=0; i < parents.length; i++) {
		if (parents[i].className == 'window-content') {
			toslide = parents[i].id; //id contenta
			if (Element.hasClassName(id, 'hide')) {
				new Effect.toggle($(toslide), 'slide', { duration: 0.2 });
				Element.removeClassName(id, 'hide');
				$(id+'-button').className = 'slide-roles-up';
			}
			else {
				new Effect.toggle($(toslide), 'slide', { duration: 0.2 });
				Element.addClassName(id,'hide');
				$(id+'-button').className = 'slide-roles-down';
			}
		}
	}
}

function CheckRolesCount(id) {
	var total = 0;
	var all_perm = 0;

	content = 'box-content-'+id;
	div = $(content).childNodes; //jeden div pusty dla plynnej animacji slide

	checkbox = div[0].childNodes;
	for (var i=0; i < checkbox.length; i++) {
		if (checkbox[i].type == 'checkbox') {
			if (eval(checkbox[i].checked) == true) {
				total += 1;
			}
			all_perm += 1;
		}
	}
	$('count-' + id).innerHTML = total + '/' + all_perm; //update licznika

	if (total == all_perm) {
		Element.addClassName('status-'+id, 'checked');
	} else {
		Element.removeClassName('status-'+id, 'checked');
	}
}

/*
** Wybrane funkcje są dodane do obiektu document
*/
document.insertToHidden = insertValueToHidden;
