/**
	max3 ranking JSON response format:
	[0][0] indicates response message
    [0][1] indicates max3 uuid  [optional]
    [0][2] indicates total number of users who voted the max3 [optional]
    [0][3] indicates avg rank got by the max3 [optional] 
	[0][4] indicates rank by logged in user[optional]

	track ranking JSON response format:
	[0][0] indicates response message
    [0][1] indicates track id  [optional]
    [0][2] indicates new avg rank [optional]
	[0][3] indicates rank by logged in user[optional]
*/
function rankMax3(elem, memo)
{
	new Ajax.Request('/max3/rank',
						{
							asynchronous:true,
							evalScripts:true,
							onComplete:function(request,json)
									   {
											json = eval(request.responseText);
											max3RankingResponse(elem, json, memo);
											memo.rated = json[0][4]?json[0][4]:memo.rated;
									    },
							onFailure:function(request,json)
									  {
											smdAlert('Request Failed', '<div class=formerror>Sorry, could not complete the request.</div>')
									  },
							parameters:'uuid='+ memo.identity + '&rank='+ memo.rated
						 }
					  ); 
}
 
function rankTrack(elem, memo)
{
	new Ajax.Request('/max3/rankTrack',
						{
							asynchronous:true,
							evalScripts:true,
							onComplete:function(request,json)
									   {
											json = eval(request.responseText);
											trackRankingResponse(elem, json, memo);
											memo.rated = json[0][3]?json[0][3]:memo.rated;
										},
							onFailure:function(request,json)
									  { 
											smdAlert('SMD Alert', '<font class"formerror">Request failed. Please try again.</font>'); 
									  },
							parameters:'tid='+ memo.identity +'&rank='+ memo.rated
						}
				      ); 
}

function max3RankingResponse(elem, json, memo)
{
	 if(json[0][0].length > 0)
        {     
	       var userStatus = json[0][4]; 
           if(userStatus==5)
            {
               rankMax3Inactivate(elem, memo);
            }
            else
            {
              turnOnCloseableAlert('Ranking Error', json[0][0]);
            } 
        } 

      if(json[0].length > 1)
      {   
		  //avgRank = json[0][3]?(parseFloat(json[0][3])):0;//avg user rank
		  uRank = json[0][4]?(parseFloat(json[0][4])):0;//user rank
		  if(json[0][5])//if user not logged in
		  {
			  var options = {onRate: rankMax3, identity: memo.identity};
			  uRank = json[0][3]?(parseFloat(json[0][3])):0;//avg user rank
		  }
		  else
		  {
			  var options = {locked: true, className: 'rated'};
		  }
		  new Starbox(elem, uRank, options);
      }
}

function trackRankingResponse(elem, json, memo)
{
	  var userRank, avgRank;

     if(json[0][0].length > 0)
      {
          var userStatus = json[0][5];
          if(userStatus==5)
            {
               rankMax3Inactivate(elem, memo);
            }
            else
            {
	            turnOnCloseableAlert('Ranking Error', json[0][0]);
            }
      } 

      if(json[0].length > 1)//if enough info is present
      {
			avgRank = (parseFloat(json[0][2]));//avg user rank
			userRank = (parseFloat(json[0][3]));//user rank 

			if(isNaN(userRank))
				return;

			if($('_' + json[0][1]))//if the extra avg user ranking indicator is there
			{
				new Starbox($('_' + json[0][1]), avgRank, {locked: true});
				if(json[0][4])//user is not logged in, allow multiple attempts
					new Starbox(elem, userRank, {onRate: rankTrack, identity: memo.identity});
				else
					new Starbox(elem, userRank, {locked: true, className: 'rated'});//lock after one attempt
			}
			else
		    {
				if(json[0][4])//user is not logged in, allow multiple attempts
					new Starbox(elem, avgRank, {onRate: rankTrack, identity: memo.identity});
				else
					new Starbox(elem, userRank, {locked: true, className: 'rated'});//lock after one attempt
		    }
      }
}

function addPostRatingTip(elem, memo, ent)
{
	new Tip(elem, 'You have ranked this ' + ent + ' ' + memo.rated + '/' + memo.max,	
					 {
					  title: '',
					  style:'max3Tip',     
					  delay: 0,
					  hideAfter: 2,
					  offset: {x:0, y:-2},
					  hideOthers:true,
					  width: 170,
					  hook: { target: 'topMiddle', tip: 'bottomMiddle' }
					}
		);
}

function rankMax3Inactivate(elem, memo)
{
    

    var divContent  =$('divFreeWithPoint').innerHTML; 
    smdAlert('Activation Alert', divContent);
}