/**
 * GradeDia
 * Programacao do canal Multishow
 * requer: events-grade.js, dateConversion.js, prototype
 */

GradeDia = {}

GradeDia.gridIndex = ""; //grid index file
GradeDia.datetimeFile = ""; //date time file

GradeDia.date = ""; //string format today
GradeDia.selectedDate = ""; //string selected date
GradeDia.time = ""; //string now

GradeDia.today = ""; //date format today
GradeDia.tomorrow = ""; //date format tomorrow

GradeDia.gridListSelector = "ul.gridList";
GradeDia.containerSelector = "div#programacao";

GradeDia.trackOfTime = new Array(3);
GradeDia.trackOfTime[0] =  { 'I' : '06:00', 'F' : '11:59', 'nobre' : false,  'titulo' : "06:00 - 11:59"};
GradeDia.trackOfTime[1] =  { 'I' : '12:00', 'F' : '19:59', 'nobre' : false , 'titulo' : "12:00 - 19:59" };
GradeDia.trackOfTime[2] =  { 'I' : '20:00', 'F' : '23:59', 'nobre' : true,   'titulo' : "20:00 - 23:59" };
GradeDia.trackOfTime[3] =  { 'I' : '00:00', 'F' : '05:59', 'nobre' : false,  'titulo' : "00:00 - 05:59" };

GradeDia.rotuloFiltroTodosProgramas = "- Todos - ";
GradeDia.rotuloFiltroTodasFaixas = "- Todas - ";
GradeDia.rotuloFiltroPrograma = "Escolha um Programa: ";
GradeDia.rotuloFiltroFaixa = "Faixa de hor&aacute;rio: ";
GradeDia.rotuloNavegacaoAnterior = "Dia Anterior";
GradeDia.rotuloNavegacaoProximo = "Pr&oacute;ximo Dia";
GradeDia.idFiltroPrograma = "filtroProgramasVisao";
GradeDia.idFiltroFaixa = "filtroFaixaHorario";
GradeDia.classeFiltro = "gradeProgramacaoFiltros";
GradeDia.classeHorarioEscondido = "horarioEscondido";
GradeDia.classeItemEscondido = "itemEscondido";
GradeDia.classeItemExibido = "itemExibido";
GradeDia.classeProgramaNoAr = "programaNoAr";
GradeDia.classeBarraNavegacao = "barraNavegacao";
GradeDia.classeBarraNavegacaoAnterior = "barraAnterior";
GradeDia.classeBarraNavegacaoProximo = "barraProximo";
GradeDia.classeBarraNavegacaoData = "barraData";
GradeDia.classeGradeContainer = "gradeContainer";
GradeDia.classeBlocoNoAr = "blocoNoAr";
GradeDia.classeBlocoASeguir = "blocoASeguir";
GradeDia.classeConteudoAba = "tabContent";







GradeDia.updateFilters = function(){
	var filtro = document.getElementsBySelector("fieldset.gradeProgramacaoFiltros")[0];
	var combo = filtro.getElementsByTagName("select")[0];
	clearCombobox(combo);
	var option = document.createElement("option");
	option.value = ""
	option.innerHTML = GradeDia.rotuloFiltroTodosProgramas;
	combo.appendChild(option);
}

