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;
		
		//Symphony 2 - pokud ma stranka definovane nejake ukoncovaci procedury pred presmerovanim
		if( typeof stopStack != 'undefined' ) {
			for(var i = 0; i < stopStack.length; i++) {
				eval( stopStack[i] );
			}
		}
		
		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) {
			    // V prohlizecich s jadrem WebKit je potreba pro otevreni do noveho okna 
			    var browser = browserDetect();
			    if (form.target != '' && browser[0] != 'IE') {
			        window.open('', form.target);
			    }
			    
                form.submit();
			}
		} else form_is_just_submited = false;
	} 
}

/**
 * Detekce browseru a jeho verze
 */    
function browserDetect() {
    var browserName, browserVersion, result = new Array();
    // IE
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
        result[0] = 'IE';
        result[1] = new Number(RegExp.$1);
    }
    // FF
    else if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
        result[0] = 'FF';
        result[1] = new Number(RegExp.$1);
    }
    // Safari & Chrome
    else if (/Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
        result[0] = 'SF';
        result[1] = new Number(RegExp.$1);
    }
    // Opera
    else if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
        result[0] = 'OP';
        result[1] = new Number(RegExp.$1);
    }
    return result;
}

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('Január','Február','Marec','Apríl','Máj','Jún','Júl','August','September','Október','November','December');
var clndr_wnames = new Array('Po','Ut','St','Št','Pia','So','Ne');

var is = new Is();

if(is.ns4) {
	var charAllowed = '';
	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;
	var ukraineChars = '';
}
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 ukraineChars = 'АаБбВвЗзГгҐґДдЕеЄєЖжИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЮюЯяЬьЁёЪъЫыЭэ';
}
var regFFcard = /^[a-z0-9]+$/i;
var regemail = /^[+]?[_a-z0-9-]+(\.[_a-z0-9-]+)*@([0-9a-z][0-9a-z-]*\.)+[a-z]{2,6}$/i;
var regFoidValue = /^[a-z0-9]+$/i;
var regnum = /^[0-9]{1,2}$/;

//kontrolni regexpy pro creditcards
var regAX = /^((37)|(34))[0-9]{13}$/; //AMERICANEXPRESS
var regDC = /^((30)|(36)|(38))[0-9]{12}$/; //DINNERSCLUB
var regCA = /^5[0-9]{15}$/; //MASTERCARD
var regVI = /^4(([0-9]{15})|([0-9]{12}))$/; //VISA
var regTP = /^[0-9]{15}$/;  //UATP

//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) {
	return getElementValue(Ctrl, elName);
}
function getInput(Ctrl, elName) {
	return getElementValue(Ctrl, elName);
}
function getCombo(Ctrl, elName) {
	return getElementValue(Ctrl, elName);
}

function getElementValue(Ctrl, elName) {
	var el, z;
	if (!Ctrl) return false;
	if (!elName) return false;
	eval("el = Ctrl." + elName);
	if (!el) return false;
	if (el.type == 'text') return el.value; //input text
	if (el.type == 'hidden') return el.value; //input text hidden
	if (el.type == 'password') return el.value; //input text password
	if (el.options) return el.options[el.selectedIndex].value; //combo
	if (!el.length && el.checked == 1) { //radio - jedina volba a je zaskrtnuta
    	return el.value;
	}
	else if (el.length) { //radio - vice voleb
    	for (z=0; z<el.length; z++) {
    		if (el[z].checked) return el[z].value;
    	}
  	}
  	return false;
}

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 daySelected(el, route)
{
	//butony
	jQ("div.den_active").eq(route).removeClass().addClass("den_normal");
	jQ(el).parent().removeClass().addClass("den_active");
	
	//schovani chybovych hlasek
	jQ("div.error, div.message, div.msg").css("display","none");
		
}

