var genRatingMsg = {};

function initGenericRating(siteId, locale, pageId, contextElem) {
	// init global vars
	window.siteId= siteId;
	window.locale= locale;
	window.pageId= pageId;
	
	var forms = contextElem != null ? Element.select(contextElem, 'form.genericRatingForm') : $$('form.genericRatingForm');

	forms.each(function(formItem) {
		ratingSet(formItem);
		
		var allowRatingOnlyIfLoggedIn = formItem.down('input.allowRatingOnlyIfLoggedIn').getValue()=='true';
		var allowRatingsOnlyOnceADay = formItem.down('input.allowRatingsOnlyOnceADay').getValue()=='true';
		var allowRatingLoginUsePopup = formItem.down('input.allowRatingLoginUsePopup').getValue()=='true';
		var loggedIn = formItem.down('input.loggedIn').getValue()!='false';

		Element.select(formItem, 'div.rtngElem').each(function(item){
			var num = getIdFromClass('rtngElem_', item);
			item.observe('mouseover', function(event){
				event.preventDefault();
				ratingMouseOver(item.up('form'), num, item.up('form').down('input.currRating').getValue());
				showMsg(item.up('form'), num);					
			});
			item.observe('mouseout', function(event){
				event.preventDefault();
				ratingMouseOut(item.up('form'), item.up('form').down('input.currRating').getValue());
				cleanMsg(item.up('form'));
			});
			item.observe('click', function(event){
				event.preventDefault();
				if (allowRatingOnlyIfLoggedIn && !loggedIn) {
					// just show login box, do reload the page after that (to update the header)
					executeActionAfterLogin(siteId, locale, false, 
											function() {}, 
											function(){location.reload();},
											item.up('form').down('input.loginPopupSuffix').getValue(),
											!allowRatingLoginUsePopup)
				} else {
					rateClick(item.up('form').id ,
										num, 
										item.up('form').down('input.callBack').getValue(), 
										item.up('form').down('input.allowMultiple').getValue(),
										item.up('form').down('input.disableRatingOwnEntries').getValue(), 
										item.up('form').down('input.allowInGroupOnce').getValue(), 
										item.up('form').down('input.aroili').getValue(), 
										item.up('form').down('input.arooad').getValue(), 
										allowRatingsOnlyOnceADay,
										formItem.down('input.hasUserRatedToday'),
										contextElem);
				}
			});
		});
	
	});
}

function showMsg(form, num) {
	form.down('div.rateMsg').update(genRatingMsg[num]);
}
function cleanMsg(form) {
	form.down('div.rateMsg').update('');
}

function getIdFromClass(prefix, node) {
	var id;
	Element.classNames(node).each(function(className) {
		if (className.indexOf(prefix)==0) {
			id = parseInt(className.substring(prefix.length, className.length));
		}
	});
	return id;
}			

function rateClick(containerId, rate, execFunc, allowMultiple, disableOwn, allowInGroupOnce, aroili, arooad, allowRatingsOnlyOnceADay, elemUsrRatToday, contextElem) {
	if(typeof window[execFunc] == 'function') window[execFunc](containerId, rate, allowMultiple, disableOwn, allowInGroupOnce, aroili, arooad, allowRatingsOnlyOnceADay, elemUsrRatToday, contextElem);
}

function ratingSet(node) {
	var i=1;
	var rating = node.down('input.currRating').getValue()
	Element.select(node, 'div.rtngElem').each(function(item) {
		if(i<=rating) {
			ratingSwitchImg(item, 'rtngElemImgOn');
		} else {
			ratingSwitchImg(item, 'rtngElemImgOff');
		}
		i++;
	});
}			
function ratingMouseOver(node, num, curr) {
	var i=1;
	Element.select(node, 'div.rtngElem').each(function(item) {
		if(i<=num) {
			if(i<=curr) {
				ratingSwitchImg(item, 'rtngElemImgOnOver');
			} else {
				ratingSwitchImg(item, 'rtngElemImgOffOver');
			}
		} else {
			if(i<=curr) {
				ratingSwitchImg(item, 'rtngElemImgOn');
			} else {
				ratingSwitchImg(item, 'rtngElemImgOff');
			}
		}
		i++;
	});
}			
function ratingMouseOut(node, num) {
	var i=1;
	Element.select(node, 'div.rtngElem').each(function(item) {
		if(i<=num) {
			ratingSwitchImg(item, 'rtngElemImgOn');
		} else {
			ratingSwitchImg(item, 'rtngElemImgOff');
		}
		i++;
	});
}			
function ratingSwitchImg(item, cls) {
	Element.select(item, 'img.rtngElemImg').each(function(imgItem) {
		if(imgItem.hasClassName(cls)) {
			imgItem.setStyle({display:'block'});
		} else {
			imgItem.setStyle({display:'none'});
		}
	});
}
