calendar.js 7.83 KB
/* 
Copyright (c) 2007-2011 The web2Project Development Team <w2p-developers@web2project.net>
Copyright (c) 2003-2007 The dotProject Development Team <core-developers@dotproject.net>
Copyright [2008] -  Sérgio Fernandes Reinert de Lima
Este arquivo é parte do programa GP-Web
O GP-Web é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença.
Este programa é distribuído na esperança que possa ser  útil, mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer  MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/GPL em português para maiores detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "licença GPL 2.odt", junto com este programa, se não, acesse o Portal do Software Público Brasileiro no endereço www.softwarepublico.gov.br ou escreva para a Fundação do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA 
*/

var horasMSeg=3600*1000;

function estarNoVetor(meuVetor,intValor){
	for(var i=0,i_cmp=meuVetor.length;i<i_cmp;i++){
		if(meuVetor[i]==intValor)return true;
		}
	return false;
	}
	
function selected(cal,date){
	cal.sel.value=(cal.date.print("%Y%m%d%H%M"));
	setDate(cal.form,cal.sel.name);
	if(cal.dateClicked&&(cal.sel.id=="ini_date"||cal.sel.id=="data_fim"))cal.callCloseHandler();
	}
	
function fecharHandler(cal){
	cal.hide();
	_dynarch_popupCalendar=null;
	}
	
function mostrarCalendar(id,format,nome_formulario,mostrarsTime,mostrarsOtherMonths){
	var el=document.getElementById(id);
	if(_dynarch_popupCalendar!=null) _dynarch_popupCalendar.hide();
	else{
		var cal=new Calendar(1,null,selected,fecharHandler);
		if(typeof mostrarsTime=="string"){
			cal.mostrarsTime=true;
			cal.time24=(mostrarsTime=="24");
			}
		if(mostrarsOtherMonths) cal.mostrarsOtherMonths=true;
		_dynarch_popupCalendar=cal;
		cal.setRange(1900,2070);cal.create()
		}
	_dynarch_popupCalendar.setDateFormat(format);
	_dynarch_popupCalendar.parsfimData(el.value);
	_dynarch_popupCalendar.sel=el;
	_dynarch_popupCalendar.form=nome_formulario;
	_dynarch_popupCalendar.mostrarAtElement(el,"Bl");
	return false
	}

var NOME_MESES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var NOME_DIAS=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');

function LZ(x){
	return(x<0||x>9?"":"0")+x
	}
	
