function RateAction(productParams) {
	this.gradesTxt = new Array("<span>słabe</span>", "<span>nic specjalnego</span>",
	       "<span>warto spróbować</span>", "<span>smaczne</span>", "<span>wyśmienite</span>");
	this.texts = new Array("dziękujemy za ocenę przepisu",
	       "nie udało się, spróbuj ocenić jeszcze raz", "trwa dodawanie oceny",
	       "już oceniałeś ten przepis", "Średnia ocena potrawy");

    this.params = productParams;
    this.newGrade = null;

    this.enableElems = function(txtIndex) {
	    for (i = 1; i < 6; i++) {
	        document.getElementById("glos_"+i).onmouseover = function() { rating.over(this.id); };
	        document.getElementById("glos_"+i).onmouseout = function() { rating.out(this.id); }; 
	        document.getElementById("glos_"+i).onclick = function() { rating.rate(this); };
	    }
	    document.getElementById("ocena").innerHTML = this.texts[txtIndex];
	}
	
	this.disableElems = function() {
	    for (i = 1; i < 6; i++) {
	        document.getElementById("glos_"+i).onmouseover = null;
	        document.getElementById("glos_"+i).onmouseout = null; 
	        document.getElementById("glos_"+i).onclick = null;
        }
	}
	
	this.over = function(id) {
        var index = (id.substring(5)) * 1;
        document.getElementById("ocena").innerHTML = this.gradesTxt[index - 1];

        for(i = 1; i < 6; i++) {
            if (i <= index) {
                document.getElementById("glos_"+i).src = "/i/obrazki/nowa_kuchnia/big_star_y.gif";
            } else {
                document.getElementById("glos_"+i).src = "/i/obrazki/nowa_kuchnia/big_star_g.gif";
            }
        }
	}
	        
	this.out = function(id) {
        for(i = 1; i < 6; i++) {
            if ((i == (this.params.grade + 1)) && (this.params.gradeHalf == 1)) {
                document.getElementById("glos_" + i).src = "/i/obrazki/nowa_kuchnia/big_star_y_half.gif";
            } else if (i <= this.params.grade) {
                document.getElementById("glos_"+i).src = "/i/obrazki/nowa_kuchnia/big_star_y.gif";            
            } else {
                document.getElementById("glos_"+i).src="/i/obrazki/nowa_kuchnia/big_star_g.gif";
            }
        }
        document.getElementById("ocena").innerHTML = this.texts[4];
	}

	this.getGradeText = function(grade) {
	    if (grade == 1) {
	        return " głos";
	    } else if (((grade%10==2 && grade%100!=12) || (grade%10==3 && grade%100!=13)
	           || (grade%10==4 && grade%100!=14))) {
	        return " głosy";
	    } else {
	        return " głosów";
	    }
	}
	
	this.countNewAvg = function() {
	    var newAvg = 0;

	    if (this.params.gradeHalf == 1) {
	        newAvg = ((this.params.gradesCount * this.params.fullGrade) + this.newGrade)
	               / (this.params.gradesCount + 1);
	    } else {
	        newAvg = ((this.params.gradesCount * this.params.fullGrade) + this.newGrade)
                    / (this.params.gradesCount + 1);
	    }
	
	    this.params.grade = Math.floor(newAvg);
	    if ((newAvg - this.params.grade) >= 0.5) {
	        this.params.gradeHalf = 1;
	    } else {
	        this.params.gradeHalf = 0;
	    }
	}

	this.rate = function(elem) {
	    document.getElementById("ocena").innerHTML = this.texts[2];
	    this.newGrade = (elem.id.substring(5)) * 1;
	
	    var url = "/rate.do?oper=add&value(xx_product)=" + this.params.xx
	            + "&value(product_table)=" + this.params.table
	            + "&value(rate_value)=" + this.newGrade;
	
	    new Ajax.Request(url,
	        {asynchronous:true, method: 'get',
	        onSuccess: function(response) { return rating.success(response); },
	        onFailure: function(response) { return rating.failure(response); }
	    });
	}
	
	this.success = function(response) {
        this.disableElems();
        if (response.responseText.match("problem z oceną") != null) {
	        document.getElementById("ocena").innerHTML = this.texts[1];
	        setTimeout("rating.out()", 2000);
            setTimeout("rating.enableElems(4)", 2000);
	    } else if (response.responseText.match("oddałeś swój głos") != null) {
            document.getElementById("ocena").innerHTML = this.texts[3];
            setTimeout("rating.out()", 2000);
	    } else {
            document.getElementById("ocena").innerHTML = this.texts[0];
            document.getElementById("liczbaGlosow").innerHTML
                    = (this.params.gradesCount + 1)
                    + this.getGradeText(this.params.gradesCount + 1);
            this.countNewAvg();
            setTimeout("rating.out()", 2000);
	    }
	}
	
	this.failure = function(response) {
	    document.getElementById("ocena").innerHTML = this.texts[4];
	}
}


