gRate = {initialised: false}; // The global ref

/*
 * Function to reference those shiny little stars
 */
gRate.init = function() {
    gRate.initialised = true
    gRate.images = [document.getElementById("ratedOne"),
                 document.getElementById("ratedTwo"),
                 document.getElementById("ratedThree"),
                 document.getElementById("ratedFour")
                 ]
    gRate.resetStars();
}


/*
 * talk to backend and hopefully return with no error
 */
gRate.rate = function(number) {
    if(gRate.hasRated || !gRate.initialised ) return
    var rateValue = gRate.starToFloat(number);
    dojo.xhrGet({
        url: URL_doRates + "?portal=" + portal + "&rateValue=" + rateValue + "&rpObjectID=" + rpObjID + "&metaType=" + metaType,
        timeout: 6000,
	handleAs:"json",
	load: function( data, ioargs ) {
                var showCount = data[0].count;
                var showAverage = data[0].average;
                gRate.rate_average = showAverage;
                gRate.g_showCount = showCount;
                var stars = gRate.floatToStar(showAverage);
                if (showCount > 0) {
                    var rateText = "Bewertungen";
                    if (showCount == 1){
                        rateText = "Bewertung";
                    }
                    document.getElementById("countExists").innerHTML = showCount + " " + rateText;
                    if (stars == 1) {
                        gRate.images[0].src = "rateActive.gif";
                        gRate.images[1].src = "rateInactive.gif";
                        gRate.images[2].src = "rateInactive.gif";
                        gRate.images[3].src = "rateInactive.gif";
                    } else if (stars == 2) {
                        gRate.images[0].src = "rateActive.gif";
                        gRate.images[1].src = "rateActive.gif";
                        gRate.images[2].src = "rateInactive.gif";
                        gRate.images[3].src = "rateInactive.gif";
                    } else if (stars == 3) {
                        gRate.images[0].src = "rateActive.gif";
                        gRate.images[1].src = "rateActive.gif";
                        gRate.images[2].src = "rateActive.gif";
                        gRate.images[3].src = "rateInactive.gif";
                    } else if (stars == 4) {
                        gRate.images[0].src = "rateActive.gif";
                        gRate.images[1].src = "rateActive.gif";
                        gRate.images[2].src = "rateActive.gif";
                        gRate.images[3].src = "rateActive.gif";
                    }
                } else {
                    var stars = 0
                    document.getElementById("countExists").innerHTML = "Jetzt bewerten!";
                }
            // console.log("rateNumber"+ rateNumber)
                gRate.averageRate = stars;
                //console.log("AV"+gRate.averageRate)
                gRate.hasRated = true;
                document.getElementById("countExists").innerHTML = "Danke f&uuml;r Ihre Bewertung!";
            },
        error: function(error,ioargs) {
		// make it silently for the user
		console.debug(error)
	}
    });
    document.getElementById("countExists").innerHTML = "Danke f&uuml;r Ihre Bewertung!";
    //location.reload();
}
/*
 * hovering the stars mouse is actual over plus the other stars in front of it
 */
gRate.doHoverStar = function (image, position) {
    if (!gRate.initialised) return;
    gRate.resetStars();
    if(gRate.hasRated) return
    for (var index = 0; index < position; index++) {
        gRate.images[index].src = 'rateHover.gif';
    }
}
/*
 * reset to correct count of rated stars and changing text beneath if user has voted or not
 */
gRate.resetStars = function() {
/*
    if(!gRate.hasRated && typeof gRate.averageRate == 'undefined' ){
        if () {
            document.getElementById("countExists").innerHTML = "Jetzt bewerten!";
        }
    }
*/
    if (!gRate.initialised) return;
    if (gRate.g_showCount == 0) {
        document.getElementById("countExists").innerHTML = "Jetzt bewerten!";
    } else if (gRate.g_showCount > 0){
        var rateText = "Bewertungen";
        if (gRate.g_showCount == 1){
            rateText = "Bewertung";
        }
        document.getElementById("countExists").innerHTML = gRate.g_showCount + " " + rateText;
    }
    var starNumber = gRate.floatToStar(gRate.rate_average);
    for ( var index = 0; index < starNumber; index++) {
       gRate.images[index].src = 'rateActive.gif';
    }
    for ( var index2 = index; index2 < 4; index2++) {
       gRate.images[index2].src = 'rateInactive.gif';
    }
}

/*
 * change the normalized backend count to something more handable stuff
 */
gRate.floatToStar = function(number) {
    var star = 0
    if(0 < number && number<= 0.25) star = 1;
    if(0.25 < number && number <= 0.5) star = 2;
    if(0.5 < number && number <= 0.75) star = 3;
    if(0.75 < number && number<= 1) star = 4;
    return star
}

/*
 * js nums to normalized rating stuff
 */
gRate.starToFloat = function(/*Int*/number) {
    var floatNr = 0
    if(number == 1) floatNr = 0.24;
    if(number == 2) floatNr = 0.49;
    if(number == 3) floatNr = 0.74;
    if(number == 4) floatNr = 1;
    return floatNr
}
