
var StoryThumbsWidget = Class.create();
StoryThumbsWidget.prototype = {
	VOTES : { THUMBS_UP : 1, THUMBS_DOWN : 2, THUMBS_NONE : 3 },
	vote : 3,
	setOptions : function(options, stats) { 
		this.options = {
			widget:'thumbs'
		};
		this.stats = {
			score : 0,
			votes : 0
		};
		Object.extend(this.options, options || {});
		Object.extend(this.stats, stats || {});
	},
	initialize : function(id, DT, options, stats) {
		this.id = id;
		this.DT = DT;
		this.setOptions(options, stats);
		this.star = $A( $(this.options.widget).getElementsByClassName('star') ).first();					this.message_text = $A( $(this.options.widget).getElementsByClassName('message_text') ).first();
		this.up = $A( $(this.options.widget).getElementsByClassName('up') ).first();
		this.down = $A( $(this.options.widget).getElementsByClassName('down') ).first();		
		this.score = $A( $(this.options.widget).getElementsByClassName('score') ).first();
		this.votes = $A( $(this.options.widget).getElementsByClassName('votes') ).first();
		Event.observe(this.up, 'click', this.handleUp.bind(this));
		Event.observe(this.down, 'click', this.handleDown.bind(this));
	},
	handleUp : function() {
		if (currentUser.id == '') {
			alert("Login or register to vote!");
			return;
		}
		switch (this.vote) {
			case this.VOTES.THUMBS_UP:
				this.vote = this.VOTES.THUMBS_NONE;
				this.stats.score -= 1;
				this.stats.votes -= 1;				break;
			case this.VOTES.THUMBS_DOWN:
				this.vote = this.VOTES.THUMBS_UP;
				this.stats.score += 1;				break;
			case this.VOTES.THUMBS_NONE:
				this.vote = this.VOTES.THUMBS_UP;
				this.stats.score += 1;
				this.stats.votes += 1;
				break;
		}
		this.paint();
		var params = "ID="+this.id+"&DT="+this.DT+"&vote="+this.vote;
		new Ajax.Request('/include/process/process_vote.asp', {parameters:params});
	},
	handleDown : function() {
		if (currentUser.id == '') {
			alert("Login or register to vote!");
			return;
		}
		switch (this.vote) {
			case this.VOTES.THUMBS_UP:
				this.vote = this.VOTES.THUMBS_DOWN;
				this.stats.score -= 1;
				break;
			case this.VOTES.THUMBS_DOWN:
				this.vote = this.VOTES.THUMBS_NONE;
				this.stats.votes -= 1;
				this.stats.score -= 1;				break;
			case this.VOTES.THUMBS_NONE:
				this.vote = this.VOTES.THUMBS_DOWN;
				this.stats.votes += 1;
				this.stats.score -= 1;
				break;
		}
		this.paint();		
		var params = "ID="+this.id+"&DT="+this.DT+"&vote="+this.vote;
		new Ajax.Request('/include/process/process_vote.asp', {parameters:params});
	},
	paint : function() {
		Element.removeClassName(this.up, "on");
		Element.removeClassName(this.down, "on");
		Element.removeClassName(this.up, "off");
		Element.removeClassName(this.down, "off");

		this.message_text.update("VOTE COUNTED");
		this.up.style.visibility='hidden';
		this.down.style.visibility='hidden';

		switch (this.vote) {
			case this.VOTES.THUMBS_UP:
				Element.removeClassName(this.up, "off");
				Element.removeClassName(this.down, "on");
				Element.addClassName(this.up, "on");
				Element.addClassName(this.down, "off");
				this.star.update("<img src=/include/images/stars/10_star.png>");							break;
			case this.VOTES.THUMBS_DOWN:
				Element.removeClassName(this.up, "on");
				Element.removeClassName(this.down, "off");
				Element.addClassName(this.up, "off");
				Element.addClassName(this.down, "on");
				this.star.update("<img src=/include/images/stars/0_star.png>");							break;
			case this.VOTES.THUMBS_NONE:
				Element.removeClassName(this.up, "on");
				Element.removeClassName(this.down, "on");
				Element.addClassName(this.up, "off");
				Element.addClassName(this.down, "off");
				break;
		}
		if (this.stats.score >= 0) {
			//this.score.update("+"+this.stats.score);
			this.score.update("");
		} else {
			//this.score.update(""+this.stats.score);
			this.score.update("");
		}
		this.votes.update(""+this.stats.votes+"");

	}
};

var FavoritesLink = Class.create();
FavoritesLink.prototype = {
	STATES : { READY : 0, SAVING : 1, SAVED : 2 },
	initialize : function(favoritesLink, favoritesSavingView, favoritesSavedView) {
		this.state = this.STATES.READY;
		this.favoritesLink = favoritesLink;
		this.favoritesSavingView = favoritesSavingView;
		this.favoritesSavedView = favoritesSavedView;
	},
	handleAdd : function(DT,ID) {
		if (currentUser.id == '') {
			alert("Please login to save favorites."); 					
		}
		this.state = this.STATES.SAVING;
		this.paint();
		var params = "DT="+DT+"&ID="+ID;
		new Ajax.Request('/include/process/process_favourite.asp', {parameters:params, asynchronous:true, onComplete:this.processAdd.bind(this)});
	},
	processAdd : function(response) {
		this.state = this.STATES.SAVED;
		$(this.favoritesSavedView).update(response.responseText);
		this.paint();
	},
	paint : function() {
		switch(this.state) {
			case this.STATES.READY:
				Element.hide($(this.favoritesSavingView));
				Element.hide($(this.favoritesSavedView));
				Element.show($(this.favoritesLink));
				break;
			case this.STATES.SAVING:
				Element.hide($(this.favoritesLink));
				Element.hide($(this.favoritesSavedView));
				Element.show($(this.favoritesSavingView));
				break;
			case this.STATES.SAVED:
				Element.hide($(this.favoritesLink));
				Element.hide($(this.favoritesSavingView));
				Element.show($(this.favoritesSavedView));
				break;
		}
	}
};
