/*******************************************************************************\
*	Class AGENDA								*
*	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 AgendaClass = new Class({

		//Construtor da classe
		initialize: function(boxMes, boxSemana, boxText, tbodyDias){
			this.boxMes = document.getElementById(boxMes);
			this.boxSemana = document.getElementById(boxSemana);
			this.boxText = document.getElementById(boxText);
			this.tbodyDias = document.getElementById(tbodyDias);
			this.start = true;
		},

 		//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);
		},

		//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);
//			novo.setAttribute("titre",descriptif);
//			novo.setAttribute("alt",descriptif);
			text = document.createTextNode(titre);
			novo.appendChild(text);
			return novo;
		},

		//Remove o conteudo do BoxText
		clearBoxText: function(){
			/*for(i=0; i<=this.boxText.childNodes.length ; i++){
				this.boxText.removeChild(this.boxText.childNodes.item(i));
			}*/

			while(this.boxText.hasChildNodes()){
				this.boxText.removeChild(this.boxText.lastChild);
			}
			this.boxText.appendChild(document.createTextNode(" "));
		},

		//Função executada caso o connect seja realizado com sucesso
		responseSuccess: function(o){
			xml = o.responseXML;
			if(typeof(xml) != 'undefined'){
				articles = xml.getElementsByTagName('articles');
				article = articles[0].getElementsByTagName('artigo');
				this.clearBoxText();
				for(i=0 ; i < article.length; i++){
					XmlTitre = article[i].getElementsByTagName('titre');
					XmlId_article = article[i].getElementsByTagName('id_article');
//					XmlDescriptif = article[i].getElementsByTagName('descriptif');
					titre = data_of(XmlTitre[0].childNodes.item(0));
					id_article = data_of(XmlId_article[0].childNodes.item(0));
//					descriptif = data_of(XmlDescriptif[0].childNodes.item(0));
//					this.boxText.appendChild(this.criaNo(titre,id_article,descriptif));
					this.boxText.appendChild(this.criaNo(titre,id_article));
				}
				agendaScroller.Scroll("Ag_scroller","Ag_barraRoll",96,68);
				//console.debug(article);
			}

		},

		//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 a semana em questão
		get_semana: function(){
			semana = this.boxSemana.getElementsByTagName("a");
			seg = semana[0].childNodes.item(0).data;
			sex = semana[4].childNodes.item(0).data;
			mes = this.mes;
			ano = this.ano;
			dom = parseInt(sex)+2;
			//alert(dom +"%"+ this.get_dias_mes(mes)+" = "+ (dom % this.get_dias_mes(mes)));
			if((dom % this.get_dias_mes(mes)) >= 1){
				dom = dom % this.get_dias_mes(mes);
				mes.mes++;
				if(mes > 12)
					ano++;
			}
			vet = new Array(6);
			vet[0] = seg; //dia_a
			vet[1] = this.mes; //mes_a
			vet[2] = this.ano; //ano_a
			vet[3] = dom; //dia_d
			vet[4] = mes; //mes_d
			vet[5] = ano; //ano_d

			return(vet);
		},

		get_mes: function(){
			vet = new Array(2);
			vet[0] = this.mes;
			vet[1] = this.ano;
			return vet;
		},

		//Escreve a semana a partir da segunda-feira passada como parâmetro
		write_semana: function(seg){ //escreve a semana
			semana = this.boxSemana.getElementsByTagName("a");
			for(i=0;i<semana.length;i++){
				if((seg+i > 0) && ((seg+i) <= this.get_dias_mes(this.mes))){
					semana[i].href="javascript:agenda.swap_DMA("+(seg+i)+")";
					if((seg+i) == this.dia){ //se for o dia da vez
						if(i==0)
							classe="Ag_checked_seg";
						else if(i==1)
							classe="Ag_checked_ter";
						else if(i==2)
							classe="Ag_checked_qua";
						else if(i==3)
							classe="Ag_checked_qui";
						else if(i==4)
							classe="Ag_checked_sex";
						semana[i].setAttribute("className",classe);
						semana[i].setAttribute("class",classe);
					}
					else{ //senaum for limpa o class
						semana[i].setAttribute("className","");
						semana[i].setAttribute("class","");
					}
					semana[i].childNodes.item(0).data = ((seg+i)<32)?""+(seg+i):"";
				}
				else{
					semana[i].href="javascript:void(0)";
					semana[i].childNodes.item(0).data = "";
					semana[i].setAttribute("className","");
					semana[i].setAttribute("class","");
				}
			}
		},

		//retorna quantos dias tem o mes
		// 28 ; 30 ; 31
		get_dias_mes: function(mes){
			if(mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)
				return 31;
			if(mes == 4 || mes == 6 || mes == 9 || 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:agenda.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 < 37; j++){
					if(typeof(dias[j]) != 'undefined'){
						dias[j].setAttribute("href","javascript:void(0)");
						dias[j].childNodes.item(0).data = " ";
						dias[i].setAttribute("semana",7);
					}
				}

				var Smes = new Array(12);
					Smes[0] = "Janeiro";
					Smes[1] = "Fevereiro";
					Smes[2] = "Março";
					Smes[3] = "Abril";
					Smes[4] = "Maio";
					Smes[5] = "Junho";
					Smes[6] = "Julho";
					Smes[7] = "Agosto";
					Smes[8] = "Setembro";
					Smes[9] = "Outubro";
					Smes[10] = "Novembro";
					Smes[11] = "Dezembro";

				novoMes = Smes[(parseInt(this.mes)-1)];
				this.boxMes.childNodes.item(0).data = novoMes+" "+this.ano;
				if(!this.start)
					this.swap_DMA(1);
				else
					this.start = false;
			}
		},

		//funçao executa somente uma vez, quando a página é carregada
		start_month: function(sMonth,ano){
				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,ano);
				
        
        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:agenda.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,ano){
			call = {success: this.set_month, failure:this.responseFailure, scope:agenda};
			post = "mes="+month+"&ano="+ano;
			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;
					ano--;
				}
				else{
					novo_mes = mes-1;
				}
			}
			else{
				if((mes+1) == 13){
					novo_mes = 1;
					ano++;
				}
				else{
					novo_mes = mes+1;
				}
			}
			this.mes = novo_mes;
			this.ano = ano;
			this.set_start_month(this.mes,this.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;
			document.getElementById("Ag_titulo").childNodes.item(0).data = "Agenda";
		},

		//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;
			return +num;
		}
		
	});