GradeDia.createFilters = function(){
	var filtros = document.createElement("fieldset");
	addClass(filtros,GradeDia.classeFiltro);
	var itens = document.createElement("ul");

	var item;
	var rotulo;

	//by Show
	item = document.createElement("li");
	rotulo = document.createElement("label");
	rotulo.innerHTML = GradeDia.rotuloFiltroPrograma;
	rotulo.htmlFor = GradeDia.idFiltroPrograma;
	item.appendChild(rotulo);
	var filtro = document.createElement("select");
	filtro.id = GradeDia.idFiltroPrograma;
	filtro.name = GradeDia.idFiltroPrograma;
	filtro.onchange = function(){
	    GradeDia.programFilter(this.options[this.selectedIndex].value)
	};
	var option = document.createElement("option");
	option.value = "-"
	option.innerHTML = GradeDia.rotuloFiltroTodosProgramas;
	filtro.appendChild(option);
	item.appendChild(filtro);
	itens.appendChild(item);

	//by track of time
	item = document.createElement("li");
	rotulo = document.createElement("label");
	rotulo.innerHTML = GradeDia.rotuloFiltroFaixa;
	rotulo.htmlFor = GradeDia.idFiltroFaixa;
	item.appendChild(rotulo);
	var filtro = document.createElement("select");
	filtro.id = GradeDia.idFiltroFaixa;
	filtro.name = GradeDia.idFiltroFaixa;
	filtro.onchange = function(){
	    GradeDia.trackOfTimeFilter(parseInt(this.options[this.selectedIndex].value), 10);
	};
	var option = document.createElement("option");
	option.value = "-"
	option.innerHTML = GradeDia.rotuloFiltroTodasFaixas;
	filtro.appendChild(option);

	for (var i = 0; i < GradeDia.trackOfTime.length; i++){
	   option = document.createElement("option");
	   option.value = i;
	   option.innerHTML = GradeDia.trackOfTime[i]['titulo'];
	   filtro.appendChild(option);
	}

	item.appendChild(filtro);
	itens.appendChild(item);

	filtros.appendChild(itens);
	return filtros;
}


GradeDia.hasFilters = function(){
	var filtro =  document.getElementsBySelector("fieldset.gradeProgramacaoFiltros");
	if (filtro.length > 0){
	   return true;
	}
	return false;
}


GradeDia.programFilter = function(programId){
	//pega os programas da visao atual
	var shows = $$("ul.gridList li").each(function(el){
	    if (isNaN(parseInt(programId))){
		removeClass(el, GradeDia.classeItemEscondido);
		removeClass(el, GradeDia.classeItemExibido);
	    } else {
		    if (el.getAttribute("programId") == programId){
		    	removeClass(el, GradeDia.classeItemEscondido);
			addClass(el, GradeDia.classeItemExibido);
		    } else {
			removeClass(el, GradeDia.classeItemExibido);
			addClass(el, GradeDia.classeItemEscondido);
		    }
	     }
	});
}


GradeDia.belongsToTrack = function(time, track){
	var beg = DateConversion.stringToMinutes(track['I']);
	var end = DateConversion.stringToMinutes(track['F']);
	if ((time >= beg) && (time <= end)){
	   return true;
	}
	return false;
}


GradeDia.belongsToNobleTrack = function(startTime){
	for (var i = 0; i < GradeDia.trackOfTime.length; i++){
		if (GradeDia.trackOfTime[i]['nobre']){
			if (GradeDia.belongsToTrack(DateConversion.stringToMinutes(startTime), GradeDia.trackOfTime[i])){
				return true;
			}
			return false;
		}
	}
}


GradeDia.trackOfTimeFilter = function(index){
	$$("ul.gridList li").each(function(li){
	    var timeClass = li.className.substr(0,5);
	    if (isNaN(index)){
		removeClass(li, GradeDia.classeHorarioEscondido);
	    } else {
		if (!GradeDia.belongsToTrack(DateConversion.stringToMinutes(timeClass), GradeDia.trackOfTime[index])){
		   addClass(li, GradeDia.classeHorarioEscondido); 
		} else {
		   removeClass(li, GradeDia.classeHorarioEscondido);
		}
	    }
	});
}


GradeDia.updateNavigationBar = function(){
	var barras = $$("span.barraData");
	for (var i = 0; i < barras.length; i++){
		var data = DateConversion.stringToDate(GradeDia.selectedDate);
		barras[i].innerHTML = DateConversion.dateToCompleteString(data);
	}
}

