/* login ****************************************/
var fh=FormHandler("modbox_2","Credentials");
fh.init=function(mybox){
  //this box var is kept alive by closure
  var box=mybox;
  return function(){        
        $("#login").click(function(){  
          $("#message").html("Wait a sec, logging in to Twitter...");
          box.post("post");
          return false; 
        });
        $('#user,#pass').keypress(function(e){
            if(e.which == 13){
              $('#login').click();
           }
        });
        $("#user").click(clearout).keypress(clearout);
        $("#pass").click(clearout).keypress(clearout);        
  }
}(fh);

fh.setPostCallback(function(box,action,data){
      $("#message").html(data["messages"]["result"]);
});

fh.setErrorCallback(function(box,status,error){
      $("#message").html(status);
});
  
function clearout(){ 
  c=$("#user");
  if (c.val() == 'twitter username') {
    c.val('');
    $("#password_cover_container").html("");
  }
}
$(document).ready(fh.init);


/* google maps ****************************************/
var map = null;
var geocoder = null;
var prettyAddress = null;

var loaded=0;

function gmap_initialize() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map_canvas"));
    // map.setCenter(new GLatLng(37.4419, -122.1419), 13);
    geocoder = new GClientGeocoder();
  }
}

function showAddress(address) {
  if (geocoder) {
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
          $("#example").html(address + " not found");
        } else {
          map.setCenter(point, 13);
          var marker = new GMarker(point);
          map.addOverlay(marker);
          marker.openInfoWindowHtml("<p>"+$("#eventname").attr("value")+"<br>"+$("#timedate").attr("value")+"</p><p>"+address+"</p>");
        }
      }
    );

    geocoder.getLocations(
      address,
      function (locations) {
        prettyAddress = locations['Placemark'][0]['address'];
        $("#example").html("<p>Found:<br>"+prettyAddress+"</p>");     
        $("#location").attr("value",prettyAddress);   
      }
    );
  }  
}

function sendToGoogleMaps () {
  window.location.href=("http://maps.google.com/maps?q=" + prettyAddress);
}

/* friends, etc ****************************************/
var fh=FormHandler("modbox_3","Pickfriends");
var page=0;
var count=0;
var friendsData=[];

var t;
function delayfilter(){
  if (t!=undefined) { 
    clearTimeout(t);
  }
  $("#friendMessage").html("This may take a moment... <img id='spinner' src='/templates/images/spinner.gif'>");
  t=setTimeout("doFilter()",600); 
}

function clearit(c,defaultMessage){  
  if (c.value == defaultMessage) {
    c.value = '';
  }
  return true;
}

function doFilter(displaymax){
  clearit(document.tweetup.filter,'find a friend');
  filterwords=document.tweetup.filter.value.toLowerCase();
  $("#friends").html(makeFriendsTable(friendsData,filterwords,displaymax));
  t=undefined;  
}

fh.setPostCallback(function(box,method,data){
  if (method=='importPage'){
    if (data['status']=='DONE'){
        $("#friendMessage").html("Loading Friends <img id='spinner' src='/templates/images/spinner.gif'>");    
        box.post("getFriendsJSON");
    }else if (data['status']=='OK'){
      //as long as count is > 0 and status OK then we get the next page from twitter.
      if (integer(data['count'])>0){
        count=count+integer(data['count']);
        $("#friendMessage").html("Loading new friends from twitter... ("+count+" loaded)");
        page=page+1;
        $("#page").attr("value",page);
        box.post("importPage");
      }
    }else{
      $("#friendMessage").html(data['status']);
    }
  }
  if (method=='getFriendsHtml'){
    $("#friends").html(data["html"]);
  }
  if (method=='getFriendsJSON'){
    friendsData=data["data"];
    $("#friendMessage").html("This may take a moment... <img id='spinner' src='/templates/images/spinner.gif'>");        
    setTimeout('jQuery("#friends").html(makeFriendsTable(friendsData))',500);     
    $("#pass").focus();
  }
  if (method=='send'){
      if (data["valid"]>0){
       $("#success").html("And this party just got started!");  
       $("#messagearea").attr("value","");
       $("#address").attr("value","");
       $("#event").attr("value","");
       $("#timedate").attr("value","");   
       $("#map_canvas").html("");
       $("#send_button").click(function (){     
          send();
       });
       
       textCounter();
      }else{
        $("#success").html(data['result']);
      }  
      
      if (data['errorusers'].length>0){
        errorusers=data['errorusers'].join(",");
        $("#success").html("Unable to send to: " + errorusers);
      }
  }
});

fh.setErrorCallback(function(box,status,error){
      $("#success").html(status);
});


