var ppcIE=((navigator.appName == "Microsoft Internet Explorer") || ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5)));
var ppcNN6=((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5));
var ppcNN=((navigator.appName == "Netscape")&&(document.layers));
var ppcX = 4;
var ppcY = 4;

var IsCalendarVisible;
var calfrmName;
var maxYearList;
var minYearList;
var todayDate = new Date; 
var curDate = new Date; 
var curImg;
var curDateBox;
var minDate = new Date;
var maxDate = new Date;
var hideDropDowns;
var IsUsingMinMax;
var FuncsToRun;
var img_del;
var img_close;
var bhour;

img_del=new Image();
img_del.src="../../img/tools/cal.gif";


img_close=new Image();
img_close.src="../../img/tools/cal.gif";

minYearList=todayDate.getFullYear()-11
maxYearList=todayDate.getFullYear()+20
IsCalendarVisible=false;

img_Date_UP=new Image();
img_Date_UP.src="../../img/tools/cal.gif";

img_Date_OVER=new Image();
img_Date_OVER.src="../../img/tools/cal.gif";

img_Date_DOWN=new Image();
img_Date_DOWN.src="../../img/tools/cal.gif";
function calSwapImg(whatID, NewImg,override) {
	if (document.images) {
		if (!( IsCalendarVisible && override )) {
			document.images[whatID].src = eval(NewImg + ".src");
		}
	}
	window.status=' ';
	return true;
}

function getOffsetLeft (el) {
	var ol = el.offsetLeft;
	while ((el = el.offsetParent) != null)
		ol += el.offsetLeft;
	return ol;
}

function getOffsetTop (el) {
	var ot = el.offsetTop;
	while((el = el.offsetParent) != null)
		ot += el.offsetTop;
	return ot;
}

function showCalendar(frmName, dteBox,btnImg, hideDrops, event, MnDt, MnMo, MnYr, MxDt, MxMo, MxYr, runFuncs) {
	bhour=hideDrops;
	hideDropDowns=true;
	FuncsToRun = runFuncs;
	calfrmName = frmName;
	if (IsCalendarVisible) {
		hideCalendar();
	}
	else {
		if (document.images['calbtn1']!=null ) document.images['calbtn1'].src=img_del.src;
		if (document.images['calbtn2']!=null ) document.images['calbtn2'].src=img_close.src;
		if (hideDropDowns) {toggleDropDowns('hidden');}
		if ((MnDt!=null && MnMo!=null && MnYr!=null) || (MxDt!=null && MxMo!=null && MxYr!=null)) {
			IsUsingMinMax = true;
			
			if (MnDt!=null && MnMo!=null && MnYr!=null) {
				minDate.setFullYear(MnYr);
				minDate.setDate(15);
				minDate.setMonth(MnMo-1);
				minDate.setDate(MnDt);
			} else {
				minDate = new Date("1/1/" + minYearList);
			}
			minDate.setHours(0,0,0);
			
			if (MxDt!=null && MxMo!=null && MxYr!=null) {
				maxDate.setFullYear(MxYr);
				maxDate.setDate(15);
				maxDate.setMonth(MxMo-1);
				maxDate.setDate(MxDt);
			} else {
				maxDate = new Date("12/31/" + maxYearList);
			}			
			maxDate.setHours(23,59,59);
		}
		else {
			IsUsingMinMax = false;
		}
		curImg = btnImg;
		curDateBox = dteBox;

		if ( ppcIE ) {
			ppcX = getOffsetLeft(document.images[btnImg]);    
			ppcY = getOffsetTop(document.images[btnImg]) + document.images[btnImg].height;
		}
		else if (ppcNN){
			ppcX = document.images[btnImg].x; 
			ppcY = document.images[btnImg].y + document.images[btnImg].height;
		}

		if (document.all) {
			domlay('popupcalendar',1,window.event.x+document.body.scrollLeft,window.event.y+document.body.scrollTop,Calendar(todayDate.getMonth(),todayDate.getFullYear(),bhour));
		} else if (document.getElementById) {
			domlay('popupcalendar',1,event.clientX+document.body.scrollLeft,event.clientY+document.body.scrollTop,Calendar(todayDate.getMonth(),todayDate.getFullYear(),bhour));
		} else {
			domlay('popupcalendar',1,event.clientX+document.body.scrollLeft,event.clientY+document.body.scrollTop,Calendar(todayDate.getMonth(),todayDate.getFullYear(),bhour));
		}

		IsCalendarVisible = true;
	}
}

