	


var DvdGalleryLinks = Class.create();
DvdGalleryLinks.prototype = {
	STATES : { READY : 0, LOADING : 1 , TIMEOUT : 2, FAILURE : 3 },
	TEMPLATES : { 
		LOADING : "<p class=\"loading\">Loading movies...</p>",
		TIMEOUT : "<p class=\"error\">Hmmm, no response...Please refresh your browser and try again.</p>",
		FAILURE : "<p class=\"error\">Whoops, our servers coughed.  Please refresh your browser and try again.</p>"
	},
	initialize : function(language) {
		this.galleries = $A( $('browse').getElementsByTagName('A') );
		this.state = this.STATES.READY;
		this.language = language;
		this.bind();
	},
	bind : function() {
		this.galleries.each(
			function(g) { 
				Event.observe(g, "click", this.onClick.bindAsEventListener(this));
			}.bind(this)
		);
	},
	onClick : function(event) {
		Event.stop(event);
		if (this.state != this.STATES.LOADING) {
			this.link = Event.element(event);
			this.state = this.STATES.LOADING;
			this.paint();
			$('gallery').value = Element.readAttribute(this.link, "gallery");
			$('page').value = "1";
			var params = Form.serialize('filters');
			new Ajax.Request('/' + this.language + '/movies/browse', { parameters : params , onSuccess:this.onSuccess.bind(this), onFailure:this.onFailure.bind(this), onTimeout:this.onTimeout.bind(this) });
		}
	},
	onSuccess : function(response) {
		$('movies').update(response.responseText);
		new DvdPaginationLinks(this.language);
		new DvdSortingLinks(this.language);
		this.state = this.STATES.READY;
		this.paint();
	},
	onFailure : function() {
		this.state = this.STATES.FAILURE;
		this.paint();
	},
	onTimeout : function() {
		this.state = this.STATES.TIMEOUT;
		this.paint();
	},
	paint : function() {
		this.galleries.each(
			function(l) { 
				Element.removeClassName(l.parentNode, "selected"); 
			}
		);
		Element.addClassName(this.link.parentNode, "selected");		
		switch (this.state) {
			case this.STATES.READY: 
				break;
			case this.STATES.LOADING: 
				$('movies').update(this.TEMPLATES.LOADING);
				break;
			case this.STATS.TIMEOUT: 
				$('movies').update(this.TEMPLATES.TIMEOUT);
				break;
			case this.STATES.FAILURE:
				$('movies').update(this.TEMPLATES.FAILURE);
				break;
		}
	}
};

var descWidget = {
	showMore : function() {
		Element.hide('readMoreLink');
		Element.show('extraDesc');
		Element.show('hideMoreLink');
	},
	hideMore : function() {
		Element.show('readMoreLink');
		Element.hide('extraDesc');
		Element.hide('hideMoreLink');
	}
};


var DvdPaginationLinks = Class.create();
DvdPaginationLinks.prototype = {
	STATES : { READY : 0, LOADING : 1 , TIMEOUT : 2, FAILURE : 3 },
	TEMPLATES : { 
		LOADING : "<p class=\"loading\">Loading movies...</p>",
		TIMEOUT : "<p class=\"error\">Hmmm, no response...Please refresh your browser and try again.</p>",
		FAILURE : "<p class=\"error\">Whoops, our servers coughed.  Please refresh your browser and try again.</p>"
	},
	initialize : function(language) {
		if ($('pagination') != null) {
			this.links = $A( $('pagination').getElementsByTagName('A') );
			this.state = this.STATES.READY;
		  this.language = language;
			this.bind();
		}
	},
	bind : function() {
		this.links.each(
			function(g) { 
				Event.observe(g, "click", this.onClick.bindAsEventListener(this));
			}.bind(this)
		);
	},
	onClick : function(event) {
		Event.stop(event);
		if (this.state != this.STATES.LOADING) {
			this.link = Event.element(event);
			this.page = Element.readAttribute(this.link, "page");
			this.state = this.STATES.LOADING;
			this.paint();
			$('page').value = this.page;
			var params = Form.serialize('filters');
			new Ajax.Request('/' + this.language + '/movies/browse', { parameters : params , onSuccess:this.onSuccess.bind(this), onFailure:this.onFailure.bind(this), onTimeout:this.onTimeout.bind(this) });
		}
	},
	onSuccess : function(response) {
		$('movies').update(response.responseText);
		new DvdPaginationLinks(this.language);
		new DvdSortingLinks(this.language);
		this.state = this.STATES.READY;
		this.paint();
	},
	onFailure : function() {
		this.state = this.STATES.FAILURE;
		this.paint();
	},
	onTimeout : function() {
		this.state = this.STATES.TIMEOUT;
		this.paint();
	},
	paint : function() {
		this.links.each(
			function(l) { 
				Element.removeClassName(l, "selected"); 
			}
		);
		Element.addClassName(this.link, "selected");		
		switch (this.state) {
			case this.STATES.READY: 
				break;
			case this.STATES.LOADING: 
				$('movies').update(this.TEMPLATES.LOADING);
				break;
			case this.STATS.TIMEOUT: 
				$('movies').update(this.TEMPLATES.TIMEOUT);
				break;
			case this.STATES.FAILURE:
				$('movies').update(this.TEMPLATES.FAILURE);
				break;
		}
	}
};

