

var filmography = {
	showAll : function() {
		$('filmographyLink').hide();
		Effect.BlindDown('filmography');
	}
};
var bioWidget = {
	showMore : function() {
		Element.hide('readMoreLink');
		Element.show('extraBio');
		Element.show('hideMoreLink');
	},
	hideMore : function() {
		Element.show('readMoreLink');
		Element.hide('extraBio');
		Element.hide('hideMoreLink');
	}
};

/*--------------------------------------------------------------------------*/
/* Movie List Link Widget
/*--------------------------------------------------------------------------*/
var ListLink = Class.create();
ListLink.prototype = {
	STATES : { READY : 0, SAVING : 1, TIMEOUT : 2, FAILURE : 3, SAVED : 4 },
	initialize : function(link, actor) {
		this.state = this.STATES.READY;
		this.link = link;
		this.actor = actor;
		this.onClickHandler = this.onClick.bindAsEventListener(this);
		Event.observe(this.link, "click", this.onClickHandler);
	},
	onClick : function(event) {
		if (currentUser.isLoggedIn()) {
			Event.stop(event);
			Event.stopObserving(this.link, "click", this.onClickHandler);
			var params = "actorid="+this.actor+"&listId=FAV";
			new Ajax.Request('/favlist/addactor', {parameters:params, onSuccess:this.onSuccess.bind(this), onFailure:this.onFailure.bind(this), onTimeout:this.onTimeout.bind(this)});
			this.state = this.STATES.SAVING;
			this.paint();
		}
	},
	onSuccess : function(event) {
		this.state = this.STATES.SAVED;
		this.paint();
	},
	onFailure : function() {
		this.state = this.STATES.FAILURE;
		this.paint();	
	},
	onTimeout : function() {
		this.state = this.STATES.TIMEOUT;
		this.paint();	
	},
	paint : function() {
		switch(this.state) {
			case this.STATES.READY:
				$(this.link).update("Add to My Favorites");
				break;
			case this.STATES.SAVING:
				$(this.link).href = "/listsAction.do?viewFavoriteActorList=";
				$(this.link).update("Saving...");
				break;
			case this.STATES.FAILURE:
				document.location = '/favlist/addactor';
				break;
			case this.STATES.TIMEOUT:
				document.location = '/listsAction.do?listAction=addFavoriteActor&actorId='+this.actor;
				break;
			case this.STATES.SAVED:
				$(this.link).href = "/listsAction.do?viewFavoriteActorList=";
				$(this.link).update("Saved! - View My Favorite Actors");
				break;
		}
	}
}

var ActorListWidget = Class.create();
ActorListWidget.prototype = {
	initialize : function(listSelectView, listSavingView) {
		this.listSelectView = listSelectView;
		this.listSavingView = listSavingView;
		this.state = ListWidgetStates.READY;
	},
	handleAdd : function(actorId, listId) {
		if (listId == '---') {
			// do nothing
		} else if (!currentUser.isLoggedIn()) {
			alert("Whoops, you'll need to register or sign-in first.");
		} else if (listId == 'NEW') {
			document.location = '/listsAction.do?addActorList=&type=USR&actorId='+actorId;
		} else {
			this.state = ListWidgetStates.SAVING;
			this.paint();
			var params = "service=addActor&actorId="+actorId+"&uid="+currentUser.id+"&listId="+listId;
			new Ajax.Request('/list.sv', {parameters:params, asynchronous:true, onComplete:this.processAdd.bind(this)});
		}
	},
	processAdd : function(response) {
		floatie.show(response.responseText);
		this.state = ListWidgetStates.READY;
		this.paint();
	},
	paint : function() {
		switch(this.state) {
			case ListWidgetStates.READY:
				Element.show($(this.listSelectView));
				Element.hide($(this.listSavingView));
				break;
			case ListWidgetStates.SAVING:
				Element.hide($(this.listSelectView));
				Element.show($(this.listSavingView));
				break;
		}
	}
};