function toggleDropDowns(showHow){
	var i; var j;
	for (i=0;i<document.forms.length;i++) {
		for (j=0;j<document.forms[i].elements.length;j++) {
			if (document.forms[i].elements[j].tagName == "SELECT") {
				if (document.forms[i].name != "Cal")
					document.forms[i].elements[j].style.visibility=showHow;
			}
		}
	}
}

function hideCalendar(){
	domlay('popupcalendar',0,ppcX,ppcY,"&nbsp;");
	calSwapImg(curImg, 'img_Date_UP');    
	IsCalendarVisible = false;
	if (hideDropDowns) {toggleDropDowns('inherit');}
}

function calClick() {
}

function domlay(id,trigger,lax,lay,content) {
	// Layer visible
	if (trigger=="1"){
		if (document.layers) document.layers[''+id+''].visibility = "show"
		else if (document.all) document.all[''+id+''].style.visibility = "visible"
		else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "visible"                
		}
	// Layer hidden
	else if (trigger=="0"){
		if (document.layers) document.layers[''+id+''].visibility = "hide"
		else if (document.all) document.all[''+id+''].style.visibility = "hidden"
		else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "hidden"             
		}
	// Set horizontal position  
	if (lax){
		if (document.layers){document.layers[''+id+''].left = event.x+document.body.scrollLeft}        
		else if (document.all){document.all[''+id+''].style.left=lax}
		else if (document.getElementById){document.getElementById(''+id+'').style.left=lax+"px"}
		}
	// Set vertical position
	if (lay){
		if (document.layers){document.layers[''+id+''].top =event.y+document.body.scrollTop}
		else if (document.all){document.all[''+id+''].style.top=lay}
		else if (document.getElementById){document.getElementById(''+id+'').style.top=lay+"px"}
		}

	// Cambiar contenido
	if (document.all)
		document.all(''+id+'').style.zIndex=10;
	else if (document.getElementById)
		document.getElementById(''+id+'').style.zIndex=10;
	
	if (content){
	if (document.layers){
		sprite=document.layers[''+id+''].document;
	    
		sprite.open();
		sprite.write(content);
		sprite.close();
		}
	else if (document.all) document.all[''+id+''].innerHTML = content;  
	else if (document.getElementById){

		rng = document.createRange();
		el = document.getElementById(''+id+'');
		rng.setStartBefore(el);
		htmlFrag = rng.createContextualFragment(content)
		while(el.hasChildNodes()) el.removeChild(el.lastChild);
		el.appendChild(htmlFrag);

		}
	}	
}