GradeDia.createNavigationBar = function(){
	var barra = document.createElement("div");
	addClass(barra, GradeDia.classeBarraNavegacao);

	var goBack = function(){
		var date = DateConversion.stringToDate(GradeDia.selectedDate);
		date.setDate(date.getDate()-1);
		dateClass = DateConversion.dateToInverseString(date)
		var tab = $$("#tabs li a." + dateClass);
		if (tab.length == 0){
			GradeDia.selectedDate = DateConversion.dateToString(date);
			GradeDia.today = DateConversion.stringToDate(GradeDia.selectedDate);
			GradeDia.tomorrow = DateConversion.stringToDate(GradeDia.selectedDate);
			GradeDia.tomorrow.setDate(GradeDia.tomorrow.getDate()+1);
			updateCalendar(GradeDia.today);
			GradeDia.initContainer();
		} else {
			tab[0].onclick();
		}
	}
	var goForward = function(){
		var date = DateConversion.stringToDate(GradeDia.selectedDate);
		date.setDate(date.getDate()+1);
		dateClass = DateConversion.dateToInverseString(date)
		var tab = $$("#tabs li a." + dateClass);
		if (tab.length == 0){	
			GradeDia.selectedDate = DateConversion.dateToString(date);
			GradeDia.today = DateConversion.stringToDate(GradeDia.selectedDate);
			GradeDia.tomorrow = DateConversion.stringToDate(GradeDia.selectedDate);
			GradeDia.tomorrow.setDate(GradeDia.tomorrow.getDate()+1);
			updateCalendar(GradeDia.today);
			GradeDia.initContainer();
		} else {
		   //o proximo dia esta na tela
		   	tab[0].onclick();
		}
	}

	var anterior = document.createElement("a");
	addClass(anterior, GradeDia.classeBarraNavegacaoAnterior);
	anterior.innerHTML =  GradeDia.rotuloNavegacaoAnterior;
	anterior.onclick = goBack;

	var proximo = document.createElement("a");
	addClass(proximo, GradeDia.classeBarraNavegacaoProximo);
	proximo.innerHTML =  GradeDia.rotuloNavegacaoProximo;
	proximo.onclick = goForward;

	barra.appendChild(anterior);
	barra.appendChild(proximo);

	//data que fica no centro da barra
	var dataBarra = document.createElement("span");
	addClass(dataBarra, GradeDia.classeBarraNavegacaoData);
	var data = DateConversion.stringToDate(GradeDia.selectedDate);
	dataBarra.innerHTML = DateConversion.dateToCompleteString(data);
	barra.appendChild(dataBarra);

	return barra;
}

GradeDia.addProgramFilter = function(program, id){
	var combo = $(GradeDia.idFiltroPrograma);
	if (!hasItemCombobox(combo, id)) {
		addToCombobox(combo, id, program);
		orderCombobox(combo);
	}
}

