/**
 * Star Rating - jQuery plugin
 *
 * Copyright (c) 2007 Wil Stuckey
 * Modified by John Resig
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 */

/**
 * Create a degradeable star rating interface out of a simple form structure.
 * Returns a modified jQuery object containing the new interface.
 *   
 * @example jQuery('form.rating').rating();
 * @cat plugin
 * @type jQuery 
 *
 */
jQuery.fn.rating = function(){
    return this.each(function(){
		/*var div = jQuery("<div/>").attr({
            title: this.title,
            className: this.className,
			target:this.target
			
        }).insertAfter( this );*/
		var div = jQuery(this);
		
        var averageRating = this.title.split(/:\s*/)[1].split("."),
            url = this.action,
            averageIndex = averageRating[0],
            averagePercent = averageRating[1];

   		
		// hover events and focus events added
        var stars = div.find("div.star_star,div.star_quad")
            .mouseover(drainFill).focus(drainFill)
            .mouseout(drainReset).blur(drainReset)
            .click(click);	
   
			


		var mensagem = div.find("div.mensagem");

        // cancel button events
        div.find("div.cancel")
            .mouseover(drainAdd).focus(drainAdd)
            .mouseout(resetRemove).blur(resetRemove)
            .click(click);

        reset();

        function drainFill(){ drain(); fill(this); }
        function drainReset(){ drain(); reset(); }
        function resetRemove(){ reset(); jQuery(this).removeClass('on'); }
        function drainAdd(){ drain(); jQuery(this).addClass('on'); }

        function click(){
            averageIndex = stars.index(this) + 1;
			var elem = $(this).parent().find('div.fields'); 
			var param = { Rating: jQuery(this).find('a')[0].title.split("-")[0] };
			for(var i=0; i < elem.length;i++){
				switch(elem[i].title.toLowerCase()){
					case 'retorno':
						param.paginadestino = elem[i].innerHTML;	
						/*if(qs != null && qs != ''){
							param.paginadestino += "?"+ qs;
						}*/
						break;
					case 'paginadestino':
						param.location = elem[i].innerHTML;
						/*if(qs != null && qs != ''){
							param.location += "?"+ param.qs;
						}*/
						break;
					case 'qs':
						/*param.qs = elem[i].innerHTML;
						if(param.location != null && param.qs != ''){
							param.location += "?"+ param.qs;
						}
						if(param.paginadestino != null && param.qs != ''){
							param.paginadestino += "?"+param.qs;
						}*/
						break;
					default:
						param[elem[i].title] = elem[i].innerHTML;
						break;
				}
			}
			
            averagePercent = 0;
						
            if ( averageIndex == 0 )
                drain();
			var part = div.attr('id').split("|");
			switch(part[0].toUpperCase()){
				case "SAVERESPONSE":
					elem[0].innerHTML = 'Aguarde';
					jQuery.getJSON(part[1],param,function(result){
						elem[0].innerHTML = result;
						elem[0].className = '';
					})					
					break;
				case "SAVEANDGO":
					jQuery.getJSON(part[1],param,function(result){
														 
						var u = '';
						var uu = '';
						for(u in param){
							switch(u.toLowerCase()){
								case 'location':
									break;
								default:
									uu += u+"="+param[u]+"&";
									break;
							}
						}

						
						if( uu.substr(uu.length-1,1) == '&' ){
							uu = uu.substr(0,uu.length-1);
						}
						param.location+="?"+uu;
						location.href=param.location;
					})					
					break;
				case "SAVEONLY":
				default:
					jQuery.getJSON(part[1],param,function(result){});
					break;
			}

            return false;
        }

        // fill to the current mouse position.
        function fill( elem ){
			div.find('div.fields')[0].innerHTML = $(elem).find('a')[0].title.split("-")[1];
            stars.find("a").css("width", "100%");
            stars.slice(0, stars.index(elem) + 1 ).addClass("hover");
        }
    
        // drain all the stars.
        function drain(){
			div.find('div.fields')[0].innerHTML = ""+div.find('div.fields')[0].title+"";
            stars.removeClass("on hover");
        }

        // Reset the stars to the default index.
        function reset(){
            stars.slice(0,averageIndex).addClass("on");

            var percent = averagePercent ? averagePercent * 10 : 0;
            if (percent > 0)
                stars.eq(averageIndex).addClass("on").children("a").css("width", percent + "%");
        }
		
		
    });
};

// fix ie6 background flicker problem.
if ( jQuery.browser.msie == true )
    document.execCommand('BackgroundImageCache', false, true);