function Calendar(whatMonth,whatYear,bhour) {
	var output = '';
	var datecolwidth;
	var startMonth;
	var startYear;
	startMonth=whatMonth;
	startYear=whatYear;

	curDate.setFullYear(whatYear);
	curDate.setDate(15);
	curDate.setMonth(whatMonth);
	curDate.setDate(todayDate.getDate());

	output += '<form name="Cal" style="height:10px";><table width="185"  class="cal-Table" cellspacing="0" cellpadding="0"><tr>';
	    
	output += '<td class="cal-HeadCell" align="center" width="100%"><a href="javascript:clearDay();"><img src="../../img/tools/calDelete.gif" border="0"></a><a href="javascript:scrollMonth(-1);" class="cal-DayLink"><img src="../../img/tools/RedLittleArrowleft.gif" border="0"></a>&nbsp;<SELECT class="cal-TextBox" NAME="cboMonth" onChange="changeMonth();">';
	for (month=0; month<12; month++) {
		if (month == whatMonth) output += '<OPTION VALUE="' + month + '" SELECTED>' + names[month] + '<\/OPTION>';
		else                output += '<OPTION VALUE="' + month + '">'          + names[month] + '<\/OPTION>';
	}

	output += '<\/SELECT><SELECT class="cal-TextBox" NAME="cboYear" onChange="changeYear();">';

	var minYearCal = IsUsingMinMax ? minDate.getFullYear() : minYearList;
	var maxYearCal = IsUsingMinMax ? maxDate.getFullYear() : maxYearList;

	for (year=minYearCal; year<=maxYearCal; year++) {
		if (year == whatYear) {	
			output += '<OPTION VALUE="' + year + '" SELECTED>' + year + '<\/OPTION>';
		} else {
			output += '<OPTION VALUE="' + year + '">'          + year + '<\/OPTION>';
		}
	}

	output += '<\/SELECT>&nbsp;<a href="javascript:scrollMonth(1);" class="cal-DayLink"><img src="../../img/tools/RedLittleArrow.gif" border="0"></a>&nbsp;<a href="javascript:hideCalendar();"><img src="../../img/tools/closeCalendar.gif" border="0"></a><\/td><\/tr><tr><td width="100%" align="center">';

	firstDay = new Date(whatYear,whatMonth,1);
	startDay = firstDay.getDay();

	if (((whatYear % 4 == 0) && (whatYear % 100 != 0)) || (whatYear % 400 == 0))
			days[1] = 29;
	else
			days[1] = 28;

	output += '<table width="185" cellspacing="1" cellpadding="2" border="0"><tr>';

	for (i=0; i<7; i++) {
		if (i==0 || i==6) {
			datecolwidth="15%"
		}
		else
		{
			datecolwidth="14%"
		}
		output += '<td class="cal-HeadCell" width="' + datecolwidth + '" align="center" valign="middle">'+ dow[i] +'<\/td>';
	}

	output += '<\/tr><tr>';

	var column = 0;
	var lastMonth = whatMonth - 1;
	var lastYear = whatYear;
	if (lastMonth == -1) { lastMonth = 11; lastYear=lastYear-1;}

	for (i=0; i<startDay; i++, column++) {
		output += getDayLink((days[lastMonth]-startDay+i+1),true,lastMonth,lastYear);
	}

	for (i=1; i<=days[whatMonth]; i++, column++) {
		output += getDayLink(i,false,whatMonth,whatYear);
		if (column == 6) {
			output += '<\/tr><tr>';
			column = -1;
		}
	}

	var nextMonth = whatMonth+1;
	var nextYear = whatYear;
	if (nextMonth==12) { nextMonth=0; nextYear=nextYear+1;}

	if (column > 0) {
		for (i=1; column<7; i++, column++) {
			output +=  getDayLink(i,true,nextMonth,nextYear);
		}
		output += '<\/tr><\/table><\/td><\/tr>';
	}
	else {
		output = output.substr(0,output.length-4); // remove the <tr> from the end if there's no last row
		output += '<\/table><\/td><\/tr>';
	}

	if (!bhour) {
		output += '<input type=hidden name=hora> <input type=hidden name=min> <input type=hidden name=ampm ><\/table><\/form>';

	} else {
		//	Shows time part
		output += '<tr><td align=center class=cal-GreyDate><b>';
		
		output += 'Hora:<input type=text name=hora size=2 maxlength=2 preset=hour CLASS=mask value="' + ((new Date()).getHours() < 12 ? (new Date()).getHours() : (new Date()).getHours() -12) + '">';
		output += 'Min :<input type=text name=min size=2 maxlength=2 preset=min CLASS=mask value="' + ((new Date()).getMinutes() < 10 ? '0' + (new Date()).getMinutes() : (new Date()).getMinutes()) + '">';
		
		if  ((new Date()).getHours() < 12) {
			output += '<select name=ampm><option value=AM>a.m</option><option value=PM>p.m</option></select></b></td></tr><\/table><\/form>';
		} else {
			output += '<select name=ampm><option value=AM>a.m</option><option value=PM selected>p.m</option></select></b></td></tr><\/table><\/form>';
		}
	}

	curDate.setFullYear(startYear);
	curDate.setDate(15);
	curDate.setMonth(startMonth);
	curDate.setDate(1);
	
	return output;
}

