jQuery(window).load(function() {

  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 getCookie(c_name) {
    if (document.cookie.length>0) {
      c_start=document.cookie.indexOf(c_name + "=");
      if (c_start!=-1) { 
        c_start=c_start + c_name.length+1; 
        c_end=document.cookie.indexOf(";",c_start);
        if (c_end==-1) c_end=document.cookie.length;
        return unescape(document.cookie.substring(c_start,c_end));
      } 
    }
    return "";
  }

  function tagfree() {
    var cookie=getCookie('favtag_tagfree');
    return false;
    return cookie && cookie!='';
  }

  function set_tagfree() {
    setCookie('favtag_tagfree','1',10);
  }

  function reset_tagfree() {
    setCookie('favtag_tagfree','',10);
  }

  function test_post_do(pid,data) {
    var posts=data.split(',');
    for(var i=0;i<posts.length;i++)
      if(posts[i]==pid)
        return true;
    return false;
  }

  function test_post(pid,cont) {
    var posts=getCookie('favtag_posts');
    var link=getCookie('favtag_link');
// IE issue
//    if(posts && link && posts!='' && link!='') {
//      cont(test_post_do(pid,posts));
//      return;
//    }
    jQuery.get(favtag_pinger(),{action: 'which',cache: false},function(data) {
      jQuery('#favtag_gallery_link').attr('href',data.link);
      cont(test_post_do(pid,data.posts),data.link!='');
      // XXX
      setCookie('favtag_posts',data.posts,1);
      setCookie('favtag_link',data.link,1);
    },'json');
  }
  
  jQuery.ajaxSetup({cache: false, async: false});

  jQuery('#favtag_link').click(function() { return favtag_link(1,get_id(this)); });
  jQuery('#favtag_unlink').click(function() { return favtag_link(0,get_id(this)); });
  
  function get_id(where) {
    var href=jQuery(where).attr('href');
    if(!href)
      return null;
    return href.substring(1);
  }
  
  function favtag_pinger() {
    var src=jQuery('#favtag_script').attr('src').split('/');
    src.pop();
    src.push('fav_ajax.php');
    return src.join('/');
  }
  
  function favtag_link(sense,id) {
    blast_cache();
    jQuery.get(favtag_pinger(),{action: sense?'add':'delete', pid: id,cache: false},function(data) {
      // show warning
      alerted=(document.cookie.indexOf("favtag_alerted=")!=-1);
      if(sense && !alerted && username()===false) {
        login="";
        if(favtag_loginable)
          login=" To keep them, login via the login/register link.";
        alert("Your favourite list will be deleted when you close your browser window."+login);
        jQuery.get(favtag_pinger(),{action: 'alerted'});
      }
      if(sense) { d_unlink='inline'; d_link='none'; } else { d_unlink='none'; d_link='inline'; }
      jQuery('.favtag_span').css('display',d_link);
      jQuery('.favtag_unspan').css('display',d_unlink);
      blast_cache();
      check_count(false);
    },'text');
    return false;
  }

  function ping() {
    jQuery.get(favtag_pinger(),{action: 'ping',cache: false});
  }

  // Periodic pinger keeps session alive
  setInterval(ping,1000*60*10);


  function exec_page(any,here) {
    if(any) {
      d_any='inline';
      d_none='none';
      if(here!=-1)
        update_this(here);
    } else {
      set_tagfree();
      d_none='inline';
      d_any='none';
    }
    jQuery('.favtag_any').css('display',d_any);
    jQuery('.favtag_none').css('display',d_none);
  }
  
  function check_count(also_this) {
    pid=get_id(jQuery("#favtag_link").get(0));
    if(!pid)
      pid=0;
    if(tagfree()) {
      exec_page(false,-1);
    } else {
      test_post(pid,function(on,link) {
        exec_page(link!='',(also_this && pid)?on:-1);
      });
    }
  }
  
  jQuery('#favtag_login_link').click(function() { 
    jQuery('#favtag_login_form').css('display','inline');
    jQuery('#favtag_login_link').css('display','none');
  });
  
  function login_callback(user,pass,data) {
      blast_cache();
      current_login_status();
      if(data=='register-query') {
        if(confirm("This account does not exist, click ok to register it, or cancel to try again.")) {
          jQuery.get(favtag_pinger(),{action: 'login', user: user, pass: pass, confirm: 1},function(data) {
            login_callback(user,pass,data);
          },'text');
        }
      } else if(data=='created') {
        alert("account created. your favourites will be saved.");
      } else if(data=='bad-password') {
        alert('Bad password. '+
              'Please try again if you are attempting to access an existing account, '+
              'or try a new username if you are trying to register a new one.');
      } else if(data=='logged-in') {
        // Nothing, for now
      }
      check_count(true);
  }

  function resetCookie(name) {
    document.cookie=name+"=GONEcbEndCookie; expires=Monday, 19-Aug-1996 05:00:00 GMT";
  }

  function blast_cache() {  
    resetCookie('favtag_posts');
    resetCookie('favtag_link');
    resetCookie('favtag_tagfree');
  }
  
  jQuery('#favtag_login_form_tag').submit(function() {
    var user=jQuery("input[name='username']",this).val();
    var pass=jQuery("input[name='password']",this).val();
    jQuery.get(favtag_pinger(),{action: 'login', user: user, pass: pass},function(data) {
      jQuery('#favtag_login_form').css('display','none');
      jQuery('#favtag_login_link').css('display','inline');
      login_callback(user,pass,data);
    },'text');
    return false;
  });
  
  jQuery('#favtag_logout').click(function() {
    jQuery.get(favtag_pinger(),{action: 'logout'},function() { blast_cache(); current_login_status(); });
    return false;
  });
  
  jQuery('#favtag_blast_link').click(function() {
    jQuery.get(favtag_pinger(),{action: 'blast'},
               function() { blast_cache(); document.location.href=document.location.href; });
    return false;
  });
  
  function update_this(val) {
    if(val) {
      jQuery('.favtag_span').css('display','none');
      jQuery('.favtag_unspan').css('display','inline');
    } else {
      jQuery('.favtag_span').css('display','inline');
      jQuery('.favtag_unspan').css('display','none');
    }
  }
  
  function check_this() {
    pid=get_id(jQuery("#favtag_link").get(0));
    if(!pid)
      return;
    jQuery.get(favtag_pinger(),{action: 'test',pid: pid, cache: false},function(data) {
      update_this(data=='1');
    },'text');
  }
  
  function username() {
    var cookies=document.cookie.split(';');
    for(var i=0;i<cookies.length;i++) {
      if(cookies[i].substr(0,1)==' ')
        cookies[i]=cookies[i].substring(1);
      var kv=cookies[i].split('=');
      if(kv[0]!='favtag_user')
        continue;
      return kv[1];
    }
    return false;
  }
    
  function current_login_status() {
    var user=username();
    if(user!==false) {
      jQuery('#favtag_login_form').css('display','none');
      jQuery('#favtag_loggedin').css('display','inline');
      jQuery('#favtag_uid').text(user);
      jQuery('#favtag_login_link').css('display','none');
    } else {
      jQuery('#favtag_login_form').css('display','none');
      jQuery('#favtag_loggedin').css('display','none');
      jQuery('#favtag_login_link').css('display','inline');
    }
    check_count(true);
  }
  
  current_login_status();  
});
