var xmlHttp;
var myid = 0;
var login_generator = "";
var login_script = "";
var rat_items = new Array();

// Ajax Request method 
function createXMLHttpRequest() 
{
    if (window.ActiveXObject) 
    {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) 
    {
        xmlHttp = new XMLHttpRequest();
    }
}

    // Old starImages array before including the fractional display of elements 
	/* var starImages = new Array("images/0star.gif",
	"images/1star.gif",
	"images/2star.gif",
	"images/3star.gif",
	"images/4star.gif",
	"images/5star.gif");*/
	
	// Preload images into the array 1.5,2.5,3.5,4.5 are loaded to display the average rating after mouseover
	var starImages = new Array(ratingimgpath+"/0star.gif",
	ratingimgpath+"/1star.gif",
	ratingimgpath+"/2star.gif",
	ratingimgpath+"/3star.gif",
	ratingimgpath+"/4star.gif",
	ratingimgpath+"/5star.gif",
	ratingimgpath+"/stars1.5.gif",
	ratingimgpath+"/stars2.5.gif",
	ratingimgpath+"/stars3.5.gif",
	ratingimgpath+"/stars4.5.gif");
	
	var nullStarMessage = ratingimgpath+"/0.gif"
	/*
	var starMap = new Array('0,0,6,10',
	'6,0,16,10',
	'17,0,26,10',
	'27,0,38,10',
	'38,0,47,10',
	'48,0,63,10');
	*/
	
	var starMap = new Array('0,0,4,8',
	'4,0,12,8',
	'13,0,21,8',
	'22,0,30,8',
	'31,0,39,8',
	'40,0,48,8');
	
	var starMessages = new Array(ratingimgpath+"/0.gif",
	ratingimgpath+"/1.gif",
	ratingimgpath+"/2.gif",
	ratingimgpath+"/3.gif",
	ratingimgpath+"/4.gif",
	ratingimgpath+"/5.gif",
	ratingimgpath+"/saved.gif");
	
	var savedRatings = new Array();
	var changedRatings = new Array();
	var starTwinkler = new Array();
	var msgTwinkler = new Array();
	var isRatingsBarChanged = false;
	var delayTime = 500;
	var allImages = new Array();
	
function preloadImages()
{
	try {
	for (i=0; i < preloadImages.length ;i++)
	{
	allImages[i] = new Image();
	allImages[i].src = preloadImages.arguments[i];
	}
	}catch(ex)
	{
	    
	}
}

preloadImages(starImages);
preloadImages(starMessages);

// Sends the rating as parameters to ajaxRating.aspx, more parameters are to be added 
function SaveRatingAjax(con,id, ratingType, ratingValue)
{
	try 
	{
	var sPath = window.location;
    //var sPage = sPath.substring(sPath.lastIndexOf('\\') + 1);
    //var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);

	rating = ratingValue;
	var submitURL = ''
	+ 'ajaxRating.aspx?'
	+ 'id=' + id
	+ '&Rating=' + ratingValue
	+ '&Page=' + sPath
	+ '&ConsumerID=' + con
	+ '&PriBrandID=' + pribrandid
	+ '&SiteID=' + siteid;
	//alert(submitURL);
	myid = id;
	isRatingsBarChanged = true;
		createXMLHttpRequest();
		xmlHttp.onreadystatechange = handleStateChange;
		xmlHttp.open("GET", submitURL, true);
		xmlHttp.send(null);
	}
	catch(ex)
	{
	    alert(ex.Description);
	}
	
}

// overloaded method of above, adding email to the values sent off.
function SaveRatingAjax(con,id, ratingType, ratingValue, email)
{
	try 
	{
	var sPath = window.location;
    //var sPage = sPath.substring(sPath.lastIndexOf('\\') + 1);
    //var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
    
	rating = ratingValue;
	var submitURL = ''
	+ 'ajaxRating.aspx?'
	+ 'id=' + id
	+ '&Rating=' + ratingValue
	+ '&Page=' + sPath
	+ '&ConsumerID=' + con
	+ '&Email=' + email
	+ '&PriBrandID=' + pribrandid
	+ '&SiteID=' + siteid;
	//alert(submitURL);
	myid = id;
	isRatingsBarChanged = true;
		createXMLHttpRequest();
		xmlHttp.onreadystatechange = handleStateChange; // function to handle the return value.
		xmlHttp.open("GET", submitURL, true);
		xmlHttp.send(null);
	}
	catch(ex)
	{
	    alert(ex.Description);
	}
	
}

