function makeArray(n) {
	this.length = n;
	return this;
}

function daysOfMonth(year, month) {
	var days = new makeArray(12);

	days[1] = 31;  days[2] = 28;  days[3] = 31;
	days[4] = 30;  days[5] = 31;  days[6] = 30;
	days[7] = 31;  days[8] = 31;  days[9] = 30; 
	days[10] = 31; days[11] = 30; days[12] = 31;

	if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
		days[2] = 29;

	return days[month];
}

function myDate(year, month, day) {
	this.year = year;
	this.month = month;
	this.day = day;
}

function prevMonth(date) {
	if(date.month == 1) {
		date.year--; date.month = 12;
	} else {
		date.month--;
	}
}

function nextMonth(date) {
	if(date.month == 12) {
		date.year++; date.month = 1;
	} else {
		date.month++;
	}
}

function dateSub(date1, date2) {
	var n = date1.day - date2.day;
	var date3;
	var sign = 1;

	if(date1.year < date2.year || 
		date1.year == date2.year && date1.month < date2.month ){
		sign = -1;
		date3 = date1;
		date1 = date2;
		date2 = date3;
	}
	while(!(date1.year == date2.year && date1.month == date2.month)) {
		n += daysOfMonth(date2.year, date2.month);
		nextMonth(date2);
	}
	return sign * n;
}

function dateAdd(date, n) {
	date.day += n;
	while(date.day <=0 || date.day > daysOfMonth(date.year, date.month)) {
		if(date.day <= 0){
			prevMonth(date);
			date.day += daysOfMonth(date.year, date.month);
		} else {
			date.day -= daysOfMonth(date.year, date.month);
			nextMonth(date);
		}
	}
}

function banner(){
	var TodaysDate = new Date();
	var year = TodaysDate.getYear() + 1900;
	var month = TodaysDate.getMonth() + 1;
	var day = TodaysDate.getDate();
	var	thisMonth = new myDate(year, month, day);
	var nextCentury = new myDate(2001, 1, 1);

	document.write("Today is " + year + "/" + month + "/" + day + "<BR>");
	document.write(
		"until next century, we have <STRONG>"
		+ dateSub(nextCentury, thisMonth) + "</STRONG> days.<P>");
}

function subDates() {
	var year1 = parseInt(document.subDate.year1.value);
	var month1 = parseInt(document.subDate.month1.value);
	var day1 = parseInt(document.subDate.day1.value);
	var year2 = parseInt(document.subDate.year2.value);
	var month2= parseInt(document.subDate.month2.value);
	var day2 = parseInt(document.subDate.day2.value);

	var date1 = new myDate(year1, month1, day1);
	var date2 = new myDate(year2, month2, day2);
	var errmsg = "";

	if( year1 < 1900 || year2 < 1900 )
		errmsg += "invalid year input; year(1900-)\n";
	if( month1 <= 0 || month1 > 12 ||
		month2 <= 0 || month2 > 12 )
		errmsg += "invalid month input; month(1-12)\n";
	if( day1 <= 0 || day1 > daysOfMonth(year1, month1) ||
		day2 <= 0 || day2 > daysOfMonth(year2, month2) )
		errmsg += "invalid day input; day(1-31)\n";
	if( errmsg ) {
		alert(errmsg);
	} else {
		document.subDate.days.value = dateSub(date1, date2);
	}
}

function addDates() {
	var year1 = parseInt(document.addDate.year1.value);
	var month1 = parseInt(document.addDate.month1.value);
	var day1 = parseInt(document.addDate.day1.value);
	var days = parseInt(document.addDate.days.value);
	var date1 = new myDate(year1, month1, day1);
	var errmsg = "";

	if( year1 < 1900 )
		errmsg += "Ano inválido!\n";
	if( month1 <= 0 || month1 > 12 )
		errmsg += "Mês inválido!\n";
	if( day1 <= 0 || day1 > daysOfMonth(year1, month1) )
		errmsg += "Dia inválido\n";
	if( errmsg ) {
		alert(errmsg);
	} else {
		dateAdd(date1, days);
		document.addDate.year2.value = date1.year;
		document.addDate.month2.value = date1.month;
		document.addDate.day2.value = date1.day;
	}
}


