//**********************************
//funzione per stampare una schermata
//***********************************
function printit()
	{  
	if (NS) 
		{
   		 window.print() ;  
		} 
	else 
		{
    	var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
		document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
    	WebBrowser1.ExecWB(6, 2);
		WebBrowser1.outerHTML = "";  
		}
	}
	
//********************************************
//funzione per verificare un numero in un form
//********************************************
function verifica_numero(value)
	{
	var ammessi = "0123456789";
	var c;
	for(i=0; i<value.length; i++)
		{
		c=value.charAt(i);
		if(ammessi.indexOf(c) == -1)
			{
			return false;
			}
		}
		return true;
	}

//*******************************************************
//funzione per verificare un numero telefonico in un form
//*******************************************************
function verifica_telefono(tel)
	{
	var ammessi = "0123456789+/-, ";
	var c;
	for(i=0; i<tel.length; i++)
		{
		c=tel.charAt(i);
		if(ammessi.indexOf(c) == -1)
			{
			return false;
			}
		}
		return true;
	}

//********************************************
//funzione per verificare un email in un form
//********************************************
function verifica_email(posta)
	{
	var c;
	var ok=0;
	for(i=0; i < posta.length; i++)
		{
		c=posta.charAt(i);
		if(c == '@')
			{
			ok++;
			}
		}
		if (ok > 1)
			{
			return false;
			}
		if(posta.indexOf('@', 0) == -1)
			{
			return false;
			}
		else if(posta.indexOf('@', 0) == 0 || posta.indexOf('@', 0) == posta.length-1)
			{
			return false;
			}
		else if(posta.indexOf('.', 0) == 0 || posta.indexOf('.', 0) == posta.length-1)
			{
		return false;
		}
		else if(posta.indexOf('.', 0) == -1)
		{
		return false;
		}
	return true;
	}
	