// Display the scores and average values after rating value is obtained from the server
function handleStateChange() 
{

    if(xmlHttp.readyState == 4) 
    {
        if(xmlHttp.status == 200) 
        {
  
        myid = myid;
        var myScore = document.getElementById("lblScore" + myid).innerHTML;
        var myTotal = document.getElementById("lblTotal" + myid).innerHTML;
        var myVotes = document.getElementById("lblVotes" + myid).innerHTML;
       
        
            myScore  = (parseInt(myScore,10) + parseInt(rating,10));
            myTotal = eval(parseInt(myTotal,10) + parseInt(5,10));
            myVotes = eval(parseInt(myVotes,10) + parseInt(1,10));
        
           //document.getElementById("ltlstars" + myid).innerHTML  = '<IMG src=images/' + rating + 'star.gif>';
           if(thankyoumsg != "")
           {
                document.getElementById("ltlMsg" + myid).innerHTML  = thankyoumsg;
           }
           else 
           {
			    document.getElementById("ltlMsg" + myid).innerHTML  = "<IMG src='"+ratingimgpath+"/saved.gif' />";
		   }
			//document.getElementById("mytrating" + myid).innerHTML = '<IMG src="images/stars' + xmlHttp.responseText + '.gif">';
			//document.getElementById("ltlstars" + myid).innerHTML  = '<IMG src="images/stars' + xmlHttp.responseText + '.gif">';			
			document.getElementById("lblScore" + myid).innerHTML = myScore;
			document.getElementById("lblTotal" + myid).innerHTML = myTotal;
			document.getElementById("lblVotes" + myid).innerHTML = myVotes;
			//document.getElementById("lblAvg" + myid).innerHTML = (myScore/myVotes);
			var ORating = myScore/myVotes;
			document.getElementById("lblAvg" + myid).innerHTML = ORating.toFixed(2);
			/*
			var i = 1;
			while (ORating > 5)
			{
			    ORating = (myScore/(myVotes+i));
			    i++;
			}*/
			
			
			var  myTotalRatingString = "0";
			if ((ORating < 1) && (ORating > 0))
               myTotalRatingString = ".5";
            else if (ORating == 1.0)
               myTotalRatingString = "1";
            else if ((ORating > 1) && (ORating < 2))
               myTotalRatingString = "1.5";
            else if (ORating == 2.0)
               myTotalRatingString = "2";
            else if ((ORating > 2) && (ORating < 3))
               myTotalRatingString = "2.5";
            else if (ORating == 3.0)
               myTotalRatingString = "3";
            else if ((ORating > 3) && (ORating < 4))
               myTotalRatingString = "3.5";
            else if (ORating == 4.0)
               myTotalRatingString = "4";
            else if ((ORating > 4) && (ORating < 5))
               myTotalRatingString = "4.5";
            else if (ORating == 5.0)
                myTotalRatingString = "5";
            else if (ORating == 0.0)
                myTotalRatingString = "0";
            document.getElementById("ltlstars" + myid).innerHTML  = "<IMG src='"+ratingimgpath+"/stars" + myTotalRatingString + ".gif'>";
            var other_ele = document.getElementById("ltlstars_" + myid);
            if(other_ele != null)
            {
                other_ele.innerHTML = "<IMG src='"+ratingimgpath+"/stars" + myTotalRatingString + ".gif'>";
            }
	    }
        else
        {
            alert("There was an internal error.  Please try again later.");
        }
    }
}

// Called by OnMouseOut event if the item is not rated
function SwapStars(id,rating)
{
	try 
	{
	    if (rating == undefined)
	    {
		    rating = 0;
	    }
	    switch(rating)
	    {
	        case "1.5": document.images["stars."+id].src = starImages[6]; break;
	        case "2.5": document.images["stars."+id].src = starImages[7]; break;
	        case "3.5": document.images["stars."+id].src = starImages[8]; break;
	        case "4.5": document.images["stars."+id].src = starImages[9]; break;
	        default: document.images["stars." + id].src = starImages[rating]; break;
	    }
	}
	catch(ex)
	{	    
	}	
}

// Changes the message below the rating 
function SwapStarMsg(id, rating)
{
    try {
	    if (rating == undefined)
	    {
		    if ( changedRatings[id] ) 
		    {
    		
			    document.images["messages." + id].src = starMessages[6];
		    } 
		    else 
		    {
    		
			    document.images["messages." + id].src = nullStarMessage;
		    }
	    } 
	    else 
	    {
		    document.images["messages." + id].src = starMessages[rating];
	    }
	}
	catch(ex)
	{
	}
}