fh.init=function(mybox){
  var box=mybox;
  return function(){
       $("#send_button").click(function (){     
          send();
          return false;
          });
       $("#messagearea").keydown(textCounter);
       $("#messagearea").keyup(textCounter);
       $("#gmapfind").click(startgoogle);
       $('#address').keypress(function(e){
           if(e.which == 13){
              $('#gmapfind').click();
           }
       });
    	   
       zap=function(obj) { clearit(obj.currentTarget,'find a friend'); }; 
       $("#filter").click(zap).focus(zap);
       
  }
}(fh);

fh.setNotifyCallback(function(box,event,data){
   if (event=='credentials'){
     page=1;
     count=0;
     $("#friendMessage").html("Checking for new friends ("+count+" so far) <img id='spinner' src='/templates/images/spinner.gif'>");
     $("#page").attr("value",page);    
     box.post("importPage");
   }
});  

function send(){
     $("#send_button").unbind("click");
     $("#success").html("Sending... <img id='spinner' src='/templates/images/spinner.gif'>");
     setTimeout('fh.post("send")',100);     
}

//if you leave filterwords undefined it puts in everything.
function makeFriendsTable(friends,filterwords,displaymax){
    var time1 = new Date().getTime();
    var rows = new Array();
    if (displaymax==undefined){
       displaymax=250;
    }   
    rows.push('<table><tbody>');
    for (var i=0;i<friends.length;i++)
    { 
        showrow=false;
        friend=friends[i];
        checked="";
        if (filterwords != undefined){
          ck=$("#c"+i);
          if (ck.length>0 && ck[0].checked){
            checked="checked";
            image="/templates/images/check_boxes.png";
            showrow=true;          
          }else{  
            if (friend["name"].toLowerCase().indexOf(filterwords)>=0 || friend["screen_name"].toLowerCase().indexOf(filterwords)>=0){
                checked="";
                image="/templates/images/unchecked_box.png";
                showrow=true;           
            }
          }               
        }else{
          showrow=true;
          checked="";
          image="/templates/images/unchecked_box.png";
        }
        //we always show the row if it is checked.
        if (checked=="checked" || (showrow && rows.length<displaymax ) )
          rows.push('<tr id="r'+i+'"><td><input type="checkbox" value="'+friend["id"]+'" class="mb cb" name="ck' + i + '" id="c' +i+'" '+checked+'><img name="c'+i+'" src="'+image+'" onclick="return toggle(this)"></td><td><img src="'+friend['profile_image_url']+'" title="'+friend['name']+'"><div class="n">'+friend['screen_name']+'</div></td></tr>');
    }
    if (rows.length>=displaymax){
      rows.push('<tr><td colspan="2"></td></tr>');
      rows.push('<tr><td colspan="2" style="text-align: center"><a href="#" onclick="showAll()">click to see '+integer(friends.length-displaymax)+' more...</a></td></tr>');
    }
    rows.push('</tbody></table>');  
    result=rows.join("\n"); 
    var time2 = new Date().getTime();
    $("#friendMessage").html("&nbsp;");       
    
    return result;
}

function showAll(){
    $("#friendMessage").html("This may take a moment... <img id='spinner' src='/templates/images/spinner.gif'>");
    setTimeout("doFilter(50000)",500);        
}

//this goofy function toggles the hidden checkbox, and flips image 
function toggle(image){
  curcount = $("#friendcounter")[0].innerHTML;

  var a=image.src.split("/");
  if (a[a.length-1]!="check_boxes.png"){
    if (curcount == "0") {
      return false;
    }

    image.src="/templates/images/check_boxes.png";
    $("#" + image.name).attr("checked", true);
    // $("#friendcounter").html(--curcount);

  }else{
    image.src="/templates/images/unchecked_box.png";
    $("#" + image.name).attr("checked", false);
    // $("#friendcounter").html(++curcount);
  }

  var count=0;
  
  jQuery.each($(".cb"), function(i, field){
     if (field.checked)  count++;
  });     

  if (count == 15) {
    $("#friendcounter").html("0");
  } else {
    $("#friendcounter").html(15 - count);
  } 
  
  return false;  
}

function textCounter() {
    var maxlimit=120;
    val=$("#messagearea").attr("value");
    
    if (val.length > maxlimit){ // if too long...trim it!
        val=val.substring(0, maxlimit);
        $("#messagearea").attr("value",val);
    // otherwise, update 'characters left' counter
    }else { 
        if (val.length == maxlimit){
          $("#counter").html("0");
        }else{
          $("#counter").html(maxlimit - val.length);
        }
    }
    $("#messagetext").html(val);
}

function startgoogle(){
   gmap_initialize();
   showAddress(document.tweetup.address.value);
   return false;
}

$(document).ready(fh.init);

/* misc stuff ****************************************/
function integer(v){
	  return v - 0;
}

function dumpObj (obj, str) {
	msg = "";
	for (var i in obj) {
	  if (typeof obj[i] == 'object') {
	    msg += (str + i + " = object" + "\n");
	    msg += dumpObj(obj[i], str + "  ");
	  } else {
	    msg += (str + i + " = " + obj[i] + "\n");
	  }
	}
	
	return msg;
}

