jQuery.mtagger = {};
jQuery.mtagger.refreshList = new Array(0);
jQuery.mtagger.targethost = 'www.lib.umich.edu';
jQuery.mtagger.base  = location.protocol + '//' + location.hostname + (location.port ? ':' : '') + location.port ;

jQuery.mtagger.refresh = function () {
  tmp = jQuery.mtagger.refreshList;
  jQuery.mtagger.refreshList = new Array(0);
  for(i=0; i < tmp.length ; i++) {
    jQuery(tmp[i].target).addCloud(tmp[i].param);
  } 
}


jQuery.addFavorites = function (parameters) {
  var default_parameters = { mode: 'popup', name: 'tagger', description: 'location=0,scrollbars=0,toolbar=0,status=0,resizeable=1,width=605,height=535', url: location.href, tag: 'mirlyn-favorite' };
  if( parameters ) {
    if(!parameters.mode) parameters.mode = default_parameters.mode;
    if(!parameters.name) parameters.name = default_parameters.name;
    if(!parameters.tag ) parameters.tag = default_parameters.tag;
    if(!parameters.url ) parameters.url = default_parameters.url;
    if(!parameters.description) parameters.description = default_parameters.description;
  }

  switch(parameters.mode) {
    case 'popup':
      var tagwindow = window.open(jQuery.mtagger.base + '/Login.php' +
                               '?action=favorites' +
                               '&url='+encodeURIComponent(parameters.url) +
                               '&tag='+encodeURIComponent(parameters.tag) +
                               '&title='+encodeURIComponent(parameters.title),
                               parameters.name,
                               parameters.description);
    break;
    case 'lightbox':
      break;

  }
  
};

