/**
 * trim function
 */
function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}


/*
 * getObj(name)
 *
 * sets object and style
 */
function getObj(name)
{
  if (document.getElementById){
  	this.obj = document.getElementById(name);
	this.style = document.getElementById(name).style;
  }
  else if (document.all)
  {
	this.obj = document.all[name];
	this.style = document.all[name].style;
  }
  else if (document.layers)
  {
	this.obj = getObjNN4(document,name);
	this.style = this.obj;
  }
}

/*
getObjNN4(obj, name)

rekurzivni funkce pro hledani objektu jmena name v Netscapu se zanorenymi
vrstvami, divy.
*/
function getObjNN4(obj,name)
{
	var x = obj.layers;
	var foundLayer;
	for (var i=0;i<x.length;i++)
	{
		if (x[i].id == name)
		 	foundLayer = x[i];
		else if (x[i].layers.length)
			var tmp = getObjNN4(x[i],name);
		if (tmp) foundLayer = tmp;
	}
	return foundLayer;
}

/**
 * shows element. it allows to choose the way elemtns would be displayed
 * block, inline, table, etc.
 * @param string objectName
 * @param string displayStyle
 */
function showElement(objectName, displayStyle)
{
	objToShow = new getObj(objectName);
	objToShow.style.display = displayStyle;
}

/*
 * hides element
 * @param string objectName
 */
function hideIt(objectName)
{
	objToHide = new getObj(objectName);
	objToHide.style.display = 'none';
}

/**
* switch display state of object - ie display:block <-> none
* @param string objectName
* @param string displayStyle
*/
function toggleElementDisplay(objectName, displayStyle)
{
	objToToggle = new getObj(objectName);
	if (objToToggle.style.display != 'none') {
    	hideIt(objectName);
  	} 
	else {
		showElement(objectName, displayStyle);
	}
}

/**
* reset passed form
* @param string formName
*/
function resetForm(formName)
{
	form = new getObj(formName);
	form.obj.reset();
}

/**
 * fetchUrlNameFromTitle
 *
 * gets values from item title and makes an url out of them
 */

function fetchUrlNameFromTitle(sourceName, destName)
{
	source  = new getObj(sourceName);
	dest    = new getObj(destName);
	urlName = getRidOfBadCharacters(source.obj.value);

	dest.obj.value = urlName.toLowerCase();
}

/**
 * this function gets rid off unwanted characters in string
 */
function getRidOfBadCharacters(string)
{
	var badChars="áäčďéěíĺľňóôőöŕšťúůűüýřžÁÄČĎÉĚÍĹĽŇÓÔŐÖŔŠŤÚŮŰÜÝŘŽ -/.,?+<>:;{}()!'\"\\";
	var goodChars="aacdeeillnoooorstuuuuyrzaacdeeillnoooorstuuuuyrz---";
	var newString="";
	
	string = trim(string);
	for(i=0;i<string.length;i++)
	{ 
		if (badChars.indexOf(string.charAt(i))!=-1) 
		{
		//when replacing bad characters for good one, we have to check if the last
		//replaced character wasn't "-" so that we are not going to have two or more
		// "-" in a row. 
			if((goodChars.charAt(badChars.indexOf(string.charAt(i)))!='-')||(newString.substring(newString.length-1, newString.length)!='-'))
			{
				newString+=goodChars.charAt(badChars.indexOf(string.charAt(i)));
			}
		}
		else newString+=string.charAt(i);
	}
	return newString;
}




/**
 * checks if required fields are not empty
 * all required fields have to be in class named "required"
 * if the field has specified title than show title in alert - title should 
 * be in format Insert your name. Insert your address. Etc.
 */
function validateForm ()
{
	requiredFields = getElementsByClassName("required");
	
	for (var i=0;i<requiredFields.length;i++)
	{
		if ( trim (requiredFields[i].value) == "" ){
			if (requiredFields[i].title){
				alert (requiredFields[i].title);
			}
			else{
				alert ("Je třeba vyplnit všechny povinné položky!");
			}
			requiredFields[i].focus();
			return false;
		}
	}
	return true;
}

/**
* gets all element with specified class name
* @param string clsName 
* @return array all elements with specified class name
*/	
function getElementsByClassName(clsName) 
{ 
	var arr = new Array(); 
	var elems = document.getElementsByTagName("*");
	for ( var cls, i = 0; ( elem = elems[i] ); i++ )
	{
		if ( elem.className.indexOf(clsName) != -1 )
		{
			arr[arr.length] = elem;
		}
	}
	return arr;
}

/**
 * hides element that should be hidden (has class='hidden')
 * it can not be done directly with css because some js has problems then..
 */
function hideHiddenElements()
{
	elementsToHide   = getElementsByClassName("hidden");
	var display = 'none';	
		
	for (var i=0;i<elementsToHide.length;i++)
	{
		elementsToHide[i].style.display = 'none';
	}
}

