/************************************************************************
*	Class calendario														*
*	Descrição: 															*
*		Cria um calendário completo, 									*
*		e carrega as notícias referentes								*
*		ao dia selecionado												*
*	Dependência:														*
*		./API/yahoo.js - Super Class YAHOO								*
*		./API/parseMosDom.js - Trata exceções de get Data DOM			*
*		./API/connection.js - Trata exceções de AJAX					*
*		./API/mootools.js - Trata as exceçoes para contruir a classe	*
*	Por: Marcel Nicolay Santos											*
*	Date: 2006 Nov 27													*
*	'Be Wise'															* 
*************************************************************************/

var CalendarioClass = new Class({
	
		//Construtor da classe
		initialize: function(boxMes, tbodyDias, urlRubrique){
			this.boxMes = document.getElementById(boxMes);
			this.tbodyDias = document.getElementById(tbodyDias);
			this.urlRubrique = urlRubrique;
		},
 
 		//AJAX para pegar a programação de uma determinada data
		connect: function(){
			/*
			var callback =	{success:this.responseSuccess, failure:this.responseFailure, scope:agenda}
			post = "dia="+this.dia+"&mes="+this.mes+"&ano="+this.ano;
			var response = YAHOO.util.Connect.asyncRequest('POST', 'get_agenda.php', callback, post);
			*/
			//alert(""+this.urlRubrique+"&var_nav_day="+this.dia+"&var_nav_month="+this.mes+"&var_nav_year="+this.ano);
			location.href=""+this.urlRubrique+"&var_nav_day="+this.dia+"&var_nav_month="+this.mes+"&var_nav_year="+this.ano; 					
		},
		
		//cria um nó <a href="">dia</a> para ser colocado no BoxText
		criaNo: function(titre,id_article){
			novo = document.createElement("a");
			novo.setAttribute("href","article.php3?id_article="+id_article);
			text = document.createTextNode(titre);
			novo.appendChild(text);
			return novo;		
		},
		
		//erro no AJAX
		responseFailure: function(response){
			alert("Erro!!\nTente novamente em alguns minutos");
		
		},

		//Funcão executada sempre que um dia é trocado
		swap_DMA: function(dia){ //troca Dia / Mes / Ano
			mes_ano = data_of(this.boxMes.childNodes.item(0));
			vet_mes_ano = mes_ano.split(" ");
			this.dia = dia;
			this.mes = this.getMes(vet_mes_ano[0]);
			this.ano = vet_mes_ano[1];
			this.connect();
			//this.swap_semana();
			//alert(this.dia+"-"+this.mes+"-"+this.ano);
		},

		//retorna quantos dias tem o mes
		// 28 ; 30 ; 31
		get_dias_mes: function(mes){
			if(mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 9 || mes == 10 || mes == 12)
				return 31;
			if(mes == 4 || mes == 6 || mes == 8 || mes == 11)
				return 30;
			if(mes == 2)
				return 28;
		},
		
		//Chamada sempre que o mes atual é trocado
		set_month: function(o){
			if(o.responseText!= 'undefined'){
				this.startMonth = parseFloat(o.responseText);
				max_dias = this.get_dias_mes(this.mes);
				dias = this.tbodyDias.getElementsByTagName("a");
				num = 0;
				semana = this.startMonth;
				for(i=0; i < (max_dias+this.startMonth); i++){
					if(i >= this.startMonth){
						dias[i].href="javascript:calendario.swap_DMA("+(num+1)+")";
						semana = (semana>6)?0:semana;
						dias[i].setAttribute("semana",semana);
						dias[i].setAttribute("id","dia_"+num);
						dias[i].childNodes.item(0).data = ""+(num+1);
						num++;
						semana++;
					}
					else{
						dias[i].setAttribute("href","javascript:void(0)");
						dias[i].childNodes.item(0).data = " ";
						dias[i].setAttribute("semana",7);
					}
					
				}
				for(j = (max_dias+this.startMonth); j < 36; j++){
					if(typeof(dias[j]) != 'undefined'){
						dias[j].setAttribute("href","javascript:void(0)");
						dias[j].childNodes.item(0).data = " ";
						dias[i].setAttribute("semana",7);
					}
				}
			}
		},
		
		//funçao executa somente uma vez, quando a página é carregada
		start_month: function(sMonth){
				mes_ano = data_of(this.boxMes.childNodes.item(0));
				vet_mes_ano = mes_ano.split(" ");
				this.mes = parseFloat(this.getMes(vet_mes_ano[0]));
				mes = this.mes;
				//this.set_start_month(mes);
				max_dias = this.get_dias_mes(this.mes);
				dias = this.tbodyDias.getElementsByTagName("a");
				num = 0;
				semana = sMonth;
				for(i=0; i < (max_dias+sMonth); i++){
					if(i >= sMonth){
						dias[i].href="javascript:calendario.swap_DMA("+(num+1)+")";
						semana = (semana>6)?0:semana;
						dias[i].setAttribute("semana",semana);
						dias[i].setAttribute("id","dia_"+num);
						dias[i].childNodes.item(0).data = ""+(num+1);
						num++;
						semana++;
					}
					else{
						dias[i].setAttribute("href","javascript:void(0)");
						dias[i].childNodes.item(0).data = " ";
						dias[i].setAttribute("semana",7);
					}
					
				}
				for(j = (max_dias+sMonth); j < 36; j++){
					if(typeof(dias[j]) != 'undefined'){
						dias[j].setAttribute("href","javascript:void(0)");
						dias[j].childNodes.item(0).data = " ";
						dias[i].setAttribute("semana",7);
					}
				}
		},
		
		//AJAX para pegar o dia da semana em que começa o mês
		set_start_month: function(month){
			call = {success: this.set_month, failure:this.responseFailure, scope:calendario};
			post = "mes="+month;
			rsp = YAHOO.util.Connect.asyncRequest('POST', 'get_startMonth.php', call, post);
		},
		
		//função chamada pelas seta < >, troca o mes atual, para frente ou para trás
		swap_mes: function(direction){
			mes_ano = data_of(this.boxMes.childNodes.item(0));
			vet_mes_ano = mes_ano.split(" ");
			this.mes = parseFloat(this.getMes(vet_mes_ano[0]));
			mes = this.mes;
			ano = parseFloat(vet_mes_ano[1]);
			if(direction == "left"){
				if((mes-1) == 0){
					novo_mes = 12;
				}
				else{
					novo_mes = mes-1;
				}
			}
			else{
				if((mes+1) == 13){
					novo_mes = 1;
				}
				else{
					novo_mes = mes+1;
				}
			}
			this.mes = novo_mes;
			location.href=""+this.urlRubrique+"&var_nav_month="+this.mes+"&var_nav_year="+ano;
		},
		
		//Função que monta os dias da semana de acordo com o dia atual
		swap_semana: function(){ //calcula quais os dias da semana
			dias = this.tbodyDias.getElementsByTagName("a");
			for(i=0; i < 36; i++)
				if(dias[i].childNodes.item(0).data == this.dia)
					break;
			resto = dias[i].getAttribute("semana");
			if(resto == 0){
					this.write_semana(this.dia+1);
					semana = "Domingo";
				}
				else if(resto ==1){
					this.write_semana(this.dia);
					semana = "Segunda-feira";
				}
				else if(resto == 2){
						this.write_semana(this.dia-1);
						semana = "Terça-feira";
					}
					else if(resto == 3){
						this.write_semana(this.dia-2);
						semana = "Quarta-feira";
					}
					else if(resto == 4){
							this.write_semana(this.dia-3)
							semana = "Quinta-feira";
						}
						else if(resto == 5){
							this.write_semana(this.dia-4)
							semana = "Sexta-feira";
							}
							else if(resto == 6){
								this.write_semana(this.dia-5)
								semana = "Sábado";
							}
			document.getElementById("Ag_titulo").childNodes.item(0).data = semana;
		},
	
		//Retorna um mês passado como parâmetro na forma numérica
		getMes: function(mes_num){
			var mes = new Array(12);
				mes[0] = "Janeiro";
				mes[1] = "Fevereiro";
				mes[2] = "Março";
				mes[3] = "Abril";
				mes[4] = "Maio";
				mes[5] = "Junho";
				mes[6] = "Julho";
				mes[7] = "Agosto";
				mes[8] = "Setembro";
				mes[9] = "Outubro";
				mes[10] = "Novembro";
				mes[11] = "Dezembro";
			for(i=0;i<12;i++)
				if(mes[i]==mes_num){
					num = (i+1);
					break
				}
			return (num<10)?"0"+num:""+num;
		}
	});

