/**
 * Criando objeto RatingUtil
 **/
var RatingUtil = new Object();

var DesabilitaFuncoes = false;

/**
 * Grava o log de impressao e envio por email.
 * @param cod Codigo do grupo
 */
RatingUtil.saveLog = function( cod ) {
    var url = "" + ( ( window.opener && !window.opener.closed ) ? window.opener.document.location : document.location );
    var titulo = "" + ( ( window.opener && !window.opener.closed ) ? window.opener.document.title : document.title );

    var urlSplit = url.split( "?enviaEmail=true" );
    urlSplit = urlSplit[0].split( "#" );
    urlSplit = urlSplit[0].split( "?URL_RETORNO=" );
    url = urlSplit[urlSplit.length - 1];

    var tituloSplit = titulo.split( "- Portal EXAME" );
    titulo = tituloSplit[0];

    if ( titulo != "" ) {
    	last = titulo.lastIndexOf( "-" ) > 0 ? titulo.lastIndexOf( "-" ) : titulo.length;
    	titulo = titulo.substring( 0, last );
    }

    RatingsAjaxController.insertRating( {codGroup:cod,contentUrl:url,contentTitle:titulo} );
}

/**
 * Imprime os dados dos "mais impressa" no elemento pelo id deste.
 * @param id Id do elemento HTML
 **/
RatingUtil.obtemMaisImpressa = function (id)  {
	RatingsAjaxController.getMostPrinted ( function( html ) {
	    if (html != "" && html != null) {
			document.getElementById(id).innerHTML = html;
		} else {
			document.getElementById(id).innerHTML = "<h2>No momento, n&atilde;o h&aacute; nenhuma mat&eacute;ria classificada como a mais impressa</h2>";			
		}
	});
}

/**
 * Imprime os dados dos "mais visitados" no elemento pelo id deste.
 * @param id Id do elemento HTML
 **/
RatingUtil.obtemMaisVisitados = function (id)  {
	RatingsAjaxController.getMostVisited ( function( html ) {
	    if (html != "" && html != null) {
			document.getElementById(id).innerHTML = html;
		} else {
			document.getElementById(id).innerHTML = "<h2>No momento, n&atilde;o h&aacute; nenhuma mat&eacute;ria classificada como a mais visitada</h2>";			
		}
	});
}

/**
 * Imprime os dados dos "mais enviados" no elemento pelo id deste.
 * @param id Id do elemento HTML
 **/
RatingUtil.obtemMaisEnviados = function (id)  {
	RatingsAjaxController.getMostSent ( function( html ) {
	    if (html != "" && html != null) {
			document.getElementById(id).innerHTML = html;
		} else {
			document.getElementById(id).innerHTML = "<h2>No momento, n&atilde;o h&aacute; nenhuma mat&eacute;ria classificada como a mais enviada</h2>";			
		}
	});
}

/**
 * Imprime os dados dos "mais votados" no elemento pelo id deste.
 * @param id Id do elemento HTML
 **/
RatingUtil.obtemMaisVotados = function (id)  {
	RatingsAjaxController.getMostRating ( function( html ) {
	    if (html != "" && html != null) {
			document.getElementById(id).innerHTML = html;
		} else {
			document.getElementById(id).innerHTML = "<h2>No momento, n&atilde;o h&aacute; nenhuma mat&eacute;ria classificada como + Votada</h2>";
		}
	});
}

/**
 * Insere rating com votacao e
 * Verifica a media de notas e exibe as estrelas correspondentes
 * @author <a href="mailto:fbgonini@cit.com.br">Fabio Bergamo Gonini</a>
 * @param nota - nota escolhida de uma materia
 */
RatingUtil.atribuirNotaSetarMedia = function( nota ) {
    if ( DesabilitaFuncoes == false ) {
        var cod = 4;
        var url = "" + document.location;
        //var title = "" + document.title;
        var title = getContentMetaTagByName( "title" );
        var arrData = getContentMetaTagByName( "date" ).substring( 0, 10 ).split( "/" );
        var dataPublicacao = new Date( arrData[1] + "/" + arrData[0] + "/" + arrData[2] );

        if ( title != "" ) {
            last = title.lastIndexOf( "-" ) > 0 ? title.lastIndexOf( "-" ) : title.length;
            title = title.substring( 0, last );
        }

        RatingsAjaxController.insertRatingAndPutInCache( {codGroup:cod,contentUrl:url,contentTitle:title,totalVotes:nota,contentPublishDate:dataPublicacao}, function(){
            RatingsAjaxController.getAverage({codGroup:cod,contentUrl:url,contentTitle:title}, function(media) {
                if ( media != null ) {
                    RatingUtil.mostrarNota(media);
                }
            } //fechando "function(media)"
            ); //fechando "getAverage(...)"

        } //fechando "function()"
        ); //fechando "insertRatingAndPutInCache(...)"
    } //fim DesabilitaFuncoes
}