var DvdSortingLinks = Class.create();
DvdSortingLinks.prototype = {
	STATES : { READY : 0, LOADING : 1 , TIMEOUT : 2, FAILURE : 3 },
	TEMPLATES : { 
		LOADING : "<p class=\"loading\">Loading movies...</p>",
		TIMEOUT : "<p class=\"error\">Hmmm, no response...Please refresh your browser and try again.</p>",
		FAILURE : "<p class=\"error\">Whoops, our servers coughed.  Please refresh your browser and try again.</p>"
	},
	initialize : function(language) {
		this.links = $A( $('sorting').getElementsByTagName('A') );
		this.state = this.STATES.READY;
		this.language = language;
		this.bind();
	},
	bind : function() {
		this.links.each(
			function(g) { 
				Event.observe(g, "click", this.onClick.bindAsEventListener(this));
			}.bind(this)
		);
	},
	onClick : function(event) {
		Event.stop(event);
		if (this.state != this.STATES.LOADING) {
			this.link = Event.element(event);
			this.sort = Element.readAttribute(this.link, "sort");
			this.state = this.STATES.LOADING;
			this.paint();
			$('sort').value = this.sort;
			$('page').value = "1";
			var params = Form.serialize('filters');
			new Ajax.Request('/' + this.language + '/movies/browse', { parameters : params , onSuccess:this.onSuccess.bind(this), onFailure:this.onFailure.bind(this), onTimeout:this.onTimeout.bind(this) });
		}
	},
	onSuccess : function(response) {
		$('movies').update(response.responseText);
		new DvdPaginationLinks(this.language);
		new DvdSortingLinks(this.language);
		this.state = this.STATES.READY;
		this.paint();
		urchinTracker('MoviesDVDBrowse');
	},
	onFailure : function() {
		this.state = this.STATES.FAILURE;
		this.paint();
	},
	onTimeout : function() {
		this.state = this.STATES.TIMEOUT;
		this.paint();
	},
	paint : function() {
		this.links.each(
			function(l) { 
				Element.removeClassName(l, "selected"); 
			}
		);
		Element.addClassName(this.link, "selected");		
		switch (this.state) {
			case this.STATES.READY: 
				break;
			case this.STATES.LOADING: 
				$('movies').update(this.TEMPLATES.LOADING);
				break;
			case this.STATS.TIMEOUT: 
				$('movies').update(this.TEMPLATES.TIMEOUT);
				break;
			case this.STATES.FAILURE:
				$('movies').update(this.TEMPLATES.FAILURE);
				break;
		}
	}
};

var DvdFilterLinks = Class.create();
DvdFilterLinks.prototype = {
	STATES : { READY : 0, LOADING : 1 , TIMEOUT : 2, FAILURE : 3 },
	TEMPLATES : { 
		LOADING : "<p class=\"loading\">Loading movies...</p>",
		TIMEOUT : "<p class=\"error\">Hmmm, no response...Please refresh your browser and try again.</p>",
		FAILURE : "<p class=\"error\">Whoops, our servers coughed.  Please refresh your browser and try again.</p>"
	},
	initialize : function() {
		Event.observe('filterMinRatings', "click", this.onClick.bindAsEventListener(this));
		if ($('filterAlreadyRated') != null) {
			Event.observe('filterAlreadyRated', "click", this.onClick.bindAsEventListener(this));
		}
		this.state = this.STATES.READY;
	},
	onClick : function(event) {
		if (this.state != this.STATES.LOADING) {
			this.state = this.STATES.LOADING;
			this.paint();
			$('page').value = "1";
			var params = Form.serialize('filters');
			new Ajax.Request('/movie.sv', { parameters : params , onSuccess:this.onSuccess.bind(this), onFailure:this.onFailure.bind(this), onTimeout:this.onTimeout.bind(this) });
		}
	},
	onSuccess : function(response) {
		$('movies').update(response.responseText);
		new DvdPaginationLinks(this.language);
		new DvdSortingLinks(this.language);
		this.state = this.STATES.READY;
		this.paint();
		urchinTracker('MoviesDVDBrowse');
	},
	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: 
				break;
			case this.STATES.LOADING: 
				$('movies').update(this.TEMPLATES.LOADING);
				break;
			case this.STATS.TIMEOUT: 
				$('movies').update(this.TEMPLATES.TIMEOUT);
				break;
			case this.STATES.FAILURE:
				$('movies').update(this.TEMPLATES.FAILURE);
				break;
		}
	}
};