function somaDiasData(data,nr_dias,requerida) {
	// Soma nr_dias à data 
	var l = data.value.length;
	var dia,mes,ano;
	var dt=data.value;
	var dt_array=dt.split("\/");
	
	
	var year_aux = parseInt(dt_array[2],10);  // base 10 (colocar a base, pois c/ "08" e "09" dá erro ("8" e "9" não dá!) ... BUG do IE)... ou usar parseFloat...
	var month_aux = parseInt(dt_array[1],10);
	var day_aux = parseInt(dt_array[0],10);
	var days = parseInt(nr_dias,10);
	var date_aux = new myDate(year_aux, month_aux, day_aux);
	var errmsg = "";


	if(l>0 && l < 10) {
		errmsg += "Formato de data inválido. Por favor, informe a data no formato correto: dd/mm/aaaa!\n";		
 		}


	if( year_aux < 1900 )
		errmsg += "Ano inválido!\n";
	if( (month_aux <= 0) || (month_aux > 12) )
		errmsg += "Mês inválido!\n";
	if( (day_aux <= 0) || (day_aux > daysOfMonth(year_aux, month_aux)) )
		errmsg += "Dia inválido\n";
	if( errmsg ) {
		alert(errmsg);
		data.value="";
		//data.focus();
		//return false;
	} else {
		dateAdd(date_aux, days);
		dia=date_aux.day.toString();
		dia = (dia.length < 2) ? "0" + dia : dia;		
		mes=date_aux.month.toString();
		ano=date_aux.year.toString();
		mes = (mes.length < 2) ? "0" + mes : mes;
		return dia + '/' + mes + '/' + ano;
	}
}

function Verifica_Hora(hora){
	var h=hora.value;
	
	var msg;
	msg="";
	if(h.length < 5){
// 			msg="Formato da hora inválido. Por favor, informe a hora no formato correto: hh:mm:ss";
 			msg="Formato da hora inválido. Por favor, informe a hora no formato correto: hh:mm";
 		}
 		if(h.substr(0,2) > 23 || isNaN(h.substr(0,2))){
 			msg="Formato da hora inválido.";
 		}
 		else if(h.substr(3,2) > 59 || isNaN(h.substr(3,2))){
 			msg="Formato do minuto inválido.";
 		}
 		//else if(h.substr(6,2) > 59 || isNaN(h.substr(6,2))){
 		//	msg="Formato do segundo inválido.";
 		//}
		if(msg!="") {
			alert(msg);
			hora.value="";
 			//hora.focus();
 			return false;
		}
		return true;		
 }

function SomaHora(hms,hms_add) {
	// Soma horas, minutos e segundos a uma hora fornecida
	// hms=caixa de texto
	// hms_add=string. Ex.: '02:30:15'
	// Hora fornecida
	var hora,minuto,segundo;

	var hr=hms.value;
	var hr_array=hr.split(":");
	var hora_aux = parseInt(hr_array[0],10);  // base 10 (colocar a base, pois c/ "08" e "09" dá erro ("8" e "9" não dá!) ... BUG do IE)... ou usar parseFloat...
	var min_aux = parseInt(hr_array[1],10);
	var seg_aux = parseInt(hr_array[2],10);

	// Hora, minutos e segundos a serem somandos
	var hr=hms_add;
	var hr_array=hr.split(":");
	var hora_add = parseInt(hr_array[0],10);  // base 10 (colocar a base, pois c/ "08" e "09" dá erro ("8" e "9" não dá!) ... BUG do IE)... ou usar parseFloat...
	var min_add = parseInt(hr_array[1],10);
	var seg_add = parseInt(hr_array[2],10);
	
  hour3 = hora_aux + hora_add;
  min3 =  min_aux  + min_add;
  sec3 =  seg_aux  + seg_add;

  if (sec3>=60) { sec3 = -(60 - sec3); min3 = parseInt(min3,10)+1; }
  if (min3>=60) { min3 = -(60 - min3); hour3 = parseInt(hour3,10)+1; }
  if (hour3>=24) { hour3 = -(24 - hour3); }
  if (sec3<=9) { sec3="0"+sec3; }
  if (min3<=9) { min3="0"+min3; }
  if (hour3<=9) { hour3="0"+hour3; }

  //return hour3 +':' +  min3 +':'+sec3;
  return hour3 +':' +  min3 ;

}

