//****************************************************
//  CC_JDateTimeLibrary.js
//****************************************************
//****************************************************

//****************************************************
//****************************************************
//Costanti per il calendario
var masWeekDays = new Array("DO","LU","MA","ME","GI","VE","SA");
var miWeekOffset = 1; // Giorno di Partenza 0=Domenica, 1=Lunedi'
var masMonths = new Array("GENNAIO","FEBBRAIO","MARZO","APRILE","MAGGIO","GIUGNO","LUGLIO","AGOSTO","SETTEMBRE","OTTOBRE","NOVEMBRE","DICEMBRE");

//Colori
var msSundayColor 	= "red";
var msOtherdayColor = "black";
var msSelDayFGColor = "white";
var msSelDayBGColor = "darkblue";
var msHeaderColor 	= "darkblue";
var msBGColor 		= "E0F1FF"	

//globals
var masMonthDaysArray = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
var masDateSeps = new Array(":","/","\\","-"," ",".");
var mvDate = new Date();

//****************************************************
//****************************************************

function CC_wPickDate(ndoc, sFieldName, sTitle){
	var mvDate = CC_wPickDateGetFieldDate(ndoc,sFieldName);
 	var objWin = CC_OpenWin(window,"","objWin","resizable=1",230,140);
 	CC_wPickDateCalcCalendar(objWin,ndoc,sFieldName,sTitle);
}

function CC_wPickDateCalcLastMonthDay(vOldDate) {
	var vDate;
	vDate = new Date(vOldDate);
	//Ultimo giorno del mese
	
	//Febbraio
	if ((vDate.getMonth()==1) && ((vDate.getFullYear()%4)!=0))
		vDate.setDate(28);
	else
		vDate.setDate(masMonthDaysArray[vDate.getMonth()]);
		
	return vDate;
}