jQuery.openTag = function (parameters) {
  var default_parameters = { mode: 'popup', name: 'tagger', description: 'location=0,scrollbars=0,toolbar=0,status=0,resizeable=1,width=605,height=535',url: location.href };
  if( parameters ) {
    if(!parameters.mode) parameters.mode = default_parameters.mode;
    if(!parameters.url) parameters.url = default_parameters.url;
    if(!parameters.name) parameters.name = default_parameters.name;
    if(!parameters.description) parameters.description = default_parameters.description;
  }
 

  switch(parameters.mode) {
    case 'popup':
      var tagwindow = window.open(jQuery.mtagger.base + '/Login.php' +
                               '?url='+encodeURIComponent(parameters.url) +
                               '&title='+encodeURIComponent(parameters.title),
                               parameters.name,
                               parameters.description);
      break;
    case 'lightbox':
      break;
  }
  //return this;
}
jQuery.fn.showFavorites = function( parameters ) {
  var x = this;
  jQuery.getJSON( 'http://'+jQuery.mtagger.targethost+'/mtagger/items/get_my_favorites_api?callback=?',
    function (json) {
      x.each( function() {
        jQuery(this).append('<span class="title">Favorites</span>');
        for(i=0; i<json.untagged.length ; ++i) {
          jQuery(this).append('<div class="untagged favorite">' 
                           + '<span class="untagged item"><a href="'+json.untagged[i].url+'">'+json.untagged[i].title+'</a></span>'
                           +'<span class="unfavorite"><a class="unfavorite" href="http://'+jQuery.mtagger.targethost+'/mtagger/tags/untag/'+json.favorites+'/'+json.untagged[i].item+'/a=true">unfavorite</a></span>' 
                           + '</div>');
          //jQuery(this).append('<span class="title">'+json.status+'</span>');
        }
        for(i in json.tagged) {
          jQuery(this).append('<div class="tagged favorite">'
                         + '<span class="tagged name">'+ i +'</span>');
          for(j=0; j < json.tagged[i].length ; ++j) {
            jQuery(this).append('<div class="tagged item">'
                           + '<span class="tagged item"><a href="'+json.tagged[i][j].url+'">'+json.tagged[i][j].title+'</a></span>'
                           + '<span class="untag"><a class="untag" href="http://'+jQuery.mtagger.targethost+'/mtagger/tags/untag/'+json.tagged[i][j].tag+'/'+json.tagged[i][j].item+'/a=true">untag</a></span>'
                           + '<span class="unfavorite"><a class="unfavorite" href="http://'+jQuery.mtagger.targethost+'/mtagger/tags/untag/'+json.favorites+'/'+json.tagged[i][j].item+'/a=true">unfavorite</a></span>'
                           + '</div>');
          }
          jQuery(this).append('</div>');
        }
        jQuery("a.untag").click( function() {
          var anchor = jQuery(this);          // a tag jquery object that was click
          var span = jQuery(this).parent();  // span jquery objec holding this tag
          var div = jQuery(span).parent();
        
          if( confirm('Are you sure you want to untag this?') ) {
            anchor.parent().html('<span class="noSaved">Deleting...</span>');
            jQuery("a.untag").parent().append('<span class="disabled">untag</span>');
            jQuery("a.untag").hide();
            jQuery.getJSON( 
              this.href  + '&callback=?',
              function(data) {
                div.remove(); 
                jQuery('a.untag').show(); 
                jQuery('.disabled').remove(); 
              }  // remove span tag
            );
             
            /*jQuery.ajax({
              type: "POST",
              url: this.href,
              dataType: "html",
              beforeSend:  function() {
                anchor.parent().html('<span class="noSaved">Deleting...</span>');
                jQuery("a.untag").parent().append('<span class="disabled">untag</span>');
                jQuery("a.untag").hide();
              },
              success: function(data) {div.remove(); jQuery('a.untag').show(); jQuery('.disabled').remove(); }  // remove span tag
            }); */
          }
          return false;
        });
        jQuery("a.unfavorite").click( function() {
          var anchor = jQuery(this);          // a tag jquery object that was click
          var span = jQuery(this).parent();  // span jquery objec holding this tag
          var div = jQuery(span).parent();
        
          if( confirm('Are you sure you want to unfavorite this?') ) {
            anchor.parent().html('<span class="noSaved">Deleting...</span>');
            jQuery("a.unfavorite").parent().append('<span class="disabled">unfavorite</span>');
            jQuery("a.unfavorite").hide();
            jQuery.getJSON(
              this.href + '&callback=?',
              function(data) {
                div.remove(); 
                jQuery('a.unfavorite').show(); 
                jQuery('.disabled').remove();
              }  // remove span tag
            );
            /*jQuery.ajax({
              type: "POST",
              url: this.href,
              dataType: "html",
              beforeSend:  function() {
                anchor.parent().html('<span class="noSaved">Deleting...</span>');
                jQuery("a.unfavorite").parent().append('<span class="disabled">unfavorite</span>');
                jQuery("a.unfavorite").hide();
              },
              success: function(data) {div.remove(); jQuery('a.unfavorite').show(); jQuery('.disabled').remove(); }  // remove span tag
            }); */
          }
          return false;
        });

        return this;
      });
    }
  );
  return this;
}
jQuery.fn.addCloud = function (parameters) {
  var default_parameters = {   url: location.href, 
                             title: document.title, 
                          tag_link: 'Tag This Page', 
                         separator: ', ',
                          template: 'block'
                         };
  if(parameters) {
    if(parameters.template) {
      default_parameters.template = parameters.template;
    }
    if(parameters.url) {
      default_parameters.url = parameters.url;
    }
    if(parameters.title) {
      default_parameters.title = parameters.title;
    }
    if(parameters.tag_link) {
      default_parameters.tag_link = parameters.tag_link;
    }
    if(parameters.separator) {
      default_parameters.separator = parameters.separator;
    }
  }
  return this.each( function () { 
    var x = this;
    jQuery.mtagger.refreshList.push( { 'target': x, 'param': parameters}  );
    if(x.id && !parameters.url) { 
      var url = x.id;
    } else {
      var url = default_parameters.url;
    }

    if( x.title ) {
      var object_title = this.title.split('%27').join('%5C%27');
    } else {
      var object_title = default_parameters.title.split('%27').join('%5C%27');
    }

    if( x.separator ) {
      var separator = x.separator;
    } else {
      var separator = default_parameters.separator;
    }

    if( x.tag_link ) {
      var tag_link = x.tag_link;
    } else {
      var tag_link = default_parameters.tag_link;
    }
    if( x.template ) {
      var template = x.template;
    } else {
      var template = default_parameters.template;
    }
    jQuery(x).html('Loading tags ...');
    jQuery.getJSON(
      location.protocol+"//"+jQuery.mtagger.targethost+"/mtagger/tags/getTagCloud/?tagDisplay=all&export=jsonp&callback=?&URL="+encodeURIComponent(url),
      function(data) {
        list = new Array;
        tag_this = data.Template.title.split('{{LINK}}').join(tag_link).split('{{TITLE}}').join(object_title).split('{{URL}}').join(url);
        if(data && data.Tag && data.Tag.length) {
          max=0;
          for(i=0; i< data.Tag.length; i++) {
            if(max < data.Tag[i].count)
              max = data.Tag[i].count;
          }
          for(i=0; i < data.Tag.length; i++) {
            if( max >=2 && data.Tag[i].count > (2/3)*max) {
              size='large';
            } else if (max==1 || data.Tag[i].count > max/3){
              size='medium';
            } else {
              size='small';
            }
            list.push( data.Template.tag[size].split('{{COUNT}}').join(data.Tag[i].count).split('{{TAG}}').join(data.Tag[i].name));
          }
          h = data.Template[template].split('{{TITLE}}').join(tag_this).split('{{BODY}}').join(list.join(data.Template.tag.separator.split('{{SEPARATOR}}').join(separator)));
          jQuery(x).html(h);
        } else {
          h =  data.Template[template].split('{{TITLE}}').join(tag_this)
                   .split('{{BODY}}').join(data.Template.tag.empty.split('{{TAG}}').join('This item has not yet been tagged.  Be the first to tag it!'));
          jQuery(x).html( h );
        }
      }
    ); 
    return x;
  });
};
