YAHOO.namespace("ratingWidget");
var DOM = YAHOO.util.Dom;
var EVT = YAHOO.util.Event;

YAHOO.ratingWidget.rater = function(raterContainer, gameName) {
	this.init(raterContainer, gameName);
};

YAHOO.ratingWidget.rater.prototype = {
	gameName : null,
	liElems : null,
	raterElem : null,
	dataUrl : '/Includes/gatherRatings.php',
	
	init: function(raterContainer, gameName) {
		this.gameName = gameName.toLowerCase().replace(/[\W_]/g,"");
		var me = this;
		this.raterElem = DOM.get(raterContainer);
		this.liElems = DOM.getElementsBy( function(ele) { return true; }, 'li', this.raterElem);
		//this.liElems.shift(); // don't need the first li elem
		
		function rateCallback1(e) { EVT.preventDefault(e); me.doRate(me.liElems[1]), me; }
		EVT.on(this.liElems[1], 'click', rateCallback1);
		function rateCallback2(e) { EVT.preventDefault(e); me.doRate(me.liElems[2]), me; }
		EVT.on(this.liElems[2], 'click', rateCallback2);
		function rateCallback3(e) { EVT.preventDefault(e); me.doRate(me.liElems[3]), me; }
		EVT.on(this.liElems[3], 'click', rateCallback3);
		function rateCallback4(e) { EVT.preventDefault(e); me.doRate(me.liElems[4]), me; }
		EVT.on(this.liElems[4], 'click', rateCallback4);
		function rateCallback5(e) { EVT.preventDefault(e); me.doRate(me.liElems[5]), me; }
		EVT.on(this.liElems[5], 'click', rateCallback5);
	},
	
	doRate: function(ele) {
		if(!this.readCookie(this.gameName + 'freearcade')) {
			var anchor = DOM.getFirstChild(ele);
			var rate = anchor.childNodes[0].nodeValue;
			
			var callback = {
				success : this.handleSuccess,
				failure : this.handleFailure,
				argument: { name: this.gameName },
				scope: this
			}
			var request = YAHOO.util.Connect.asyncRequest('POST', this.dataUrl, callback, 'game=' + this.gameName + '&rate=' + rate);
		} else {
			alert('You already voted!');
		}
	},
	
	handleSuccess: function(o) {
		if(o.responseText !== undefined) {
			if(o.responseText != 'e') {
				var data = eval('(' + o.responseText + ')');
				var gameName = o.argument.name;
				var containerKids = DOM.getChildren(this.raterElem);
				containerKids[0].firstChild.nodeValue = 'Current Rating: '+data.game[0].rating+'/'+data.game[0].ratingCount+' Votes | ';
				
				var ul = DOM.getChildren(containerKids[1])[0];
				DOM.setStyle(this.liElems[0], 'width', (data.game[0].rating * 10) + 'px');
				for(var li in this.liElems) {
					if(li != 0)
						ul.removeChild(this.liElems[li]);
				}
					
				this.createCookie(gameName + 'freearcade', 'voted', 14, 'freearcade.com');
			}
		}
	},
	
	handleFailure: function(o) {
		if(o.responseText !== undefined) {
			alert('Whoops, something went amiss.\nWe\'re working on it though, try again soon.');
		}
	},
	
	createCookie: function(name, value, days, domain) {
	  if(days) {
	    var date = new Date();
	    date.setTime(date.getTime() + (days*24*60*60*1000));
	    var expires = "; expires=" + date.toGMTString();
	  }
	  else var expires = "";
	  document.cookie = name + "=" + value + expires + "; path=/; domain=" + domain;
	},

	readCookie: function(name) {
	  var nameEQ = name + "=";
	  var ca = document.cookie.split(';');
	  for(var i = 0;i < ca.length;i++) {
	    var c = ca[i];
	    while(c.charAt(0)==' ') c = c.substring(1, c.length);
	      if(c.indexOf(nameEQ) == 0) return(true);//return(c.substring(nameEQ.length, c.length));
	  }
	  return(false);
	}
}