var submitting = false;

$(function(){
  $.ajaxSetup({
    type: 'POST',
    dataType: 'json',
    timeout: 6000,
    error: function(x, s, t){alert(error_message);},
    complete: function(){submitting = false;}
  });
});

function setupOpenID() {
  $('#signin_block a.openid').click(function (e) { e.preventDefault();
    $('#openid_notice').remove();
    var
      $t = $(this),
      link = $t.attr('rel'),
      $oi = $('#openid_identifier').val(link);
    if ($t.hasClass('submit')) {
      $('#open_id_form').submit();
      return false;
    }
    if (!$t.hasClass('notify')) return false;

    var p = $oi.position();
    $('<div />')
      .attr('id', 'openid_notice')
      .html($t.attr('title'))
      .css({
        position: 'absolute',
        top: p.top + $oi.outerHeight(true),
        left: p.left,
        width: '300px',
        backgroundColor: '#222',
        color: '#fff',
        fontSize: '11px',
        padding: '2px 3px',
        zIndex: 999999
      })
      .appendTo('#signin_block');
  });
}

function showError(obj, selector){
  var error = ''
  $(obj).each(function(){ error += this; });
  if(error != '')
    $(selector).html(error).css('color', 'red').show();
}

function showBookLogForm(event) {
  event.preventDefault();

  var $this = $(this);
  var id = $this.attr('href').substr(1);

  if(typeof id == 'undefined'){ return false; }

  var url;
  var subdomain = subdomain;
  var replace = 0;

  if('update' ==  $this.attr('rel')){
    url = '/log/' + id + '/get_form/';
    replace = 1;
  } else {
    var key = id.split('_');
    var subdomain = key[0];
    var asin = key[1];
    url = '/item/' + asin + '/';
  }

  $('#things div.info_block').hide(1600).empty();
  var e = $this.parents('tr').find('div.info_block');

  $.ajax({
    url : url,
    type : 'GET',
    dataType: 'html',
    data : {'type' : 'form', 'subdomain' : subdomain, replace: replace},
    beforeSend : function(){
      if(submitting){ return false; }
      submitting = true;
      e.html('<img src="/images/loading.gif" alt="" class="valign_middle" /> Loading...').fadeIn(200);
    },
    success : function(obj){
      e.html(obj).show('fast').find('form').submit(submitBookLog);
    }
  });
}

