// JavaScript Document
var NUMBER_OF_STARS = 5;

//begin moo code
function submitRating(evt)
{
    var tmp = new Event(evt).target.getProperty('id').substr(5);
    var widgetId = tmp.substr(0, tmp.indexOf('_'));
    var starNbr = tmp.substr(tmp.indexOf('_')+1);
	var rand = new Date().getTime();
    var queryString = Object.toQueryString({'ratingID': widgetId, 'value': starNbr, 'rndm': rand});
    var myAjax = new Ajax('./rate/php/submitRating.php?'+queryString, {
        method: 'get',
        onComplete: function(result)
            {
                setRating(widgetId, result, true);
            }
        }).request();
}

function getRating(widgetId)
{
    var queryString = Object.toQueryString({'ratingID': widgetId});
    var myAjax = new Ajax('./rate/php/getRating.php?'+queryString, {
        method: 'get',
		async: true,
        onComplete: function(result)
            {
                setRating(widgetId, result, false);
            }
        }).request();
}

function setRating(widgetId, rating, disable)
{
	var rater = $('rating_'+widgetId);
	rater.innerHTML = '';
	if (rating < NUMBER_OF_STARS || rating > 0) {
		for (var j = 0; j < NUMBER_OF_STARS; j++)
		{
			var star = new Element('img');
			if (rating >= 1)
			{
				star.setProperty('src', './rate/images/stars/rating_on.gif');
				star.className = 'on';
				rating--;
			}
			else if(rating == 0.5)
			{
				star.setProperty('src', './rate/images/stars/rating_half.gif');
				star.className = 'half';
				rating = 0;
			}
			else
			{
				star.setProperty('src', './rate/images/stars/rating_off.gif');
				star.className = 'off';
			}
			star.setProperty('id', 'star_'+widgetId+'_'+j);
			if(disable == true) {
				star.removeEvents;
			} else {
				star.addEvent('mouseover', displayHover.pass([widgetId, j]));
				star.addEvent('mouseout', displayNormal.pass([widgetId, j]));
				star.addEvent('click', submitRating);
			}
			rater.appendChild(star);
		} 
	}
}

function displayHover(ratingId, star)
{
    for (var i = 0; i <= star; i++)
    {
        $('star_'+ratingId+'_'+i).setProperty('src', './rate/images/stars/rating_over.gif');
    }
}

function displayNormal(ratingId, star)
{
    for (var i = 0; i <= star; i++)
    {
        var status = $('star_'+ratingId+'_'+i).className;
        $('star_'+ratingId+'_'+i).setProperty('src', './rate/images/stars/rating_'+status+'.gif');
    }
}

function initRating()
{
    var rater = $$('div.rating');
    for (var i = 0; i < rater.length; i++)
    {            
        var widgetId = rater[i].getProperty('id').substr(7);
		getRating(widgetId);
    }
}

function submitReview(evt)
{
	var submitEvent = new Event(evt);
	if($('review_details').getValue().length >= 600) {
		alert('Please edit your review to be less than 600 characters.');
	} else {
	this.send({
		method: 'get',
		update: this.getParent(),
		onComplete: function() {
			this.getParent().empty();//removeClass('ajax-loading');
		}
	});
	}
	//this.empty();
	submitEvent.stop();
}

function getReviews(vendorId)
{
	var rand = new Date().getTime();
    var queryString = Object.toQueryString({'vendorID': vendorId});//, 'rnd': rand});
    var myAjax = new Ajax('./rate/php/getReviews.php?'+queryString, {
        method: 'get',
		async: true,
        onComplete: function(results)
            {
				$('reviews').setHTML("<h3>Customer Reviews</h3>"+results);
                //setReviews(widgetId, results);
            }
        }).request();
}

function limitText(evt)
{
	keydownEvent = new Event(evt);
	var review = keydownEvent.target.getValue()
	var length = review.length;
	$('review_remaining').setText(600-length);
	if(length >= 600) { 
		$('review_details').setStyles({'color': '#bb0000', 'font-weight': 'bold'});
	} else { 
		$('review_details').setStyles({'color': 'inherit', 'font-weight': 'normal'});
	}	
}

function initReviews()
{
	var vendorId = $('reviews').getParent().getProperty('id').substr(5);
	getReviews(vendorId);
	$('review_form').addEvent('submit', submitReview);
	$('review_details').addEvent('keydown', limitText);
	$('review_details').addEvent('change', limitText);
}

function initHtml() {
    $$('.shop-feedback').each(function(el, id){
        var shop = el.getProperty('id').substr(5);
		el.setHTML('<div id="rating"><h3>Store Rating:</h3><div class="rating" id="rating_'+shop+'"> </div></div><div id="reviews"></div><div id="review"><form action="php/submitReview.php" method="post" id="review_form" target="_blank">            <h3>Submit a Review:</h3><table width="499" border="0"><tr><td><label for="review_name">Name: <br></label><input name="review_name" type="text" id="review_name" maxlength="40"></td><td><label for="review_city">City:<br></label><input name="review_city" type="text" id="review_city" maxlength="40"></td><td><label for="review_rating">Rating:<br></label><select name="review_rating" id="review_rating"><option value="1">1 Star</option><option value="2">2 Stars</option><option value="3">3 Stars</option><option value="4">4 Stars</option><option value="5">5 Stars</option></select></td></tr></table><p><label for="review_details">Write Your Review Here (<span id="review_remaining">600</span> characters remaining.):<br></label><textarea name="review_details" id="review_details" cols="57" rows="10"></textarea></p><p><input name="review_vendor" type="hidden" value="'+shop+'"><input type="submit" name="submit" id="submit" value="Submit"></p></form>');
    });
}

window.addEvent('domready', function(){
	initHtml();
    initRating();
	initReviews();
});