var adWidget = {
	dirty : false,
	timer : null,
	handleRefresh : function() {
		if (this.dirty) {
			var params = "getAd=&size=300x250";
			new Ajax.Updater('ad1', '/ad.do', {parameters:params, evalScripts:false});			
			this.dirty = false;
			this.timer = setTimeout(function() { adWidget.dirty = true; }, 20000);
		} else {
			if (this.timer == null) {
				this.timer = setTimeout(function() { adWidget.dirty = true; }, 20000);
			}
		}
	}
};
adWidget.timer = setTimeout(function() { adWidget.dirty = true; }, 20000);

var quickRateWidget = {
	STATES : { READY : 0, LOADING_BATCH : 1, LOADING_MOVIE : 2, EMPTY : 3 },
	state : 0,
	movies : new Array(),
	language : 1,
	index : -1,
	position : 0,
	handleBatch : function(language) {
		this.language = language;
		this.state = this.STATES.LOADING_BATCH;
		var params = "quickRateBatch=&position="+this.position;
		new Ajax.Request('/' + language + '/movies/quickrate', {parameters:params, onComplete:this.processBatch.bind(this)});
	},
	processBatch : function(response) {
		this.state = this.STATES.READY;
		response.responseText.evalScripts();
		if (this.movies.length > this.index + 1) {
			this.handleNext(this.language);
		} else {
			this.handleEmpty(response);
		}
	},
	handleEmpty : function (response) {
		this.states = this.STATES.EMPTY;
		$('panel').update( response.responseText );
	},
	handleNext : function() {
		if (this.index < this.movies.length-1) {
			this.state = this.STATES.LOADING_MOVIE;
			this.index += 1;
			var nextParams = "nextQuickRate=&movieId="+this.movies[this.index];
			new Ajax.Request('/' + this.language + '/movies/quickrate', {parameters:nextParams, onComplete:this.processNext.bind(this)});
			
			if (this.index-1 >= 0) {
				var lastParams = "lastQuickRate=&movieId="+this.movies[this.index-1];
				new Ajax.Request('/' + this.language + '/movies/quickrate', {parameters:lastParams, onComplete:this.processPrevious.bind(this)});
			}
		} else {
			this.handleBatch();
		}
	},
	handlePrevious : function() {
		if (this.index > 0) {
			this.index -= 1;
			var nextParams = "nextQuickRate=&movieId="+this.movies[this.index];
			new Ajax.Request('/' + this.language + '/movies/quickrate', {parameters:nextParams, evalScripts:true, onComplete:this.processNext.bind(this)});
			
			var lastParams = "lastQuickRate=&movieId="+this.movies[this.index-1];
			new Ajax.Request('/' + this.language + '/movies/quickrate', {parameters:lastParams, evalScripts:true, onComplete:this.processPrevious.bind(this)});
		}
	},
	processNext : function(response) {
		this.state = this.STATES.READY;
		$('panel').update( response.responseText );
		if (this.index > 0) {
			
		}
		//adWidget.handleRefresh();;
	},
	processPrevious : function(response) {
		$('results').update( response.responseText );	
	},
	paint : function() {
		switch (this.state) {
			case this.STATES.READY:
				break;
			case this.STATES.LOADING:
				break;
		}
	}
};


var synopsisWidget = {
	showMore : function() {
		Element.hide('readMoreLink');
		Element.show('extraSynopsis');
	}
};

var textWidget = {
	showMore : function(link, text, less) {
		$(link).hide();
		$(text).show();
		$(less).show();
	},
	hideMore : function(link, text, less) {
		$(link).show();
		$(text).hide();
		$(less).hide();
	}
};