GradeDia.loadProgramFilter = function(){
	GradeDia.updateFilters();
	var grid = $$(GradeDia.gridListSelector)[0];
	var programas = $(grid).childElements();
	Element.extend(programas);
	programas.each(function(el){
		var programa = el.select("h4.programa")[0];
		var id = el.getAttribute("programId");
   		GradeDia.addProgramFilter(programa.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ').replace(/<\/?[^>]+(>|$)/g,""), id);
	});
}

GradeDia.showDay = function(request){
	$$(GradeDia.gridListSelector)[0].parentNode.innerHTML = request.responseText;
	GradeDia.loadProgramFilter();
}

GradeDia.loadDateShows = function(){
	updateCalendar(GradeDia.today);
	var url = GradeDia.caminho + dataParaFormatoHtml(DateConversion.dateToString(GradeDia.today)) + ".html";
	new Ajax.Request(url, {method:'get', onSuccess : GradeDia.showDay });
	/*
	$$("h4.programa").each(function(el){
   		$("tituloProgramas").innerHTML = $("tituloProgramas").innerHTML + el.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ');;
	});
	*/
}

GradeDia.searchDateShows = function(day){
	GradeDia.selectedDate = day;
	GradeDia.today = DateConversion.stringToDate(day);
	GradeDia.tomorrow = DateConversion.stringToDate(day);
	GradeDia.tomorrow.setDate(GradeDia.tomorrow.getDate()+1);
	$$(GradeDia.gridListSelector)[0].innerHTML = "";
	GradeDia.updateNavigationBar();
	GradeDia.loadDateShows();
}

GradeDia.initContainer = function(){
	var container = $$(GradeDia.containerSelector)[0];
	container.innerHTML = "";
	if (!GradeDia.hasFilters()){
		var filters = GradeDia.createFilters();
		container.appendChild(filters);
	} else {
		GradeDia.updateFilters();
	}

	//tab list
	var tabs = document.createElement("ul");
	tabs.id = "tabs";
	var changeDay = function(){
		day = this.getAttribute("data");
		var tabs = $$("#tabs a");
		for (var i = 0; i < tabs.length; i++){
		  removeClass(tabs[i], "active-tab");
		}
		addClass(this, "active-tab");
		GradeDia.searchDateShows(day);
	}
	var day = DateConversion.stringToDate(GradeDia.selectedDate);
	var lastDay = DateConversion.stringToDate(GradeDia.selectedDate);
	lastDay.setDate(lastDay.getDate()+7);
	while (day.getTime() < lastDay.getTime()){
		var dayTab = document.createElement("li");
		var dayTabLink = document.createElement("a");
		if (DateConversion.dateToString(day) == GradeDia.selectedDate){
			addClass(dayTabLink, "active-tab");
		}
		dayTabLink.innerHTML = DateConversion.stringToWeekDay(day);
		dayTabLink.setAttribute("data", DateConversion.dateToString(day));
	        dayTabLink.id = DateConversion.stringToWeekDayClass(day);
		addClass(dayTabLink, DateConversion.dateToInverseString(day));
		dayTabLink.onclick = changeDay;
		dayTab.appendChild(dayTabLink);
		day.setDate(day.getDate()+1);
		tabs.appendChild(dayTab);
	}

	//mainTab
	var tab = document.createElement("div");
	tab.id = "mainTab";
	var contentTab = document.createElement("div");
	addClass(contentTab, GradeDia.classeConteudoAba);
	var bar = GradeDia.createNavigationBar();
	tab.appendChild(bar);
	tab.appendChild(contentTab);
	bar = GradeDia.createNavigationBar();
	tab.appendChild(bar);
	//shows list
	var list = document.createElement("ul");
	addClass(list, "gridList");
	contentTab.appendChild(list);
	container.appendChild(tabs);
	container.appendChild(tab);
	GradeDia.loadDateShows();
}

GradeDia.saveDate = function(transport){
	var text = transport.responseText;
	var data = text.substr(0,10);
	var hora = text.substr(11,5);
	if (DateConversion.stringToMinutes(hora) < DateConversion.stringToMinutes("06:00")){
	   var tempData = DateConversion.stringToDate(data);
	   tempData.setDate(tempData.getDate()-1);
	   data = DateConversion.dateToString(tempData);
	}
	GradeDia.time = hora;
	GradeDia.date = data;

	GradeDia.today = DateConversion.stringToDate(data);
	GradeDia.tomorrow = DateConversion.stringToDate(data);
	GradeDia.tomorrow.setDate(GradeDia.tomorrow.getDate()+1);

	GradeDia.selectedDate = data;
	GradeDia.initContainer();
}

GradeDia.init = function(){
	new Ajax.Request(GradeDia.datetimeFile, {method:'get', onSuccess : GradeDia.saveDate });
}

GradeDia.requests = new Hash();
GradeDia.Result = function(transport) {
	var request = transport.request;
	var args = request.options.args;
	GradeDia.requests.set(request.url, transport);
	args.onSuccess(transport);
}
GradeDia.Request = function(url, params) {
	var transport = GradeDia.requests.get(url);
	if(!transport) {
		new Ajax.Request(url, {method:'get', onSuccess: GradeDia.Result, args: params } );
		return;
	}
	params.onSuccess(transport);
}





function dataParaFormatoHtml(dataString){
	var vetor = dataString.split("/");
	var novaDataString = vetor[0]+"-"+vetor[1]+"-"+vetor[2];
	
	return novaDataString;
}