/**
 * setValue
 *
 * sets specified value to selected object
 */
function setValue(destName, value)
{
	source 	         = new getObj(destName);
	source.obj.value = value;
}

/**
 *submit form
 */
function submitForm(formName)
{
	form = new getObj(formName);
	form.obj.submit();
}

function setSubmitAction(formName, actionString)
{
	form = new getObj(formName);
	form.obj.action=actionString;
	form.obj.submit();
}


function changeClass(objectName, newClass)
{

	object = new getObj(objectName);
	object.obj.className = newClass;
}

function setFocus(objectName)
{
	objectToSetFocusTo = new getObj(objectName);
	objectToSetFocusTo.obj.focus();

}

/**
 * opens a popup windows with picture specified in path and with specified dimensions
 */
function openPictureWindow(path,width,height)
{
	var top = screen.availHeight/2 - height/2;
	var left = screen.availWidth/2 - width/2;

	if (screen.availHeight < height) { top = 0; height=screen.availHeight;}
	if (screen.availWidth < width) { left = 0; width = screen.availWidth;}
	
	// width + scrollbar
	width += 25;
	window.open(path, "window",'width=' + width + ',height=' + height +',top=' + top +',left='+ left+',scrollbars=1');
}

/**
 * Displays a delete confirmation window
 * @param string lang - which language to use
 */ 
function confirmDelete(lang)
{
	var text = "";
	
	switch (lang)
	{
		case 'cz':
		case 'cs':
			text="Opravdu chcete tuto položku smazat?";
			break;
		case 'de':
			text = "Wollen Sie .... ?";
	}
			
	confirmation = confirm(text);
	if ( confirmation == true ){
		return true;
	}
	else {
		return false;
	}
}

/**
 * checks all element that are in class named elements_to_control. if all
 * fields in this class are filled, then shows all elements with elements_to_show_class
 */
function checkIfDisplayHiddenElements()
{
	elementsToShow    = getElementsByClassName("elements_to_show");
	elementsToControl = getElementsByClassName("elements_to_control");
	var visibility = 'visible';
	
		
	for (var i=0;i<elementsToControl.length;i++)
	{
		if ( trim (elementsToControl[i].value) == "" ){
			visibility = 'hidden';
		}
	}
		
	for (var i=0;i<elementsToShow.length;i++)
	{
		elementsToShow[i].style.visibility= visibility;
	}
}

/**
 * Opens filemanager window that is part of tiny_fce to fetch image name
 * and insert it to specified element
 */
function openFckFileManager(field_name, win)
{
	tinyfck_field = field_name;
	tinyfck = win;
	window.open("../javascripts/filemanager/browser.html?Connector=connectors/php/connector.php", "tinyfck", "modal,width=600,height=400");
}


/**
 * toggleDisplay(objectName)
 *
 * display switcher - if object.style.display is none this function turns it to 
 * calls function showit, and vice versa 
 * 
 *
*/
function toggleDisplay(objectName)
{

	objToToggle = new getObj(objectName);
	if(objToToggle.style.display == 'none') {
    	showIt(objectName);
  	} else {
		if(objToToggle.style.display != 'none') {
			hideIt(objectName);
		} else {
			showIt(objectName);
		}
	}
}

/*
 * showIt(objectName)
 * zobrazi objekt jmena (objectName)
*/
function showIt(objectName)
{

	objToShow = new getObj(objectName);
	objToShow.style.display = 'block';
}

// tato funkce bude prohazovat classy u objektu -
// pokud bude nastavena prvni, zapne druhou a vice versa
// vhodn pro zatrhavani polozek v tabulce
// predpoklada ze u tohoto objektu mohou nastat
// prave jen tyto dva stavy
function toggleClasses(objectName, firstClass, secondClass)
{
	object = new getObj(objectName);
	if (object.obj.className == firstClass)
	{
		object.obj.className = secondClass;
	} else
	{
		object.obj.className = firstClass;
	}

}

//"spravne" reseni externich odkazu v strict xhtml webu
function externalLinks() { 
 if (!document.getElementsByTagName) return; 
 var anchors = document.getElementsByTagName("a"); 
 for (var i=0; i<anchors.length; i++) { 
   var anchor = anchors[i]; 
   if (anchor.getAttribute("href") && 
       anchor.getAttribute("rel") == "external") 
     anchor.target = "_blank"; 
 } 
}

//obnoveni obrazku pro captcha
function new_freecap()
{
	// loads new freeCap image
	if(document.getElementById)
	{
		// extract image name from image source (i.e. cut off ?randomness)
		thesrc = document.getElementById("captcha_image").src;
		thesrc = thesrc.substring(0,thesrc.lastIndexOf(".")+4);
		// add ?(random) to prevent browser/isp caching
		document.getElementById("captcha_image").src = thesrc+"?"+Math.round(Math.random()*100000);
	} else {
		alert("Sorry, cannot autoreload freeCap image\nSubmit the form and a new freeCap will be loaded");
	}
}