var browseWidget = {
	STATES : { READY : 0, LOADING : 1 },
	genreId : 'new',
	sort : 'byRelease',
	filterMinRatings : "off",
	filterAlreadyRated : "off",
	page : 1,
	initialize : function(genreId, sort, filterMinRatings, filterAlreadyRated, page) {
		this.genreId = genreId;
		this.sort = sort;
		this.filterMinRatings = filterMinRatings;
		this.filterAlreadyRated = filterAlreadyRated;
		this.page = page;
	},
	handleGenreClick : function(genreId) {
		if (this.state != null && this.state == this.STATES.LOADING) { alert("Please wait while we process your request"); return; }
		this.state = this.STATES.LOADING;
		this.genreId = genreId;
		this.page = 1;
		this.paint();
		var params = this.serialize();
		new Ajax.Request('/movie.sv', {parameters:params, onSuccess:this.processSearchRequest.bind(this), onFailure:this.processForward.bind(this), onTimeout:this.processForward.bind(this)});
	},
	handleSortClick : function(sort) {
		if (this.state != null && this.state == this.STATES.LOADING) { alert("Please wait while we process your request"); return; }
		this.state = this.STATES.LOADING;
		this.sort = sort;
		this.page = 1;
		this.paint();

		var params = this.serialize();
		new Ajax.Request('/movie.sv', {parameters:params, onSuccess:this.processSearchRequest.bind(this), onFailure:this.processForward.bind(this)});
	},
	handleFilterClick : function() {
		if (this.state != null && this.state == this.STATES.LOADING) { alert("Please wait while we process your request"); return false; }
		
		if ("on" == $F('filterMinRatings')) {
			this.filterMinRatings = "on";
		} else {
			this.filterMinRatings = "off";			
		}
		
		if ("on" == $F('filterAlreadyRated')) {
			this.filterAlreadyRated = "on";
		} else {
			this.filterAlreadyRated = "off";
		}
		this.page = 1;
		this.state = this.STATES.LOADING;
		this.paint();

		var params = this.serialize();
		new Ajax.Request('/movie.sv', {parameters:params, onComplete:this.processSearchRequest.bind(this), onFailure:this.processForward.bind(this), onTimeout:this.processForward.bind(this)});
	},
	handePageClick : function(page) {
		if (this.state != null && this.state == this.STATES.LOADING) { alert("Please wait while we process your request"); return; }
		this.state = this.STATES.LOADING;
		this.page = page;
		this.paint();

		var params = this.serialize();
		new Ajax.Request('/movie.sv', {parameters:params, onComplete:this.processSearchRequest.bind(this), onFailure:this.processForward.bind(this), onTimeout:this.processForward.bind(this)});
	},
	processSearchRequest : function(response) {
		response.responseText.evalScripts(); //to initialize rating widgets
		$('scaffold').update( response.responseText );
		this.state = this.STATES.READY;
		this.paint();
		urchinTracker('MoviesDVDBrowse');
	},
	processForward : function() {
		document.location = '/movies.do?browseDvds='+this.serialize();
	},
	paint : function() {
		switch(this.state) {
			case this.STATES.READY:
				$('loading').hide();
				$('scaffold').show();
				break;
			case this.STATES.LOADING:
				$('scaffold').hide();
				$('loading').show();
				break;
		}
		$A($('listTypes').getElementsByTagName("li")).each( function(value, index) { 
			if (value.id == "genre"+browseWidget.genreId) {
				Element.addClassName(value, "selected");
			} else if (Element.hasClassName(value, "selected")) {
				Element.removeClassName(value, "selected");
			}
		} );

		$A($('genreList').getElementsByTagName("li")).each( function(value, index) { 
			if (value.id == "genre"+browseWidget.genreId) {
				Element.addClassName(value, "selected");
			} else if (Element.hasClassName(value, "selected")) {
				Element.removeClassName(value, "selected");
			}
		} );
		
		$A($('sortList').getElementsByTagName("li")).each( function(value, index) { 
			if (value.id == "sort"+browseWidget.sort) {
				Element.addClassName(value, "selected");
			} else if (Element.hasClassName(value, "selected")) {
				Element.removeClassName(value, "selected");
			}
		} );
	},
	serialize : function() {
		var params = "movieAction=browseMovies&genreId="+this.genreId+"&sort="+this.sort+"&pageNav="+this.page;
		if (this.filterMinRatings == "on") { params += "&filterMinRatings=" + this.filterMinRatings; }
		if (this.filterAlreadyRated == "on") { params += "&filterAlreadyRated=" + this.filterAlreadyRated; }
		return params;
	}
};

