Slurp={
  provider:"/api/slurp/slurp?user=%u&password=%p&type=%t&json_function=Slurp.handleResponse&a",
  makeProvider:"/api/friends/add/%u?json_function=Slurp.makeFriendRes%i&c",
  inviteProvider:"/api/invite?name=%n&email=%e&json_function=Slurp.inviteFriendRes%i",
  breakProvider:"/api/friends/remove/%u?json_function=Slurp.breakFriendRes%i&d",
  makeCounter:0,
  breakCounter:0,
  inviteCounter:0
};

Slurp.performSlurp=function(form) {
  document.getElementById('slurp_error_div').style.display="none";
  var user=form.elements['slurp_user'].value;
  var pass=form.elements['slurp_password'].value;
  var type=form.elements['slurp_type'].value;
  if (!type) {
    document.getElementById('slurp_error').innerHTML="<p>You must select which provider to slurp from</p>";
    document.getElementById('slurp_error_div').style.display="block";
    return;
  }
  if (!user || !pass) {
    document.getElementById('slurp_error').innerHTML="<p>You need to include a username or password</p>";
    document.getElementById('slurp_error_div').style.display="block";
    return;
  }

  if (type=="GMAIL") {
    if (user.indexOf('@')<0) {
      user=user+"@gmail.com";
      form.elements['slurp_user'].value=user;
    }
  }

  var formSub=form.elements['slurp_submit'];
  formSub.disabled=true;
  formSub.style.display="none";
  if (!Slurp.loader) {
    var newImg=document.createElement('img');
    newImg.alt="Please Wait";
    newImg.src="/static/big-progress.gif";
    Slurp.loader=newImg;
    formSub.parentNode.insertBefore(newImg,formSub);
    Slurp.submitElement=formSub;
  }
  Slurp.emailProvider = type;
  var url=Slurp.provider.replace(/%u/g,encodeURIComponent(user)).replace(/%p/g,encodeURIComponent(pass)).replace(/%t/g,encodeURIComponent(type));
  jsonRequest(url);
};

Slurp.enableForm = function(enable){
  if(enable) {
    var form = byid('slurp_form')
    for(var i = 0; i < form.elements.lenght; i++){
      form.elements[i].disabled = false;
    }
    byid('slurpForm').style.display = 'block';
    byid('slurp_output').style.display = 'none';
  } else {
    byid('slurpForm').style.display = 'none';
    byid('slurp_output').style.display = 'block';
  }

}

Slurp.handleResponse=function(obj) {
  if (Slurp.submitElement) {
    Slurp.submitElement.disabled=false;
    Slurp.submitElement.style.display="inline";
  }
  if (Slurp.loader) {
    Slurp.loader.parentNode.removeChild(Slurp.loader);
    Slurp.loader=null;
  }
  var outputList=[];
  if (!obj.success) {
    document.getElementById('slurp_error').innerHTML="<p>" + obj.message + "</p>";
    document.getElementById('slurp_error_div').style.display="block";
  } else {
    byid('slurpForm').style.display = 'none';
    byid('slurp_output').style.display = 'block';
    var i,description;
    var checkButtonTemplate='<input type="checkbox" checked="checked" class="inputCheckboxMini" value="JOOSTNAME">';
    var inactiveButtonTemplate=document.getElementById('inactive_button_template').innerHTML;
    Slurp.otherContractsArray = obj.unknown;
    var usersToAdd = false;
    for (i=0;i<obj.joostusers.length;i++) {
      var user=obj.joostusers[i];
      if (user.alreadyfriend=="true") {
        description = "Already friends";
      } else {
        if (user.alreadyfriend=="false") {
          usersToAdd = true;
          description = checkButtonTemplate.replace(/JOOSTNAME/g, escapeHTML(user.joostId));
        } else {
          if (user.alreadyfriend=="pending") {
            description = inactiveButtonTemplate.replace(/TITLE/g,"Pending").replace(/ICON/g,"miniButtonLess").replace(/void\(1\)/g,"return false");
          } else {
            description = ""; // What to show suspended people?
          }
        }
      }
      if (window.User_Details && user.joostId==User_Details.joostName) {
        description='<img src="/static/minilabel-you.png" class="minilabelYou" alt="You"/>';
      }
      var thumbnail='/static/joost_generic_t1.jpg';
      if (user.profileImage) {
        thumbnail=user.profileImage;
      }
      
      outputList.push( {title:escapeHTML(user.userName),thumbnail:thumbnail,
                        link:'users/'+user.joostId+"/",description:description});
    }

    if(!usersToAdd){
      if(Slurp.otherContractsArray && Slurp.otherContractsArray.length) {
        Slurp.inviteOtherContacts();
      } else {
        Slurp.enableForm(true);
        document.getElementById('slurp_error').innerHTML="<p>No contacts found, try another account!</p>";
        document.getElementById('slurp_error_div').style.display="block";
      }
      return;
    }

    var inviteList=[];
    var str="";
    if (obj.joostusers.length>0) {
      str += '<h2>People you know on Joost</h2> ';
      str += '<p>The following people from your ' + Slurp.emailProvider.toLowerCase() + ' address book are already on Joost. Become their Joost friend now.';
      str += '<br/><a href="#" onclick="Slurp.enableForm(true); return true;">Have another email account?</a> Find more friends using that email address.</p><br/>';
      str += '<div style="float: right;"><p><input type="button" class="inputSubmit" onclick="Slurp.invitePeople(true)" value="Next" id="inviteButton"></p></div>'
      str += '<div style="clear: right;"><p><input type="button" class="inputButton" onclick="Slurp.unSelectFriends(this)" value="Unselect All"></p></div>';
      str += '<div id="friendsOnJoost">' + renderThumbAndTextList(outputList) + '</div>';
    }

    if (str=="") {
      str="<h3>No friends found...</h3>";
    }

    document.getElementById('slurp_output').innerHTML=str;
    FBParseDom();
  }

};