// Called by the onlick event when the user rates an item
function SaveStarsAjax(con,id, rating)
{
 
  
	if ((rating==1)||(rating==2)||(rating==3)||(rating==4)||(rating==5))
	{
	    savedRatings[id] = rating;
	    changedRatings[id] = 1;
	    SaveRatingAjax(con,id, 'onetofive', rating);
	    SwapStarMsg(id, 6);
	}
	else
	{
	    alert("Rating Value out of the bound, Values can only be 1/2/3/4/5. Current rating value: " + rating);
	}
}

// overload the save stars method by adding an email.
function SaveStarsAjax(con,id, rating, email)
{
 
  
	if ((rating==1)||(rating==2)||(rating==3)||(rating==4)||(rating==5))
	{
	    savedRatings[id] = rating;
	    changedRatings[id] = 1;
	    SaveRatingAjax(con,id, 'onetofive', rating, email);
	    SwapStarMsg(id, 6);
	}
	else
	{
	    alert("Rating Value out of the bound, Values can only be 1/2/3/4/5. Current rating value: " + rating);
	}
}

// OnMouseOver event for the starmap
function StarMouseOver(id, rating)
{
//alert("StarMouseOver:" + id + ":" + rating);

	if (starTwinkler[id] != 0)
	{
	    window.clearTimeout(starTwinkler[id]);
	    starTwinkler[id] = 0;
	}
	if (msgTwinkler[id] != 0)
	{
	    window.clearTimeout(msgTwinkler[id]);
	    msgTwinkler[id] = 0;
	}
  SwapStars(id, rating);
  SwapStarMsg(id, rating); 
}

// OnMouseOut event for the starmap
function StarMouseOut(id,str)
{
//alert("StarMouseOut:" + id);
    
	starTwinkler[id] = window.setTimeout("SwapStars('"+id+"','"+str+"')", delayTime);
	msgTwinkler[id] = window.setTimeout("SwapStarMsg('"+id+"')", delayTime);
}

// Called initially to display the star map with the average value
function DisplayStarsAjax (con,id, rating,str,email)
{
//alert("DisplayStarsAjax:" + id);
	var starID = "stars." + id;
	starTwinkler[id] = 0;
	msgTwinkler[id] = 0;
	document.write("<map name='starmap" + id +"'>");
	var i = 0;
	for (i = 1; i < 6; i++) 
	{
	document.write("<area shape=rect " + 
	"coords='" + starMap[i] + "' " +
	"onMouseOver=\"StarMouseOver('" + id + "'," + i + ");\" " +
	"onMouseOut=\"StarMouseOut('" + id + "','"+str+"');\" " +
	"onClick=\"SaveStarsAjax('"+con+"','" + id + "'," + i + ",'" + email + "');" +
	"\" >");
	}
	
	document.write("</map>");
	if(str != undefined)
	{
	    document.write("<img vspace=2 title = 'Rate Item' src='"+ratingimgpath+"/stars" + str + ".gif'");
	    
	}
	else 
	{
	    document.write("<img vspace=2 title = 'Rate Item' src='" + starImages[rating] + "'");
	}	
	document.write(" border=0 usemap='#starmap" + id);
	document.write("' id='" + starID + "'/>");
	generateScript(con,id,rating,str,email);

}

/*
// Displays the message with the star map
function DisplayMsgAjax (id,rating)
{
//alert("DisplayMsgAjax:" + id);
	var msgID = "messages." + id;
	if ( rating == undefined ) 
	{
		document.write("<img vspace=2 height=11 src='" + nullStarMessage + "'");		
	}
	else 
	{
	document.write("<img vspace=2 height=11 src='" + starMessages[rating] + "'"); 
	}
	document.write("' id='" + msgID + "' />");
}
*/

// Displays the message with the star map
function DisplayMsgAjax (id,rating)
{
//alert("DisplayMsgAjax:" + id);
	var msgID = "messages." + id;
	if ( rating == undefined ) 
	{
		//document.write("<img height=16 src='" + nullStarMessage + "'");		
		document.write("Rate the Album!");
	}
	else 
	{
	    //document.write("<img height=16 src='" + starMessages[rating] + "'");
	    document.write("Rate the Album!"); 
	}
	//document.write("' id='" + msgID + "' />");
}

// The member is not logged in
function LoginMessage(con,id,rating,str)
{
    alert('You must logged in to to use this feature.  Please log in.');
    login_generator = "ltlstars"+id;
    generateScript(con,id,rating,str);
    displayLoginForm();
}