function getDayLink(linkDay,isGreyDate,linkMonth,linkYear) {
	var templink;
	if (!(IsUsingMinMax)) {
		if (isGreyDate) {
			templink='<td align="center" class="cal-GreyDate">' + linkDay + '<\/td>'; 
		}
		else {
			if (isDayToday(linkDay)) {
				templink='<td align="center" class="cal-DayCell">' + '<a class="cal-TodayLink" onmouseover="self.status=\' \';return true" href="javascript:changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';
			}
			else {
				templink='<td align="center" class="cal-DayCell">' + '<a class="cal-DayLink" onmouseover="self.status=\' \';return true" href="javascript:changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';
			}
		}
	}
	else {
		if (isDayValid(linkDay,linkMonth,linkYear)) {

			if (isGreyDate){
				templink='<td align="center" class="cal-GreyDate">' + linkDay + '<\/td>';
			}
			else {
				if (isDayToday(linkDay)) {
					templink='<td align="center" class="cal-DayCell">' + '<a class="cal-TodayLink" onmouseover="self.status=\' \';return true" href="javascript:changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';
				}
				else {
					templink='<td align="center" class="cal-DayCell">' + '<a class="cal-DayLink" onmouseover="self.status=\' \';return true" href="javascript:changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';
				}
			}
		}
		else {
			templink='<td align="center" class="cal-GreyInvalidDate">'+ linkDay + '<\/td>';
		}
	}

	return templink;
}

function isDayToday(isDay) {
	if ((curDate.getFullYear() == todayDate.getFullYear()) && (curDate.getMonth() == todayDate.getMonth()) && (isDay == todayDate.getDate())) {
		return true;
	}
	else {
		return false;
	}
}

function isDayValid(validDay, validMonth, validYear){
	curDate.setFullYear(validYear);
	curDate.setDate(15);
	curDate.setMonth(validMonth);
	curDate.setDate(validDay);

	if ((curDate>=minDate) && (curDate<=maxDate)) {
		return true;
	}
	else {
		return false;
	}
}

function padout(number) { return (number < 10) ? '0' + number : number; }

function clearDay() {
	eval('document.forms["' + calfrmName + '"].' + curDateBox + '.value = \'\'');
	hideCalendar();
	if (FuncsToRun!=null)
		eval(FuncsToRun); 
}

// Se Ejecuta al seleccionar el dia 
// Coloca el valor en el input anterior
function changeDay(whatDay) {
	var min, hora, bRenderHora, ampm;
	if (document.getElementsByName("min").length > 0) {
		min = document.getElementsByName("min").item(0);
		hora = document.getElementsByName("hora").item(0);
		ampm = document.getElementsByName("ampm").item(0);
		bRenderHora = (hora.value.length > 0 && min.value.length > 0) ? true : false ;
	}
		
	curDate.setDate(whatDay);
	if(ampm.value == "AM" || (ampm.value == "PM" && hora.value == 12))
		curDate.setHours(hora.value);
	else
		curDate.setHours(Number(hora.value) + 12);
	if(ampm.value == "AM" && hora.value == 12)
		curDate.setHours(0);
	curDate.setMinutes(min.value);
	
	eval('document.forms["' + calfrmName + '"].' + curDateBox + '.value = "' + curDate.format(BA_DATE_FORMAT_MASK) + ((bRenderHora) ? (' ' + curDate.format(BA_TIME_FORMAT_MASK)) : '')  + '"');
	
	
	hideCalendar();
	if (FuncsToRun!=null)
		eval(FuncsToRun);
	if (!isIE && window.BAExecuteBehavioursAndActions) {	
		window.BAExecuteBehavioursAndActions();
	}
	
		 
}