function submitBookLog(event) {
  event.preventDefault();

  var $this = $(this);
  var status = $('#log_form_status');
  status.hide().empty();

  var val = $.trim($('#id_cached_tag_list').val());
  if (val != '' && val.match(/\//)) {
    showError(['Tag contains invalid character "/".'], '#tags_status');
    return false;
  }

  $.ajax({
    url: $this.attr('action'),
    data : $this.serializeArray(),
    beforeSend : function(){
      if(submitting){ return false; }
      submitting = true;
      status
        .css('color', 'green')
        .html('<img src="/images/loading.gif" alt="" class="valign_middle" /> ' + saving_message + '...')
        .fadeIn(200);
    },
    success: function(obj){
      if(obj.success){
        status.css('color', 'green').html(success_message).show();
        setTimeout(function(){
          var asb = $('#after_save_block');
          if (asb.length > 0) {
            asb.html('&raquo; <a href="' + obj.log_url + '">View your log page.</a>').slideDown('fast');
          } else {
            $this.parent('.info_block').slideUp('fast');
          }
          status.hide();
        }, 1200);
      }else if(obj.error){
        if(obj.error.title){showError(obj.error.title, '#title_status');}
        if(obj.error.notes){showError(obj.error.notes, '#notes_status');}
        if(obj.error.cached_tag_list){showError(obj.error.cached_tag_list, '#tags_status');}
        status.empty().hide();
      }
    }
  });
  return false;
}

function showUserForm(event){
  event.preventDefault();

  var lfb = $('#log_form_block');
  var ufb = $('#user_form_block');
  if (lfb.length > 0 && lfb.length > 0) {
    lfb.slideUp('fast', function () {
      ufb.slideDown('fast');
    });
    return false;
  }

  var $this = $(this);
  $('#things div.info_block').hide().empty();
  var e = $this.parents('tr').find('.info_block');

  $.ajax({
    url: '/user_form/',
    type : 'GET',
    dataType : 'html',
    cache : true,
    success : function(obj){
      e.html(obj).show('fast').find('form').submit(createUsername);
    }
  });
}

function createUsername(){
  var $this = $(this);
  var status = $('#user_form_status');
  status.hide().empty();

  $.ajax({
    url: $this.attr('action'),
    data : $this.serializeArray(),
    beforeSend : function(){
      if(submitting){ return false; }
      submitting = true;
      status
        .css('color', 'green')
        .html('<img src="/images/loading.gif" alt="" class="valign_middle" /> ' + saving_message + '...')
        .fadeIn(200);
    },
    success: function(obj){
      if(obj.success){
        status.css('color', 'green').html(success_message).show();

        var booklogLink = '/user/' + obj.name + '/';
        $('#view_book_log').attr('href', booklogLink);
        $('#loginLink').attr('href', booklogLink);

        setTimeout(function(){
          if($('#log_form_block').length > 0){
            $('#user_form_block').slideUp('fast', function(){
              $('#log_form_block').slideDown('fast')
                .find('form').unbind('submit').bind('submit', submitBookLog);
            });
          } else if($('#home_redirect_link').length > 0) {
            location.href = booklogLink;
            return false;
          } else {
            bllf = showBookLogForm;
            $('#things a.book_log_link').unbind('click').bind('click', showBookLogForm);
            $this
              .parent('div.info_block')
              .hide('fast')
              .parents('tr')
              .find('a.book_log_link')
              .trigger('click');
          }
        }, 1200);
      }else if(obj.error){
        if(obj.error.first_name){showError(obj.error.first_name, '#user_form_status');}
      }
    }
  });
  return false;
}

function showLoginForm(event) {
  event.preventDefault();

  var win = $(window);
  var doc = $(document);
  var lfb = $('#login_form_block');
  var docHeight = doc.height();
  var winHeight = win.height();
  var winWidth = win.width();
  var h = lfb.height();
  var w = lfb.width();

  $('body')
    .append('<div id="loginoverlay"></div>')
    .find('#loginoverlay')
    .css({
      opacity: 0.7,
      position: 'absolute',
      left: -1, top: 0,
      backgroundColor: '#222',
      width: winWidth- 1 + 'px',
      height: docHeight + 'px',
      zIndex: 100
    })
    .click(function () {
      $(this).remove();
        lfb.hide();
      });

  lfb
    .css({
      position: 'absolute',
      left: (docHeight > winHeight) ? winWidth/2 - w/2 - 18: winWidth/2 - w/2, 
      top: doc.scrollTop() + winHeight/2 - h/2 + 'px',
      padding: '1.0em',
      backgroundColor:'#fff',
      border: 'solid 1px #ccc',
      zIndex: 1000,
      textAlign: 'left'
    })
    .fadeIn(500);
}

function logOn(){
  $('td:last', this).append('<div class="light-blue">' + book_log + '</div>');
}

function logOut(){
  $('td:last', this).find('div.light-blue').remove();
}

/**
 * paginate
 */
(function($){
  $.fn.paginate =function (options) {
    var options = $.extend({
      type: 'GET',
      dataType: 'html',
      timeout: 7000,
      success: null
    }, options);

    return this.each(function(i, e) {
      $(e).click(function() {
        var $this = $(this);
        $this.parent('div')
          .html('<img src="/images/loading.gif" class="valign_middle"/>&nbsp;&nbsp;' +
            '<span class="green">loading...</span>');
        options.url = $this.attr('href');
        $.ajax(options);
        return false;
      });
    });
  }
})(jQuery);


/**
 * Destroyer
 */
(function($){
  $.fn.destroyer =function (options) {
    var options = $.extend({
      progressMessage: 'deleting...',
      completeMessage: 'deleted!',
      errorMessage: 'Sorry, an error occured.'
    }, options);

    var destroy = function() {
      var $this = $(this);
      var token = $this.attr('rel').split('_');
      var type = token[0];
      var key = token[1];
      var msg = 'Sure you want to delete this ' + type + '? There is NO undo!';

      if (!window.confirm(msg))
        return false;

      var parent = $(this.parentNode);
      var container = $('#' + type + '_' + key);

      $.ajax({
        type: 'POST',
        url: '/' + type + '/' + key + '/delete/',
        beforeSend: function(){ parent.html(options.progressMessage + '...'); },
        dataType: 'json',
        data: {_method: 'delete'},
        timeodut: 6000,
        success: function(obj){
          if(obj.error){alert(options.errorMessage);}
          else if(obj.success){
            if (container.length > 0) {
              container.hide();
            } else if (obj.redirect) {
              window.location = obj.redirect;
            } else {window.location = '/';}
          } else {
            alert(options.errorMessage);
          }
        },
        error: function () {
         alert(options.errorMessage);
        }
      });
      return false;
    }

    return this.each(function(i, e) {
      $(e).click(destroy);
    });
  }
})(jQuery);


/**
 * jQuery Gallery Plugin
 *   http://code.google.com/p/jquery-gallery-plugin/
 *
 * Copyright (c) 2009 Yusuke Horie
 *
 * Released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Since  : 0.1.0 - 08/02/2009
 * Version: 0.3.0 - 08/25/2009
 */
(function(jQuery){var _inc=0;jQuery.fn.gallery=function(options){var options=jQuery.extend({},jQuery.fn.gallery.defaults,options);return this.each(function(i,e){var $this=jQuery(e),id=options.prefix+_inc,i=0,n=0,limit=5,step=1,duration=Math.ceil(options.interval*0.3),timeId=null;var height;if(!options.height){if(!parseInt($this.css('height'),10)){height='450px'}else{height=$this.height()}}else{height=options.height}var width=(!options.width)?$this.width():options.width,paddingTop=parseInt($this.css('padding-top'),10),paddingBottom=parseInt($this.css('padding-bottom'),10),pheight=parseInt(height,10),contentHeight=pheight-options.thumbHeight+paddingTop,o=$this.offset(),barWidth=jQuery(window).width()-o.left;var barTop=(options.barPosition=='top')?paddingTop:contentHeight;if(options.toggleBar){if(options.barPosition=='top'){$this.hover(function(){$('#thumbnails_'+id).animate({top:paddingTop},{queue:false,duration:300})},function(){$('#thumbnails_'+id).animate({top:barTop},{queue:false,duration:300})});barTop=(options.thumbHeight+paddingTop)*(-1)}else{var outerHeight=pheight+paddingTop+paddingBottom;$this.hover(function(){$('#thumbnails_'+id).animate({top:contentHeight},{queue:false,duration:300})},function(){$('#thumbnails_'+id).animate({top:outerHeight},{queue:false,duration:300})});barTop=outerHeight}}$this.css({width:width,height:height,zIndex:options.zIndex}).prepend('<div id="'+id+'"></div>').find('ul').attr('id','thumbnails_'+id).addClass(options.barClass).css({top:barTop,height:options.thumbHeight+'px',width:barWidth+'px',zIndex:options.zIndex+2000}).find('li').css({width:options.thumbWidth+'px',height:options.thumbHeight+'px'}).each(function(index){jQuery.data(this,'index',index)}).click(function(event){event.preventDefault();if(options.slideshow)clearInterval(timeId);if($.isFunction(options.onSelect))options.onSelect.apply(this,[event]);var $e=this;bar.find('li').each(function(index,e){if(e==$e){step=index;return false}});i=jQuery.data(this,'index');for(var j=i;j<i+limit;j++){var o=pictures.eq(j);if(o.length>0&&typeof o.data('loaded')=='undefined'){preLoad(o.attr('href'));o.data('loaded',true)}}display();if(options.slideshow)timeId=setInterval(display,options.interval)});if(options.showOverlay){var itop=pheight*(1-options.ratio)+paddingTop,ileft=$this.css('padding-left'),iheight=(pheight*options.ratio)+paddingTop;$('<div />').addClass(options.screenClass).css({opacity:0.5,top:itop,left:0,height:iheight,width:$this.outerWidth(),zIndex:options.zIndex+1000}).insertAfter('#'+id);$('<div />').addClass(options.infoClass).html('<div id="gtitle_'+id+'" class="'+options.titleClass+'" style="display:none;"></div>'+'<div id="gdesc_'+id+'" class="'+options.descClass+'" style="display:none;"></div>').css({top:itop,left:0,height:iheight,zIndex:options.zIndex+1500}).insertAfter('#'+id)}var c=jQuery('#'+id).css({position:'relative',width:width,height:height,overflow:'hidden'}).addClass(options.contentClass);var bar=$this.find('ul').show(),thumbnails=bar.find('img'),pictures=$this.find('a').bind('click.gallery',function(e){e.preventDefault()}),gtitle=$('#gtitle_'+id),gdesc=$('#gdesc_'+id),len=thumbnails.length,w=$this.find('li:first').outerWidth(true);var display=function(){var t=thumbnails.eq(i);var pict=pictures.eq(i);var p=pict.attr('href');var pid=id+'_'+i;var next=pictures.eq(i+limit);if(next.length>0&&typeof next.data('loaded')=='undefined'){preLoad(next.attr('href'))}c.find('img').animate({opacity:0.0},{queue:false,duration:duration,easing:'linear',complete:function(){jQuery(this).remove()}});jQuery('<img />').attr('src',p).attr('id',pid).css({position:'absolute',top:0,left:0,opacity:0.0}).bind('click.gallery',function(event){options.onClick.apply(this,[event,pict.get()])}).appendTo('#'+id).animate({opacity:1.0},{queue:false,duration:duration,easing:'linear'}).load(function(){pict.data('loaded',true)});var title=t.attr('title');var id_of_desc=pict.attr('rel');var desc=(id_of_desc&&$('#'+id_of_desc).length>0)?$('#'+id_of_desc).html():pict.attr('title');if(n!=0){if(typeof title!='undefined')gtitle.fadeOut(duration*0.3,function(){jQuery(this).html(title).show()});if(typeof desc!='undefined')gdesc.fadeOut(duration*0.3,function(){jQuery(this).html(desc).show()});bar.animate({left:w*(-1)*step},{queue:false,duration:300,easing:options.easing,complete:function(){var $t=jQuery(this).css({left:0});var f=$t.find('li').slice(0,step);var indexes=f.map(function(){return jQuery.data(this,'index')});var cln=f.clone(true).each(function(j){jQuery.data(this,'index',indexes[j])}).hide().appendTo(this).fadeIn(duration);f.remove();step=1}})}else{if(typeof title!='undefined')gtitle.html(title).show();if(typeof desc!='undefined')gdesc.html(desc).show()}options.onChange.apply($this.get(),[i,pict.get()]);if(i<(len-1)){i++}else{i=0}n++};for(var j=0;j<limit;j++){var o=pictures.eq(j);if(o.length>0){preLoad(o.attr('href'));o.data('loaded',true)}}display();if(options.slideshow)timeId=setInterval(display,options.interval);_inc++})};jQuery.fn.gallery.defaults={width:null,height:null,thumbWidth:55,thumbHeight:55,zIndex:1000,interval:4500,prefix:'gallery_',easing:'linear',ratio:0.35,slideshow:true,toggleBar:true,showOverlay:true,barPosition:null,barClass:'galleryBar',contentClass:'galleryContent',infoClass:'galleryInfo',screenClass:'galleryScreen',titleClass:'galleryTitle',descClass:'galleryDesc',onClick:function(){return},onSelect:function(){return},onChange:function(){return}};var preLoad=function(url){jQuery('<img />').attr('src',url)}})(jQuery);