function CC_wPickDateCalcCalendar(objWin,ndoc,sFieldName,sTitle) { 
	var iFirstWeekDay;
	var iLastDay;
	var iCount = 0;
	var asDays;
	var iYear;
	var iMonth;
	var iDay;
	var vDate;
		
	vDate = CC_wPickDateCalcLastMonthDay(mvDate);
	iLastDay = vDate.getDate();
	
	vDate.setDate(1) ;
	iFirstWeekDay = (vDate.getDay() + (7 - miWeekOffset))%7;
	
	asDays = new Array(6); //righe del calendario
	
	for (var iIndex=0; iIndex<6; iIndex++)
		asDays[iIndex] = new Array(7); //colonne del calendario
	
	//inserisco i giorni nel calendario
	for (var iRow=0; iRow<6; iRow++){
		for (var iCol=0; iCol<7; iCol++){
	
			if ((iCount==0) && (iCol!=iFirstWeekDay)) continue;
			iCount++;
			asDays[iRow][iCol] = iCount;
			
			if (iCount==iLastDay) break;
		}
		if (iCount==iLastDay) break;
	}
	
	//Genero il codice della finestra
	objWin.document.open()
	objWin.document.writeln("<head><title>"+sTitle+"</title>");

	for(iIndex=0; iIndex < document.styleSheets.length; iIndex++)
		objWin.document.writeln("<link rel='stylesheet' type='text/css' href='"+ ndoc.styleSheets[iIndex].href +"'></link>");	

	objWin.document.writeln("</head>");	
	objWin.document.writeln("<body class='datePicker' onLoad='javascript: if (SelectedDay) SelectedDay.focus();'><form><table>");
	objWin.document.writeln("<tr>");

//**************************	
	
	//Bottone Anno Precedente
	//with  (mvDate) {
		iYear = mvDate.getFullYear() - 1;
		iMonth = mvDate.getMonth();
		iLastDay = CC_wPickDateCalcLastMonthDay(new Date(iYear,iMonth,1)).getDate();
		iDay = (mvDate.getDate()>iLastDay ? iLastDay : mvDate.getDate());
	//}
	
	objWin.document.writeln("<td class='button'>");
	objWin.document.writeln("<input class='button' type='button' name='btnPrevYear' value='<<' " +
							"onclick='opener.mvDate=new Date(" + iYear  + "," + iMonth + "," + iDay + ");" +
							"document.clear();" +
							"opener.CC_wPickDateCalcCalendar(self,opener.document,\"" + sFieldName + "\",\"" + sTitle + "\")'>");
	objWin.document.writeln("</td>");

	//Bottone Mese Precedente
	//with  (mvDate) {
		iYear = (mvDate.getMonth() == 0) ? mvDate.getFullYear() - 1 : mvDate.getFullYear();
		iMonth = (mvDate.getMonth() == 0) ? 11 : mvDate.getMonth() - 1;		
		iLastDay = CC_wPickDateCalcLastMonthDay(new Date(iYear,iMonth,1)).getDate();
		iDay = (mvDate.getDate()>iLastDay ? iLastDay : mvDate.getDate());
	//}
	
	objWin.document.writeln("<td class='button'>");
	objWin.document.writeln("<input class='button' type='button' name='btnPrevMonth' value='<' "+
							"onclick='opener.mvDate=new Date(" + iYear  + "," + iMonth + "," + iDay + ");" +
							"document.clear();" +
							"opener.CC_wPickDateCalcCalendar(self,opener.document,\"" + sFieldName + "\",\"" + sTitle + "\")'>");
	objWin.document.writeln("</td>");
 	
	//Visualizzo Mese-Anno
 	objWin.document.writeln("<td colspan=3>");
	objWin.document.writeln("<h1>" + masMonths[mvDate.getMonth()] + " " + mvDate.getFullYear() + "</h1>");
	objWin.document.writeln("</td>");

	//Bottone Mese Successivo
	//with  (mvDate) {
	 	iYear = (mvDate.getMonth() == 11) ? mvDate.getFullYear() + 1 : mvDate.getFullYear();
		iMonth = (mvDate.getMonth() == 11) ? 0 : mvDate.getMonth() + 1;
		iLastDay = CC_wPickDateCalcLastMonthDay(new Date(iYear,iMonth,1)).getDate();
		iDay = (mvDate.getDate()>iLastDay ? iLastDay : mvDate.getDate());
	//}

	objWin.document.writeln("<td class='button'>");
	objWin.document.writeln("<input class='button' type='button' name='btnNextMonth' value='>' "+
							"onclick='opener.mvDate=new Date(" + iYear  + "," + iMonth + "," + iDay + ");" +
							"document.clear();" +
							"opener.CC_wPickDateCalcCalendar(self,opener.document,\"" + sFieldName + "\",\"" + sTitle + "\")'>");
	objWin.document.writeln("</td>");

	//Bottone Anno Successivo
	//with  (mvDate) {
		iYear = mvDate.getFullYear() + 1  
		iMonth = mvDate.getMonth()
		iLastDay = CC_wPickDateCalcLastMonthDay(new Date(iYear,iMonth,1)).getDate();
		iDay = (mvDate.getDate()>iLastDay ? iLastDay : mvDate.getDate());
	//}
	
	objWin.document.writeln("<td class='button'>");
	objWin.document.writeln("<input class='button' type='button' name='btnNextYear' value='>>' "+
							"onclick='opener.mvDate=new Date(" + iYear  + "," + iMonth + "," + iDay + ");" +
							"document.clear();" +
							"opener.CC_wPickDateCalcCalendar(self,opener.document,\"" + sFieldName + "\",\"" + sTitle + "\")'>");
	objWin.document.writeln("</td>");
	objWin.document.writeln("</tr>");
	objWin.document.writeln("</table>");
	objWin.document.writeln("<br>");
	
//**************************
	
	objWin.document.writeln("<table>");
	objWin.document.writeln("<tr>");
	//inserisco in testa i giorni della settimana	
	for (iIndex=0;iIndex<masWeekDays.length;iIndex++){
		var sVal;
		var iWeekDay = (iIndex +  miWeekOffset)%7;
		var bIsSunday =!(iWeekDay); //iWeekDay==0

		if (!bIsSunday)
	  		 sVal = "<td>"+ masWeekDays[iWeekDay] +"</td>";
		else
			//domenica
			sVal = "<td class='datePicker_sunday'>"+ masWeekDays[iWeekDay] +"</td>";
		objWin.document.writeln(sVal);
	}
	
	objWin.document.writeln("</tr>");

	//Display dei giorni
	//with  (mvDate) {
		iDay = mvDate.getDate();
		iMonth = (mvDate.getMonth() == 0) ? 11 : mvDate.getMonth() - 1;
		iYear = (mvDate.getMonth() == 0) ? mvDate.getFullYear() - 1 : mvDate.getFullYear();
	//}

	for(iRow=0; iRow<6; iRow++){
	objWin.document.writeln("<tr>");

	for(iCol=0; iCol<7; iCol++){
		var sClass = "";
		iWeekDay = (iCol +  miWeekOffset)%7;
		bIsSunday =!(iWeekDay); //iWeekDay==0
		var sSpace = "";
		
		if (bIsSunday)
	  	sClass = "class='datePicker_sunday'";
	
			objWin.document.writeln("<td>");

			if(asDays[iRow][iCol] != null) {
				//Inserisco uno spazio se ha 1 carattere
				if (asDays[iRow][iCol] < 10)  sSpace = "&nbsp;"
				var sDay = ((asDays[iRow][iCol] < 10) ? "0" :"") + asDays[iRow][iCol];
				var sMonth = ((mvDate.getMonth() < 9) ? "0" :"") + (mvDate.getMonth() + 1);
				var sYear = "" + mvDate.getFullYear();
				var sSelected = (asDays[iRow][iCol]==iDay?" id='SelectedDay'":"");
				objWin.document.writeln("<a " + sClass + sSelected + " href=\"javascript:window.close();" +
				//"opener.document." + ndoc.forms[0].name + "." + sFieldName + ".value = '" + sDay + "/" + sMonth +"/" + sYear +
				"opener.document.getElementById('" + sFieldName + "').value = '" + sDay + "/" + sMonth +"/" + sYear +
				"'\">" + sSpace + asDays[iRow][iCol] + "</a>");
			}

			objWin.document.writeln("</td>");
		}
		objWin.document.writeln("</tr>");
	}
	
	objWin.document.writeln("</table></form></body>");
	objWin.document.close();
}

