var Ratings = Class.create();
Ratings.prototype = {
	
	initialize: function() {
		Jq("#rating_list").show();
		this.registerListeners();
	},
	
	registerListeners: function() {
		Jq(".rating_option").click(this.handleItemClick.bind(this));
		Jq(".outer_rating").mouseover(this.handleItemHover.bind(this));
		Jq(".outer_rating").mouseout(this.handleItemHover.bind(this));
		Jq("#new_rating").jqm({onShow:this.registerModalListeners.bind(this),
								onHide:this.unRegisterModalListeners.bind(this)});
		Jq("#error_window").jqm();
		Jq("#rating_test").jqm({onShow:this.registerModalListeners.bind(this),
								onHide:this.unRegisterModalListeners.bind(this)});
		Jq("#remove_rating").jqm({onShow:this.registerModalListeners.bind(this),
								onHide:this.unRegisterModalListeners.bind(this)});
		Jq("#create_rating_link").click(function(e) {
			Jq("#new_rating").jqmShow();
		});
		
		
	},
	
	registerModalListeners: function(hash){
		hash.w.css('opacity',1).show(); 
		if(Jq("#rating_option_new"))
			Jq("#rating_option_new").click(this.handleItemClick.bind(this));
			
		if(Jq("#rating_test"))
			Jq("#rating_option_emailSendGo").click(this.handleItemClick.bind(this));
			
		if(Jq("#remove_rating")) 
			Jq("#rating_option_removeRating").click(this.handleItemClick.bind(this));
	},
	
	unRegisterModalListeners: function(hash) {
		hash.w.fadeOut('2000',function(){ hash.o.remove(); });
		Jq("#rating_option_new").unbind();
		Jq("#rating_option_emailSendGo").unbind();
		Jq("#rating_option_removeRating").unbind();
	},
	
	handleItemHover: function(e) {
		switch(e.type) {
			case 'mouseover':
				if(e.target.id.match(/outer_rating/)) {
					var action = e.target.id.replace("outer_rating_", "");
					var ratingID = action.split("_");
					action = ratingID[0];
					ratingID = ratingID[1];
					$$(".outer_rating").each(function(i) {
						$(i).removeClassName('active_rating');
					});
					$(e.target.id).addClassName('active_rating');	
				}
				
				break;
		}
		
	},
		
	handleItemClick: function(e) {	
		var action = e.target.id.replace("rating_option_", "");
		var ratingID = action.split("_");
		action = ratingID[0];
		ratingID = ratingID[1];
		this.clickedObj = {"id":ratingID,"action":action};
		switch(action) {
			case 'questions':
				new Questions(ratingID);
			break;
			
			case 'remove':
				Jq("#remove_rating").jqmShow();
				var ratingRemoveID = document.createElement('input');
				ratingRemoveID.id = 'ratingRemoveID';
				ratingRemoveID.type = 'hidden';
				ratingRemoveID.name = 'ratingID';
				ratingRemoveID.value = this.clickedObj.id;
				$('remove_rating').appendChild(ratingRemoveID);
			break;
			
			case 'removeRating':
				Jq("#remove_rating").jqmHide();
				ajaxRequestor('removeRating', 'rid='+Jq("#ratingRemoveID").attr('value'), this.handleRemoveRating.bind(this), this.handleRemoveRating.bind(this));
				
			break;
			
			case 'new':
				if(Jq("#rating_name_label_input").attr('value') == "") {
					Jq("#rating_name_info").text("Required");
				}
				else {
					Jq("#new_rating").jqmHide();
					ajaxRequestor('newRating', 'name='+Jq("#rating_name_label_input").attr('value')+'&desc='+Jq("#rating_desc_label_input").attr('value'), this.handleNewRating, this.handleNewRating);
				}
			break;
			
			case 'test':
				Jq("#rating_test").jqmShow();
				var ratingTestID = document.createElement('input');
				ratingTestID.id = 'ratingTestID';
				ratingTestID.type = 'hidden';
				ratingTestID.name = 'ratingID';
				ratingTestID.value = this.clickedObj.id;
				$('rating_test').appendChild(ratingTestID);
			break;
			
			case 'emailSendGo':
				if(Jq("#rating_test_email_input").attr('value') == "") {
					Jq("#rating_test_info").text("Required");
				}
				else {
					Jq("#rating_test").jqmHide();
					ajaxRequestor('testRating', 'email='+Jq("#rating_test_email_input").attr('value')+'&rid='+Jq("#ratingTestID").attr('value'), this.handleTestRating, this.handleTestRating);
				}
				
			break;
		}
		return false;
	},
	
	handleTestRating: function(response) {

	},
	
	handleRemoveRating: function(response) {
		loadPage('ratings');
	},
	
	handleNewRating: function(response) {
		if(response.response.match(/true/)) {
			Jq("#new_rating").jqmHide();
			loadPage('ratings');
		}
		else {
			Jq("#error_window").text("To add additional ratings, please upgrade your account.  Thanks!");
			Jq("#error_window").jqmShow();
		}

	},
	
	handleRatingOption: function() {

	}
}
