﻿
function ThePortRatingsObj( sParentNodeName,
                            sRootNodeID,
                            oRatingTextNode,
                            oRatingTotalTextNode,
                            sRateOnImgPath,
                            sRateOffImgPath,
                            gOwnerID,
                            sItemTypeID,
                            sItemID,
                            sItemRatingType,
                            iItemScore,
                            iTotalNumRatings,
                            iUserItemRating,
                            sVoteNotAllowed,
                            iMaxRating,
                            iMinRating,
                            sDoVmixPost)
{
    this.m_activeID         = -1;
    this.m_oRoot            = null;
    this.m_iNumRatings      = iMaxRating-iMinRating;
    this.m_oRatings         = new Array(this.m_iNumRatings);
    this.m_sParentNodeName  = sParentNodeName;
    this.m_sRootNodeID      = sRootNodeID;
    this.m_sRateOnImgPath   = sRateOnImgPath;
    this.m_sRateOffImgPath  = sRateOffImgPath;
    this.m_gOwnerID         = gOwnerID;
    this.m_sItemTypeID      = sItemTypeID;
    this.m_sItemID          = sItemID;
    this.m_sItemRatingType  = sItemRatingType;
    this.m_iItemScore       = iItemScore;
    this.m_iTotalNumRatings = iTotalNumRatings;
    this.m_iUserItemRating  = iUserItemRating;
    if ((sVoteNotAllowed.toLowerCase() == "true")||(sVoteNotAllowed.toLowerCase() == "yes"))
        this.m_bVoteNotAllowed   = true;
    else this.m_bVoteNotAllowed   = false;
    this.m_iMaxRating       = iMaxRating;
    this.m_iMinRating       = iMinRating;
    this.m_sDoVmixPost      = sDoVmixPost;
    
    this.m_oRateThxNode     = oRatingTextNode;
    this.m_oRateTotalNode   = oRatingTotalTextNode;
  
    this.m_sPleaseClickMsg  = "Please click to rate this item";
    this.m_sAlreadyRated    = "You have already rated this item";
    this.m_sUserVotedMsg    = "Thank you!";
    this.m_sTotalVotesMsg   = "total ratings";
    this.m_oClickFns        = new Array(this.m_iNumRatings);
    this.m_oMouseOverFn     = new Array(this.m_iNumRatings);
    this.m_oMouseOutFn      = new Array(this.m_iNumRatings);
  
  // **********************************
  // Create the root node
  // **********************************
  this.m_root            = document.createElement("div");
  this.m_root.id         = sRootNodeID
  this.m_root.className  = ""
  for (i=0;i<this.m_iNumRatings;i++) {
        this.m_oRatings[i]              = document.createElement("img");
        this.m_oRatings[i].id           = i+"";
        this.m_oRatings[i].className    = "";
        this.m_oRatings[i].setAttribute('src', this.m_sRateOffImgPath);
        this.m_oRatings[i].setAttribute('height', '10px');
        this.m_oRatings[i].setAttribute('border', '0');
        // If the user has not voted, hook events to each vote image. 
        if (!this.m_bVoteNotAllowed) {
            var fn
            // Hook the OnClick event  
            fn = function(e) {if (window.event)el=e.srcElement;else el= e.currentTarget;this.RatingClick(parseInt(el.id),this);Event.stop(e);}.bind(this);
            this.m_oClickFns[i]=fn
            Event.observe(this.m_oRatings[i],'click',this.m_oClickFns[i]);
            // Hook the MouseOver Event...            
            fn = function(e) {if (window.event)el=e.srcElement;else el= e.currentTarget;this.RatingMouseOver(parseInt(el.id),this);Event.stop(e);}.bind(this);
            this.m_oMouseOverFn[i]=fn
            Event.observe(this.m_oRatings[i],'mouseover',this.m_oMouseOverFn[i]);
            // Hook the MouseOut Event...            
            fn = function(e){if (window.event)el=e.srcElement;else el= e.currentTarget;this.RatingMouseOut(parseInt(el.id),this);Event.stop(e);}.bind(this); 
            this.m_oMouseOutFn[i]=fn
            Event.observe(this.m_oRatings[i],'mouseout', this.m_oMouseOutFn[i]);
            }
        // Make sure it's visible & add to the main node.
        Element.show(this.m_oRatings[i]);
        this.m_root.appendChild(this.m_oRatings[i]);
        }
   this.SetScore(this);
   var elem = $(sParentNodeName);
   if (elem) elem.appendChild(this.m_root);
}