//validace formulare s dvema policky pro hesla
function validateFormWithDualPassword() {
	valid = validateForm();
	
	if (valid) {
		if ( document.getElementById('password').value == document.getElementById('password2').value ) {
			return true;
		}
		alert("Obě zadaná hesla se musí shodovat!");
	}
	
	return false;
}

//postupe zobrazovani prvku pole
function serialShow ( objects, button ) {
	for ( i=0; i<objects.length-1; i++) {
		var obj = document.getElementById(objects[i]);
		if (obj.style.display == 'none') {
			obj.style.display = 'block';
			return;
		}
	}
	
	document.getElementById(objects[i]).style.display = 'block';
	document.getElementById(button).style.display = 'none';
}

// pro přihlášku
function OnSubmit()
{
	var obor = document.getElementById('oborID');
	if (obor.options.selectedIndex == 0) {
		alert("Není vybrán obor.");
		obor.focus();
		return false;
	}
	var predmet = document.getElementById('predmetID');
	if (predmet.options.selectedIndex == 0) {
		alert("Není vybrán hlavní předmět.");
		predmet.focus();
		return false;
	}
	var jmeno = document.getElementById('jmenoID');
	CheckText(jmeno);
	if (jmeno.value == "") {
		alert("Není vyplněno jméno.");
		jmeno.focus();
		return false;
	}
	if (jmeno.value.length > 20) {
		alert("Jméno musí být dlouhé nejvýše 20 znaků.");
		jmeno.focus();
		return false;
	}
	var prijmeni = document.getElementById('prijmeniID');
	CheckText(prijmeni);
	if (prijmeni.value == "") {
		alert("Není vyplněno příjmení.");
		prijmeni.focus();
		return false;
	}
	if (prijmeni.value.length > 20) {
		alert("Příjmení musí být dlouhé nejvýše 20 znaků.");
		prijmeni.focus();
		return false;
	}
	var rodneCislo = document.getElementById('rodneCisloID');
	CheckText(rodneCislo);
	if (rodneCislo.value == "") {
		alert("Není vyplněno rodné číslo.");
		rodneCislo.focus();
		return false;
	}
	if (rodneCislo.value.length > 11) {
		alert("Rodné číslo musí být dlouhé nejvýše 11 znaků.");
		rodneCislo.focus();
		return false;
	}
	var datumNar = document.getElementById('datumNarID');
	CheckText(datumNar);
	if (datumNar.value == "") {
		alert("Není vyplněno datum narození.");
		datumNar.focus();
		return false;
	}
	if (datumNar.value.length > 20) {
		alert("Datum narození musí být dlouhé nejvýše 20 znaků.");
		datumNar.focus();
		return false;
	}
	var mistoNar = document.getElementById('mistoNarID');
	CheckText(mistoNar);
	if (mistoNar.value == "") {
		alert("Není vyplněno místo narození.");
		mistoNar.focus();
		return false;
	}
	if (mistoNar.value.length > 30) {
		alert("Místo narození musí být dlouhé nejvýše 30 znaků.");
		mistoNar.focus();
		return false;
	}
	var obcanstvi = document.getElementById('obcanstviID');
	CheckText(obcanstvi);
	if (obcanstvi.value == "") {
		alert("Není vyplněno státní občanství.");
		obcanstvi.focus();
		return false;
	}
	if (obcanstvi.value.length > 20) {
		alert("Státní občanství musí být dlouhé nejvýše 20 znaků.");
		obcanstvi.focus();
		return false;
	}
	var ulice = document.getElementById('uliceID');
	CheckText(ulice);
	if (ulice.value == "") {
		alert("Není vyplněna ulice bydliště.");
		ulice.focus();
		return false;
	}
	var obec = document.getElementById('obecID');
	CheckText(obec);
	if (obec.value == "") {
		alert("Není vyplněna obec bydliště.");
		obec.focus();
		return false;
	}
	var psc = document.getElementById('pscID');
	CheckText(psc);
	if (psc.value == "") {
		alert("Není vyplněna PSČ bydliště.");
		psc.focus();
		return false;
	}
	var zJmeno = document.getElementById('zJmenoID');
	CheckText(zJmeno);
	if (zJmeno.value == "") {
		alert("Není vyplněno jméno zákonného zástupce.");
		zJmeno.focus();
		return false;
	}
	if (zJmeno.value.length > 20) {
		alert("Jméno zákonného zástupce musí být dlouhé nejvýše 20 znaků.");
		zJmeno.focus();
		return false;
	}
	var zPrijmeni = document.getElementById('zPrijmeniID');
	CheckText(zPrijmeni);
	if (zPrijmeni.value == "") {
		alert("Není vyplněno příjmení zákonného zástupce.");
		zPrijmeni.focus();
		return false;
	}
	if (zPrijmeni.value.length > 20) {
		alert("Příjmení zákonného zástupce musí být dlouhé nejvýše 20 znaků.");
		zPrijmeni.focus();
		return false;
	}
	var zUlice = document.getElementById('zUliceID');
	CheckText(zUlice);
	if (zUlice.value == "") {
		alert("Není vyplněna ulice bydliště zákonného zástupce.");
		zUlice.focus();
		return false;
	}
	var zObec = document.getElementById('zObecID');
	CheckText(zObec);
	if (zObec.value == "") {
		alert("Není vyplněna obec bydliště zákonného zástupce.");
		zObec.focus();
		return false;
	}
	var zPsc = document.getElementById('zPscID');
	CheckText(zPsc);
	if (zPsc.value == "") {
		alert("Není vyplněno PSČ bydliště zákonného zástupce.");
		zPsc.focus();
		return false;
	}

	var tel = document.getElementById('telID');
	CheckText(tel);

	var mt = document.getElementById('mtID');
	CheckText(mt);

	var zTel = document.getElementById('zTelID');
	CheckText(zTel);

	if (tel.value == "" && mt.value == "" && zTel.value == "") {
		alert("Uveďte prosím alespoň jedno číslo telefonu.");
		tel.focus();
		return false;
	}

	var email = document.getElementById('emailID');
	CheckText(email);

	var zEmail = document.getElementById('zEmailID');
	CheckText(zEmail);

	var zp = document.getElementById('zpID');
	CheckText(zp);

	var zs = document.getElementById('zsID');
	CheckText(zs);

	var trida = document.getElementById('tridaID');
	CheckText(trida);

	var zEmail = document.getElementById('zEmailID');
	CheckText(zEmail);

	alert("Vaše přihláška bude nyní odeslána na ředitelství školy,\nkteré Vás bude kontaktovat za účelem dokončení přijímacího řízení.");

	return true;
}

