YAHOO.namespace("avro.cultuur.beoordeling");

YAHOO.avro.cultuur.beoordeling = function () {
    var Event = YAHOO.util.Event;
    var Dom = YAHOO.util.Dom;
    
    var waarderingCallback = {
        success: function (o) {
            var itemid = Dom.get("itemid");
            Dom.setStyle("ratingOK", "visibility", "visible");
            YAHOO.util.Connect.asyncRequest('GET', 'actions/getwaardering?item=' + itemid.value, updateWaarderingCallback);
            YAHOO.util.Connect.asyncRequest("GET", "actions/getreacties?item=" + itemid.value, updateReactiesCallback);
        },
        failure: function (o) {
            Dom.setStyle("ratingFault", "visibility", "visible");
        },
        cache: false
    }
    
    var beoordelingCallback = {
        success: function (o) {
            var itemid = Dom.get("itemid");
            YAHOO.util.Connect.asyncRequest("GET", "actions/getreacties?item=" + itemid.value, updateReactiesCallback);
            var button = Dom.get("ratingformSubmit");
            button.disabled = false;
            window.location.href = '#reacties';
        },
        failure: function (o) {
            Dom.setStyle("ratingFault", "visibility", "visible");
            var button = Dom.get("ratingformSubmit");
            button.disabled = false;
        },
        cache: false
    }
    
    var updateWaarderingCallback = {
        success: function (o) {
            var waarderingEl = Dom.get("waardering");
            waarderingEl.innerHTML = o.responseText;
        },
        failure: function (o) {
        },
        cache: false
    }
    
    var updateReactiesCallback = {
        success: function (o) {
            var reactiesEl = Dom.get("reactiesPlaceHolder");
            reactiesEl.innerHTML = o.responseText;
        },
        failure: function (o) {
        },
        cache: false
    }
    
    var beoordelingSubmit = function () {
        var form = Dom.get("recensieform");
        var button = Dom.get("ratingformSubmit");
        button.disabled = true;
        
        if (form.elements[ "reactie" ].value != "") {
            var postTo = form.action;
            YAHOO.util.Connect.setForm(form);
            var c = YAHOO.util.Connect.asyncRequest('POST', postTo, beoordelingCallback);
        } else {
            button.disabled = false;
        }
        form.elements[ "reactie" ].value = "";
    }
    
    var hoverStar = function (event, whichStar) {
        for (var i = 1; i < whichStar; i++) {
            var star = Dom.get('star' + i);
            var a = star.firstChild;
            Dom.addClass(star, 'hover');
        }
    }
    
    var resetStars = function () {
        var starsOn = parseInt(Dom.get("ratingvalue") .value, 10) + 3;
        for (var i = 1; i <= 5; i++) {
            var star = Dom.get('star' + i);
            
            Dom.removeClass(star, 'hover');
            Dom.removeClass(star, 'on');
            
            if (i <= starsOn && ! Dom.hasClass(star, 'on')) {
                Dom.addClass(star, 'on');
            }
        }
    }
    
    var clickStar = function (event, whichStar) {
        var starValue = Dom.get("ratingvalue");
        starValue.value = whichStar - 3;
        resetStars();
        var ratingform = Dom.get("ratingform");
        var postTo = ratingform.action;
        YAHOO.util.Connect.setForm(ratingform);
        var c = YAHOO.util.Connect.asyncRequest('POST', postTo, waarderingCallback);
    }
    
    var updateReacties = function () {
        var item = Dom.getElementsByClassName("contentArticle");
        YAHOO.util.Connect.asyncRequest("GET", "actions/getreacties?item=" + item[0].id, updateReactiesCallback);
    }
    
    var callback = {
        success: function (obj) {
            var element = Dom.get("vervangen-beoordeling");
            element.innerHTML = obj.responseText;
            updateReacties();
            setListeners();
        },
        failure: function (obj) {
        },
        cache: false
    }
    
    
    var setListeners = function () {
        for (var i = 1; i <= 5; i++) {
            Event.addListener("star" + i, "mouseover", hoverStar, i);
            Event.addListener("star" + i, "mouseout", resetStars);
            Event.addListener("star" + i, "click", clickStar, i);
        }
        Event.addListener("ratingformSubmit", "click", beoordelingSubmit);
    }
    
    return {
        init: function () {
            var item = Dom.getElementsByClassName("contentArticle");
            YAHOO.util.Connect.asyncRequest("GET", "components/item-beoordeling/klassiek?item=" + item[0].id, callback);
        }
    };
}
();

YAHOO.util.Event.onDOMReady(YAHOO.avro.cultuur.beoordeling.init);