var previewWidget = {
	STATES : { READY : 0, LOADING : 1 },
	handlePreview : function(movieId) {
		this.state = this.STATES.LOADING;
		this.paint();
		var params = "movieAction=previewMovie&movieId="+movieId;
		new Ajax.Request('/movie.sv', {parameters:params, onComplete:this.processPreview.bind(this)});
	},
	processPreview : function(response) {
		$('preview').update(response.responseText);
		this.state = this.STATES.READY;
		this.paint();
	},
	paint : function() {
		switch(this.state) {
			case this.STATES.READY:
				$('previewLoading').hide();
				$('preview').show();
				break;
			case this.STATES.LOADING:
				$('preview').hide();
				$('previewLoading').show();
				break;
		}
	}
};


/*******************************************************************************
 SUGGESTION (LINK) VOTING
 *******************************************************************************/
var LinkVoteWidget = Class.create();
LinkVoteWidget.prototype = {
	STATES : { READY : 0, SAVING : 1 },
	initialize : function(movieId, similarMovieId, thumbsUp, thumbsDown, savingText, thumbs, statPanel) {
		this.movieId = movieId;
		this.similarMovieId = similarMovieId;
		this.thumbsUp = thumbsUp;
		this.thumbsDown = thumbsDown;
		this.thumbsImagePanel = 'match'+similarMovieId;
		this.savingText = savingText;
		this.thumbs = thumbs == undefined ? Constants.THUMBS_NONE : thumbs;
		this.statPanel = statPanel;
	},
	
	handleVoteUp : function(event) {
		this.state = this.STATES.SAVING;
		switch(this.thumbs) {
			case Constants.THUMBS_NONE: this.thumbs = Constants.THUMBS_UP; break
			case Constants.THUMBS_UP: this.thumbs = Constants.THUMBS_NONE; break
			case Constants.THUMBS_DOWN: this.thumbs = Constants.THUMBS_UP; break
		}
		this.paint();
		this.saveVote();
	},
	
	handleVoteDown : function(event) {
		this.state = this.STATES.SAVING;
		switch(this.thumbs) {
			case Constants.THUMBS_NONE: this.thumbs = Constants.THUMBS_DOWN; break
			case Constants.THUMBS_UP: this.thumbs = Constants.THUMBS_DOWN; break
			case Constants.THUMBS_DOWN: this.thumbs = Constants.THUMBS_NONE; break
		}
		this.paint();
		this.saveVote();
	},
	
	saveVote : function() {
		var params = "rateAction=doSuggestVote&movieId="+this.movieId+"&similarMovieId="+this.similarMovieId+"&thumbsId="+this.thumbs;
		new Ajax.Request('/rate.sv', {parameters:params, asynchronous:true, onComplete:this.processVote.bind(this)});
	},
	
	processVote : function(response) {
		$(this.statPanel).innerHTML = response.responseText;
		this.state = this.STATES.READY;
		this.paint();
	},
	
	paint : function() {
		
		switch(this.thumbs) {
			case Constants.THUMBS_NONE: 
				$(this.thumbsUp).style.border="1px transparent";
				$(this.thumbsDown).style.border="1px transparent";
				break;
			case Constants.THUMBS_UP: 
				$(this.thumbsUp).style.border="1px solid";	
				$(this.thumbsDown).style.border="1px transparent";	
				break;
			case Constants.THUMBS_DOWN: 
				$(this.thumbsUp).style.border="1px transparent";	
				$(this.thumbsDown).style.border="1px solid";
				break;
		}
	}
};



/**
 * common.widget.js
 */

// Common vars needed
var ratingSubmitQueue = new Array();
var ratingSubmitQueueLength = 0;
var ajaxObj;
var d=document;
var curRatingIds = new Array(); // will be populated as we build pages w/ widgets
var curRatings = new Array(); // will be populated as we build pages w/ widgets
var origRatings = new Array();
var movieTitles = new Array();
var movieDbIds = new Array(); // also must be populated by pages
var rateSrc = new Array(); // also must be populated by pages

/** Handle rating actions **/
function rateScoreToImage(scoreID, type) {
	useNew = false;
	if (type == 'qck' || type == 'wiz' || type == 'mct') {
		useNew = true;
	}
	if (scoreID == 0) {
		return "/public/static/images/0stars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 1) {
		return "/public/static/images/1stars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 2) {
		return "/public/static/images/2stars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 3) {
		return "/public/static/images/3stars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 4) {
		return "/public/static/images/4stars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 5) {
		return "/public/static/images/5stars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 6) {
		return "/public/static/images/halfstars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 7) {
		return "/public/static/images/1_halfstars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 8) {
		return "/public/static/images/2_halfstars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 9) {
		return "/public/static/images/3_halfstars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == 10) {
		return "/public/static/images/4_halfstars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == _NOT_INTERESTED) {
		return "/public/static/images/0stars." + (useNew ? "new." : "") + "gif";
	}
	if (scoreID == _WANT_TO_SEE) {
		return "/public/static/images/0stars." + (useNew ? "new." : "") + "gif";
	}
	return "/public/static/images/0stars." + (useNew ? "new." : "") + "gif";
}
function flashSaveButton(){
	if (d.getElementById("widgetSaveBtn")) {
		d.images["widgetSaveBtn"].src="/public/static/images/bt_save_ani.gif";
	}
}