ThePortRatingsObj.prototype.RatingClick = function(i,obj)  
{	
    obj.m_bVoteNotAllowed = true
	var url = "/community/app/nf/callback/insertrating.aspx";
	var args = "r="+(i+1)+"&i="+obj.m_sItemID+"&ot="+obj.m_sItemTypeID+"&irt="+obj.m_sItemRatingType+"&o="+obj.m_gOwnerID+"&vmix="+obj.m_sDoVmixPost;
	iTotalRatings = parseInt(obj.m_iTotalNumRatings) + 1;
	
    var eUrl = encodeURI(url);
    var myAjax = new Ajax.Request(eUrl,{method: 'get', parameters: args, onComplete: this.RatingEvalResponse.bind(this)});
    if (obj.m_oRateThxNode)  obj.m_oRateThxNode.innerHTML = obj.m_sUserVotedMsg;
    if (obj.m_oRateTotalNode)  obj.m_oRateTotalNode.innerHTML = iTotalRatings + " " + obj.m_sTotalVotesMsg;
	
	for (var x = 0; x < obj.m_iNumRatings ; x++) {
        // Stop stopObserving has FF problems, so we remove each handler by hand.  :(
	    // This.m_oRatings[x].stopObserving();  // Remove all the handlers.
        Event.stopObserving(obj.m_oRatings[x],'click',obj.m_oClickFns[x])
        Event.stopObserving(obj.m_oRatings[x],'mouseover',obj.m_oMouseOverFn[x])
        Event.stopObserving(obj.m_oRatings[x],'mouseout',obj.m_oMouseOutFn[x])
        if (x<=i) 
	        obj.m_oRatings[x].src = obj.m_sRateOnImgPath;
        else obj.m_oRatings[x].src = obj.m_sRateOffImgPath;
        obj.m_oRatings[x].alt = obj.m_sAlreadyRated;		
	    }					
}


ThePortRatingsObj.prototype.SetScore = function(obj) 
{
    var x = 0;
    for (x=0;x<obj.m_iNumRatings;x++) {
        // If the user has voted, mark the vote images with a score already given.
        if (x<=obj.m_iItemScore-1) 
	        obj.m_oRatings[x].src = obj.m_sRateOnImgPath;
        else obj.m_oRatings[x].src = obj.m_sRateOffImgPath;
        obj.m_oRatings[x].alt = obj.m_sAlreadyRated;		
        }
}		


ThePortRatingsObj.prototype.RatingEvalResponse = function(originalRequest)
{  }


ThePortRatingsObj.prototype.RatingMouseOut = function(i,obj)
{		
    this.m_activeID = -1;
	if (Object.m_sRating==null)	{
	    for (var x = 0; x < obj.m_iNumRatings ; x++) {
	        obj.m_oRatings[x].src = obj.m_sRateOffImgPath;
		    obj.m_oRatings[x].alt = obj.m_sPleaseClickMsg;
		    }
    	}
    this.SetScore(obj);    	
}


ThePortRatingsObj.prototype.RatingMouseOver = function(i,obj) 
{		
    if (this.m_activeID==i) return;
	for (var x = 0; x < obj.m_iNumRatings ; x++) {
		if (x<=i) 
		    obj.m_oRatings[x].src = obj.m_sRateOnImgPath;
		else obj.m_oRatings[x].src = obj.m_sRateOffImgPath;
    	obj.m_oRatings[x].alt = obj.m_sPleaseClickMsg;
	    }
	this.m_activeID=i;
}


ThePortRatingsObj.prototype.tp_LoginRedirect = function(sURL)
{
	window.location = sURL;
}