Slurp.inviteOtherContacts = function(successMsg){
  var inactiveButtonTemplate=document.getElementById('inactive_button_template').innerHTML;
  var checkButtonTemplate='<input type="checkbox" checked="checked" class="inputCheckboxMini" value="JOOSTNAME">';

  var contacts = Slurp.otherContractsArray;
  var inviteList = [], str = '';
  for (i=0;i<contacts.length;i++) {
    var user=contacts[i];
    if (user.invited=="yes") {
      var description=inactiveButtonTemplate.replace(/TITLE/g,"Invited").replace(/ICON/g,"miniButtonLess").replace(/void\(1\)/g,"return false");
    } else {
      description=checkButtonTemplate.replace(/JOOSTNAME/g, escapeHTML(user.userName +"|s%"+ user.email).replace(/'/gim,"\'"));
    }
    inviteList.push( { title: escapeHTML(user.userName), thumbnail:'/static/joost_generic_t1.jpg',
                       type:'user', link:'#', description : description});
  }
  if (contacts.length > 0) {
    str += '<div id="friendsNotOnJoost"><h2>Invite people to Joost</h2>';

    if(successMsg) {
      str += "<p>Congratulations - you have just added " + Slurp.completeFriendCount + " Joost friends!"
      str += "Invite more people from your address book to be your friends on Joost";
      str += '<br/><a href="#" onclick="Slurp.enableForm(true); return true;">Have another email account?</a> Find more friends using that email address.</p><br/>';
    } else {
      str += '<p>We found the following people from your ' + Slurp.emailProvider.toLowerCase() + ' address book. Invite them to join you on Joost';
      str += '<br/><a href="#" onclick="Slurp.enableForm(true); return true;">Have another email account?</a> Find more friends using that email address.</p><br/>';
    }


    if (contacts.length > 0) {
      str += '<div style="float: right;"><p><input type="button" class="inputSubmit" onclick="Slurp.invitePeople(false)" value="Invite All Selected"></p></div>'
      str += '<div style="clear: right;"><p><input type="button" class="inputButton" onclick="Slurp.unSelectInvites(this)" value="Unselect All"></p></div>';
    }
    str += '<div>' + renderThumbAndTextList(inviteList,true) + '</div>';
    str += '</div>';
  }
  document.getElementById('slurp_output').innerHTML = str;
  FBParseDom();
}

Slurp.checkIfAnyToSelect=function(inputel) {
    var checker = false;
    for (i=0;i<inputel.length;i+=1) {
        if(inputel[i].alreadyfriend=="false") {
            var checker=true;
        }
    }
    return checker;
};

Slurp.unSelectFriends=function(inputel) {
  var mode=(inputel.value=="Select All");
  var el=document.getElementById("friendsOnJoost");
  if (el) {
    var cbs=el.getElementsByTagName('input');
    for (var i=0;i<cbs.length;i++) {
      cbs[i].checked=mode;
    }
  }
  inputel.value = mode ? "Unselect All" : "Select All";
};

Slurp.unSelectInvites=function(inputel) {
  var mode=(inputel.value=="Select All");
  var el=document.getElementById("friendsNotOnJoost");
  if (el) {
    var cbs=el.getElementsByTagName('input');
    for (var i=0;i<cbs.length;i++) {
      cbs[i].checked=mode;
    }
  }
  inputel.value = mode ? "Unselect All" : "Select All";
};

Slurp.invitePeople = function(fromJoostName) {

  if (!User.loggedIn && !(typeof Page == 'object' && Page.name == 'registration')) {
    User.promptForLogin('<h1>To use this feature, you must be logged in</h1>',
                        function(){Slurp.invitePeople(fromJoostName)});
    return;
  }
  var el= fromJoostName ? document.getElementById("friendsOnJoost") :
                          document.getElementById("friendsNotOnJoost");
  if (el) {
    var cbs=el.getElementsByTagName('input');
    Slurp.completeCount = -1;
    Slurp.completeFriendCount = 0;
    for (var i=0;i<cbs.length;i++) {
      if (cbs[i].checked) {
        Slurp.completeFriendCount++;
        Slurp.completeCount++;
        cbs[i].checked = true;
        cbs[i].disabled=true;
        if(fromJoostName) {
          Slurp.makeFriend(cbs[i].value, cbs[i].parentNode);
        } else {
          var str = cbs[i].value.split('|s%');
          Slurp.inviteFriend(str[0],str[1], cbs[i].parentNode);
        }
      }
    }
    if(!Slurp.completeFriendCount){
      Slurp.inviteOtherContacts();
    }
  }
}

Slurp.makeFriend=function(name, el) {
  var index=Slurp.breakCounter++;
  var url=Slurp.makeProvider.replace(/%u/g,name).replace(/%i/,index);
  el.innerHTML="Adding...";
  Slurp["makeFriendRes"+index]=function(obj) {
    if(Slurp.completeCount == 0) {
      Slurp.inviteOtherContacts (true);
    }
    el.innerHTML="Added!";
    Slurp.completeCount--;
  };
  jsonRequest(url);
};

Slurp.inviteFriend=function(name,email,el) {
  var index=Slurp.inviteCounter++;
  el.innerHTML="Inviting...";
  var url=Slurp.inviteProvider.replace(/%n/g,encodeURIComponent(name)).replace(/%i/,index).replace(/%e/,encodeURIComponent(email));
  Slurp["inviteFriendRes"+index]=function(obj) {
    el.innerHTML="Invited";
    el.onclick=function() { return false; };
  };
  jsonRequest(url);
};