/** Handle Ajax stuff **/
function commonWgt_ajaxSubmit(mvID) {
	var params = commonWgt_getRateSubmitParams(mvID);
	new Ajax.Request('/rating/movie', {parameters:params});
}

/**
 * expand.widget.js
 */
// vars

var expWgt_openMovie="";



/** Handle expand/close **/

function expWgt_expand(mvID){

	expWgt_closeOpened();

	expWgt_rateSet(mvID, curRatings[mvID]); // make sure images ok

	d.getElementById("expWgtDisplay"+mvID).style.display="none";

	d.getElementById("expWgt_rateBox"+mvID).style.display="block";

	expWgt_openMovie=mvID;

}

function expWgt_collapse(mvID){

	d.getElementById("expWgt_rateBox"+mvID).style.display="none";

	d.getElementById("expWgtDisplay"+mvID).style.display="block";

}

function expWgt_closeOpened(){

	if(expWgt_openMovie != ""){

//		expWgt_collapse(expWgt_openMovie);

		expWgt_commentSet(expWgt_openMovie, d.getElementById("commonWgt_commentBox"+expWgt_openMovie).value);

		// don't need to call rateSet(), will already have been done

		expWgt_rateSave(expWgt_openMovie);

		expWgt_openMovie="";

	}

}



/** Handle rating actions **/

function expWgt_rateClear(mvID){

	expWgt_commentSet(mvID,""); // zero out comment

	expWgt_rateSet(mvID,0); // zero out rating

	expWgt_rateSave(mvID); // save it

}

function expWgt_rateDone(mvID) {

	expWgt_commentSet(mvID, d.getElementById("commonWgt_commentBox"+mvID).value);

	// don't need to rateSet(), will already have been done onclick

	expWgt_rateSave(mvID);

}

function expWgt_rateStarHover(mvID,starNum){

	d.images["expWgt_rateStarsBtn"+mvID].src=rateScoreToImage(starNum, 'exp');

}

function expWgt_rateStarsReset(mvID){

	rating=curRatings[mvID];

	if(rating == _NOT_INTERESTED || rating == _WANT_TO_SEE) {

		d.images["expWgt_rateStarsBtn"+mvID].src="/public/static/images/0stars.gif";

	}

	else {

		d.images["expWgt_rateStarsBtn"+mvID].src=rateScoreToImage(rating, 'exp');

	}

}

function expWgt_commentSet(mvID, newComment) {

	d.getElementById("commonWgt_commentBox"+mvID).value=newComment;



	// change comment image - if we have a comment, add the image, otherwise not

	if (d.getElementById("expWgt_comImg"+mvID)) {

		if (newComment == "") {

		  d.getElementById("expWgt_comImg"+mvID).style.display="none";

		}

		else {	

		  d.getElementById("expWgt_comImg"+mvID).style.display="inline";

		}

	}

}