/**
 * Verifica a media de notas e exibe as estrelas correspondentes ( usado no onload)
 * @author <a href="mailto:fbgonini@cit.com.br">Fabio Bergamo Gonini</a>
 */
RatingUtil.setarMedia = function() {
    var url = "" + document.location;
    var title = "" + document.title;
    var cod = 4;
    if (title != "") {
	    last = title.lastIndexOf("-") > 0 ? title.lastIndexOf("-") : title.length;
    	title = title.substring(0, last);
    }

    RatingsAjaxController.getAverage({codGroup:cod,contentUrl:url,contentTitle:title}, function(media){
	   if (media != null){
		   RatingUtil.mostrarNota(media);
		}
	}//fechando "function(media)"
	); //fechando "getAverage(...)"
}

/**
 * Mostra nota na tela
 * @media Media das notas
 * @author <a href="mailto:fbgonini@cit.com.br">Fabio Bergamo Gonini</a>
 */
RatingUtil.mostrarNota = function (media) {
	   if (media.notes==5) {
			document.getElementById("estrela1").className="estrela";
			document.getElementById("estrela2").className="estrela";
			document.getElementById("estrela3").className="estrela";
			document.getElementById("estrela4").className="estrela";
			document.getElementById("estrela5").className="estrela";
	   }
	   else if (media.notes>=4.5) {
			document.getElementById("estrela1").className="estrela";
			document.getElementById("estrela2").className="estrela";
			document.getElementById("estrela3").className="estrela";
			document.getElementById("estrela4").className="estrela";
			document.getElementById("estrela5").className="estrelameia";
	   }
	   else if (media.notes>=4) {
			document.getElementById("estrela1").className="estrela";
			document.getElementById("estrela2").className="estrela";
			document.getElementById("estrela3").className="estrela";
			document.getElementById("estrela4").className="estrela";
			document.getElementById("estrela5").className="estrelavazia";
	   }
	   else if (media.notes>=3.5) {
			document.getElementById("estrela1").className="estrela";
			document.getElementById("estrela2").className="estrela";
			document.getElementById("estrela3").className="estrela";
			document.getElementById("estrela4").className="estrelameia";
			document.getElementById("estrela5").className="estrelavazia";
	   }
	   else if (media.notes>=3) {
			document.getElementById("estrela1").className="estrela";
			document.getElementById("estrela2").className="estrela";
			document.getElementById("estrela3").className="estrela";
			document.getElementById("estrela4").className="estrelavazia";
			document.getElementById("estrela5").className="estrelavazia";
	   }
	   else if (media.notes>=2.5) {
			document.getElementById("estrela1").className="estrela";
			document.getElementById("estrela2").className="estrela";
			document.getElementById("estrela3").className="estrelameia";
			document.getElementById("estrela4").className="estrelavazia";
			document.getElementById("estrela5").className="estrelavazia";
	   }
	   else if (media.notes>=2) {
			document.getElementById("estrela1").className="estrela";
			document.getElementById("estrela2").className="estrela";
			document.getElementById("estrela3").className="estrelavazia";
			document.getElementById("estrela4").className="estrelavazia";
			document.getElementById("estrela5").className="estrelavazia";
	   }
	   else if (media.notes>=1.5) {
			document.getElementById("estrela1").className="estrela";
			document.getElementById("estrela2").className="estrelameia";
			document.getElementById("estrela3").className="estrelavazia";
			document.getElementById("estrela4").className="estrelavazia";
			document.getElementById("estrela5").className="estrelavazia";
	   }
	   else if (media.notes>=1) {
			document.getElementById("estrela1").className="estrela";
			document.getElementById("estrela2").className="estrelavazia";
			document.getElementById("estrela3").className="estrelavazia";
			document.getElementById("estrela4").className="estrelavazia";
			document.getElementById("estrela5").className="estrelavazia";
	   }
}

/**
* Criando ou atualizando o cookie de votacao.
* @author <a href="mailto:fbgonini@cit.com.br">Fabio Bergamo Gonini</a>
*/
RatingUtil.cookieVotacao = function(nota) {
   if ( DesabilitaFuncoes == false ) {

   // Numero de dias para o cookie expirar
   var time = 1250;

	   var cookieVotadas = readCookie( "materiasVotadas" );

	   // Pegando o nomeRender da materia para coloca-la no cookie.
	   var url = window.location.href;
	   var varSplit = url.split('/');
	   var nomeRender = varSplit[varSplit.length-1];
	   varSplit = nomeRender.split('.');
	   nomeRender = varSplit[0];

	   var materiaJavotada = false;
	   // Se o cookie ja existir, atualiza-lo, senao cria-lo.
	   if ( cookieVotadas != null ) {
		    var splitMaterias = cookieVotadas.split(',');

		    // Se a materia ja foi votada, notificar usuario.
		    for ( var i=0; i<splitMaterias.length; i++ ) {
		    	if ( splitMaterias[i] == nomeRender ) {
		    		materiaJavotada = true;
		    	}
		    }

			// Se a materia ainda nao foi votada, inserir ela e sua nota.
			if ( materiaJavotada == false ) {
		 	    createCookie( "materiasVotadas", cookieVotadas+','+nomeRender+','+nota, time );
		 	}
	   } else {
	  	 createCookie( "materiasVotadas", nomeRender + ',' + nota, time );
	   }
	}
	// Desabilitando a funcionalidade de votar.
	DesabilitaFuncoes = true;
}