// favorites
function FavoritesAction(xx, userName, productType) {
    this.xx = xx;
    this.userName = userName;
    this.productType = productType;

    this.init = function() {
        if (this.userName == '') {
            document.getElementById("favoritesTxt").innerHTML = "<span>Dodaj do ulubionych (musisz się zalogować)</span>";
        } else {
            this.isFavorite();                        
        }
    }

    this.isFavorite = function() {
        Favorites.isFavorite(this.xx, this.userName, this.productType, this.checked);
    }

    this.insertFavorite = function(comment) {
        Favorites.insertFavorite(this.xx, this.userName, comment, this.productType, this.inserted);
    }

    this.checked = function(msg) {
        if (msg == true) {
            document.getElementById("favoritesTxt").innerHTML = "<span>To twój ulubiony przepis.</span>";
            document.getElementById("favoritesTxt").className += " dodany";
        } else {
            document.getElementById("favoritesTxt").innerHTML = '<a href="javascript:return false;">Dodaj do ulubionych</a>';
            f_aEv(window, 'load', initUserOptions);
        }
    }

    this.inserted = function(msg) {
		var _ulubioneAddForm = f_gOb('ulubioneAdd');
		if (_ulubioneAddForm) { 
			f_aCl(_ulubioneAddForm, 'hidden');
		}
		var _k3Inputs = f_gOb('k3').getElementsByTagName('input');
		if (_k3Inputs.length > 0) {
			for (var i=0; i<_k3Inputs.length; i++) {
				_k3Inputs[i].style.visibility = 'visible';
			}
		}
        if (msg == true) {
            document.getElementById("favoritesTxt").innerHTML = "<span>To twój ulubiony przepis.</span>";
            document.getElementById("favoritesTxt").className += " dodany";
        } else {
            document.getElementById("favoritesTxt").innerHTML = "<span>Nie udało się dodać.</span>";
        }
    }
}

function f_trim(x){return x.replace(/^\s+|\s+$/g,'');}

function f_aEv(obj, type, fn) { try { if (obj.addEventListener) { obj.addEventListener(type, fn, false); } else if (obj.attachEvent) { obj["e"+type+fn] = fn; obj[type+fn] = function() { obj["e"+type+fn](window.event); }; obj.attachEvent("on"+type, obj[type+fn]); }} catch (e) {}}

function f_gOb(n) { return document.getElementById(n); }

function f_gBTC(obj, tag, clName) { var objs = obj.getElementsByTagName(tag); var robj = new Array(); var j = 0; for (var i = 0; i < objs.length; i++) { if (f_hCl(objs[i], clName)) robj[j++] = objs[i]; }; return robj; }

function f_hCl(obj, clName) { var clN = ' ' + obj.className + ' '; return (clN.match(' ' + clName + ' ') != null); }

function f_aCl(obj, clName) { if (f_hCl(obj, clName)) return; obj.className = f_trim(obj.className + ' ' + clName); }

function f_rCl(obj, clName) { if (!f_hCl(obj, clName)) return; var clN = ' ' + obj.className + ' '; eval("obj.className = f_trim(clN.replace(/ " + clName + " /g,' '));"); }

function initUserOptions(){
    var _userOptions = f_gOb('userOptions');
    if(_userOptions) var _ulubioneLinkCtr = f_gBTC(_userOptions, 'div', 'ulubione')[0];
    if(_ulubioneLinkCtr) var _ulubioneLink = _ulubioneLinkCtr.getElementsByTagName('a')[0];
    if(_ulubioneLink) f_aEv(_ulubioneLink, 'click', showUlubioneForm);
    if(_userOptions) var _btnUlubioneCancel = f_gOb('btnUlubioneCancel');
    if(_btnUlubioneCancel) f_aEv(_btnUlubioneCancel, 'click', hideUlubioneForm); 
}

function showUlubioneForm(e){
    var el; if (window.event && window.event.srcElement) { el = window.event.srcElement; }; if (e && e.target) { el = e.target; }; if (!el) { return; }; (e.preventDefault) ? e.preventDefault() : (e.returnValue = false);
    var _ulubioneAddForm = f_gOb('ulubioneAdd');
    if(_ulubioneAddForm) f_rCl(_ulubioneAddForm, 'hidden');
    var _k3Inputs = f_gOb('k3').getElementsByTagName('input');
    if(_k3Inputs.length > 0){
        for(var i=0; i<_k3Inputs.length; i++){
            _k3Inputs[i].style.visibility = 'hidden';
        }
    }
}

function hideUlubioneForm(e){
    var el; if (window.event && window.event.srcElement) { el = window.event.srcElement; }; if (e && e.target) { el = e.target; }; if (!el) { return; }; (e.preventDefault) ? e.preventDefault() : (e.returnValue = false);
    var _ulubioneAddForm = f_gOb('ulubioneAdd');
    if(_ulubioneAddForm) f_aCl(_ulubioneAddForm, 'hidden');
    var _k3Inputs = f_gOb('k3').getElementsByTagName('input');
    if(_k3Inputs.length > 0){
        for(var i=0; i<_k3Inputs.length; i++){
            _k3Inputs[i].style.visibility = 'visible';
        }
    }
}