function CC_wPickDateGetFieldDate(nDoc,sFieldName){
	var sDate = eval("nDoc.forms[0]." + sFieldName + ".value");
	sDate = CC_GetItemValue(nDoc, sFieldName, ",")[0];
	var iIndex = 0; 
	var iStartPos = 0;
	var iPos = 0;
	var iMonth = -1;
	var iDay = -1;
	
	mvDate = new 	Date();	
	// trim date string
	while ((sDate.charAt(0) == " ") && (sDate.length != 0))
		sDate = sDate.substring(1,sDate.length - 1);

	while ((sDate.charAt(sDate.length - 1) == " ") && (sDate.length != 0))
		sDate = sDate.substring(0,sDate.length - 1);

	//get day
	iIndex=0;
	do{
		iPos = sDate.indexOf(masDateSeps[iIndex], iStartPos);
		iIndex++;
	} while ((iPos == -1) && (iIndex < masDateSeps.length));

	if (iPos == -1)
		//there's no Day
		return mvDate; //Today	

	iDay  = parseInt(sDate.substring(iStartPos,iPos),10);
	iStartPos = iPos + 1;
	
	//get month
	iIndex=0;
	do{
		iPos = sDate.indexOf(masDateSeps[iIndex], iStartPos);
		iIndex++;
	} while ((iPos == -1) && (iIndex < masDateSeps.length));

	if (iPos == -1)
		//there's no month
		return mvDate; //Today

	iMonth  = parseInt(sDate.substring(iStartPos,iPos),10) - 1;
	iStartPos = iPos + 1;

	if ((iMonth < 0) || (iMonth > 11)) //no valid month
		return mvDate;

	if ((iDay < 1) || (iDay > masMonthDaysArray[iMonth]))
		return mvDate;

	//get year
	var iYear = parseInt(sDate.substring(iStartPos,sDate.length),10);

	//Adatto l'anno di 2 cifre al millennio
	if (iYear < 100)
		iYear = (iYear < 60) ? 2000 + iYear :1900 + iYear;

	mvDate.setFullYear(iYear, iMonth, iDay);
	return mvDate;
	
}

function CC_OpenWin(objParentWin,sUrl,sWindowName,sWindowAppearance,iWidth,iHeight){
	var iNewLeft = 0;
	var iNewTop = 0;
	var sNewAppearance = "";
	
	iNewLeft = (screen.availWidth - iWidth)/2;
	iNewTop = (screen.availHeight - iHeight)/2;
	if (iNewLeft<0) iNewLeft=0;
	if (iNewTop<0) iNewTop=0;
	
	sNewAppearance = CC_CStr(sWindowAppearance);
	if (sNewAppearance.length) sNewAppearance += ", ";
	sNewAppearance += 
	"left=" + iNewLeft + 
	",top=" + iNewTop + 
	",width=" + iWidth + 
	",height=" + iHeight;
	
	return objParentWin.open(sUrl,sWindowName,sNewAppearance);
}