function expWgt_rateSet(mvID, rating){

	curRatings[mvID]=rating;



	if(rating == _NOT_INTERESTED){

		d.images["expWgt_rateNiImg"+mvID].src="/public/static/images/ni_on.gif";

		d.images["expWgt_rateWsImg"+mvID].src="/public/static/images/ws.gif";

		d.images["expWgt_rateStarsBtn"+mvID].src="/public/static/images/0stars.gif";

		d.getElementById("expWgt_rateStarsBtn"+mvID).className="expWgt_rateStars";

		d.getElementById("expWgt_rateStarBar"+mvID).className="expWgt_rateStarBar";

		if (d.getElementById("expWgt_RerateBtn"+mvID)) {

				d.getElementById("expWgt_RerateBtn"+mvID).style.display="inline";

		}

		if (d.images["expWgt_RateImg"+mvID] != null) {

			d.images["expWgt_RateImg"+mvID].src="/public/static/images/ni_flat.gif";

		}

	}

	else if(rating == _WANT_TO_SEE){

		d.images["expWgt_rateNiImg"+mvID].src="/public/static/images/ni.gif";

		d.images["expWgt_rateWsImg"+mvID].src="/public/static/images/ws_on.gif";

		d.images["expWgt_rateStarsBtn"+mvID].src="/public/static/images/0stars.gif";

		d.getElementById("expWgt_rateStarsBtn"+mvID).className="expWgt_rateStars";

		d.getElementById("expWgt_rateStarBar"+mvID).className="expWgt_rateStarBar";

		if (d.getElementById("expWgt_RerateBtn"+mvID)) {

				d.getElementById("expWgt_RerateBtn"+mvID).style.display="inline";

		}

		if (d.images["expWgt_RateImg"+mvID] != null) {

			d.images["expWgt_RateImg"+mvID].src="/public/static/images/ws_flat.gif";

		}

	}

	else if(parseInt(rating) == 0){

		curRatings[mvID]=0;

		d.images["expWgt_rateWsImg"+mvID].src="/public/static/images/ws.gif";

		d.images["expWgt_rateNiImg"+mvID].src="/public/static/images/ni.gif";

		d.getElementById("expWgt_rateStarsBtn"+mvID).className="expWgt_rateStars";

		d.getElementById("expWgt_rateStarBar"+mvID).className="expWgt_rateStarBar";

		if (d.getElementById("expWgt_RerateBtn"+mvID)) {

				d.getElementById("expWgt_RerateBtn"+mvID).style.display="none";

		}

		if (d.images["expWgt_RateImg"+mvID] != null) {

			d.images["expWgt_RateImg"+mvID].src="/public/static/images/rateMe.gif";

		}

	}

	else{

		curRatings[mvID]=parseInt(rating);

		d.images["expWgt_rateWsImg"+mvID].src="/public/static/images/ws.gif";

		d.images["expWgt_rateNiImg"+mvID].src="/public/static/images/ni.gif";

		d.getElementById("expWgt_rateStarsBtn"+mvID).className="expWgt_rateStars expWgt_rateStars_mod_on";

		d.getElementById("expWgt_rateStarBar"+mvID).className="expWgt_rateStarBar expWgt_rateStarBar_mod_on";

		if (d.getElementById("expWgt_RerateBtn"+mvID)) {

				d.getElementById("expWgt_RerateBtn"+mvID).style.display="inline";

		}

		if (d.images["expWgt_RateImg"+mvID] != null) {

			d.images["expWgt_RateImg"+mvID].src=rateScoreToImage(curRatings[mvID], 'exp');

		}

	}

}

function expWgt_rateSave(mvID){

	expWgt_collapse(mvID);

	commonWgt_rateSave(mvID, true);

	expWgt_openMovie="";

}

/**
 * flat.widget.js
 */
// vars

var fltWgt_openMovie = "";



function fltWgt_rateStarHover(mvID, starNum, type){

 if (d.getElementById("fltWgt_rateStarsBtn"+mvID)) {
	d.images["fltWgt_rateStarsBtn"+mvID].src=rateScoreToImage(starNum, type);
 }

}

function fltWgt_rateStarsReset(mvID, type){

 rating=curRatings[mvID];

 if(rating == _NOT_INTERESTED || rating == _WANT_TO_SEE) {

   if (d.getElementById("fltWgt_rateStarsBtn"+mvID)) {

    	d.images["fltWgt_rateStarsBtn"+mvID].src="/public/static/images/0stars" + ((type == 'wiz' || type == 'mct') ? ".new" : "") + ".gif";

   }

 }

 else {

   if (d.getElementById("fltWgt_rateStarsBtn"+mvID)) { 

    	d.images["fltWgt_rateStarsBtn"+mvID].src=rateScoreToImage(rating, type);

   }

 }

}

function fltWgt_rateSet(mvID, rating, type, callback){

 if (curRatings[mvID]==rating && curRatings[mvID] != 0) {

   fltWgt_rateSet(mvID, 0, type); 

   if (callback != null) {

		var code = callback + "('" + mvID + "', '0')";

		eval(code);

   }

   return;

 }

 else {

   curRatings[mvID]=rating;
   prepend = "";

   if (type == 'small') {

		prepend = "bt_";

   }

   if (type == 'wiz' || type == 'mct') {

		prepend = "wiz_";

   }

   if(rating == _NOT_INTERESTED){

	if (d.getElementById("fltWgt_rateNiImg"+mvID)) { 

	 d.images["fltWgt_rateNiImg"+mvID].src="/public/static/images/" + prepend + "ni_on.gif";

	}

   } else {

	if (d.getElementById("fltWgt_rateNiImg"+mvID)) { 

	 d.images["fltWgt_rateNiImg"+mvID].src="/public/static/images/" + prepend + "ni_off.gif";

	}

   }

   if(rating == _WANT_TO_SEE) {

	if (d.getElementById("fltWgt_rateWsImg"+mvID)) { 

	 d.images["fltWgt_rateWsImg"+mvID].src="/public/static/images/" + prepend + "ws_on.gif";

	}

   } else {

	if (d.getElementById("fltWgt_rateWsImg"+mvID)) { 

	 d.images["fltWgt_rateWsImg"+mvID].src="/public/static/images/" + prepend + "ws_off.gif";

	}

   }

   if(rating == _NOT_INTERESTED || rating == _WANT_TO_SEE || rating == 0) {

	if (d.getElementById("fltWgt_rateStarsBtn"+mvID)) { 

	 d.images["fltWgt_rateStarsBtn"+mvID].src="/public/static/images/0stars" + ((type == 'wiz' || type == 'mct') ? ".new" : "") + ".gif";

	}

   }

   curRatings[mvID]=parseInt(rating);


   if (callback != null) {

		var code = callback + "('" + mvID + "', '" + rating + "')";

		eval(code);

	}

 }

 if (type != 'mct') {

		fltWgt_rateSave(mvID, true);

 } else {

		//no save for mct

		//fltWgt_rateSave(mvID, false);

 }

}