/**
* funkce vraci cast url, ktera je mezi hostname a samotnym souborem.
* Tedy z napr. http://ibs.ibs.kubat.prg.aag.cz/cs/halffareav.php metoda vrati /cs/
*/
function parseURL() {

    //parsovani queryStringu
    sCallingURL = String(window.location.href);
    queryStr = sCallingURL.substring(sCallingURL.indexOf('?') + 1, sCallingURL.length);
  
   //vyparsovani dodatecnych URL, ktere nejsou obsazeny v hostname, ale jsou pred samotnym filename	
   var re=/(.*):\/\/(.*)/;
   var result=sCallingURL.match(re); 
   sExtCallingURL = String(result[2]);   
      
   //vyparsovani rozsireneho querystringu BEZ hostname (jazyk, modul)
   extQueryStr = sExtCallingURL.substring(sExtCallingURL.indexOf('/') + 1, sExtCallingURL.lastIndexOf('/'));
   
   return extQueryStr;

}

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;
  //return true;
  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());
}

function encodeURIComponentFull(text) { // opravuje nedokonalost fce encodeURIComponent
    var reg;
    text = encodeURIComponent(text);
    reg = new RegExp('\\x2d', 'gm');
    text = text.replace(reg, '%2D'); //-
    reg = new RegExp('\\x5f', 'gm');
    text = text.replace(reg, '%5F'); //_
    reg = new RegExp('\\x2e', 'gm');
    text = text.replace(reg, '%2E'); //.
    reg = new RegExp('\\x21', 'gm');
    text = text.replace(reg, '%21'); //!
    reg = new RegExp('\\x7e', 'gm');
    text = text.replace(reg, '%7E'); //~
    reg = new RegExp('\\x2a', 'gm');
    text = text.replace(reg, '%2A'); //*
    reg = new RegExp('\\x27', 'gm');
    text = text.replace(reg, '%27'); //'
    reg = new RegExp('\\x28', 'gm');
    text = text.replace(reg, '%28'); //(
    reg = new RegExp('\\x29', 'gm');
    text = text.replace(reg, '%29'); //)
    return text;
}

function switchState(countryComboName, elementID) {
	var status; 
	var form = getFormByName(formName);
	if (getCombo(form, countryComboName) == 'US') {
		status = true;
	} else {
		status = false;
	} 
	switchVisibility(elementID, status);
}

/* *************************************************************** */
/* ******************** Symphony 2 ******************************* */
/* *************************************************************** */
function prepareErrorMsg(msg) {
	if (msg.length > 0) {
	
		//pripravit hlasku
	   	var errorMsg = '<div class="messages"><div class="error">'+ msg +'</div></div>';
	   		
	   	jQ("div.messages").remove();	
	   	//vlozit na spravne misto
	   	jQ("div.columns_container").before(errorMsg);
   	
   	}
}

function prepareErrorMsgTo(msg, idDiv) {
	if (msg.length > 0) {
	   		
	   	//jQ(idDiv).remove();	
	   	//vlozit na spravne misto
	   	jQ(idDiv).append(msg);
   	
   	}
}

function dummy(){}

// stop bubling napr u href
function stopDefault(e) {
	if(e && e.preventDefault) {
		e.preventDefault();
	} else {
		window.event.returnValue = false;
	}
	alert(e + window.event.returnValue);
	return false;
}

//help function to sort numbers, because array.sort() sort by alpha (50 is less then 4)
function sortNumber(a,b) {
	return a - b;
}

function alertAssoc(aInput) {
	var output = "";
	for (var idx in aInput) {
		output += "["+idx+"]="+aInput[idx]+";"+"\n";
	}
	return output;
}

// Upravuje cenu aby byla jedinecna
var iIndexRand = 0;
function modifyPrice(oInputString) {
	var iPosPoint = oInputString.indexOf(".");
	var output;
	if (iPosPoint > 0) output = oInputString.substring(0, iPosPoint) + "." + iIndexRand;
	else output = oInputString + "." + iIndexRand;
	iIndexRand++;
	return output;
}

//Zastavi vykonavani jakekoliv dalsi akce browseru
function stopDefault(e) {
  	if(e && e.prevendDefault) {
  		e.prevendDefault();
  	} else {
  		window.event.returnValue = false;
  	}
  	
	return false;
}