// This function only displays ratings and does not make items ratable.
function DisplayStarsAjaxNoRate(con,id, rating,str)
{
//alert("DisplayStarsAjax:" + id);
	var starID = "stars." + id;
	starTwinkler[id] = 0;
	msgTwinkler[id] = 0;
	document.write("<map name='starmap" + id +"'>");
	var i = 0;
	for (i = 1; i < 6; i++) 
	{
	document.write("<area shape=rect " + 
	"coords='" + starMap[i] + "' " +
	"onClick=\"LoginMessage('"+con+"','"+id+"','"+rating+"','"+str+"')" +
	"\" >");
	}
	
	document.write("</map>");
	if(str != undefined)
	{
	    document.write("<img vspace=2 title = 'Rate Item' src='"+ratingimgpath+"/stars" + str + ".gif'");
	    
	}
	else 
	{
	    document.write("<img vspace=2 title = 'Rate Item' src='" + starImages[rating] + "'");
	}	
	document.write(" border=0 usemap='#starmap" + id);
	document.write("' id='" + starID + "' />");
	generateScript(con,id,rating,str);
}

function DisplayStarsAjaxNoRateNoMsg(con,id, rating,str)
{
//alert("DisplayStarsAjax:" + id);
	var starID = "stars." + id;
	starTwinkler[id] = 0;
	msgTwinkler[id] = 0;
	document.write("<map name='starmap" + id +"'>");
	var i = 0;
	for (i = 1; i < 6; i++) 
	{
	document.write("<area shape=rect " + 
	"coords='" + starMap[i] + "'  />");
	}
	
	document.write("</map>");
	if(str != undefined)
	{
	    document.write("<img vspace=2 title = 'Rate Item' src='"+ratingimgpath+"/stars" + str + ".gif' ");
	   
	}
	else 
	{
	    document.write("<img vspace=2 title = 'Rate Item' src='" + starImages[rating] + "'");
	}
	
	document.write(" border=0 usemap='#starmap" + id);
	document.write("' id='" + starID + "' />");
    generateScript(con,id,rating,str);	
}

// generates the stars and the javascript events 
function generateScript(con,id,rating,str)
{
    var rating_s = new Array();
    var starID = "stars." + id;
	starTwinkler[id] = 0;
	msgTwinkler[id] = 0;
	rating_s[rating_s.length] = "<map name='starmap" + id +"'>";
	var i = 0;
	for (i = 1; i < 6; i++) 
	{
	rating_s[rating_s.length] = "<area shape=rect " + 
	"coords='" + starMap[i] + "' " +
	"onMouseOver=\"StarMouseOver('" + id + "'," + i + ");\" " +
	"onMouseOut=\"StarMouseOut('" + id + "','"+str+"');\" " +
	"onClick=\"SaveStarsAjax('"+con+"','" + id + "'," + i + ");" +
	"\" >";
	}
	
	rating_s[rating_s.length]= "</map>";
	if(str != undefined)
	{
	    rating_s[rating_s.length] = "<img vspace=2 title = 'Rate Item' src='"+ratingimgpath+"/stars" + str + ".gif'";
	    
	}
	else 
	{
	    rating_s[rating_s.length] = "<img vspace=2 title = 'Rate Item' src='" + starImages[rating] + "'";
	}	
	rating_s[rating_s.length] = " border=0 usemap='#starmap" + id;
	rating_s[rating_s.length] = "' id='" + starID + "' />";
	login_script = rating_s.join("");
	rat_items[rat_items.length] = id+"|"+login_script;	
}

// overloaded method of above adding email.
function generateScript(con,id,rating,str,email)
{
    var rating_s = new Array();
    var starID = "stars." + id;
	starTwinkler[id] = 0;
	msgTwinkler[id] = 0;
	rating_s[rating_s.length] = "<map name='starmap" + id +"'>";
	var i = 0;
	for (i = 1; i < 6; i++) 
	{
	rating_s[rating_s.length] = "<area shape=rect " + 
	"coords='" + starMap[i] + "' " +
	"onMouseOver=\"StarMouseOver('" + id + "'," + i + ");\" " +
	"onMouseOut=\"StarMouseOut('" + id + "','"+str+"');\" " +
	"onClick=\"SaveStarsAjax('"+con+"','" + id + "'," + i + ",'" + email + "');" +
	"\" >";
	}
	
	rating_s[rating_s.length]= "</map>";
	if(str != undefined)
	{
	    rating_s[rating_s.length] = "<img vspace=2 title = 'Rate Item' src='"+ratingimgpath+"/stars" + str + ".gif'";
	    
	}
	else 
	{
	    rating_s[rating_s.length] = "<img vspace=2 title = 'Rate Item' src='" + starImages[rating] + "'";
	}	
	rating_s[rating_s.length] = " border=0 usemap='#starmap" + id;
	rating_s[rating_s.length] = "' id='" + starID + "' />";
	login_script = rating_s.join("");
	rat_items[rat_items.length] = id+"|"+login_script;	
}


var id = 0;
var rating = 0;
savedRatings[id] = rating;