/**
 * Criando ou atualizando o cookie de votacao.
 * @author <a href="mailto:fbgonini@cit.com.br">Fabio Bergamo Gonini</a>
 */
RatingUtil.cookieVotacaoOnLoad = function() {
    var cookieVotadas = readCookie( "materiasVotadas" );

    // Monta as estrelas do rating
    RatingUtil.montaAvaliacao();

    // Pegando o nomeRender da materia para coloca-la no cookie.
    var url = window.location.href;
    var varSplit = url.split('/');
    var nomeRender = varSplit[varSplit.length-1];
    varSplit = nomeRender.split('.');
    nomeRender = varSplit[0];

    if ( cookieVotadas != null ) {
        var splitMaterias = cookieVotadas.split(',');

        // Se a materia ja foi votada, notificar usuario, desabilitar a votacao e setar a nota que ele havia dado.
        for ( var i=0; i<splitMaterias.length; i++ ) {
            if ( splitMaterias[i] == nomeRender ) {
                // Exibir mensagem ao usuario, dizendo que ele ja votou.
                document.getElementById( "avaliacao" ).getElementsByTagName( "h2" )[0].innerHTML = "<center>Voc&ecirc; j&aacute; votou nesta mat&eacute;ria</center>";

                // Pegando a nota, que vai estar depois do nomeRender no cookie.
                var nota = splitMaterias[i+1];

                // Setando as estrelas com a nota dada.
                for ( var j=1; j<=5; j++ ) {
                    if ( j <= nota ) {
                        document.getElementById( 'voto' + j ).style.backgroundImage = 'url(/css/imagem/home_estrelaCheia.gif)';

                    }
                }

                // Desabilitando a funcionalidade de votar.
                DesabilitaFuncoes = true;
            }
        }
    }
}

/**
 * Monta as estrelas do rating.
 */
RatingUtil.montaAvaliacao = function() {
    var avaliacao = document.getElementById( "avaliacao" );
    var ulElement = avaliacao.getElementsByTagName( "ul" )[0];
    var liElement = avaliacao.getElementsByTagName( "li" );
    var arrStages = new Array( "Fraca", "Regular", "Boa", "&Oacute;tima", "Excelente" ); 
    var buffer    = "";
    var counter   = 1;

    for ( var i=0; i<liElement.length; i++ ) {
        buffer += "<li id='voto" + counter + "' class='estrelavazia' onMouseOver='RatingUtil.aparecerEstrela(" + counter + ");' onMouseOut='RatingUtil.aparecerEstrela(0);' onClick='RatingUtil.atribuirNotaSetarMedia(" + counter + ");RatingUtil.cookieVotacao(" + counter + ");'>";
        buffer += "<a href='javascript:void(0);' alt='" + arrStages[i] + "' title='" + arrStages[i] + "'>&nbsp;&nbsp;&nbsp;</a>";
        buffer += "</li>";
        counter++;
    }

    ulElement.innerHTML = buffer;
}

/**
 * Ao passar o mouse sobre uma estrela, esta e suas antecessoras devem acender.
 * @author <a href="mailto:fbgonini@cit.com.br">Fabio Bergamo Gonini</a>
 */
RatingUtil.aparecerEstrela = function(id) {
    if ( DesabilitaFuncoes == false ) {
        for ( i=1; i<=5; i++ ) {
            if ( i <= id ) {
                document.getElementById('voto'+i).style.backgroundImage='url(/css/imagem/home_estrelaCheia.gif)';
            } else {
                document.getElementById('voto'+i).style.backgroundImage='url(/css/imagem/home_estrelaVazia.gif)';
            }
        }
    }
}

/**
 * Colocar o titulo da materia em cima das estrelas de votacao.
 * @author <a href="mailto:fbgonini@cit.com.br">Fabio Bergamo Gonini</a>
 */
RatingUtil.colocaTituloMateria = function() {
    var titulo = document.title;
    var varSplit = titulo.split( "- Portal EXAME" );
    titulo = varSplit[0];

    document.getElementById( "avaliacao" ).getElementsByTagName( "h3" )[0].innerHTML = titulo;
}

