function fnCheckEmail(emailStr, sMsg){
	// /^[A-Za-z0-9\.\-_%]+\@[A-Za-z0-9\.\-_%]+\.[A-Za-z0-9]+$/
	var regExp = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/
	if (!(regExp.test(emailStr))){
		alert(sMsg)
		return false;
	}
	return true;
}



// common definitions
var clndr_mnames=Array('January','February','March','April','May','June','July','August','September','October','November','December');
var clndr_wnames=Array('Mo','Tu','We','Th','Fr','Sa','Su');
var msn = Array ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

function getToday(){
	var dtDate = new Date();
	return msn[dtDate.getMonth()]+" "+dtDate.getDate()+","+dtDate.getFullYear();
}	

function selectDate(dateControlName){
	var dtStart = new Date();

	// dtEnd = dtStart day=today's weekday numeral(monday=1) + 1 year
	var dtEnd = new Date(dtStart.getMonth()+1+'/'+dtStart.getDay()+'/'+(dtStart.getFullYear()+1));
	clndr(
		'Select Date',																//	ti
		String(dtStart.getDate()+'.'+(dtStart.getMonth()+1)+'.'+dtStart.getFullYear()),	//	mi	.getMonth() is 0 based!
		String(dtEnd.getDate()+'.'+(dtEnd.getMonth()+1)+'.'+dtEnd.getFullYear()),		//	mx
		clndr_mnames,																//	mn
		clndr_wnames,																//	wd
		Array(),			// not initialized -------------------------------------//	ho
		'#C3D0E0',																	//	hc
		'#E7E7E7',			//------------------------------------------------------//	bc
		dateControlName,															//	r1
		'mmm dd,yyyy'		//------------------------------------------------------//	f1
		//--------------------------------------------------------------------------//	r2, f2, r3, f3
	);
}


// date control handling
function IsLeapYear(y)
{
	if (0 == y%4 && ((y%100 != 0) || (y%400 == 0))) return true;
	else return false;
}

function DayEnd(mes, rok)
{
	pocet_dni = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	pocet = pocet_dni[mes - 1];
	if ((IsLeapYear(rok)) && (mes == 2)) pocet = 29;
	return pocet;
}

