/*
 * funkce pro hlasovani
 */

var inline_rating_area	= '.inline-rating-area';	// trida elementu s hvezdickama pro inline hlasovani
var post_rating_area	= '.post-rating-area';		// trida elementu s hvezdickama pro post hlasovani
var rating_zero		= '.rating-zero';		// trida elementu pro nulovou hodnotu - pouze pri post
var rating_star		= '.rating-star-';		// prefix tridy elementu hvezdicky (za toto se jeste pripoji cislo hvezdicky)
var rating_status	= '.rating-status';		// trida elementu s ciselnym stavem
var rating_value	= '.rating-value';		// trida elementu s hidden input prvkem formulare, kterymu se pro post nastavi hodnota
var loading_elem	= 'img.loading';		// element, ktery se zobrazi behem zpracovani inline hlasovani AJAXem
var star_imgs = { '100' : '/obr/rate-star-100.png',	// plna hvezdicka
		  '075' : '/obr/rate-star-075.png',
		  '050' : '/obr/rate-star-050.png',
		  '025' : '/obr/rate-star-025.png',
		  '000' : '/obr/rate-star-000.png',	// prazdna hvezdicka
		  'over': '/obr/rate-star-over.png'};	// prejezd mysi
var number_of_stars = 5;
 
$(document).ready(function() {
	// hlasovacim hvezdickam uvnitr hlasovacich oblasti priradim akci pro hlasovani
	for(var star_no = 1; star_no <= number_of_stars; star_no++) {
		// inline hlasovani
		var stars = $(inline_rating_area + ' ' + 'img' + rating_star + star_no);
		stars.each(function() {
			enableInlineRating(this, star_no);
		});
		// post hlasovani - hvezdicky
		var stars = $(post_rating_area + ' ' + 'img' + rating_star + star_no);
		stars.each(function() {
			enablePostRating(this, star_no);
		});
	}
	// post hlasovani - 0
	var zeros = $(post_rating_area + ' ' + 'img' + rating_zero);
	zeros.each(function() {
		zeroPostRating(this);
	});
});

/*
 * vyvola ajaxem funkci sendRate na strane serveru, kde se po overeni pravosti
 * hlasovani zapocita hlas, prepocita vysledek a posle zpet odpoved, ktera se
 * zpracuje ve fci disableRating()
 * star_elem je element img.ratestar{idx}, hvezdicky jsou uzavreny v elementu
 * se tridou rating-area, ktery se po hlasovani nastaavi trida disabled, aby se 
 * zamezilo opakovanymu hlasovani
 * prejizdenim mysi pres hvezdicky se zvyraznuji, kliknutim na hvezdicku
 * se vyvola xajax_sendRate pro hlasovani
 */
function enableInlineRating(star_elem, value) {
	$(star_elem).click(function(event) {
		var area_elem = $(star_elem).parents(inline_rating_area);
		if($(area_elem).hasClass('disabled')) return;
		$(area_elem).find(loading).style.display = "inline";
		xajax_sendRate(area_elem.id, value);
	});
	$(star_elem).mouseover(function(event) {
		var area_elem = $(star_elem).parents(inline_rating_area);
		if($(area_elem).hasClass('disabled')) return;
		$(star_elem).prevAll().each(function(prev) {
			$(prev).attr('xsrc', $(prev).attr('src'));
			$(prev).attr('src', star_imgs['over']);
		});
		$(star_elem).attr('xsrc', $(star_elem).attr('src'));
		$(star_elem).attr('src', star_imgs['over']);
	});
	$(star_elem).mouseout(function(event) {
		var area_elem = $(star_elem).parents(inline_rating_area);
		if($(area_elem).hasClass('disabled')) return;
		var prevs = $(star_elem).prevAll();
		$(prevs).each(function(prev) {
			$(prev).attr('src'), $(prev).attr('xsrc');
		});
		$(star_elem).attr('src', $(star_elem).attr('xsrc'));
	});
		
}

/*
 * vola se po hlasovani pomoci Ajaxu pro zamezeni dalsiho hlasovani
 * zaroven zmeni hvedicky a prumer hlasovani
 */
function disableInlineRating(area_elemid, new_star_imgs, rating) {
	//alert('disableRating(' + area_elemid + ', ' + starimgs + ')');
	var area_elem = $('#' + area_elemid);
	$(area_elem).addClassName('disabled');
	if(starimgs) {
		var imgs = new_star_imgs.split(",");
	 	$(area_elem).find(loading_elem).style.display = 'none';
	 	for(var star_no = 1; star_no <= number_of_stars; star_no++) {
	 		var star_elem = $(area_elem).find(rating_star + star_no);
	 		$(star_elem).attr('src', star_imgs[imgs[star_no - 1]]);
	 		$(star_elem).attr('xsrc', $(area_elem).find(rating_star + star_no).attr('src'));
		}
	}
	if(rating) {
		$(area_elem).find(rating_status).innerHTML = rating;
	}
	/*
	var stars = $(area_elem).getElementsByClassName('star*');
	stars.each(function(star) {
		Event.stopObserving(...) FIX ME, see http://www.prototypejs.org/api/event/stopObserving
	*/
}

/*
 * nastavi akce pro hromadne hlasovani pomoci POST formulare.
 * formular MUSI obsahovat hlasovaci oblasti se tridou nastavenou v post_rating_area (viz nahore)
 * uvnitr techto oblasti musi byt hvezdicky a hidden prvek formulare se tridou dle promenne rating_value
 */
function enablePostRating(star_elem, value) {
	$(star_elem).click(function(event) {
		var area_elem = $(star_elem).parents(post_rating_area);
		if($(area_elem).hasClass('disabled')) return;
		//alert("nastavuju " + value + " pro " + $(area_elem).find('input' + rating_value) + " a ten ted ma hodnotu " + $(area_elem).find('input' + rating_value).val());
		$(area_elem).find('input' + rating_value).val(value);
		for(var star_no = 1; star_no <= number_of_stars; star_no++) {
			var elem = $(area_elem).find(rating_star + star_no);
			if(star_no <= value)
				$(elem).attr('src', star_imgs['100']);
			else
				$(elem).attr('src', star_imgs['000']);
			$(elem).attr('xsrc', $(elem).attr('src'));
		}
			
	});
	$(star_elem).mouseover(function(event) {
		var area_elem = $(star_elem).parents(post_rating_area);
		if($(area_elem).hasClass('disabled')) return;
		for(var star_no = 1; star_no <= value; star_no++) {
			var elem = $(area_elem).find(rating_star + star_no);
			$(elem).attr('xsrc', $(elem).attr('src'));
			$(elem).attr('src', star_imgs['over']);
		}
	});
	$(star_elem).mouseout(function(event) {
		var area_elem = $(star_elem).parents(post_rating_area);
		if($(area_elem).hasClass('disabled')) return;
		for(var star_no = 1; star_no <= value; star_no++) {
			var elem = $(area_elem).find(rating_star + star_no);
			$(elem).attr('src', $(elem).attr('xsrc'));
		}
	});
		
}

function zeroPostRating(zero_elem) {
	$(zero_elem).click(function(event) {
		var area_elem = $(zero_elem).parents(post_rating_area);
		if($(area_elem).hasClass('disabled')) return;
		for(var star_no = 1; star_no <= number_of_stars; star_no++) {
			var elem = $(area_elem).find(rating_star + star_no);
			$(elem).attr('src', star_imgs['000']);
		}
		$(area_elem).find('input' + rating_value).val(0);
	});
}

