(function(){
	var DOM = YAHOO.util.Dom,
		Signal = YAHOO.util.Event,
		Async = YAHOO.util.Connect,
		Cookie = YAHOO.util.Cookie;
		
	YAHOO.namespace('widget.starRate');
	
	YAHOO.widget.starRate = function(id,newsID){
		var initState = [];
		var el = DOM.get(id);
		var initChildren = el.getElementsByTagName('div');		
		for(var i=0,len = initChildren.length;i<len;i++){
			initState[i] = initChildren[i].className;
		}
		Signal.on(id,'mouseover',function(e){
			var srcTarget = Signal.getTarget(e);
			srcTarget.className = 'star_full';
			//need to set all the prev siblings to star_full;
			//need to set all the next siblings to star empty
			if(srcTarget.previousSibling){
				while(srcTarget.previousSibling){
					if(srcTarget.nodeType == 1){
						srcTarget.className = "star_full";						
					} 
					srcTarget = srcTarget.previousSibling;					
				}
				srcTarget.className = 'star_full';
			}
			srcTarget = Signal.getTarget(e);
			while(srcTarget.nextSibling){
				srcTarget = srcTarget.nextSibling;
				if(srcTarget.nodeType == 1){
					srcTarget.className = "star_empty";
				}				
			}
			Signal.stopEvent(e);
		});
		Signal.on('vot_line','mouseout',function(e){
			var srcTarget = Signal.getTarget(e);			
			if(srcTarget.className != 'star_full' || srcTarget.className != 'star_empty' || srcTarget.className != 'star_half'){
				for(var i=0,len = initChildren.length;i<len;i++){
					initChildren[i].className = initState[i];
				}
			}
		});
		var handleSuccess = function(o){
			var json = YAHOO.lang.JSON.parse(o.responseText);			
			if (json.failure){ 
				handleFailure(o);
				json = null;
				return;
			}
			var score = DOM.get('score_text');
//			while(score.nodeType != 1){
//				score = score.previousSibling
//			}
			//set the score
			score.innerHTML = json.score+' <span>'+json.totalVotes+' votes</span>';
			//update the stars
			var children = el.getElementsByTagName('div');
			for(var i=0;i< 10;i++){
				children[i].className = 'star_empty';
				initState[i] = 'star_empty';
			}//>
			var foo = (parseFloat(json.score) * 100) % 100;
			var skip = 0; 
			if(foo >= 50){
				children[json.scoreRound-1].className = 'star_full';
				initState[json.scoreRound-1] = 'star_full';
				skip = json.scoreRound-1;
			}else{
				children[json.scoreStar-1].className = 'star_full';
				initState[json.scoreStar-1] = 'star_full';
				skip = json.scoreStar-1;
			}
			for(var i=0,len = initState.length; i< len;i++){
				if(i == skip){
					break;
				}
				children[i].className = 'star_full';
				initState[i] = 'star_full';
			}

	
			el.nextSibling.innerHTML = 'Voted.';
			//DOM.get('vot_stats_l').getElementsByTagName('span')[0].innerHTML = json.totalVotes;
		};
		var handleFailure = function(o){
			var json = YAHOO.lang.JSON.parse(o.responseText);
			el.nextSibling.innerHTML = json.error;
			json = null;
		};		
		Signal.on(id,"click",function(e){
			var srcTarget = Signal.getTarget(e);
			var value = Cookie.get("newsrate");
			if(value == null){
				value = newsID;				
			}else{
				value = value.split('|');
				for(var i=0,len = value.length;i<len;i++){
					if(value[i] == newsID){
						DOM.removeClass(el.nextSibling,'hide');
						el.nextSibling.innerHTML = 'Voted!';
						Signal.stopEvent(e);
						return;
					}	
				}
				//if we reach this point we did not vote for this article yet
				value[value.length] = newsID;
				value = value.join('|');
			}
			//set the cookie
			YAHOO.util.Cookie.set("newsrate",value); 
			DOM.removeClass(el.nextSibling,'hide');
			var callback =  {  
			  success:handleSuccess,  
			  failure: handleFailure
			};
			var request = Async.asyncRequest('POST', 'index_ajax.php', callback, 'act=star-vote&nid='+newsID+'&vote='+srcTarget.getAttribute('star_number'));
		});
	};	
})()