var openedCalendar = null;
var clndrSetDates = new Array();
//mn - month names
//wd - week names
//hc,bc - barvy
//r1 - day field, r2 - month field, r3 - year field, f - formaty
function clndr(ti,mi,mx,mn,wd,ho,hc,bc,r1,f1,r2,f2,r3,f3) {
    if(openedCalendar && !window.openedCalendar.closed) {
    	window.openedCalendar.close();
    	window.openedCalendar = null;
    }
	if( navigator.appName == "Netscape" )
	{//netscape
	    clndr_wi=window.open('','clndr_wi',"location=0,menubar=0,resizable=0,scrollbars=0,status=0,toolbar=0,width=186,height=146,screenX="+Math.floor((screen.width-196)/2)+",screenY="+Math.floor((screen.height-175)/2));
	}
	else
	{//explorer
		clndr_wi=window.open('about:blank','clndr_wi',"location=0,menubar=0,resizable=0,scrollbars=0,status=0,toolbar=0,width=186,height=146,left="+Math.floor((screen.width-196)/2)+",top="+Math.floor((screen.height-175)/2));
	}

    openedCalendar = clndr_wi;
    clndr_ho=new Array();
    clndr_mn=new Array();
    clndr_wd=new Array();
    clndr_ms=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    clndr_dd=new Date();
    clndr_td=new Date();
    clndr_hd=new Date();
    
    // never used
    for(i=0;i<ho.length;i++)
    {
		if(ho[i].charAt(ho[i].length-1)==".")
			clndr_ho[i]=ho[i].substring(0,ho[i].length-1);
	    else
			clndr_ho[i]=ho[i];
	}
	
	// copy month name array
    for(i=0;i<mn.length;i++)
		clndr_mn[i]=mn[i];
	
	// copy weekday names array
    for(i=0;i<7;i++)
		clndr_wd[i]=wd[i];
    
    // create Date objects from string
    clndr_mi=clndr_mm(mi);	// mi = startDate
    clndr_mx=clndr_mm(mx);	// mx = endDate = startDate + 1 year
    
    // endDate time modification
    clndr_mx.setHours(23);
    clndr_mx.setMinutes(59);
    
    // unknown
	clndr_ti=ti;	// ti=title
    clndr_hc=hc;
    clndr_bc=bc;
    clndr_r1=r1;
    clndr_r2=r2;
    clndr_r3=r3;
    clndr_f1=f1;
    clndr_f2=f2;
    clndr_f3=f3;
    
    // unknown
	//clndrSetDates is never initialized.
	// [] access always fails
    if(clndrSetDates[clndr_ti])
      clndr_td = clndr_mm(clndrSetDates[clndr_ti]);	// clndr_td is set to today and never modifyed
      
    clndr_sh();
}
function clndr_sh() {
    var i,pd,bm,yr,ho;
    var wd=clndr_wi.document;
    
    
	wd.open();
    wd.write("<html>\n<head>\n");
    
    // Unknown
    // works in ie, not in netscape...
    if(document.all)	// ie4+. document.all[id] = document.getElementById(id);
		wd.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset="+document.charset+"\">\n");
	
	//clndr_ti = title
    wd.write("<title>"+clndr_ti+"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</title>");
    
    //clndr_bc = backGround color (#C3D0E0)
    //clndr_hc = ?highlited color (#E7E7E7)
    wd.write("<style>\ntd { background-color: "+clndr_bc+"; text-align: center; font-style: normal; font-size: 11px; font-family: Tahoma, Arial, Helvetica, sans-serif; } input, select { font-size: 11px; } .no { color: #cccccc; } .ce { color: #dd0000; } .mi { color: #555555; } a, a:link, a:visited { color: #000000; text-decoration: none; } a:hover { color: #990000; text-decoration: none; } .border { background-color: "+clndr_hc+"; border: 1px solid #336699;} .head { background-color: "+clndr_hc+"; }");
    
    // Y "script" is split...?
    wd.write("</style>\n<scr"+"ipt language=javascript>\n");
    
    //clndr_ti = title
    wd.write("\nfunction ff(v) { var id='"+clndr_ti+"'; window.opener.clndr_ff(v,id); }");
    wd.write("\nfunction sm(v) { window.opener.clndr_td.setMonth(v); window.opener.clndr_sh(); }");
    wd.write("\nfunction sy(v) { window.opener.clndr_td.setFullYear(v); window.opener.clndr_sh(); }");
    wd.write("</scr"+"ipt>\n");
    wd.write("</head>\n<body topmargin=3 leftmargin=3 marginheight=3 marginwidth=3>");
    wd.write("<table width=180 cellpadding=1 cellspacing=0 border=0><tr><td class=border>\n<table width=100% cellpadding=0 cellspacing=0 border=0><tr><td width=20 class=head>");

	// This is the "<" month selector
	//clndr_td = today's date
	//clndr_mi = startDate = today
	// if today's year is greater than startDate year... enable
	// if month is not january and year is not startDate year... enable
	// else desable
    if(	(clndr_td.getFullYear() > clndr_mi.getFullYear() )
		||
		( (clndr_td.getMonth() != 0) && (clndr_td.getFullYear() == clndr_mi.getFullYear()) ) )
	{
		//clndr_td = todays's date
		wd.write("<a href=\"javascript:sm("+(clndr_td.getMonth()-1)+")\"><font color=navy><b>&lt;</b></font></a>");
	}
    else
		wd.write("<b>&lt;</b>");
		
	// write month option box "combo box"
	wd.write("</td><td class=head><form><select name=m onchange=\"sm(this[this.selectedIndex].value);\">");
	for(i=0;i<12;i++) {
	    wd.write("<option value="+i);
	    if(i==(clndr_td.getMonth()))
			wd.write(" selected ");
	    wd.write(">"+clndr_mn[i]+"</option>\n");
	}
	
	// write year option box "combo box" : this year and next year
	// function sy() = ?
	// this.selectedIndex = ?
	// this[.value] = ?
	wd.write("</select><select name=r onchange=\"sy(this[this.selectedIndex].value);\">");
	
	// clndr_mi = today's date
	// clndr_mx = endDate = today's + 1 month + 1 year
	// from this year up to next year ONLY
	for(i=clndr_mi.getFullYear();i<(clndr_mx.getFullYear()+1);i++) {
	    wd.write("<option value="+i);
	    if(i==clndr_td.getFullYear())
			wd.write(" selected ");
	    wd.write(">"+i+"</option>\n");
	}
	
	wd.write("</select></td></form><td class=head width=20>");
	
	// This is the ">" month selector
	//clndr_td = today's date
	//clndr_mx = endDate = today's + 1 year
	// if today's year is less than endDate year... enable
	// if month is not december and year is not endDate year... enable
	// else desable
    if(	(clndr_td.getFullYear() < clndr_mx.getFullYear() )
		||
		( (clndr_td.getMonth() != 11) && (clndr_td.getFullYear() == clndr_mx.getFullYear()) ) )
	{
		wd.write("<a href=\"javascript:sm("+(clndr_td.getMonth()+1)+")\"><font color=navy><b>&gt;</b></font></a>");
	}
    else
		wd.write("<b>&gt;</b>");
		
	// write weekday names
    wd.write("</td></tr></table><table width=100% cellpadding=2 cellspacing=0 border=0><tr>");
    for(i=0;i<6;i++)
		wd.write("<td width=20><b>"+clndr_wd[i]+"</b></td>");
		
	// write sunday name
    wd.write("<td width=20><span class=ce><b>"+clndr_wd[6]+"</b></span></td></tr>\n");
    
    // clndr_td = today's date
    // set to 1st of the month
    clndr_td.setDate(1);
    
    // rotate calendar weekday ndx left, 1st day is monday, not sunday
    pd=clndr_td.getDay()-1;	// return weekday numeral: 0 to 6, sun to sat
    clndr_rc=0;				// unknown
    if(pd==-1)				// if sunday...
		pd=6;
		
	bm=clndr_td.getMonth();		// 0 based
	yr=clndr_td.getFullYear();
	
	// month rotation code, if jan, do -1 year, set to december
	if(bm==0) {
	    clndr_td.setMonth(11);
	    clndr_td.setFullYear(yr-1);
	    clndr_ol();
	}
	else	// set to prev month
		clndr_td.setMonth(bm-1);
		
	//clndr_ms = array[12] = nb of days in the month
	for(i=clndr_ms[clndr_td.getMonth()]-pd+1;i<=clndr_ms[clndr_td.getMonth()];i++) {
	    clndr_td.setDate(i);
	    
	    // ho is not used in the loop
 	    if(clndr_td.getDay()==0)
 			ho="class=ce";
	    else
			ho="";
	    wd.write("<td>&nbsp</td>");
	}
	
	clndr_td.setDate(1);
	clndr_td.setMonth(bm);
	clndr_td.setFullYear(yr);
	clndr_ol();
	for(i=0;i<clndr_ms[(clndr_td.getMonth())];i++) {
	    clndr_td.setDate(i+1);
	    if((clndr_td.getDay()==1)&&(clndr_td.getDate()!=1)) {
	 	    wd.write("</tr>\n<tr>");
	 	    clndr_rc++;
	    }
	    else if( (clndr_td.getDay() == 1) && (clndr_td.getDate() == 1) )
			wd.write("<tr>");
	    if(clndr_td.getDay()==0)
			ho="class=ce";
	    else
			ho="";
 	    for(j=0;j<clndr_ho.length;j++)
 	    {
 			if(	(clndr_ho[j].substring(0,clndr_ho[j].indexOf(".")) == clndr_td.getDate() )
 				&&
 				(clndr_ho[j].substring(clndr_ho[j].indexOf(".")+1,clndr_ho[j].length) == (clndr_td.getMonth()+1) ) )
 			{
 				ho="class=ce";
 			}
 		}
	    if(	(clndr_td.getTime() > clndr_mx.getTime() )
			||
			(clndr_td.getTime() < clndr_mi.getTime()) )
		{
			// 1st use of "ho"
			wd.write("<td "+ho+"><span class=no>"+clndr_td.getDate()+"</span></td>");
		}
	    else if(ho=="")
			wd.write("<td><a href=\"javascript:ff('"+clndr_td.getDate()+"."+(clndr_td.getMonth()+1)+"."+clndr_td.getFullYear()+"')\">"+clndr_td.getDate()+"</a></td>");
	    else
			wd.write("<td><a href=\"javascript:ff('"+clndr_td.getDate()+"."+(clndr_td.getMonth()+1)+"."+clndr_td.getFullYear()+"')\"><span class=ce>"+clndr_td.getDate()+"</span></a></td>");
	}
	clndr_td.setDate(1);
	clndr_td.setMonth(bm+1);
	pd=clndr_td.getDay()-1;
	if(pd==0)
		pd=20;
	if(pd==-1)
		pd=6;
	for(i=1;i<=(7-pd);i++) {
	    wd.write("<td>&nbsp</td>");
	    clndr_td.setDate(i);
	    if(clndr_td.getDay()==0)
			ho="class=ce";
	    else
			ho="";
	}
	clndr_td.setDate(1);
	clndr_td.setMonth(bm);
	clndr_td.setFullYear(yr);
	clndr_ol();
    if(clndr_rc<5)
		wd.write("</tr><tr><td colspan=7>&nbsp;</td>");
    wd.write("</tr></table></td></tr></table></body></html>");
    wd.close();
    window.clndr_wi.focus();
}

