
var rateGreenImg = "/images/rate_green.gif";
 var ratePinkImg = "/images/star_selected.gif"; 
 var rateNotSelectedImg = "/images/star_Notselected.gif";                   
    
 var avgRatingRater;
 var thisNameRater;



String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}


var disabledAddBtnImg = "/images/+_inactive.gif";
var addBtnImg = "/images/+.gif";
var removeBtnImg = "/images/x.gif";

function CallGetLoadYouMayAlsoLikeHtml(userID, ctxt)
{   
       
   TheCradleBabyNames.Services.BabyNameService.GetYouMayAlsoLikeHtml(userID, OnGetLoadYouMayAlsoLikeHtmlComplete, OnWebServiceCallError, ctxt);                        
   return false;
}

function OnGetLoadYouMayAlsoLikeHtmlComplete(result, userContext)
{   
    if(userContext != null)
    {
         if(userContext.CallbackFn != null)
         {             
            userContext.CallbackFn(result);
         }           
    }    
}
  
    
function OnClickAddRemoveFavorite(userID, nameID, newStatus, ctxt)
{   
   TheCradleBabyNames.Services.BabyNameService.AddRemoveFavorites(userID, nameID, newStatus, OnAddRemoveFavoritesComplete, OnWebServiceCallError, ctxt);                        
   return false;
}
    
    
function OnAddRemoveFavoritesComplete(result,userContext)
{ 
    if(userContext != null)
    {
     if(userContext.CallbackFn != null)
     {             
        userContext.CallbackFn(result, userContext.Data);
     }           
     }
}   
   
   
   
function DivImageData() {
    this.DivPrefix; 
    this.TopIndexOfImageElement;    
}
 
   
   
function UpdateAddToFavButtons(nameID, removed)
{  
    var d1 = new DivImageData();
    d1.DivPrefix = "divTrbn_";// div as in My Rated Baby Names
    d1.TopIndexOfImageElement = 4;
    
    var d2 = new DivImageData();
    d2.DivPrefix = "divYMAL_"; // div as inYou May Also Like Ctrl
    d2.TopIndexOfImageElement = 3;
    
    var divImagesToUpdate = new Array();
    divImagesToUpdate[0] = d1;
    divImagesToUpdate[1] = d2;
    
    
    for(var i = 0; i < divImagesToUpdate.length; i++)
    {
        var d = divImagesToUpdate[i];                       
        
        var divID = d.DivPrefix + nameID; 
        var topLevelDivRow = document.getElementById(divID);
       
        if(topLevelDivRow != null)
        {               
            var theDiv = topLevelDivRow.getElementsByTagName("div")[d.TopIndexOfImageElement];
            var imgElement = theDiv.getElementsByTagName("a")[0].getElementsByTagName("img")[0];
            ToggleAddToFavImage(imgElement,removed);               
        }           
    }   
    
}
   
   
   
function RemoveFromFav(nameID)
{       
    var divID = "divFBN_" + nameID; // this div name is as in the favoritenamesctrl.ascx file.
    var currentRec = document.getElementById(divID);
    currentRec.parentNode.removeChild(currentRec);        
    var newStatus = 0; //               
    
    var ctxt = new BC_AjaxCallBackInfo();
    ctxt.CallbackFn = OnMyFavRemoveFromFavComplete;
    ctxt.Data = nameID;
    
    return OnClickAddRemoveFavorite(userID, nameID, newStatus, ctxt);
}


function OnMyFavRemoveFromFavComplete(result, data)
{
   var removed = true;
   UpdateAddToFavButtons(data, removed);
}

    
    
    
function ToggleAddToFavImage(img)
{    
  if(img.getAttribute("NextStatus") == 0) // next status
  {
     img.src = addBtnImg;
     img.alt = "Add to Favorites";
     img.setAttribute("NextStatus",1);
    
  }
  else
  {
     img.src = removeBtnImg;
     img.alt = "Remove from Favorites";
     img.setAttribute("NextStatus",0); 
  }
}
       
    
function OnWebServiceCallError(objError, response, userContext) 
{  
    if(objError) 
    {
        alert(objError.get_message() + '\r\nError: ' + objError.get_exceptionType()  );
    }
    else 
    {
        alert('Response status code: ' + response.get_statusCode());
    }            
}
    
function BC_AjaxCallBackInfo() {
    this.CallbackFn; 
    this.Data;
}
    
