function _WriteReview () {
	this.moid = -1;
	this.rating = -1;
	
	this.init = function (moid, rating) {
		this.moid = moid;
			
		var e = _get("ratingHolder");
		if (rating == -1) {
			e.appendChild( _span("<b>Rösta här</b>") );
			e.appendChild( Voting.buildVotingModule(this, "rateObject", "w") );
			e.appendChild( _br() );
		}
		else {
			e.appendChild( _span("<b>Din röst</b>") );
			e.appendChild( Voting.buildCurrentRating(rating, 13, "w") );
			e.appendChild( _br() );
		}
		
		var form = _get("reviewform");
		form['reviewtext'].onkeydown = Utils.delegate(this, "onInputChange");
		form['reviewtext'].onkeyup = Utils.delegate(this, "onInputChange");
		form['reviewtext'].onchange = Utils.delegate(this, "onInputChange");
		
		this.onInputChange();
	}
	
	this.onInputChange = function () {
		var e = _get("reviewtext");
		var l = this.setCharsLeft( e.value.length );
			
		if (l <= 0) {
			e.value = String(e.value).substr(0, 512);
			this.setCharsLeft( e.value.length );
		}
	}
	
	this.setCharsLeft = function (current) {
		var e = _get("charsLeft");
		var left = 512 - current;
		e.innerHTML = "("+left+" tecken kvar)";
		return left;
	}
	
	//
	// Review stuff
	//
	this.submitReview = function () {
		if ( _get('reviewhead').value == "" ) {
			alert("Du måste ange en rubrik");
			return;
		}
		if ( _get('reviewtext').value == "" ) {
			alert("Du måste skriva din recension först");
			return;
		}
		
		var form = _get("reviewform");
		form.submit();
	}
	
	//
	// Ratings stuff
	//
	this.ratingClicked = false;
	this.rateObject = function (rating) {
		if (this.ratingClicked) return;

		this.ratingClicked = true;
		this.rating = rating;
		Application.send("/service/rating/", "mi=" + this.moid + "&r=" + rating, Utils.delegate(this, "onRateObject"));
	}
	
	this.onRateObject = function (req) {
		var e = _get("ratingHolder");
		Utils.removeChildrenFromNode(e);
		
		e.appendChild( _span("<b>Din röst</b>") );
		e.appendChild( Voting.buildCurrentRating(this.rating, 13, "w") );
		e.appendChild( _br() );
	}
}