/******************************************************************************
 * Create a Date from a String
 *	- String format is: (day.month.year)
 *	- month = real month numeral.  eg: jan=1
 *
 * Returns:
 *	- Date object based on string
 *	- Hours, Minutes set to 0
 *	- Seconds set to now
 *****************************************************************************/
function clndr_mm(ta) {
    var td=new Date();	// td = today's date
    ta=ta.split(".");	// ta = array[3] = day; month; year
    td.setDate(ta[0]);
    td.setMonth(ta[1]-1);
    td.setFullYear(ta[2]);
    td.setHours(0);
    td.setMinutes(0);
    return(td);
}
function clndr_ol() {
    var y=clndr_td.getFullYear();
	if (0 == y%4 && ((y%100 != 0) || (y%400 == 0)))
		clndr_ms[1]=29;
	else
		clndr_ms[1]=28;
}
function clndr_ff(dt,id) {
    var f,r,fr,d,dd,m,mm,mmm,yy,yyyy;
        clndrSetDates[id] = dt;
//    var msn=Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC');
	dt=dt.split(".");
	d=dt[0];
	if(d<10)
		dd="0"+d;
	else
		dd=d;
	m=dt[1];
	if(m<10)
		mm="0"+m;
	else
		mm=m;
	mmm = msn[m-1];
	yyyy=dt[2];
	yy=yyyy.substring(2,4);
	for(i=1;i<=3;i++) {
	    r=eval("clndr_r"+i);
	    f=eval("clndr_f"+i);
	    if((r)&&(f!="undefined")) {
		    fr=f.replace("dd",dd);
		    fr=fr.replace("d",d);
		    fr=fr.replace("mmm",mmm);
		    fr=fr.replace("mm",mm);
		    fr=fr.replace("m",m);
		    fr=fr.replace("yyyy",yyyy);
		    fr=fr.replace("yy",yy);
        	r.value=fr;
    	}
    }
    window.clndr_wi.close();
    openedWindow = false;
}

/************************************************************/
/*				PopUp window handling						*/
/************************************************************/
function openPopupWin(sUrl,sName,iWidth,iHeight,Params){
	if (Params == 'undefined' || Params == '') 'menubar=no,scrollbars=no,resizable=no';
	var TopY = (screen.availHeight-iHeight)/2;
	var TopX =(screen.availWidth-iWidth)/2;
	oWin = window.open(sUrl,sName,'width='+iWidth+',height='+iHeight+',top='+TopY+',left='+TopX +','+Params);
	if (oWin != null) oWin.focus();	
	return oWin;
}


