var lastSelected = new Array();
var form_is_just_submited = false;

function _submitFormButton(form, name, value, type) {
	var err = false;
	if (!form_is_just_submited) { //odchyceni dvojkliku
		form_is_just_submited = true;
		if (checkForm(form, type)) {
			if (!name) err = false;
			else {
				var e;
				e = document.createElement('input');
			    if (e) {
			    	e.name = name;
			    	e.type = 'hidden';
				    form.appendChild(e);
			    	e.value = value;
				} else err = true;
			} 
			if (!err) form.submit();
		} else form_is_just_submited = false;
	} 
}

function Is() {
  var agt=navigator.userAgent.toLowerCase();
  this.ie=((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1))?1:0;
  this.dom=document.getElementById?1:0;
  this.ie4=(document.all && !this.dom)?1:0;
  this.ns4=(document.layers && !this.dom)?1:0;
  return this;
}

var clndr_mnames = new Array('Leden','Únor','Březen','Duben','Květen','Červen','Červenec','Srpen','Září','Říjen','Listopad','Prosinec');
var clndr_wnames = new Array('Po','Út','St','Čt','Pá','So','Ne');

var is = new Is();

if(is.ns4) {
	var regSurnames = /^[ ]*[a-z]+[ ]*[a-z]+[ a-z]*$/i;
	var regNames = /^[ ]*[a-z]+[ a-z]*$/i;                             
	var regInfSurnames = /^[ ]*[a-z]{2,}[ ]*$/i;
	var regInfNames = /^[ ]*[a-z]{1,}[ ]*$/i;
	var regContact = /^[ ]*[a-z0-9,.:_"\'()&#*+\/-]+[ a-z0-9,.:_"\'()&#*+\/-]*$/i;
}
else {
	var charAllowed = ' -ſ';//'Â-ţž';
	var regSurnames = new RegExp("^[ ]*[a-z" + charAllowed + "]+[ ]*[a-z" + charAllowed + "]+[ a-z" + charAllowed + "]*$", "i");
	var regNames = new RegExp("^[ ]*[a-z" + charAllowed + "]+[ a-z" + charAllowed + "]*$", "i");
	var regInfSurnames = new RegExp("^[ ]*[a-z" + charAllowed + "]{2,}[ ]*$", "i");
	var regInfNames = new RegExp("^[ ]*[a-z" + charAllowed + "]{1,}[ ]*", "i");
	var regContact = new RegExp("^[ ]*[a-z" + charAllowed + "0-9,.:_\"'()&#\/*+-]+[ a-z" + charAllowed + "0-9,.:_\"'()&#\/*+-]*$", "i");
}
var regFFcard = /^[a-z0-9]+$/i;
var regemail = /^[+]?[_a-z0-9-]+(\.[_a-z0-9-]+)*@([0-9a-z][0-9a-z-]*\.)+[a-z]{2,4}$/i;
var regFoidValue = /^[a-z0-9]+$/i;
var regnum = /^[0-9]{1,2}$/;

//general images
var plus = new Image();
plus.src='/images/box.gif';
var minus = new Image();
minus.src='/images/min.gif';

function sprintf(rest, p) {
	var part = '';
	var x, n;
	x = rest.search('%');
	if (x == -1) return rest;
	if (x > 0) part = part + rest.substr(0, x);
	n = rest.substr(x+1, 1);
	if (isNaN(n) || (typeof p[n] == 'undefined')) {
		part = part + '%';
		x++;
	} else {
		part = part + p[n];
		x = x + 2;
	}
	rest = rest.substr(x);
	if (rest != '') part = part + sprintf(rest, p);
	return part;
}

function swapImages(el, status) {
	if (el) el.src = (status) ? minus.src : plus.src;
}

function iterateSwitch(id, status, start, end) {
	var k;
	for(k = start; k <= end; k++) switchVisibility(id + k, status);	
}

function switchVisibility(elem, status) {
  var elm;
  if(!is.dom) return;
  elm = document.getElementById(elem);
  if(elm) elm.style.display = (status) ? "" : "none";
}

function getElement(form, elName) {
	var el;
	if (!form || !elName || (elName == '')) return false;
	eval('el = form.'+elName+';');
	if (!el) return false;
	return el;
}

function getFormByName(formName) {
	var el;
	if (is.dom) {
		return document.getElementsByName(formName)[0];
	} else {
		return document.forms[formName];
	}	
}

function getRadio(Ctrl, elName) {
	var el,z;
	if (!Ctrl) return false;
	if (!elName) return false;
	eval("el = Ctrl." + elName);
	if (!el) return false;
  	if (!el.length && el.checked == 1) {	//zaskrtnuta jedina volba
    	return el.value
	}
	else {
    	for (z=0; z<el.length; z++) {
    		if (el[z].checked) return el[z].value;
    	}
  	}
	return false;
}

function getInput(Ctrl, elName) {
	var el;
	if (!Ctrl) return false;
	if (!elName) return false;
	eval("el = Ctrl." + elName);
	if (!el) return false;
  	if (el.value) {
    	return el.value;
	}
	return false;
}

function getCombo(Ctrl, elName) {
	var el;
	if (!Ctrl) return false;
	if (!elName) return false;
	eval("el = Ctrl." + elName);
	if (!el) return false;
	if (!el || !el.options) return false;
	return el.options[el.selectedIndex].value;
}

function setCombo(id, val) {
    var	elm = document.getElementById(id);
	if(!elm || !elm.options)
		return false;
    
    for(var m = 0; m < elm.options.length; m++) {
        if(elm.options[m].value == val) {
            elm.selectedIndex = m;
            return m;
        }
    }
}

var prefNames = new Array();
var prefPositions = new Array();

function addOption(id, addVal) {
    var m;
	var	elm = document.getElementById(id);
	if(!elm || !elm.options) return false;
    if(prefPositions[id] == null) return;
    
    for(m = 0; m < elm.options.length; m++) {
        if(elm.options[m] && elm.options[m].value == addVal)
            return false;
    }
    
    var actual = elm.options[elm.selectedIndex].value;
    for(m = elm.options.length - 1; m >= prefPositions[id]; m--) {
        elm.options[m+1] = new Option(elm.options[m].text, elm.options[m].value);
    }
    elm.options[prefPositions[id]] = new Option(prefNames[addVal], addVal);
    setCombo(id, actual);
}

function removeOption(id, removeVal) {
	var	elm = document.getElementById(id);
	if(!elm || !elm.options) return false;
    
    var actual = elm.options[elm.selectedIndex].value;
    for(var m = 0; m < elm.options.length; m++) {
        if(elm.options[m].value == removeVal) {
            prefNames[removeVal] = elm.options[m].text;
            elm.options[m] = null;
            prefPositions[id] = m;
            if(actual == removeVal) {
                elm.selectedIndex = 0;
            }
            else {
                setCombo(id, actual);
            }
            break;
        }
    }
}

function setRadio(name, wanted, unwanted) {
	//alert(name + " " + wanted + " " + unwanted);
	elm = document.getElementsByName(name);
	if(!elm || !elm.length) return;

	if(unwanted && unwanted.length) {
		for(var k = 0; k < elm.length; k++) {
			if(elm[k].value == unwanted && elm[k].checked) {
				return setRadio(name, wanted);
			}
		}
	}
	else {
		for(var k = 0; k < elm.length; k++) {
			if(elm[k].value == wanted) {
				elm[k].checked = true;
				return true;
		    }
		}
	}
	return false;
}

function setCssClass(elem, cssClassName) {
	var elm;
	if(!is.dom) return false;
	elm = document.getElementById(elem);
	if(elm) {
		elm.className = cssClassName;
		return true;
	} else {
		return false;
	}	
}

function postSelection(el, status, name, index, cssClassName)
{
	swapImages(el, status);
    if(status && lastSelected && lastSelected[index]) {	
		//remove selection from previous
    	setCssClass(lastSelected[index], 'odd');
    	setCssClass(lastSelected[index]+"ln", 'odd');
    	setCssClass(lastSelected[index]+"_0", 'odd');
    	setCssClass(lastSelected[index]+"_1", 'odd');
		var i = 1;
		while(setCssClass(lastSelected[index]+"_rules_"+i+"_1", 'odd')) {
			setCssClass(lastSelected[index]+"_rules_"+i+"_2", 'odd');
			i++;
		}
	}
    setCssClass(name, (status) ? cssClassName : 'odd');	//select new one
    setCssClass(name+"ln", (status) ? cssClassName : 'odd');
    setCssClass(name+"_0", (status) ? cssClassName : 'odd');
    setCssClass(name+"_1", (status) ? cssClassName : 'odd');
	var j = 1;
	while(setCssClass(name+"_rules_"+j+"_1", (status) ? cssClassName : 'odd')) {
		setCssClass(name+"_rules_"+j+"_2", (status) ? cssClassName : 'odd');
		j++;
	}
    if(index !== null)
		lastSelected[index] = name;
}

function daySelected(el, route)
{
	var name = el.value + route;
	if(el.checked && lastSelected && lastSelected[route]) {  //remove selection from previous
		setCssClass(lastSelected[route], '');
	}
	setCssClass(name, (el.checked) ? 'active' : '');		 //select new one
	lastSelected[route] = name;
}

function removeSeparator(num) {
    var re = /[^0-9]*/gi;
    if (!num) num = ''; 
    return num.replace(re, '');
}

function notExpired(month, year) {
  var now = getServerNow(); //new Date();
  if(year < now.getFullYear()) {
      return false;
  }
  if(year == now.getFullYear()) 
    if(month < (now.getMonth()+1))
      return false;
  return true;	
}

function IsLeapYear(y) {
   return (0 == y%4 && ((y%100 != 0) || (y%400 == 0)));
}

function DayEnd(mes, rok) {
   mes -= 1;
   var pocet_dni = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
   if ((typeof pocet_dni[mes] == 'undefined') || (pocet_dni[mes] == 'undefined')) return 0; 
   return ((IsLeapYear(rok)) && (mes == 1)) ? 29 : pocet_dni[mes];
}

function checkConfirm(form, message) {
	if (typeof confirmName == 'undefined') return true;
	var val = getRadio(form, confirmName);
	if(!val || !val.length) {
		alert(message);
		return false;
	}
	return true;
}

//vycisti obsah pole - pokud zacina na nedelitelnou mezeru
function clearContent(id, obj) {
    var x;
    if (!id && obj) x = obj;
    else if (id) x = document.getElementById(id);
    if (x) {
        if (x.value) {
            if ((x.value.substring(0,1)=='\u00A0') || (x.value.substring(0,1)==' ')) {
            	x.value = '';
            	return true;
           	}
        }
    }
    return null;
}

function checkBirthDates(day, month, year, min, max) {
  var depDay, depMonth, depYear, i;
  if (departureDates && departureDates.length) {
  	for (i=0; i<departureDates.length; i++) {
  		if (!checkBirthDate(day, month, year, min, max, departureDates[i])) return false;
  	}
  	return true;
  } else {
  	return checkBirthDate(day, month, year, min, max, departureDate);
  }
} 
function checkBirthDate(day, month, year, min, max, depDate) {
  var depDay = depDate.substr(0,2);
  var depMonth = depDate.substr(2,2);
  var depYear = depDate.substr(4,2);
  var year1 = parseInt(year,10)+min;
  var year3 = parseInt(year,10)+max;
  var stamp1 = new Date(year3, parseInt(month,10)-1, day);
  var stamp2 = new Date(2000+parseInt(depYear,10), parseInt(depMonth,10)-1, depDay);
  var stamp3 = new Date(year1, parseInt(month,10)-1, day);
  //alert(stamp1 + "\n" + stamp2 + "\n" + stamp3);
  return ((stamp3 <= stamp2) && (stamp2 < stamp1));
}

function fullnameLength(surname, firstname, title) {
    var fullname = "" + surname + "/" + firstname + "" + title;
    return (fullname.length <= 27);
}


function getServerNow() {
    return new Date(serverNow.getFullYear(), serverNow.getMonth(), serverNow.getDate(), 
                    serverNow.getHours(), serverNow.getMinutes(), serverNow.getSeconds());
}