function CheckText(field)	// trimLeft Right a vícenásobný mezery
{
	field.value = field.value.replace(/ */,"");
	field.value = field.value.replace(/ *$/,"");
	field.value = field.value.replace(/  */g," ");
}

function OnChangeObor()
{
	var defSel = 1;
	var cmb = document.getElementById('predmetID');
	var n = cmb.length;
	if (n > 1) {
		for (i = n; i > 1; i--)
			cmb.remove(i-1);
	}

	var obor = document.getElementById('oborID').options[document.getElementById('oborID').options.selectedIndex].value;
	if (obor == "Hudební") {
		FillPredm(predmHO);
		defSel = 28;
	}

	if (obor == "Literárně dramatický")
		FillPredm(predmLO);

	if (obor == "Taneční")
		FillPredm(predmTO);

	if (obor == "Výtvarný")
		FillPredm(predmVO);

	var cmb = document.getElementById('predmetID');
	cmb.options[cmb.selectedIndex].selected = false;
	cmb.options[defSel].selected = true;
}

predmHO = new Array
(
	"Hra na akordeon",
	"Hra na baryton",
	"Hra na bicí nástroje",
	"Hra na cimbál",
	"Hra na dudy",
	"Hra na fagot",
	"Hra na flétnu",
	"Hra na hoboj",
	"Hra na housle",
	"Hra na klarinet",
	"Hra na klavír",
	"Hra na kontrabas",
	"Hra na křídlovku",
	"Hra na kytaru",
	"Hra na lesní roh",
	"Hra na pikolu",
	"Hra na pozoun",
	"Hra na saxofon",
	"Hra na trubku",
	"Hra na tubu",
	"Hra na varhany",
	"Hra na violoncello",
	"Hra na violu",
	"Hra na zobcovou flétnu",
	"Hudebně pěv. průprava",
	"Pěvecká hlasová výchova",
	"Pěvecká výchova a zpěv",
	"Přípravná hudební výchova",
	"Přípravná hudebně-pohyb.vých.",
	"Přípravný sborový zpěv",
	"Sborový zpěv",
	"Základy hudební skladby"
);

predmLO = new Array
(
	"Literárně-dramatický obor"
);

predmTO = new Array
(
	"Taneční obor"
);

predmVO = new Array
(
	"Výtvarný obor"
);

function FillPredm(predm)
{
	var n = predm.length;
	if (document.all)	// IE
		var arg1 = n;
	else				// ostatní?
		var arg1 = null;
	var cmb = document.getElementById('predmetID');
	for (i = 0; i < n; i++) {
		var oOption = document.createElement("OPTION");
		oOption.text=predm[i];
		oOption.value=predm[i];
		cmb.add(oOption, arg1);
	}
}