function scrollMonth(amount) {
	var monthCheck;
	var yearCheck;

	if (ppcIE) {
		monthCheck = document.forms["Cal"].cboMonth.selectedIndex + amount;
	}
	else if (ppcNN) {
		monthCheck = document.popupcalendar.document.forms["Cal"].cboMonth.selectedIndex + amount;    
	}
	if (monthCheck < 0) {
		yearCheck = curDate.getFullYear() - 1;
		if ( yearCheck < minYearList ) {
			yearCheck = minYearList;
			monthCheck = 0;
		}
		else {
			monthCheck = 11;
		}
		curDate.setFullYear(yearCheck);
	}
	else if (monthCheck >11) {
		yearCheck = curDate.getFullYear() + 1;
		if ( yearCheck > maxYearList-1 ) {
			yearCheck = maxYearList-1;
			monthCheck = 11;
		}
		else {
			monthCheck = 0;
		}      
		curDate.setFullYear(yearCheck);
	}

	if (ppcIE) {
		curDate.setMonth(document.forms["Cal"].cboMonth.options[monthCheck].value);
	}
	else if (ppcNN) {
		curDate.setMonth(document.popupcalendar.document.forms["Cal"].cboMonth.options[monthCheck].value );
	}

	domlay('popupcalendar',1,document.getElementById('popupcalendar').scrollLeft,document.getElementById('popupcalendar').scrollTop,Calendar(curDate.getMonth(),curDate.getFullYear(),bhour));
}

function changeMonth() {
	if (ppcIE) {        
		curDate.setMonth(document.forms["Cal"].cboMonth.options[document.forms["Cal"].cboMonth.selectedIndex].value);
		domlay('popupcalendar',1,document.getElementById('popupcalendar').scrollLeft,document.getElementById('popupcalendar').scrollTop,Calendar(curDate.getMonth(),curDate.getFullYear(),bhour));
	}
	else if (ppcNN) {

		curDate.setMonth(document.popupcalendar.document.forms["Cal"].cboMonth.options[document.popupcalendar.document.forms["Cal"].cboMonth.selectedIndex].value);
		domlay('popupcalendar',1,document.body.scrollLeft,document.body.scrollTop,Calendar(curDate.getMonth(),curDate.getFullYear(),bhour));
	}
}

function changeYear() {
	if (ppcIE) {

		curDate.setFullYear(document.forms["Cal"].cboYear.options[document.forms["Cal"].cboYear.selectedIndex].value);
		domlay('popupcalendar',1,document.getElementById('popupcalendar').scrollLeft,document.getElementById('popupcalendar').scrollTop,Calendar(curDate.getMonth(),curDate.getFullYear(),bhour));
	}
	else if (ppcNN) {

		curDate.setFullYear(document.popupcalendar.document.forms["Cal"].cboYear.options[document.popupcalendar.document.forms["Cal"].cboYear.selectedIndex].value);
		domlay('popupcalendar',1,document.body.scrollLeft,document.body.scrollTop,Calendar(curDate.getMonth(),curDate.getFullYear(),bhour));
	}
}

function makeArray0() {
	for (i = 0; i<makeArray0.arguments.length; i++)
		this[i] = makeArray0.arguments[i];
}

var names	= new makeArray0(BA_JAN, BA_FEB, BA_MAR, BA_APR, BA_MAY, BA_JUN, BA_JUL, BA_AUG, BA_SEP, BA_OCT, BA_NOV, BA_DEC);
var dow		= new makeArray0(BA_SUNDAY,BA_MONDAY,BA_TUESDAY,BA_WEDNESDAY,BA_THURSDAY,BA_FRIDAY,BA_SATURDAY);
var days	= new makeArray0(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var vmes	= new makeArray0('1','2','3','4','5','6','7','8','9','10','11','12');