function fltWgt_expandComment(mvID) {

	// if it's already open, just close it

	if (fltWgt_openMovie == mvID) {

		fltWgt_collapse(fltWgt_openMovie);

	}

	else {

		fltWgt_closeOpened();

		d.getElementById("fltWgt_commentExpand"+mvID).style.display="block";

		fltWgt_openMovie=mvID;

	}

}

function fltWgt_collapse(mvID){

	d.getElementById("fltWgt_commentExpand"+mvID).style.display="none";

	fltWgt_rateSave(mvID, false);

	fltWgt_openMovie="";

}

function fltWgt_closeOpened(){

	if(fltWgt_openMovie != "") {

		fltWgt_collapse(fltWgt_openMovie);

	}

}

function fltWgt_rateSave(mvID, showMessage) {

	commonWgt_rateSave(mvID, showMessage);

}

function fltWgt_commentSet(mvID, newComment, callback) {

	d.getElementById("commonWgt_commentBox"+mvID).value=newComment;

	if (callback != null) {

		var code = callback + "('" + mvID + "')";

		eval(code);

   }

}

function fltWgt_rateClear(mvID, type){

	fltWgt_commentSet(mvID,""); // zero out comment

	fltWgt_rateSet(mvID,0,type); // zero out rating

// set calls save

//	fltWgt_rateSave(mvID, false); // save it

}

// Constants
_AJAX_PARAMS="rateAction=doRate&rateUser=" + currentUser.id + "&key=" + encodeURIComponent(currentUser.key);
_WANT_TO_SEE="12";
_NOT_INTERESTED="11";

function commonWgt_rateSave(mvID, showMessage){

	if (currentUser.isLoggedIn()) {
		commonWgt_ajaxSubmit(mvID);
	
		if (curRatings[mvID] == _WANT_TO_SEE && 
			origRatings[mvID] != _WANT_TO_SEE) {
	
			if (showMessage) {
					var title = movieTitles[mvID];
					if (title.length > 30) {
							title = title.substring(0, 30) + "...";
					}
					var msg = title + " has been added to your list.";
					//floatie.show(msg);
			}
		}

	} else {

		commonWgt_ajaxSubmit(mvID);
		if (showMessage) {
				var title = movieTitles[mvID];
				if (title.length > 30) {
						title = title.substring(0, 30) + "...";
				}
				msg = "Your ratings will not be saved until you register or sign in!";
				floatie.show(msg);
				alert("Your ratings will not be saved until you register or sign in!");
		}

	}
	
	if (d.getElementById("widgetSaveBtn")) {
		d.images["widgetSaveBtn"].src = "/public/static/images/bt_saved.gif";
	}
}

function commonWgt_getRateSubmitParams(mvID) {
	// seem to need this to get server responses on duplicate submission
	var ran_unrounded=Math.random()*1000000;
	var ran_number=Math.round(ran_unrounded); 

	if (movieDbIds && movieDbIds[mvID]) {
		return(_AJAX_PARAMS + "&movieid=" + movieDbIds[mvID] + "&rating=" + curRatings[mvID] + "&comment=" + encodeURIComponent( $('commonWgt_commentBox'+mvID).value ) + "&source=" + rateSrc[mvID] + "&rid=" + ran_number + "&ratingid=" + (curRatingIds && curRatingIds[mvID] ? curRatingIds[mvID] : -1));
	} else {
//		alert("Rating not saved...oops");
//		_uacct = "UA-191156-1";
//		urchinTracker('NoMovieDBID');
	}
}