function formatarData(date,format){
	format=format+"";
	var result="";
	var i_format=0;var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var Y,yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	var value=new Object();
	if(y.length<4){y=""+(y-0+1900)}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["Y"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=NOME_MESES[M-1];
	value["NNN"]=NOME_MESES[M+11];
	value["b"]=NOME_MESES[M+11];
	value["d"]=d;value["dd"]=LZ(d);value["E"]=NOME_DIAS[E+7];
	value["EE"]=NOME_DIAS[E];value["H"]=H;
	value["HH"]=LZ(H);
	if(H==0){value["h"]=12}
	else if(H>12){value["h"]=H-12}
	else{value["h"]=H}
	value["hh"]=LZ(value["h"]);
	if(H>11){value["K"]=H-12}
	else{value["K"]=H}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if(H>11){value["a"]="pm"}
	else{value["a"]="am"}
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while(i_format<format.length){
		c=format.charAt(i_format);
		token="";
		while((format.charAt(i_format)==c)&&(i_format<format.length)){token+=format.charAt(i_format++)}
		if(value[token]!=null){result=result+value[token]}
		else{result=result+token}
		}
	return result
	}
	
function _serInteiro(val){
	var digits="1234567890";
	for(var i=0,i_cmp=val.length;i<i_cmp;i++){
		if(digits.indexOf(val.charAt(i))==-1){return false}
		}
	return true
	}
	
function _getInt(str,i,minlength,maxlength){
	for(var x=maxlength;x>=minlength;x--){
		var token=str.substring(i,i+x);
		if(token.length<minlength){return null}
		if(_serInteiro(token)){return token}
		}
	return null
	}
	
function getDataDoFormato(val,format){
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	var now=new Date();
	var ano=now.getYear();
	var mes=now.getMonth()+1;
	var date=1;
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";
	while(i_format<format.length){
		c=format.charAt(i_format);
		token="";
		while((format.charAt(i_format)==c)&&(i_format<format.length)){token+=format.charAt(i_format++)}
		if(token=="yyyy"||token=="yy"||token=="y"||token=="Y"){
			if(token=="Y"){x=4;y=4}
			if(token=="yyyy"){x=4;y=4}
			if(token=="yy"){x=2;y=2}
			if(token=="y"){x=2;y=4}
			ano=_getInt(val,i_val,x,y);
			if(ano==null){return 0}
			i_val+=ano.length;
			if(ano.length==2){
				if(ano>70){ano=1900+(ano-0)}
				else{ano=2000+(ano-0)}
				}
			}
		else if(token=="MMM"||token=="NNN"){
			mes=0;
			for(var i=0,i_cmp=NOME_MESES.length;i<i_cmp;i++){
				var mes_name=NOME_MESES[i];
				if(val.substring(i_val,i_val+mes_name.length).toLowerCase()==mes_name.toLowerCase()){
					if(token=="MMM"||(token=="NNN"&&i>11)){
						mes=i+1;
						if(mes>12){mes-=12}
						i_val+=mes_name.length;break
						}
					}
				}
			if((mes<1)||(mes>12)){return 0}
			}
		else if(token=="EE"||token=="E"){
			for(var i=0,i_cmp=NOME_DIAS.length;i<i_cmp;i++){
				var nome_dia=NOME_DIAS[i];
				if(val.substring(i_val,i_val+nome_dia.length).toLowerCase()==nome_dia.toLowerCase()){i_val+=nome_dia.length;break}
				}
			}
		else if(token=="MM"||token=="M"){
			mes=_getInt(val,i_val,token.length,2);
			if(mes==null||(mes<1)||(mes>12)){return 0}
			i_val+=mes.length
			}
		else if(token=="dd"||token=="d"){
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31)){return 0}
			i_val+=date.length
			}
		else if(token=="hh"||token=="h"){
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12)){return 0}
			i_val+=hh.length
			}
		else if(token=="HH"||token=="H"){
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23)){return 0}
			i_val+=hh.length
			}
		else if(token=="KK"||token=="K"){
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11)){return 0}
			i_val+=hh.length
			}
		else if(token=="kk"||token=="k"){
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24)){return 0}
			i_val+=hh.length;
			hh--
			}
		else if(token=="mm"||token=="m"){
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59)){return 0}
			i_val+=mm.length
			}
		else if(token=="ss"||token=="s"){
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59)){return 0}
			i_val+=ss.length
			}
		else if(token=="a"){
			if(val.substring(i_val,i_val+2).toLowerCase()=="am"){ampm="am"}
			else if(val.substring(i_val,i_val+2).toLowerCase()=="pm"){ampm="pm"}
			else{return 0}
			i_val+=2
			}
		else{
			if(val.substring(i_val,i_val+token.length)!=token){return 0}
			else{i_val+=token.length}
			}
		}
	if(i_val!=val.length){return 0}
	if(mes==2){
		if(((ano%4==0)&&(ano%100!=0))||(ano%400==0)){
			if(date>29){return 0}
			}
		else{
			if(date>28){return 0}
			}
		}
	if((mes==4)||(mes==6)||(mes==9)||(mes==11)){
		if(date>30){return 0}
		}
	if(hh<12&&ampm=="pm"){hh=hh-0+12}
	else if(hh>11&&ampm=="am"){hh-=12}
	var newdate=new Date(ano,mes-1,date,hh,mm,ss);
	return newdate.getTime()
	}