//********************************************	
//funzione per caricare una google map
//********************************************	
function load() 
	  {
	  if (GBrowserIsCompatible()) 
	    {
	    // Ottiene l'elemento della pagina chiamato "map" (il DIV) 
	    //   e crea la mappa utilizzandolo come contenitore.
	    var map = new GMap2(document.getElementById("map"));
	    // Aggiunge dei controlli per lo zoom e lo spostamento 
	    map.addControl(new GSmallMapControl());	
	    // Centra la mappa su Gabicce, con uno zoom di 15 
	     map.setCenter(new GLatLng(43.965438,12.762401), 15);

		function createMarker(point, description) 
			{
			var marker = new GMarker(point);
			GEvent.addListener(marker, "click", function() 
				{
				marker.openInfoWindowHtml(description);
				});
			return marker;
			}

		map.addOverlay(createMarker(new GLatLng(43.965438,12.762401), "<b>Hotel Du Parc</b>, Italia"));
	    }
	  }
	


    var map;
    var gdir;
    var geocoder = null;
    var addressMarker;

    function load2() {
      if (GBrowserIsCompatible()) {      
        map = new GMap2(document.getElementById("map"));
		map.addControl(new GSmallMapControl());	
        gdir = new GDirections(map, document.getElementById("directions"));
        GEvent.addListener(gdir, "load", onGDirectionsLoad);
        GEvent.addListener(gdir, "error", handleErrors);

        setDirections("cattolica, autostrada", "Gabicce Mare, via panoramica 48", "Italy");
      }
    }

    function setDirections(fromAddress, toAddress, locale) {
      gdir.load("from: " + fromAddress + " to: " + toAddress,
                { "locale": locale });
    }

    function handleErrors(){
	   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	     alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
	   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
	     alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);

	   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
	     alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);

	//   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
	//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);

	   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
	     alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);

	   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
	     alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);

	   else alert("An unknown error occurred.");

	}

	function onGDirectionsLoad(){ 
          // Use this function to access information about the latest load()
          // results.

          // e.g.
	  // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
	  // and yada yada yada...
	}

	//**********************************************************************************
	//************************** D A T E   P I C K E R *********************************
	//**********************************************************************************	
	// *********************************************************************************
	//Javascript name: My Date Time Picker
	//Date created: 16-Nov-2003 23:19
	//Scripter: TengYong Ng
	//Website: http://www.rainforestnet.com
	//Copyright (c) 2003 TengYong Ng
	//FileName: DateTimePicker.js
	//Version: 0.8
	//Contact: contact@rainforestnet.com
	// Note: Permission given to use this script in ANY kind of applications if
	//       header lines are left unchanged.

	// ------- addition to the original header -------------
	// Modified version of TenyYong's My Date Time Picker Script
	// Modified by Aytekin Tank<atank@interlogy.com>, Interlogy LLC.
	// This modified version is released with same license as above:
	    // Note: Permission given to use this script in ANY kind of applications if
	    //       header lines are left unchanged.
	// Original script is available at www.javascriptkit.com/script/script2/tengcalendar.shtml
	// ------- addition to the original header ends -------------


	//<form  action=""  method="" name="q_form_82913434749">
	//<input type="hidden" name="formID" value="82913434749" />
	//<input type="hidden" id="spc" name="spc" value="spc" />
	//<script type="text/javascript">   document.getElementById('spc').value = 'b2a011d0f0ae5c0b5b01c7ec62234bbc';</script>
	//<label>Data</label>
	//<script type="text/javascript" src="calendar.js"></script>
	//<input type="text" class="text" size="10" name="q8_Data" id="q8"  /> 
	//<a href="javascript:NewCal('q8','mmddyyyy',false,12)">
	//<img src="calendario.gif"border="0" alt="Pick a date" /></a>
	//<input type="submit" class="btn" value="Submit" />
	//</form>


	//Global variables
	var winCal = null;
	var dtToday=new Date();
	var Cal = null;
	var docCal = null;
	var MonthName=["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno","Luglio", 
		"Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"];
	var WeekDayName=["Domenica","Lunedi","Maratedi","Mercoledi","Giovedi","Venerdi","Sabato"];	
	var exDateTime = null;//Existing Date and Time

	//Configurable parameters
	var cnTop="200";//top coordinate of calendar window.
	var cnLeft="500";//left coordinate of calendar window
	var WindowTitle ="Seleziona la Data";//Date Time Picker title.
	var WeekChar=2;//number of character for week day. if 2 then Mo,Tu,We. if 3 then Mon,Tue,Wed.
	var CellWidth=21;//Width of day cell.
	var CellHeight = 100; //Height of the cell if this is a largecalbox
	var DateSeparator="/";//Date Separator, you can change it to "/" if you want.
	var TimeMode=24;//default TimeMode value. 12 or 24

	var ShowLongMonth=true;//Show long month name in Calendar header. example: "January".
	var ShowMonthYear=true;//Show Month and Year in Calendar header.
	var MonthYearColor="#f9621a";//Font Color of Month and Year in Calendar header.
	var WeekHeadColor="#cfcfcf";//Background Color in Week header.
	var SundayColor="#b5cfe9";//Background color of Sunday.
	var SaturdayColor="#b5cfe9";//Background color of Saturday.
	var WeekDayColor="f5f5f5";//Background color of weekdays.
	var FontColor="blue";//color of font in Calendar day cell.
	var TodayColor="#f9621a";//Background color of today.
	var SelDateColor="#f9621a";//Backgrond color of selected date in textbox.
	var YrSelColor="#000000";//color of font of Year selector.
	var ThemeBg="";//Background image of Calendar window.
	//end Configurable parameters
	//end Global variable

	function NewCal(pCtrl,pFormat,pShowTime,pTimeMode)
	{
		Cal=new Calendar(dtToday);
		if ((pShowTime!=null) && (pShowTime))
		{
			Cal.ShowTime=true;
			if ((pTimeMode!=null) &&((pTimeMode=='12')||(pTimeMode=='24')))
			{
				TimeMode=pTimeMode;
			}		
		}	
		if (pCtrl!=null)
			Cal.Ctrl=pCtrl;
		if (pFormat!=null)
			Cal.Format=pFormat.toUpperCase();
		var exDateTime = "";
		if (pCtrl!='inline')
	            exDateTime=document.getElementById(pCtrl).value;
		if (exDateTime!="")//Parse Date String
		{
			var Sp1;//Index of Date Separator 1
			var Sp2;//Index of Date Separator 2 
			var tSp1;//Index of Time Separator 1
			var tSp1;//Index of Time Separator 2
			var strMonth;
			var strDate;
			var strYear;
			var intMonth;
			var YearPattern;
			var strHour;
			var strMinute;
			//var strSecond;
			//parse month
			Sp1=exDateTime.indexOf(DateSeparator,0)
			Sp2=exDateTime.indexOf(DateSeparator,(parseInt(Sp1)+1));

			if ((Cal.Format.toUpperCase()=="DDMMYYYY") || (Cal.Format.toUpperCase()=="DDMMMYYYY"))
			{
				strMonth=exDateTime.substring(Sp1+1,Sp2);
				strDate=exDateTime.substring(0,Sp1);
			}
			else if ((Cal.Format.toUpperCase()=="MMDDYYYY") || (Cal.Format.toUpperCase()=="MMMDDYYYY"))
			{
				strMonth=exDateTime.substring(0,Sp1);
				strDate=exDateTime.substring(Sp1+1,Sp2);
			}
			if (isNaN(strMonth))
				intMonth=Cal.GetMonthIndex(strMonth);
			else
				intMonth=parseInt(strMonth,10)-1;	
			if ((parseInt(intMonth,10)>=0) && (parseInt(intMonth,10)<12))
				Cal.Month=intMonth;
			//end parse month
			//parse Date
			if ((parseInt(strDate,10)<=Cal.GetMonDays()) && (parseInt(strDate,10)>=1))
				Cal.Date=strDate;
			//end parse Date
			//parse year
			strYear=exDateTime.substring(Sp2+1,Sp2+5);
			YearPattern=/^\d{4}$/;
			if (YearPattern.test(strYear))
				Cal.Year=parseInt(strYear,10);
			//end parse year
			//parse time
			if (Cal.ShowTime==true)
			{
				tSp1=exDateTime.indexOf(":",0)
				tSp2=exDateTime.indexOf(":",(parseInt(tSp1)+1));
				strHour=exDateTime.substring(tSp1,(tSp1)-2);
				Cal.SetHour(strHour);
				strMinute=exDateTime.substring(tSp1+1,tSp2);
				Cal.SetMinute(strMinute);
				//strSecond=exDateTime.substring(tSp2+1,tSp2+3);
				//Cal.SetSecond(strSecond);
			}	
		}
	        if( pCtrl =='calbox' ){
	            winCal=window.calframe;
	            docCal = winCal.document;
	        }else if( pCtrl =='largecalbox' ){
	            winCal=window.largecalframe;
	            docCal = winCal.document;
	        } else {
	            winCal=window.open("","DateTimePicker","toolbar=0,status=0,menubar=0,fullscreen=no,width=195,height=195,resizable=0,top="+cnTop+",left="+cnLeft);
	            docCal = winCal.document;
	        }
		RenderCal(pCtrl);
	}

	function RenderCal(pCtrl)
	{
		var vCalHeader;
		var vCalData;
		var vCalTime;
		var i;
		var j;
		var SelectStr;
		var vDayCount=0;
		var vFirstDay;

		docCal.open();
	        if(pCtrl != "calbox" && pCtrl != "largecalbox"){
	            docCal.writeln("<html><head><title>"+WindowTitle+"</title>");
	            docCal.writeln("<style>a {color: #333333; text-decoration: none; font-weight:none; font-family:'Trebuchet MS' }</style>");
	            docCal.writeln("<script>var winMain=window.opener;</script>");
	            docCal.writeln("</head><body background='"+ThemeBg+"' link="+FontColor+" vlink="+FontColor+">");
	        }else{
	            docCal.writeln("<html><head>");
	            docCal.writeln("<style>a {color: black; text-decoration: none; font-weight:none; font-family:'Trebuchet MS' }</style>");
	            docCal.writeln("<script>var winMain=window.parent ;</script>");
	            docCal.writeln("</head><body background='"+ThemeBg+"' link="+FontColor+" vlink="+FontColor+">");
	        }
	        docCal.writeln("<form name='Calendar'>");
		vCalHeader="<table border=0 cellpadding=1 cellspacing=1 width='100%' align=\"center\" valign=\"top\">\n";

		//Calendar header shows Month and Year
		if (ShowMonthYear){
			vCalHeader+="<tr><td colspan='7' align='center'>";
	                vCalHeader+="<table border=0 width=100% cellspacing=0 cellpadding=0><tr><td align=left>";
	                vCalHeader+="<a href=\"javascript:winMain.Cal.DecYear();winMain.RenderCal('"+pCtrl+"')\"><font color="+MonthYearColor+" size=2><b><<</b></font></a> ";
	                vCalHeader+="<a href=\"javascript:winMain.Cal.DecMonth();winMain.RenderCal('"+pCtrl+"')\"><font color="+MonthYearColor+" size=2><b><</b></font></a> ";
	                if(pCtrl == "largecalbox") vCalHeader+="&nbsp;";
	                vCalHeader+="</td><td align=center> ";
	                if(pCtrl == "largecalbox")
	                    vCalHeader+="<font face='Verdana' size='2' align='center' color='"+MonthYearColor+"'><b>"+Cal.GetMonthName(ShowLongMonth)+" "+Cal.Year+"</b></font>";
	                else
	                    vCalHeader+="<font face='Verdana' size='1' align='center' color='"+MonthYearColor+"'><b>"+Cal.GetMonthName(ShowLongMonth)+" "+Cal.Year+"</b></font>";
	                vCalHeader+="</td><td align=right>";
	                vCalHeader+=" <a href=\"javascript:winMain.Cal.IncMonth();winMain.RenderCal('"+pCtrl+"')\"><font color="+MonthYearColor+" size=2><b>></b></font></a> ";
	                if(pCtrl == "largecalbox") vCalHeader+="&nbsp;";
	                vCalHeader+=" <a href=\"javascript:winMain.Cal.IncYear();winMain.RenderCal('"+pCtrl+"')\"><font color="+MonthYearColor+" size=2><b>>></b></font></a>";
	                vCalHeader+="</td></tr></table>";
	                vCalHeader+="</td></tr>\n";
	        }

		//Week day header
		vCalHeader+="<tr bgcolor="+WeekHeadColor+">";
		for (i=0;i<7;i++)
		{
			vCalHeader+="<td align='center'><font face='Trebuchet MS' size='2'>"+WeekDayName[i].substr(0,WeekChar)+"</font></td>";
		}
		vCalHeader+="</tr>";	
		docCal.write(vCalHeader);

		//Calendar detail
		CalDate=new Date(Cal.Year,Cal.Month);
		CalDate.setDate(1);
		vFirstDay=CalDate.getDay();
		vCalData="<tr>";
		for (i=0;i<vFirstDay;i++)
		{
			vCalData=vCalData+GenCell(pCtrl);
			vDayCount=vDayCount+1;
		}
		for (j=1;j<=Cal.GetMonDays();j++)
		{
			var strCell;
			vDayCount=vDayCount+1;
			if ((j==dtToday.getDate())&&(Cal.Month==dtToday.getMonth())&&(Cal.Year==dtToday.getFullYear()))
				strCell=GenCell(pCtrl, j,true,TodayColor);//Highlight today's date
			else
			{
				if (j==Cal.Date)
				{
					strCell=GenCell(pCtrl, j,true,SelDateColor);
				}
				else
				{	 
					if (vDayCount%7==0)
						strCell=GenCell(pCtrl, j,false,SaturdayColor);
					else if ((vDayCount+6)%7==0)
						strCell=GenCell(pCtrl, j,false,SundayColor);
					else
						strCell=GenCell(pCtrl, j,null,WeekDayColor);
				}		
			}						
			vCalData=vCalData+strCell;

			if((vDayCount%7==0)&&(j<Cal.GetMonDays()))
			{
				vCalData=vCalData+"</tr>\n<tr>";
			}
		}
		docCal.writeln(vCalData);	
		//Time picker
		if (Cal.ShowTime)
		{
			var showHour;
			showHour=Cal.getShowHour();		
			vCalTime="<tr>\n<td colspan='7' align='center'>";
			vCalTime+="<input type='text' name='hour' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+showHour+" onchange=\"javascript:winMain.Cal.SetHour(this.value)\">";
			vCalTime+=" : ";
			vCalTime+="<input type='text' name='minute' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Minutes+" onchange=\"javascript:winMain.Cal.SetMinute(this.value)\">";
			if (TimeMode==12)
			{
				var SelectAm =(parseInt(Cal.Hours,10)<12)? "Selected":"";
				var SelectPm =(parseInt(Cal.Hours,10)>=12)? "Selected":"";

				vCalTime+="<select name=\"ampm\" onchange=\"javascript:winMain.Cal.SetAmPm(this.options[this.selectedIndex].value);\">";
				vCalTime+="<option "+SelectAm+" value=\"AM\">AM</option>";
				vCalTime+="<option "+SelectPm+" value=\"PM\">PM<option>";
				vCalTime+="</select>";
			}	
			vCalTime+="\n</td>\n</tr>";
			docCal.write(vCalTime);
		}



		//end time picker
		docCal.writeln("\n</table>");
	        //if(pCtrl != "inline"){
	            docCal.writeln("</form></body></html>");
	        //}
		docCal.close();
	}

	function GenCell(pCtrl, pValue,pHighLight,pColor)//Generate table cell with value
	{
		var PValue;
		var PCellStr;
		var vColor;
		var vHLstr1;//HighLight string
		var vHlstr2;
		var vTimeStr;

		if (pValue==null)
			PValue="";
		else
			PValue=pValue;

		if (pColor!=null)
			vColor="bgcolor=\""+pColor+"\"";
		else
			vColor="";	
		if ((pHighLight!=null)&&(pHighLight))
			{vHLstr1="color='red'><b>";vHLstr2="</b>";}
		else
			{vHLstr1=">";vHLstr2="";}	

		if (Cal.ShowTime)
		{
			vTimeStr="winMain.document.getElementById('"+Cal.Ctrl+"').value+=' '+"+"winMain.Cal.getShowHour()"+"+':'+"+"winMain.Cal.Minutes";  //+"+':'+"+"winMain.Cal.Seconds";
			if (TimeMode==12)
				vTimeStr+="+' '+winMain.Cal.AMorPM";
		}	
		else
			vTimeStr="";		
		PCellStr="\n <td width=14% ";  //+CellWidth;
	        if( pCtrl == "largecalbox"){
	            PCellStr+=" height="+CellHeight;
	        }
	        if( pCtrl == "largecalbox" ){
	            if( window.parent.Events[ Cal.FormatDate(PValue) ] != null ){
	                PCellStr+=" "+vColor+" align='center'>";
	                PCellStr+="<font color=navy face='verdana' size='2'"+vHLstr1;
	                PCellStr+= PValue + vHLstr2;
	                desc = window.parent.Events[ Cal.FormatDate(PValue) ];
	                if(desc.length>200){
	                    desc = desc.substr(0, 200) + "...";
	                } 
	                PCellStr+= "<br><font size=1 face=arial>" + desc + "</font></a>";
	            }else{
	                PCellStr+= " "+vColor+" align='center'><font face='verdana' size='2'"+vHLstr1+PValue+vHLstr2+"</font></td>";
	            }
	            PCellStr+="</font></td>";
	        } else if( pCtrl == "calbox" ){
	            if( window.parent.Events[ Cal.FormatDate(PValue) ] != null ){
	                PCellStr+= " bgcolor=gray align='center'>";
	                PCellStr+="<a target=_parent href="+window.parent.pmdir+"pm.cgi?action=app_search&app="+ window.parent.app_name;
	                PCellStr+="&bydate="+window.parent.app_field+"&fromdate=";
	                PCellStr+=Cal.FormatDate(PValue)+"&todate="+Cal.FormatDate(PValue);
	                PCellStr+="&sortby="+window.parent.app_field+">";
	                PCellStr+="<font color=navy face='verdana' size='2'"+vHLstr1;
	                PCellStr+= PValue + vHLstr2;
	                PCellStr+= "</font>";
	                PCellStr+= "</a>";
	            } else {
	                PCellStr+= " "+vColor+" align='center'><font face='verdana' size='2'"+vHLstr1+PValue+vHLstr2+"</font></td>";
	            }
	        }else{
	            PCellStr+=" "+vColor+" align='center'><font face='verdana' size='2'"+vHLstr1+"<a href=\"javascript:winMain.document.getElementById('"+Cal.Ctrl+"').value='"+Cal.FormatDate(PValue)+"';"+vTimeStr+";window.close();\">"+PValue+"</a>"+vHLstr2+"</font></td>";
	        }
		return PCellStr;
	}

	function Calendar(pDate,pCtrl)
	{
		//Properties
		this.Date=pDate.getDate();//selected date
		this.Month=pDate.getMonth();//selected month number
		this.Year=pDate.getFullYear();//selected year in 4 digits
		this.Hours=pDate.getHours();	

		if (pDate.getMinutes()<10)
			this.Minutes="0"+pDate.getMinutes();
		else
			this.Minutes=pDate.getMinutes();

		//if (pDate.getSeconds()<10)
		//	this.Seconds="0"+pDate.getSeconds();
		//else		
		//	this.Seconds=pDate.getSeconds();

		this.MyWindow=winCal;
		this.Ctrl=pCtrl;
		this.Format="ddMMyyyy";
		this.Separator=DateSeparator;
		this.ShowTime=false;
		if (pDate.getHours()<12)
			this.AMorPM="AM";
		else
			this.AMorPM="PM";	
	}

	function GetMonthIndex(shortMonthName)
	{
		for (i=0;i<12;i++)
		{
			if (MonthName[i].substring(0,3).toUpperCase()==shortMonthName.toUpperCase())
			{	return i;}
		}
	}
	Calendar.prototype.GetMonthIndex=GetMonthIndex;

	function IncYear()
	{	Cal.Year++;}
	Calendar.prototype.IncYear=IncYear;

	function DecYear()
	{	Cal.Year--;}
	Calendar.prototype.DecYear=DecYear;

	function IncMonth()
	{	
	    if(Cal.Month==11) {
	        Cal.Month=0; 
	        Cal.Year++; 
	    } else  {
	        Cal.Month++;
	    }
	}
	Calendar.prototype.IncMonth=IncMonth;

	function DecMonth()
	{
	    if(Cal.Month==0) {
	        Cal.Month=11; 
	        Cal.Year--; 
	    } else { 
	        Cal.Month--;
	    }
	}
	Calendar.prototype.DecMonth=DecMonth;

	function SwitchMth(intMth)
	{	Cal.Month=intMth;}
	Calendar.prototype.SwitchMth=SwitchMth;

	function SetHour(intHour)
	{	
		var MaxHour;
		var MinHour;
		if (TimeMode==24)
		{	MaxHour=23;MinHour=0}
		else if (TimeMode==12)
		{	MaxHour=12;MinHour=1}
		else
			alert("TimeMode can only be 12 or 24");		
		var HourExp=new RegExp("^\\d\\d$");
		if (HourExp.test(intHour) && (parseInt(intHour,10)<=MaxHour) && (parseInt(intHour,10)>=MinHour))
		{	
			if ((TimeMode==12) && (Cal.AMorPM=="PM"))
			{
				if (parseInt(intHour,10)==12)
					Cal.Hours=12;
				else	
					Cal.Hours=parseInt(intHour,10)+12;
			}	
			else if ((TimeMode==12) && (Cal.AMorPM=="AM"))
			{
				if (intHour==12)
					intHour-=12;
				Cal.Hours=parseInt(intHour,10);
			}
			else if (TimeMode==24)
				Cal.Hours=parseInt(intHour,10);	
		}
	}
	Calendar.prototype.SetHour=SetHour;

	function SetMinute(intMin)
	{
		var MinExp=new RegExp("^\\d\\d$");
		if (MinExp.test(intMin) && (intMin<60))
			Cal.Minutes=intMin;
	}
	Calendar.prototype.SetMinute=SetMinute;

	function SetSecond(intSec)
	{	
		var SecExp=new RegExp("^\\d\\d$");
		if (SecExp.test(intSec) && (intSec<60))
			Cal.Seconds=intSec;
	}
	//Calendar.prototype.SetSecond=SetSecond;

	function SetAmPm(pvalue)
	{
		this.AMorPM=pvalue;
		if (pvalue=="PM")
		{
			this.Hours=(parseInt(this.Hours,10))+12;
			if (this.Hours==24)
				this.Hours=12;
		}	
		else if (pvalue=="AM")
			this.Hours-=12;	
	}
	Calendar.prototype.SetAmPm=SetAmPm;

	function getShowHour()
	{
		var finalHour;
	    if (TimeMode==12)
	    {
	    	if (parseInt(this.Hours,10)==0)
			{
				this.AMorPM="AM";
				finalHour=parseInt(this.Hours,10)+12;	
			}
			else if (parseInt(this.Hours,10)==12)
			{
				this.AMorPM="PM";
				finalHour=12;
			}		
			else if (this.Hours>12)
			{
				this.AMorPM="PM";
				if ((this.Hours-12)<10)
					finalHour="0"+((parseInt(this.Hours,10))-12);
				else
					finalHour=parseInt(this.Hours,10)-12;	
			}
			else
			{
				this.AMorPM="AM";
				if (this.Hours<10)
					finalHour="0"+parseInt(this.Hours,10);
				else
					finalHour=this.Hours;	
			}
		}
		else if (TimeMode==24)
		{
			if (this.Hours<10)
				finalHour="0"+parseInt(this.Hours,10);
			else	
				finalHour=this.Hours;
		}	
		return finalHour;	
	}				
	Calendar.prototype.getShowHour=getShowHour;		

	function GetMonthName(IsLong)
	{
		var Month=MonthName[this.Month];
		if (IsLong)
			return Month;
		else
			return Month.substr(0,3);
	}
	Calendar.prototype.GetMonthName=GetMonthName;

	function GetMonDays()//Get number of days in a month
	{
		var DaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
		if (this.IsLeapYear())
		{
			DaysInMonth[1]=29;
		}	
		return DaysInMonth[this.Month];	
	}
	Calendar.prototype.GetMonDays=GetMonDays;

	function IsLeapYear()
	{
		if ((this.Year%4)==0)
		{
			if ((this.Year%100==0) && (this.Year%400)!=0)
			{
				return false;
			}
			else
			{
				return true;
			}
		}
		else
		{
			return false;
		}
	}
	Calendar.prototype.IsLeapYear=IsLeapYear;

	function FormatDate(pDate)
	{
		if (this.Format.toUpperCase()=="DDMMYYYY")
			return (pDate+DateSeparator+(this.Month+1)+DateSeparator+this.Year);
		else if (this.Format.toUpperCase()=="DDMMMYYYY")
			return (pDate+DateSeparator+this.GetMonthName(false)+DateSeparator+this.Year);
		else if (this.Format.toUpperCase()=="MMDDYYYY")
			return ((this.Month+1)+DateSeparator+pDate+DateSeparator+this.Year);
		else if (this.Format.toUpperCase()=="MMMDDYYYY")
			return (this.GetMonthName(false)+DateSeparator+pDate+DateSeparator+this.Year);			
	}



	Calendar.prototype.FormatDate=FormatDate;

	// *************************************************************************************************************	




	// *********************************************************************************
	//**********************************************************************************
	//************************ V A L I D A T I O N   L I B R A R Y *********************
	//**********************************************************************************
	//**********************************************************************************
	// <script src="validateform.js" type="text/javascript"></script>
	// <style type="text/css">
	// </style> 
	// <form  action="http://www.jotform.com/submit.php"  method="post" name="prova">
	// <input type="hidden" name="formID" value="82913434749" />
	// <input type="hidden" id="spc" name="spc" value="spc" />
	// <script type="text/javascript">document.getElementById('spc').value = 'b2a011d0f0ae5c0b5b01c7ec62234bbc';</script>
	// numeric*
	// <input type="text" size="20" name="q10_prova" value="" id="q10"  onblur="validate(this,'RequiredNumeric')"  maxlength="100" maxsize="100" />
	// <input type="submit" value="Submit" />
	// </form>
	// <script type="text/javascript">
	// validate("prova");
	// </script>
	var errored = false;            // Global for validate function
	var exClassName = new Object(); // Global for Changed classnames
	var styleAdded = false;         // Global for checking sytle status
	function validate(elem,type,option)
		{	// Main function
		var option = (option)? option : "";
		if(!styleAdded)
			{			// Add style for Error warnings
			var style = document.createElement('style');
			var sprop  = '.error{ border:2px red solid; background:#FCFCFC; }';
			    sprop += '.Errortext{ color:#FF0000;font-family:"Trebuchet MS"; font-size:11px; }';
	            sprop += '.DivErrortext{ border:1px solid #ccc;margin:4px; padding:5px; background:lightyellow; color:#FF0000;font-family:"Trebuchet MS"; font-size:11px; }';
			style.setAttribute("type", "text/css");
			if (style.styleSheet)
				{   // for IE
				style.styleSheet.cssText = sprop;
				} 
			else 
				{
				var newStyle = document.createTextNode(sprop);
				style.appendChild(newStyle);
				}
			document.getElementsByTagName('head')[0].appendChild(style);
			styleAdded = true; //don't add again.
			}
		///////////
		//Checking for mail validation
		var checkmail = function(email)
			{
			var splitted = email.match("^(.+)@(.+)$");
			if(splitted == null) return false;
			if(splitted[1] != null )   
				{
				var regexp_user=/^\"?[\w-_\.]*\"?$/;
				if(splitted[1].match(regexp_user) == null) return false;  
				}
			if(splitted[2] != null)  
				{
				var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
				if(splitted[2].match(regexp_domain) == null) 
					{
					var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
					if(splitted[2].match(regexp_ip) == null) return false; 
					}
				return true; 
				}
			return false;
			}
	    var warned = false;
		//////////////
		// Function to run onsubmit;
		var onSubmit = function(elem){
			errored = false;
			var form = document.forms[elem];
			for(var node = 0;node < form.length; node++)
				if((""+form[node].onblur).match("validate"))
					form[node].onblur();
			if(errored){
	            if(!warned){
	                var inputs = form.getElementsByTagName('input');
	                for(var x =0; x< inputs.length; x++){
	                    if(inputs[x].type == 'submit'){
	                        var errdiv = document.createElement('div');
	                        errdiv.className = 'DivErrortext';
	                        errdiv.innerHTML = 'There are missing fields on your form please correct them.';
	                        inputs[x].parentNode.insertBefore(errdiv, inputs[x]);
	                    }
	                }
	                warned = true;
	            }
	            return false;
	        }	
			else form.submit();
		}

		//////////////
		//	Function to set error messages
		//	echo "<input type=\"\" value=\"\" name=\"\" class=\"\" id=\"\" onblur=\"validate(this,'RequiredDate')\">\n";
		var getMsg = function(type)
			{
			switch(type)
				{
				case "LessThan":           	return "This field's length should be less than (" + option['LessThan'] + ")"
				case "GreaterThan":        	return "This field's length should be greater than (" + option['GreaterThan'] + ")"
				case "Alphabetic":         	return "Cannot contain non-alphabetic characters."
				case "RequiredAlphabetic": 	return "This field is required and cannot contain non-alphabetic characters."
				case "Numeric":            	return "Cannot contain non-numeric characters."
				case "RequiredNumeric":    	return "This field is required and cannot contain non-numeric characters."
				case "Email":              	return "Enter a valid email address."
				case "Required":           	return "This field is required."
	            case "confirm":            	return "Values should match each other"
				case "Regex":              	return "This entry does not match (" + option + ")."
				case "RequiredDate":       	return "Wrong date form."
				case "VerifyDate":       	return "Wrong date form."
				case "NumericSQL":         	return "Cannot contain non-numeric characters. format xxx.yy"
				case "RequiredNumericSQL": 	return "This field is required and cannot contain non-alphabetic characters. format xxx.yy"
				default:                   	return "Undefined Error Message"
				}
			}

		/////////////
		// Function to check is error printed?
		var checkForErrorDiv = function(elem){
			for(var node = 0;node < elem.parentNode.childNodes.length; node++)
				if(elem.parentNode.childNodes[node].className == "Errortext")
					return true;
			return false;
		}

		/////////////
		// Function to define errors and print messages
		var error = function(elem, type, message){
			correct(elem);
			if(!checkForErrorDiv(elem)){
				div = document.createElement("div");
				div.innerHTML = (message)? message : getMsg(type);
				div.className = "Errortext";
				elem.parentNode.appendChild(div);
				//elem.parentNode.insertBefore(div, elem.nextSibling);
			}
			if(elem.className != "error")
				exClassName[elem.name] = elem.className;
			if(elem.type != "checkbox" && elem.type != "radio"){
				elem.className = "error";
			}
			errored = true;
			return true;
		}

		/////////////
		// Function to revert Errored fields
		var correct = function(elem){
			var parent = elem.parentNode;
			for(x = 0; x < parent.childNodes.length; x++){
				var node = parent.childNodes[x];
				if(node){
					if(node.className == "Errortext")
						node.parentNode.removeChild(node);
					if(node.className == "error")
						node.className = exClassName[node.name];
				}
			}
		}

		///////////////
		// Check for optional validations
		if(option['LessThan']){
			if(elem.value.length >= option['LessThan']){
				error(elem,"LessThan",option['message']);
				return false;
			}else
				correct(elem);
		}
		if(option['GreaterThan']){
			if(elem.value.length <= option['GreaterThan']){
				error(elem,"GreaterThan", option['message']);
				return false;
			}else
				correct(elem);
		}
	    if(option.confirm){
			if(elem.value.toLowerCase() != $jt(option.confirm).value.toLowerCase()){
				error(elem, "confirm", option['message']);
	            error($jt(option.confirm), "confirm", option['message']);
				return false;
			}else{
	            correct(elem);
	            correct($jt(option.confirm));
	        }

		}

		//////////////
		// Make all the validations
		switch(type){
			case "Alphabetic":
				var charpos = elem.value.search(/[^a-zA-Z\s\-\_]/);
				if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
				break;
			case "RequiredAlphabetic":
				if(elem.value.length <= 0) error(elem,type,option['message']); 
				else{
					var charpos = elem.value.search(/[^a-zA-Z\s\-\_]/);
					if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
				}
				break;
			case "Numeric":
				var charpos = elem.value.search(/[^0-9\.\,\s\-\_]/);
				if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
				break;
			case "NumericSQL":
				var charpos = elem.value.search(/[^0-9\.\-]/);
				if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
			break;

			/**** controllo data */
			case "RequiredDate":
				// setto le variabili
				var LunghezzaStringa = elem.value.length;
				var SeparatoreA=elem.value.substring(2,3);
				var SeparatoreB=elem.value.substring(5,6);
				var Giorno=parseFloat(elem.value.substring(0,2));
				var Mese=parseFloat(elem.value.substring(3,5));
				var Anno=parseFloat(elem.value.substring(6,10));		
				var Check = 0;
				// controllo lunghezza stringa
				if(LunghezzaStringa == 10)
					{
					//controllo separatore
					if (SeparatoreA != '/' || SeparatoreB != '/')
						{
						error(elem,type,"Il formato corretto e'gg/mm/aaaa");
						Check = 1; 
						}
					// controllo giorno
					else if (Giorno < 01 || Giorno > 31)
						{
						error(elem,type,"il giorno e' errato"); 
						Check = 1;
						}
					else if (Giorno == 31)
						{
						if (Mese == '02' || Mese == '04' || Mese == '06' || Mese == '09' || Mese == '11')
							{
							error(elem,type,"Il mese non ha 31 giorni"); 
							Check = 1;
							}
						}	
					else if (Giorno > 29 && Mese == 02)
						{						
						error(elem,type,"Il giorno e' errato"); 
						Check = 1;
						}	
					// controllo mese
					else if (Mese < 01 || Mese > 12)
						{
						error(elem,type,"il mese e' errato"); 
						Check = 1;
						}
					else 
						{							
						if (Check == 0) correct(elem);
						}
					}
				else if (LunghezzaStringa == 0)
					{
					error(elem,type,"il campo e' obbligatorio");
					}
				else if (LunghezzaStringa > 0 && LunghezzaStringa!= 10)
					{
					error(elem,type,"Il formato corretto e'gg/mm/aaaa");
					}
			break;




			case "VerifyDate":
				// setto le variabili
				var LunghezzaStringa = elem.value.length;
				var SeparatoreA=elem.value.substring(2,3);
				var SeparatoreB=elem.value.substring(5,6);
				var Giorno=parseFloat(elem.value.substring(0,2));
				var Mese=parseFloat(elem.value.substring(3,5));
				var Anno=parseFloat(elem.value.substring(6,10));		
				var Check = 0;
				// controllo lunghezza stringa
				if(LunghezzaStringa == 10)
					{
					//controllo separatore
					if (SeparatoreA != '/' || SeparatoreB != '/')
						{
						error(elem,type,"Il formato corretto e'gg/mm/aaaa");
						Check = 1; 
						}
					// controllo giorno
					else if (Giorno < 01 || Giorno > 31)
						{
						error(elem,type,"il giorno e' errato"); 
						Check = 1;
						}
					else if (Giorno == 31)
						{
						if (Mese == '02' || Mese == '04' || Mese == '06' || Mese == '09' || Mese == '11')
							{
							error(elem,type,"Il mese non ha 31 giorni"); 
							Check = 1;
							}
						}	
					else if (Giorno > 29 && Mese == 02)
						{						
						error(elem,type,"Il giorno e' errato"); 
						Check = 1;
						}	
					// controllo mese
					else if (Mese < 01 || Mese > 12)
						{
						error(elem,type,"il mese e' errato"); 
						Check = 1;
						}
					else 
						{							
						if (Check == 0) correct(elem);
						}
					}
				else if (LunghezzaStringa == 0)
					{
					if (Check == 0) correct(elem);
					}
				else if (LunghezzaStringa > 0 && LunghezzaStringa!= 10)
					{
					error(elem,type,"Il formato corretto e'gg/mm/aaaa");
					}
			break;


			case "RequiredNumericSQL":
				if(elem.value.length <= 0) error(elem,type,option['message']); 
				else{
					var charpos = elem.value.search(/[^0-9\.\-]/);
					if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
				}
				break;		
			case "RequiredNumeric":
				if(elem.value.length <= 0) error(elem,type,option['message']); 
				else{
					var charpos = elem.value.search(/[^0-9\.\,\s\-\_]/);
					if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
				}
				break;
			case "Email":
				if(!checkmail(elem.value)) error(elem,type,option['message']); else correct(elem);
				break;
			case "Required":
				if(elem.type == "checkbox" || elem.type == "radio"){
					var parent = elem.parentNode;
					var ok = false;
					for(x = 0; x < parent.childNodes.length; x++)
						if(parent.childNodes[x].checked == true)
							ok = true;
					if(ok) correct(elem,true); else error(elem,type,option['message']);
				}else{
					if(elem.options)	
						// Here can be edited for checking text to "Please Select one" or similar text
						// in this example it looks for blank <option> to give error
						if(elem.options[elem.selectedIndex].text.length <= 0) error(elem,type,option['message']); else correct(elem);
					else
						if(elem.value.length <= 0) error(elem,type,option['message']); else correct(elem);
				}
				break;
			case "Regex":
				if(elem.value.match(option['expression'])) correct(elem);
				else error(elem,type,option['message']);
				break;
			default:	// Default is for defining the form and setting onsubmit function
				var form = document.forms[elem]
				form.onsubmit = function(){ onSubmit(elem); return false; };
				break;
			}		
		}

	//**********************************************************************************
	//**********************************************************************************
	//**********************************************************************************
	//**********************************************************************************



