var rating = {
    init: function() {
		rating.ratingdiv = YAHOO.util.Dom.getElementsByClassName('rating')
		submitted = false
		rating.make_stardiv()
		rating.description = [ratingStatus1,ratingStatus2,ratingStatus3,ratingStatus4,ratingStatus5]
    },

    make_stardiv: function() {
        for (var i=0; i<rating.ratingdiv.length; i++) {
			rating.ratingdiv[i].stars = YAHOO.util.Dom.getElementsByClassName( 'star' , 'div' , rating.ratingdiv[i]);
			// rating nur erlaubt, wenn das div die Klasse "norating" nicht hat.
			if(YAHOO.util.Dom.hasClass(rating.ratingdiv[i],'norating')==false){
				for (var j=0; j < rating.ratingdiv[i].stars.length; j++) {
					// add needed listeners to every star
					YAHOO.util.Event.addListener(rating.ratingdiv[i].stars[j], 'mouseover', rating.hover_star, j);
					YAHOO.util.Event.addListener(rating.ratingdiv[i].stars[j], 'mouseout', rating.reset_stars, i);
					YAHOO.util.Event.addListener(rating.ratingdiv[i].stars[j], 'click', rating.submit_rating, j);
				}
			}
			/* Alle Ratings auf den aktuellen Durchschnitt setzen Begin */
			average = rating.ratingdiv[i].title.split(/:\s*/)[1].split(".");
			 var stars_on = average[0];
            if (average[1] >= 0)
                stars_on = parseInt(average[0]);
            var last_star_width = average[1] + '0%';
		
        	// cycle trought 1..5 stars
			for (var j=0; j<5; j++) {
				thisstars = YAHOO.util.Dom.getElementsByClassName( 'star' , 'div' , rating.ratingdiv[i]);
				star = thisstars[j];
				var a = star.firstChild;
				
				// first, reset all stars
				YAHOO.util.Dom.removeClass(star, 'hover');
				YAHOO.util.Dom.removeClass(star, 'on');
	
				// for every star that should be on, turn them on
				
				if (j<=stars_on && !YAHOO.util.Dom.hasClass(star, 'on'))
					YAHOO.util.Dom.addClass(star, 'on');
	
				// and for the last one, set width if needed
			   if (j == stars_on)
				   YAHOO.util.Dom.setStyle(a, 'width', last_star_width);
					
			}
			/* Alle Ratings auf den aktuellen Durchschnitt setzen End */
		rating.notifytext = document.createElement('div');	
		ratingHits = YAHOO.util.Dom.getElementsByClassName( 'ratinghits' , 'div' , rating.ratingdiv[i]);
		
        YAHOO.util.Dom.addClass(rating.notifytext, 'notifytext');
        YAHOO.util.Dom.setStyle(rating.notifytext, 'opacity', '0');
        //rating.ratingdiv[i].appendChild(rating.notifytext);
			if(rating.ratingdiv[i].parentNode.className == 'ratingRow'){
				YAHOO.util.Dom.insertBefore(rating.notifytext,rating.ratingdiv[i].stars[0]); 
			}else{
				//YAHOO.util.Dom.insertAfter(rating.notifytext,rating.ratingdiv[i].stars[4]); 
				YAHOO.util.Dom.insertAfter(rating.notifytext,ratingHits[0]); 
				}
        } 
		
    },
    
    	hover_star: function(e, which_star) {
		average = this.parentNode.title.split(/:\s*/)[1].split(".");
		notifytext = YAHOO.util.Dom.getElementsByClassName( 'notifytext' , 'div' , this.parentNode);
        /* hovers the selected star plus every star before it */
		thisstars = YAHOO.util.Dom.getElementsByClassName( 'star' , 'div' , this.parentNode);
		
		
        for (var i=0; i<=which_star; i++) {
			star = thisstars[i];
            var a = star.firstChild;			
			notifytext[0].innerHTML = rating.description[i];

		  if(notifytext[0].offsetHeight < 16){
			YAHOO.util.Dom.setStyle(notifytext[0], 'font-size', '11px');  
			YAHOO.util.Dom.setStyle(notifytext[0], 'line-height', '14px');  
		  }else{
			YAHOO.util.Dom.setStyle(notifytext[0], 'font-size', '10px');  
			YAHOO.util.Dom.setStyle(notifytext[0], 'line-height', '10px');  
			}			
			
			
            notify_display = new YAHOO.util.Anim(notifytext[0], { opacity: { to: 1 } }, 0.25, YAHOO.util.Easing.easeIn);
            notify_display.animate(); 
			
            YAHOO.util.Dom.addClass(thisstars[i], 'hover');
            YAHOO.util.Dom.setStyle(a, 'width', '100%');
        }
		
    },
    
    reset_stars: function(e, rating) {
        /* Resets the status of each star */
        
        // if form is not submitted, the number of stars on depends on the 
        // given average value
       if (submitted == false) {
			 var stars_on = average[0];
            if (average[1] >= 0)
                stars_on = parseInt(average[0]);
            var last_star_width = average[1] + '0%';
        } else {
            // if the form is submitted, then submitted number stays on
            var stars_on = submitted;
            var last_star_width = '100%';
        }
        // cycle trought 1..5 stars
        for (var i=0; i<5; i++) {
            thisstars = YAHOO.util.Dom.getElementsByClassName( 'star' , 'div' , this.parentNode);
			star = thisstars[i];
            var a = star.firstChild;
			
            // first, reset all stars
            YAHOO.util.Dom.removeClass(star, 'hover');
            YAHOO.util.Dom.removeClass(star, 'on');

            // for every star that should be on, turn them on
			
            if (i<=stars_on && !YAHOO.util.Dom.hasClass(star, 'on'))
                YAHOO.util.Dom.addClass(star, 'on');

            // and for the last one, set width if needed
           if (i == stars_on)
               YAHOO.util.Dom.setStyle(a, 'width', last_star_width);
        }
			submitted = false;
			notifytext = YAHOO.util.Dom.getElementsByClassName( 'notifytext' , 'div' , this.parentNode);
			notify_display = new YAHOO.util.Anim(notifytext[0], { opacity: { to: 0 } }, 0.25, YAHOO.util.Easing.easeIn);
            notify_display.animate();    
    },
	
	remListeners: function(star) {
		//Nachdem einmal geratet wurde, werden alle Listeners dieses Rating gelöscht.
		removeStarListener = YAHOO.util.Dom.getElementsByClassName( 'star' , 'div' , star.parentNode);
		YAHOO.util.Event.removeListener(removeStarListener);
		YAHOO.util.Dom.addClass(YAHOO.util.Dom.getAncestorByClassName(star,'rating'),'norating');
	},
    
    submit_rating: function(e, num) {
		rating.remListeners(this);
		
		ratinginfo = YAHOO.util.Dom.getElementsByClassName( 'ratinginfo' , 'div' , this.parentNode);
		notifytext = YAHOO.util.Dom.getElementsByClassName( 'notifytext' , 'div' , this.parentNode);
		ratinghits = YAHOO.util.Dom.getElementsByClassName( 'ratinghits' , 'div' , this.parentNode);
		
		ratingdata = ratinginfo[0].innerHTML.split("_");
		
		
		if(ratingdata[0] != "p" && ratingdata[0] != "t"){
			//Rating im Imperia Bereich hat 4 Variablen
			rate_BcCoreApp = ratingdata[0];
			rate_action = ratingdata[1];
			//rate_profileId = ratingdata[2];
			rate_articleType = ratingdata[2];
			rate_articleId = ratingdata[3];
			
			
			// If the form has not been submitted yet 
			// and submission is not in progress
			if (submitted == false) {
				  average = [num+1, 0];
				// change the statustext div and show it
				notifytext[0].innerHTML = ratingSaving;
				
			  if(notifytext[0].offsetHeight < 16){
				YAHOO.util.Dom.setStyle(notifytext[0], 'font-size', '11px');  
				YAHOO.util.Dom.setStyle(notifytext[0], 'line-height', '14px');  
			  }else{
				YAHOO.util.Dom.setStyle(notifytext[0], 'font-size', '10px');  
				YAHOO.util.Dom.setStyle(notifytext[0], 'line-height', '10px');  
				}				
				
				notify_display = new YAHOO.util.Anim(notifytext[0], { opacity: { to: 1 } }, 0.25, YAHOO.util.Easing.easeIn);
				notify_display.animate();
				//submit the raiting info to sitestat
				//articleType ist the same for profinews and profinews-comment, so we have to check the ID
				var regex = /.*\/.*/;
				if (regex.test(rate_articleId)){
					trigger_sitestat('pt_handwerk-industrie.community.nopi.profi-news.'+themenID+'.'+articleID+'.rating.'+(num+1));
				}else{
					trigger_sitestat('pt_handwerk-industrie.community.nopi.profi-news.'+themenID+'.'+articleID+'.comment.rating.'+(num+1));
				}
				
				// change the rating-value for the form and submit the form
				var c = YAHOO.util.Connect.asyncRequest('GET','?app='+rate_BcCoreApp+'&action='+rate_action+'&articleType='+rate_articleType+'&articleId='+rate_articleId+'&value='+num, rating.rate_callback);
			}
		}else{
			//Rating im Forum Bereich hat 5 Variablen
			ratingdata = ratinginfo[0].innerHTML.split("_");
			rate_type = ratingdata[0];
			rate_id = ratingdata[1];
			rate_user = ratingdata[2];
			rate_forum_id =  ratingdata[3];
			rate_thread_id = ratingdata[4];
	
			// If the form has not been submitted yet 
			// and submission is not in progress
			if (submitted == false) {
				  // After the form is submitted, instead of old average, show
				  // submitted number of stars selected
				  average = [num, 0];
				// change the statustext div and show it
				notifytext[0].innerHTML = ratingSaving;
				
			  if(notifytext[0].offsetHeight < 16){
				YAHOO.util.Dom.setStyle(notifytext[0], 'font-size', '11px');  
				YAHOO.util.Dom.setStyle(notifytext[0], 'line-height', '14px');  
			  }else{
				YAHOO.util.Dom.setStyle(notifytext[0], 'font-size', '10px');  
				YAHOO.util.Dom.setStyle(notifytext[0], 'line-height', '10px');  
				}				
				
				notify_display = new YAHOO.util.Anim(notifytext[0], { opacity: { to: 1 } }, 0.25, YAHOO.util.Easing.easeIn);
				notify_display.animate();       
				//submit the rating info to sitestat if a posting was rated
				if (rate_type == 'p'){
					trigger_sitestat('pt_handwerk-industrie.community.nopi.board.'+rate_forum_id+'.'+rate_thread_id+'.rating.'+(num+1));
				}
				// change the rating-value for the form and submit the form
				var c = YAHOO.util.Connect.asyncRequest('GET', boardPathApp+'?fdo=rate&type='+rate_type+'&id='+rate_id+'&user='+rate_user+'&rating='+num, rating.rate_callback);
			}			
		}
    },
    rate_callback: {
        success: function(o) {
            // release the form to normal status and change the statustext
			
			//zeigt direkt den aktuellen RatingHits stand an.
			ratingHitsFull = ratinghits[0].innerHTML;
			ratingHitsNr = ratingHitsFull.slice(1,(ratingHitsFull.length-1));
			ratinghits[0].innerHTML = '('+(parseInt(ratingHitsNr)+parseInt(1))+ratingTxt+')';					
			
            submitted = false;
            notifytext[0].innerHTML = ratingSaved; 
			
			  if(notifytext[0].offsetHeight < 16){
				YAHOO.util.Dom.setStyle(notifytext[0], 'font-size', '11px');  
				YAHOO.util.Dom.setStyle(notifytext[0], 'line-height', '14px');  
			  }else{
				YAHOO.util.Dom.setStyle(notifytext[0], 'font-size', '10px');  
				YAHOO.util.Dom.setStyle(notifytext[0], 'line-height', '10px');  
				}			
        },
        failure: function(o) { // we shouldn't ever go down this path.
            alert('Error: ' + o.status + " " + o.statusText );
        }
    }
}
//YAHOO.util.Event.addListener(window, 'load', rating.init);

