/**
 *	@class klasa sterująca oceną komentarzy
 *	@author  Krajewski Piotr (MitS)
 *	@contact mits87@gmail.com
 */


// Deklaracja tablicy z obrazkami
var images 	 = new Array();

// Nasze obrazki, które mają być jako niezaznaczone, zaznaczone, najechane
images[0] = new Image;		images[0].src = "http://img.firmy.net/gfx/soff.gif";
images[1] = new Image;		images[1].src = "http://img.firmy.net/gfx/son.gif";
images[2] = new Image;		images[2].src = "http://img.firmy.net/gfx/sov.gif"; 

 
function Rate(){
	// Deklaracja pól prywatnych 
	var alwaysOn = new Array();
	var descRate = new Array();

	var list = new Array();
	var box  = new Array();
	var inp  = new Array();
	
	// 1 - jeśli mają być wyświetlane opisy, 0 - jeśli ich ma nie być
	var isDesc = 1;
	
	// Nazwy jakie mają być widoczne przy wyborze odpowiedniej oceny
	descRate[0] = "bardzo słaba";
	descRate[1] = "słaba";
	descRate[2] = "dostateczna";
	descRate[3] = "dobra";
	descRate[4] = "bardzo dobra";
	descRate[5] = "wspaniała";
	
	// Numer box'a z ocenami, który ma być wyłączany (możliwość nie przyznania punktów)
	alwaysOn[0] = 0;


	// Zwracamy objekt elementu branego po ID
	function getObjId(id){
		var obj = eval('document.getElementById ? document.getElementById("'+id+'") : document.all.'+id);
		return obj;
	}
	
	// Metoda bool'owska - zwracamy true jesli dany box z oceną ma być zawsze oceniony (brak przyznania 0 punktów) zależny od tablicy alwaysOn, w której zawarty jest numer danego boxa
	this.isAlwaysOn = function(row){
		for(var i=0; i<alwaysOn.length; i++)
			if(inp[row].id == "review_" + alwaysOn[i])
				return true;
	}

	// Metoda, która wykonuje innerHTML z tekstem oceny w zależności od tego czy ma być ona pokazana czy też nie
	this.rateDesc = function(row, col, isDesc){
		if(isDesc == 1)
			getObjId("rateDesc_" + row).innerHTML = descRate[col];
		else
			getObjId("rateDesc_" + row).innerHTML = "&nbsp;";
	}

	// Metoda ukrywająca gwiazdki
	this.hideStars = function(row, col, e){
		if(e == 'active'){
			if(this.isAlwaysOn(row) != true){
				for(var i=0; i<inp[row].value; i++)
					box[row][i].src = images[0].src;
	
				inp[row].value = 0;
			}
		}
		else if(e == 'over')
			for(var i=col+1; i<box[row].length; i++)
				box[row][i].src = images[0].src;
		else
			for(var i=inp[row].value; i<box[row].length; i++)
				box[row][i].src = images[0].src;
	}

	// Metoda działająca w zależności od kliknięcia / najechania / zjechania z oceny znajdującej się w danym boxie. Wywołuje też inne metody
	this.setStars = function(row, col, e){	
		
		if(e == 'active' || e == 'over'){
			if(e == 'active'){
				inp[row].value = col * 1 + 1;
				
				if(box[row][col].src === images[1].src)
					this.hideStars(row, col, e);
				else
					for(var i=0; i<inp[row].value; i++)
						box[row][i].src = images[1].src;
			}
			else{
				for(var i=0; i<=col; i++){
					if(i == (inp[row].value * 1 - 1))
						box[row][col].src = images[1].src;
					else
						box[row][i].src = images[2].src;
					
					this.rateDesc(row, i, isDesc);
				}

				this.hideStars(row, col, e);
			}
		}
		else{
			if(e == 'disactive'){
				for(var i=0; i<inp[row].value; i++)
					box[row][i].src = images[1].src;

				this.hideStars(row, col, e);
				getObjId("rateDesc_" + row).innerHTML = "&nbsp;";
			}
		}
	}
	
	// Główna metoda inicjująca, której zadaniem jest pobieranie wszystkich obrazków, inputów itp. z danego div'a (w poniższym przypadku div'a o nazwie "rating")
	this.changeStars = function(){
		var thisRate = this;
		
		if(getObjId("rating")){
			var rate = getObjId("rating");
			list = rate.getElementsByTagName("ul");

			for(var i=0; i<list.length; i++){
				box[i] = list[i].getElementsByTagName("img");
				inp[i] = getObjId("review_" + i);
			}

			for(var i=0; i<list.length; i++){
				if((inp[i].value * 1 - 1) > 0)
					thisRate.setStars(i, (inp[i].value * 1 - 1), "active");

				for(var j=0; j<box[i].length; j++){
					if(typeof box[i][j] === 'object'){
						eval('box['+i+']['+j+'].onmouseout = function(){thisRate.setStars('+ i +','+ j +',"disactive");}');
						eval('box['+i+']['+j+'].onmouseover = function(){thisRate.setStars('+ i +','+ j +',"over");}');
						eval('box['+i+']['+j+'].onclick = function(){thisRate.setStars('+ i +','+ j +',"active");}');
					}
				}
			}
		}
	}
};

// W onload'zie strony two0rzymy obiekt klasy Rate i inicjujemy
/* //  scripts.js
window.onload = function(){
	var rate = new Rate();
	rate.changeStars();
}
*/

function checkReviewForm(form)
{
	try{
		if( form.review_0.value==0 ){
			alert("Proszę uzupełnić ocenę firmy");
			return false;
		}
		if( form.fEmail.value=='' ){
			alert("Proszę uzupełnić E-mail");
			form.fEmail.focus();
			return false;
		}
		if( form.fSignature.value=='' ){
			alert("Proszę uzupełnić podpis");
			form.fSignature.focus();
			return false;
		}
		if( !form.fCTerms.checked ){
			alert("Proszę zaakceptować regulamin");
			form.fCTerms.focus();
			return false;
		}
		if( form.fCaptchaCode.value=='' ){
			alert("Proszę uzupełnić kod bezpieczeństwa");
			form.fCaptchaCode.focus();
			return false;
		}
	}
	catch(e){
		return true;
	}
	return true;
}