function setCookie(c_name,value,expiredays)
{
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" +escape(value)+
    ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}



  function OnCAAFL(imgID, nameID)
   {
   
        if(userID == 0)
        {
            var redirectUrl = upsellPage + "?targetUrl=" + top.location.href;            
            setCookie("favAddID", nameID, 1);             
            top.location.href = redirectUrl;
            return false;
        }
        else
        { 
          var img = document.getElementById(imgID);
            var ctxt = new BC_AjaxCallBackInfo();
            ctxt.CallbackFn = OnAddToFavComplete;
            ctxt.Data = nameID;
            lastClickedImg = img;
            img.src = disabledAddBtnImg;
            //alert("nextstatus = " + img.getAttribute("NextStatus"));
            OnClickAddRemoveFavorite(userID, nameID, img.getAttribute("NextStatus") ,ctxt);  
        }
        
   }
   
  function OnAddToFavComplete(result, data)
  {          
//      if(lastClickedImg.getAttribute("NextStatus") == 0) // next status
//      {
//         lastClickedImg.src = addBtnImg;
//         lastClickedImg.alt = "Add to Favorites";
//         lastClickedImg.setAttribute("NextStatus",1);
//        
//      }
//      else
//      {
//         lastClickedImg.src = removeBtnImg;
//         lastClickedImg.alt = "Remove from Favorites";
//         lastClickedImg.setAttribute("NextStatus",0); 
//      }
  
   if(typeof(RefreshFavs) != "undefined")
   {
        RefreshFavs(data); // this function refreshes the clicked button images..
   }
   else
   {
        ToggleAddToFavImage(lastClickedImg, 0); // this is called from NameDetail page, so, let us directly update it.
   }
}
  
  
  function OnClickAddRemoveFavoriteLocal(nameID)
   {
        var ctxt = new BC_AjaxCallBackInfo();
        ctxt.CallbackFn = AddToFavoritesCompleted;
        var newStatus = document.getElementById("btnAddAsFav").getAttribute('NextStatus');
        OnClickAddRemoveFavorite(userID, nameID,newStatus, ctxt);   
        return false;
  }   


   function  AddToFavoritesCompleted(result,data)
   {
       var addRemoveBtn = document.getElementById("btnAddAsFav");     
       addRemoveBtn.src = result.NewImageUrl;                
       addRemoveBtn.setAttribute("NextStatus", result.NextStatus);        
       addRemoveBtn.title = result.BtnToolTip;  
       document.getElementById(lblAddRemTxtID).innerHTML = result.NewTxt;
       return false;     
   }   
   
   
   
   
   
   




/***********************************************************************************/
/************ Rating Related. ***************/   
   
   
function onRateThisNameClicked(rater, ratingValue)
{
    return CallRateThisNameSvc(ratingValue, rater.data, onRateThisNameCompleted, rater);
}
function onOneRatingClicked(rater, ratingValue)
{
        return CallRateThisNameSvc(ratingValue, rater.data, onOneRatingComplete, rater);
}



function onRateThisNameCompleted(result,userContext)
{
    document.getElementById("divAvg" + userContext.Data).innerHTML = result.AvgRating.toFixed(1);
    avgRatingRater.settings.initialValue = result.AvgRating;                     
    avgRatingRater.draw(false);       
    var rater = userContext.Rater;
    applyRated(rater,result.Rating);
    document.getElementById(currentRatingLabel).innerHTML = "Your Rating: " + result.Rating.toFixed(1);
}

function onOneRatingComplete(result,userContext)
{  
   document.getElementById("divAvg" + userContext.Data).innerHTML = result.AvgRating.toFixed(1);   
   applyRated(userContext.Rater,result.Rating);
}

function applyRated(rater, newVal)
{
   rater.settings.initialValue = newVal;
 //  rater.settings.onSrc = rateGreenImg;
   rater.settings.valSrc = rateGreenImg;
   rater.draw(true);        
}


function CreateRatingsFromData(theseRatings, onRate)   
{

    for(var i = 0; i < theseRatings.length; i++)
    {            
        var oneRating = theseRatings[i].split(","); // ratingData[0] =  "1,2,true,Name";   Name-ID, Initial Val, isRated, Name
        var divID = "divRat" + oneRating[0];
        var data = oneRating[0] + ":" + oneRating[3]; // ID , and Name
        var initialVal = oneRating[1];                    
        var isRated = oneRating[2];                    
        var onSrc = "";
        var valSrc = rateGreenImg;
        if(isRated == "true")
        {           
            valSrc = rateGreenImg;
        }
        else
        {
            valSrc = ratePinkImg;
        }   
        
        if(initialVal == "0")
        {
            onSrc = rateGreenImg;
        }            
        onSrc = rateGreenImg;
        
        var rater = createRating(divID, onSrc,valSrc, initialVal, data, onRate);
        
       if("divRat-1" == divID) // this is dIV id for the "Average Rating for This Name";
       {
            avgRatingRater = rater;
            avgRatingRater.settings.reRate = false;
            avgRatingRater.draw(false);   
       }
       else if("divRat" + nameID == divID) // this is dIV id for the "Rating for This Name";
       {
             thisNameRater = rater;
       }
    }
}
           
           
function createRating(divID, onSrc, valSrc, initialVal, data, onRate)
{           
    
    var myRater1 = new Rater(divID);                     
    myRater1.settings.maxValue = 5;
    myRater1.settings.reRate = true;
    myRater1.settings.initialValue = initialVal;                   
    myRater1.settings.offSrc = rateNotSelectedImg;
    myRater1.settings.onSrc = onSrc;  //ratePinkImg;                   
    myRater1.settings.valSrc = valSrc; //"images/SavedStar.png";
    myRater1.data = data;
    myRater1.onRate = onRate;
    myRater1.draw(true);   
    return myRater1;             
//                     myRater.settings.offSrc = "off image url here";
//                     myRater.settings.onSrc = "hover image url here";
//                     myRater.settings.valSrc = "previous value image url here";
}

function BC_RaterClickData() {
        this.Rater; 
        this.Data;
}

            
function CallRateThisNameSvc(ratingValue,data, callBack, rater)
{
    var nData = data.split(":");
    var nameID = nData[0];
    var name  =  nData[1];    
    var ctxt = new BC_RaterClickData();
    ctxt.Rater = rater;
    ctxt.Data = nameID;
    TheCradleBabyNames.Services.BabyNameService.RateThisNameEx(userID, nameID, name, ratingValue, callBack, OnWebServiceCallError, ctxt);
    return true;
}