function startOverAlert(url) {
	if(confirm("Are you sure to start over? All items in shopping cart will be deleted!")) {
		location.href = url;
	}
}

function switchVisibilityEfect(elem, status) {
  if(!is.dom) return;
  
  if (status) {
  	jQ("#"+elem).show("blind", { direction: "vertical" }, 50);
  } else {
  	jQ("#"+elem).hide("blind", { direction: "vertical" }, 100);
  }
  
} 

function switchText(id1, id2, status) {
	if (status) {
		jQ("#"+id1).hide();
		jQ("#"+id2).show();
	} else {
		jQ("#"+id1).show();
		jQ("#"+id2).hide();
	}
}

// funkce pro zobrazeni a skryti prvku loading, ktery je pres cely columns container
function showLoadingBox(status) {
	if (status) {
		hideSelectBoxes();
		var containerWidth = jQ("div.columns_container").width();
		var containerHeight = jQ("div.columns_container").innerHeight();
		var object = document.getElementById('loadingbox_overlay').style;
		//window.status += containerWidth +" "+containerHeight;
		object.opacity = 0.6;
		object.MozOpacity = 0.6;
		object.KhtmlOpacity = 0.6;
		object.filter = "alpha(opacity=" + 70 + ")";
		jQ("#loadingbox_overlay").css('width', containerWidth);
		jQ("#loadingbox_overlay").css('height', containerHeight);
		jQ("#loadingBox_container").css('width', containerWidth);
		jQ("#loadingBox_container").css('height', containerHeight);
		jQ("#loadingBox_container").fadeIn('slow');
		jQ("#loadingBox_image").show("slow");
	} else {
		jQ("#loadingBox_image").fadeOut('fast');
		jQ("#loadingBox_container").fadeOut('slow');
		displaySelectBoxes();
	}

}

// funkce pro zobrazeni a skryti prvku loading, ktery je pres cely columns container
function showLoadingBoxDetail(status) {
	// pri jiz zobrazenem loadingu se nic nedela
	if (status && jQ("#loadingBoxDetail_container").is(':visible')) {
		return true;
	}
	
	if (status) {
		//hideSelectBoxes();
		setLoadingBoxDetailDimension();
		var object = document.getElementById('loadingboxdetail_overlay').style;
		object.opacity = 0.6;
		object.MozOpacity = 0.6;
		object.KhtmlOpacity = 0.6;
		object.filter = "alpha(opacity=" + 70 + ")";
		jQ("#loadingBoxDetail_container").fadeIn('slow');
		jQ("#loadingBoxDetail_image").show("slow");
	} else {
		jQ("#loadingBoxDetail_image").fadeOut('fast');
		jQ("#loadingBoxDetail_container").fadeOut('slow');
		//displaySelectBoxes();
	}

}

function setLoadingBoxDetailDimension() {
	var containerWidth = jQ("div.mspc_detail_wrapper").width();
	var containerHeight = jQ("div.mspc_detail_wrapper").innerHeight();
	
	
	jQ("#loadingboxdetail_overlay").css('width', containerWidth);
	jQ("#loadingboxdetail_overlay").css('height', containerHeight);
	jQ("#loadingBoxDetail_container").css('width', containerWidth);
	jQ("#loadingBoxDetail_container").css('height', containerHeight);
}

// Funkce pro skryti select boxu kuli IE
function hideSelectBoxes() {
	var x = document.getElementsByTagName("SELECT");
	
	for (i=0;x && i < x.length; i++) {
		x[i].style.display = "none";
		jQ(x[i]).after('<input class="'+x[i].className+'" id="select_'+ i +'" value="'+ x[i].options[x[i].selectedIndex].text +'" />');
		//jQ(x[i]).after('<span id="select_'+ i +'">' + x[i].options[x[i].selectedIndex].text + '</span>');
	}
}

// Odkryti Select, navaznost na fci hideSelectBoxes
function displaySelectBoxes() {
	var x = document.getElementsByTagName("SELECT");
	
	for (i=0;x && i < x.length; i++){
		x[i].style.display = "";
		jQ("#select_"+i).remove();
	}
} 