var cms = new Object();

var rating =
{
    selectors : new Array(),
    
	insertSelector : function(contentId)
	{
        var alreadyVoted = cms.cookie.getEntry("rated");
        if (alreadyVoted)
        {
            document.getElementById("ratingtext_" + contentId).innerHTML = '';
            return;
        }
        
	    var container = document.getElementById("rating_" + contentId);
        container.contentId = contentId;
        container.textElement = document.getElementById("ratingtext_" + contentId);
		//container.valueElement = document.getElementById("ratingvalue_" + contentId);
		container.ratingControl = this;
	    for (var iStars = 1 ; iStars <= 5 ; iStars++)
	    {
	        var ratingStar = document.createElement("img");
            ratingStar.style.cursor = "pointer";
			ratingStar.ratingControl = this;
            ratingStar.ratingValue = iStars;
	        ratingStar.onmouseover = this.handleStarHover;
	        ratingStar.onmouseout = this.handleStarLeave;
	        ratingStar.onclick = this.handleStarClick;

            this.setStarImage(ratingStar, false);
			
	        container.appendChild(ratingStar);
	    }
        
        this.selectors.push(container);
        
	},
    
	setStarImage : function(element, state)
	{
        element.src = (state)?
            "/client/dagvandeondernemer/images/module/videorating/star_on.gif" :
            "/client/dagvandeondernemer/images/module/videorating/star_off.gif";
	},
	
	setPrecedingStarImage : function(targetElement, state)
	{
		if (!targetElement.parentNode.ratingLock)
		{
			var element = targetElement.parentNode.lastChild;
	        do
	        {
				if (state !== undefined)
				{
	                if (element.ratingValue > targetElement.ratingValue)
	                {
	                    this.setStarImage(element, false);
	                }
	                else
	                {
	                    this.setStarImage(element, state);
	                }
				}
				else
				{
					this.setStarImage(element, element.ratingValue <= element.parentNode.ratingValue);
				}
	        }
	        while (element = element.previousSibling);
		}
	},
	
	handleStarHover : function()
	{
        this.ratingControl.setPrecedingStarImage(this, true);
	},
	
	handleStarLeave : function()
	{
		this.ratingControl.setPrecedingStarImage(this);
	},
	
	handleStarClick : function()
	{
        if (!this.parentNode.ratingLock)
        {
            this.parentNode.ratingLock = true;
            this.parentNode.ratingValue = this.ratingValue + 1;

            var request = new HttpRequest();
            request.setCallback(this.ratingControl.handleStarClickResponse, this);
            request.sendRequest("/wildcard", {
                'cms[categoryID]' : 56,
                'cms[template]' : 'ajax',
                'cms[exclusive][]' : 217,
                'cms[cm217][contentID]' : this.parentNode.contentId,
                'cms[cm217][rating]' : this.ratingValue
            }, true);
        }
	},
    
    handleStarClickResponse : function(response)
    {
        cms.cookie.writeEntry("rated", 1, 365);

        for (var iSelectors = 0 ; iSelectors < this.ratingControl.selectors.length ; iSelectors++)
        {
            var selector = this.ratingControl.selectors[iSelectors];
            if (selector != this.parentNode)
            {
                selector.innerHTML = "";
                selector.textElement.innerHTML = "";
            }
        }
        this.parentNode.textElement.innerHTML = "BEDANKT VOOR UW STEM!";
    }
}

cms.event =
{
    virtualHandlers : new Object(),

    fire : function(element, eventName)
    {
        if (document.createEventObject)
        {
            var event = document.createEventObject();
            return element.fireEvent("on" + eventName, event);
        }
        var event = document.createEvent("HTMLEvents");
        event.initEvent(eventName, true, true);
        return !element.dispatchEvent(event);
    },

    attach : function(element, eventName, callback, thisKeyword, attachToProperty)
    {
        var eventHandler = callback;
        if (thisKeyword != undefined)
        {
            eventHandler = function(event)
            {
                if (event == undefined)
                {
                    event = window.event;
                }
                return callback.call(thisKeyword, event);
            };
            this.virtualHandlers[callback] = eventHandler;
        }

        if (attachToProperty)
        {
            element["on" + eventName] = eventHandler;
        }
        else if (element.addEventListener)
        {
            element.addEventListener(eventName, eventHandler, false);
        }
        else if (element.attachEvent)
        {
            element.attachEvent("on" + eventName, eventHandler);
        }
    },

    detach : function(element, eventName, callback, detachFromProperty)
    {
        if (this.virtualHandlers[callback] != undefined)
        {
            callback = this.virtualHandlers[callback];
            delete this.virtualHandlers[callback];
        }

        if (detachFromProperty)
        {
            element["on" + eventName] = undefined;
        }
        else if (element.removeEventListener)
        {
            element.removeEventListener(eventName, callback, false);
        }
        else if (element.detachEvent)
        {
            element.detachEvent("on" + eventName, callback);
        }
    }
}

function HttpRequest()
{
    this.request;
    this.callbackObject;
    this.callbackMethod;
    this.responseAsXml;
    
    this.createRequest = function()
    {
        if (window.XMLHttpRequest)
        {
          return new XMLHttpRequest()
        }
        else if (window.ActiveXObject)
        {
          return new ActiveXObject("Microsoft.XMLHTTP")
        }
        return null;
    }
    
    this.setCallback = function(callback, callbackThis, responseAsXml)
    {
        this.callback = callback;
        this.callbackThis = callbackThis;
        this.responseAsXml = responseAsXml;
    }
    
    this.sendRequest = function(url, query, post)
    {
        if (this.request == undefined)
        {
            this.request = this.createRequest();
        }
        if (this.request != null)
        {
            cms.event.attach(this.request, 'readystatechange', this.onResponse, this, true);
            
            if (typeof query == "object")
            {
                var queryString = "";
                for (var property in query)
                {
                    if (queryString.length > 0)
                    {
                        queryString += "&";
                    }
                    queryString += property + "=" + escape(query[property]);
                }
                query = queryString;
            }
            this.request.open((post)? "POST" : "GET", url, true);
            if (post)
            {
                this.request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            }
            this.request.send(query);
        }
    }
    
    this.onResponse = function()
    {
        if (this.request.readyState == 4 && this.request.status == 200)
        {
            var response = (this.responseAsXml)? this.request.responseXML : this.request.responseText;

            if (this.callbackThis == undefined)
            {
                this.callback(response, this);
            }
            else
            {
                this.callback.call(this.callbackThis, response, this);
            }
        }
    }
}

cms.cookie =
{
    getEntry : function(key)
    {
        var offset = document.cookie.indexOf(key + "=");
        if (offset != -1)
        {
            offset += key.length + 1;
            var end = document.cookie.indexOf(";", offset);
            if (end == -1)
                end = document.cookie.length;
            return unescape(document.cookie.substring(offset, end));
        }
        return "";
    },
    
    writeEntry : function(key, data, expireDays)
    {
        var expire = new Date();
        if (expireDays != undefined)
        {
            expire.setDate(expire.getDate() + expireDays);
        }
        document.cookie = key + "=" + escape(data) + ";expires=" + expire.toGMTString();
    }
}
