// page init
$(function(){
  intiTimeZone('body');
  initInputs();
  initLoginArea();
  initOpenClose();
  initSelectAdding();
  //initHtmlEditor();
  initDescSlide('body');
  initTabSlide();
  initTweetTab();
  initImageClickResize();
  initOpenClass();
  initResizableTextArea();
  initPlayer();
  initHelp();
  ieHover('#playbox, ul.mus > li, ul.droparea > li, ul.droparea ul > li, .m-signup .formholder input.btn-accept, #header ul.sign .formholder input.btn, btn-submit-tweet');

  songupload.init();
  imageupload.init();
});

/*
 * jQuery autoResize (textarea auto-resizer)
 * @copyright James Padolsey http://james.padolsey.com
 * http://james.padolsey.com/javascript/jquery-plugin-autoresize/
 * @version 1.04
 */
 
(function($){
  $.fn.autoResize = function(options) {
    // Just some abstracted details,
    // to make plugin users happy:
    var settings = $.extend({
      onResize : function(){},
      animate : true,
      animateDuration : 150,
      animateCallback : function(){},
      extraSpace : 20,
      limit: 1000
    }, options);

    // Only textarea's auto-resize:
    this.filter('textarea').each(function(){
      // Get rid of scrollbars and disable WebKit resizing:
      var textarea = $(this).css({resize:'none','overflow-y':'hidden'}),

        // Cache original height, for use later:
        origHeight = textarea.height(),

        // Need clone of textarea, hidden off screen:
        clone = (function(){

          // Properties which may effect space taken up by chracters:
          var props = ['height','width','lineHeight','textDecoration','letterSpacing'],
            propOb = {};

          // Create object of styles to apply:
          $.each(props, function(i, prop){
            propOb[prop] = textarea.css(prop);
          });

          // Clone the actual textarea removing unique properties
          // and insert before original textarea:
          return textarea.clone().removeAttr('id').removeAttr('name').css({
            position: 'absolute',
            top: 0,
            left: -9999
          }).css(propOb).attr('tabIndex','-1').insertBefore(textarea);

        })(),
        lastScrollTop = null,
        updateSize = function() {

          // Prepare the clone:
          clone.height(0).val($(this).val()).scrollTop(10000);

          // Find the height of text:
          var scrollTop = Math.max(clone.scrollTop(), origHeight) + settings.extraSpace,
            toChange = $(this).add(clone);

          // Don't do anything if scrollTip hasen't changed:
          if (lastScrollTop === scrollTop) { return; }
          lastScrollTop = scrollTop;

          // Check for limit:
          if ( scrollTop >= settings.limit ) {
            $(this).css('overflow-y','');
            return;
          }
          // Fire off callback:
          settings.onResize.call(this);

          // Either animate or directly apply height:
          settings.animate && textarea.css('display') === 'block' ?
            toChange.stop().animate({height:scrollTop}, settings.animateDuration, settings.animateCallback)
            : toChange.height(scrollTop);
        };

      // Bind namespaced handlers to appropriate events:
      textarea
        .unbind('.dynSiz')
        .bind('keyup.dynSiz', updateSize)
        .bind('keydown.dynSiz', updateSize)
        .bind('change.dynSiz', updateSize);
    });

    // Chain:
    return this;
  };
})(jQuery);


(function($){
/*        
//not plugin
$('#donationhistory-more').bind('click', {offset: ${offset}, size:${size}}, function(event) {
  $.post('/charity/${url}/project/sponsor/historymore/${projectid}', 
      {
        offset    : event.data.offset+event.data.size
      } 
      ,function(data){    
        event.data.offset=event.data.offset+event.data.size;
        $(data).appendTo('#morearea'); 
      }
   );
});
*/  
  $.fn.stepMore = function(options) {
    var settings = $.extend({
      offset : 0,
      size : 1,                 /* 한 스텝에 보여질 size, 중요: cgi쪽에서는 size+1의 레코드를 만들어서 리턴해야 한다 */                  
      url:'',
      whereAppendClassOrId:'',  /* append될 부모 클래스또는id*/
      recordClassOrId:'',       /* 개별 레코드를 이루는  부모또는id 레코드가 10개면 해당 레코드도 10개*/
      recordCount : 0,
      onAfter: function(){},
      onEnd: function(){}
    }, options);
    //settings s주의
    var callCount=0;
 
    $(this).bind('click',  function(event) {
       var self=this;
       $.post(settings.url, 
           {
             offset    : settings.offset
             ,size     : settings.size
           } 
           ,function(data){
             var html=$(data).filter(settings.recordClassOrId+':lt('+  settings.size+ ')');
             settings.recordCount=html.length;
             settings.offset=settings.offset+settings.size;
             //log(settings.recordCount);
             $(html).appendTo(settings.whereAppendClassOrId); 
             if( $(data).filter(settings.recordClassOrId).length <= settings.size){
               $(self).hide();
               settings.onEnd();
             }
             callCount++;
             settings.onAfter(callCount);//.call(self);
           }
        );
       return false;
    });
    this.init=function(){
     $(this).trigger('click');
    };
    this.changeSize=function(size){
      settings.size =size;
    };
    this.getRecordCount=function(){
      return settings.recordCount;
    };
    return this;
  };
})(jQuery);

//FOR TEST ONLY
var DEBUGJS = true;
function log(obj) {
  if (window.DEBUGJS) {
    if (window.console) {
      console.log(obj);
    } else {
      alert(obj);
    }
  }
}

/**
 * options = {obj, maxWidth, _option}
 * by isu

function textEllipsis(options) {
  var cssObj = {
    'overflow':'hidden',
    'display':'block',
    'width':options.maxWidth
  };

  options.obj.parent().css(cssObj);
  if (options.obj.css('display') == 'inline') {
    options.obj.css({'display':'block'});
  }
  options.obj.textOverflow(options._option);
}
 */

//clear inputs / focus
function initInputs() {
  var _inputs = $('input[type="text"],input[type="password"],textarea');
  var _temp=$('.text-area');
  
  _inputs.each(function(){
    var _input = $(this);
    var _val = _input.val();
    
    if ($.browser.mozilla) {
      _input.click(function() {
        this.focus();
      });
    }
    
    _input.focus(function(){
      
      if((_input.parent().hasClass('highlight')) || (_input.hasClass('highlight'))) {
        if(_input.val() == _val) _input.val('');
      }
 
      _input.parent().addClass('focus');
      _input.addClass('focus');
      if(_input.attr('id') =='twitter_tweet'){
        _temp.addClass('focus');
      }
    });

    _input.blur(function(){
      //if (_input.val() == '') {
 
        _input.parent().removeClass('focus');
        _input.removeClass('focus');

        if(_input.attr('id') =='twitter_tweet'){
          _temp.removeClass('focus');
        }
      //}
    });
  });
}

//login area
function initLoginArea() {
  var _animSpeed = 300;
  var _openClass = 'on';
  var _activeClass = 'opened';

  $('ul.sign').each(function(){
    var _holder = $(this).children(".signin");
    var _opener = _holder.find('>a.opener');
    var _popup = _holder.find('>div.drop').hide();

    function viewSininPanel() {
      $('#forgot-email-result').html('');
      $('#forgot-email-username').val('');
      $('#forgot-passwd-email').val('');

      if(_holder.hasClass(_activeClass)) {
        /*
        _popup.fadeOut(_animSpeed,function(){
          _holder.removeClass(_activeClass);
        });
        */
      } else {
        _holder.addClass(_activeClass);
        _popup.fadeIn(_animSpeed);
        $('#signin-email').focus();
      }
    }
    
    // signup area toggle
    _opener.click(function(){
      viewSininPanel();
      return false;
    });
     
    $('#signin_open').click(function(e){
      $(document).scrollTop(0);
      viewSininPanel();
      return false;
    });

    // hide drop if clicked elsewhere
    $('body').click(function(e){
      if(!e) e = window.event;
      var _target = (e.target || e.srcElement);
      if (!$(_target).parents('ul.sign').length) {
        if ($(_target).attr("id") == "popup_ok") return;
        _popup.fadeOut(_animSpeed,function(){
          _holder.removeClass(_activeClass);
        });
      }
    });

    // forgot password area
    var _openClose = _popup.find('div.hold');
    _openClose.each(function(){
      var _holder = $(this);
      var _opener = _holder.find('a.forget');
      var _slider = _holder.find('div.box');
      _opener.click(function(){
        if(_holder.hasClass(_openClass)) {
          _slider.slideUp(_animSpeed,function(){
            _holder.removeClass(_openClass);
          });
        } else {
          _holder.addClass(_openClass);
          _slider.slideDown(_animSpeed);
        }
        return false;
      });
      if(_holder.hasClass(_openClass)) _slider.show();
      else _slider.hide();
    });
  });
}

//open-close blocks function
function initOpenClose() {
  var _slideSpeed = 400;
  var _activeClass = 'expanded';

  // content open-close
 $('div.slider').each(function(){
    var _holder = $(this);
    var _opener = _holder.find('.title');
    var _slider = _holder.find('div.block');
    var callback = _opener.attr("callback");

    _opener.click(function(){
      if(_holder.hasClass(_activeClass)) {
        _slider.slideUp(_slideSpeed,function(){
          _holder.removeClass(_activeClass);
        });
      } else {
        _holder.addClass(_activeClass);
        _slider.slideDown(_slideSpeed);

        if(typeof callback != 'undefined') eval(callback);
      }
      return false;
    });
    if(_holder.hasClass(_activeClass)) _slider.show();
    else _slider.hide();
  });

  /*
  // text MORE open close
  $('a.more-text').click(function(){
    var _parent = $(this).parent();
    if(_parent.hasClass(_activeClass)) {
      _parent.removeClass(_activeClass);
    } else {
      _parent.addClass(_activeClass);
    }
    return false;
  });

  // hidden block open-close
  $('div.open-box').each(function(){
    var _holder = $(this);
    var _opener = _holder.find('a.viewmore');
    var _slider = _holder.find('div.sub-content');
    _opener.click(function(){
      if(_holder.hasClass(_activeClass)) {
        _slider.slideUp(_slideSpeed,function(){
          _holder.removeClass(_activeClass);
        });
      } else {
        _holder.addClass(_activeClass);
        _slider.slideDown(_slideSpeed);
      }
      return false;
    });
    if(_holder.hasClass(_activeClass)) _slider.show();
    else _slider.hide();
  });
  */
}

//select boxes adding
function initSelectAdding() {
  var _animSpeed = 300;
  $('div.select-box').each(function(){
    var _holder = $(this);
    var _newHolder = _holder.find('.add-box').show();
    var _newItems = _newHolder.children().hide();
    var _btnAdd = _holder.find('.addmore a');
    var _addCount = 0;
    _btnAdd.click(function(){
      if(_addCount < _newItems.length) {
        _newItems.eq(_addCount).slideDown(_animSpeed);
        _addCount++;
      }
      return false;
    });
  });
}


/**
 * CKEditor
 */
function initHtmlEditor(options) {  
  $(".editor-box").each(function() {
    var _holder = $(this);
    var _editor = _holder.find(".jquery_ckeditor");
    var _link = _holder.find(".hyperlink");
    
    var editor = _editor.ckeditor({customConfig:'/common/plugins/ckeditor/config.js'});
    
    _link.click(function() {
      ExecuteCommand(_editor, 'link');
      return false;
    });
  });

  function ExecuteCommand(editor, commandName) {
    // Get the editor instance that we want to interact with.
    //var oEditor = CKEDITOR.instances.editor1;
    var oEditor = $(editor).ckeditorGet();
  
    // Check the active editing mode.
    if ( oEditor.mode == 'wysiwyg' ) {
      // Execute the command.
      oEditor.execCommand( commandName );
    } else {
      alert( 'You must be on WYSIWYG mode!' );
    }
  }
}



/**
 * Description more/less
 */
function initDescSlide(holder, showHide) {
  var _paymentButton = $(".payment .btn-blue");
  
  $(holder + ' .show-more').each(function() {
    var _holder = $(this);
    var _box = _holder.find('.show-box');
    var _limit = _holder.find('.limit');

    _box.each(function() {
      var _btn;
      //var _tab = _holder.find('#tabs');
      var _target;
      var text ;
      
      var _effect = "blind";
      var _speed = 500;
      var options = {};
      //console.log(_tab);
      try{
        _btn = _holder.find('.show-btn');
        //var _tab = _holder.find('#tabs');
        _target = _btn.attr('href').substr(1,_btn.attr('href').length);
        text = _btn.attr("title");
      }catch(e){
      }
      
      _show=function() {
        if (_paymentButton.IsBubblePopupOpen()) _paymentButton.HideBubblePopup();
          
        if (_limit) _limit.hide();
        _box.show(_effect, options, _speed, function() {
          if (!text) {
            _btn.text("less").removeClass("more").addClass("less");
          } else {
            _btn.text('less'+text);
          }
        });
      };
      
      _hide=function() {
        _box.hide(_effect, options, _speed, function() {
          if (_limit) _limit.show();
          if (!text) {
            _btn.text("more").removeClass("less").addClass("more");
          } else {
            _btn.text('more'+text);
          }
        });
        if (_target) {
          $("html, body").animate({scrollTop:$(_target).offset().top-50}, _speed, function() {
            if (_paymentButton.HasBubblePopup()) _paymentButton.ShowBubblePopup();
          });
        }
      };
      
      if(showHide==undefined) {
        showHide='hide';
      }

      if(showHide=='show'){
        _btn.toggle(_hide,_show );
      }else{
        _btn.toggle(_show,_hide);
      }
     
      return false;
    });
  });
}

/**
 * Tab Slide (jquery.ui)
 * @return
 */
function initTabSlide() {
  $('#tabs').tabs({
    select: function(event, ui) {
      if ($(ui.tab).parent().hasClass('ui-state-focus')) {
        $(ui.tab).parent().removeClass("ui-state-focus");
      }
    },
    load: function(event, ui) {
      $(ui.tab).parent().find("img").each(function() {
        if (ui.index == 0) {
          if($(ui.panel).hasClass('tab-content')) {
            if($(this).attr("id") != 'snsimage')
              $(this).remove();
          } else {
            $(this).attr("id","newcheck");
          }
        } else {
          if($(this).attr("id") != 'snsimage')
            $(this).remove();
        }
      });

      $(ui.panel).addClass('tab-content');

      if (ui.index == 0) {
        initDescSlide('.side-block');
        if ($("#ui-tabs-1").HasBubblePopup()) $("#ui-tabs-1").ShowBubblePopup();
      } else {
        if ($("#ui-tabs-1").HasBubblePopup()) $("#ui-tabs-1").HideBubblePopup();
      }

      $(".sponcount", ui.panel).each(function() {
        $("span", ui.tab).text($(this).text());
      });
    }
  });
}

function initTweetTab() {
  $('div.share-holder a.tab').each(function(){
    //console.log($(this).attr('href'));
    $(this).click(function() {
      if(!$(this).hasClass('active')) {
        $('div.share-holder a.active').each(function(){
          $(this).removeClass('active');
          var _hide = $(this).attr('href');
          $(_hide).hide();
        });

        $(this).addClass('active');
        var _show = $(this).attr('href');
        $(_show).show();
      }
      return false;
    });
  });
}

function initImageClickResize(){
  var img = $('#playbox > .resize-player'),
    img_W_start = img.outerWidth(),
    img_H_start = img.outerHeight(),
    img_coef = img_W_start/img_H_start,
    img_W_end = img.parents('.promo-box').outerWidth(),
    img_H_end =  Math.ceil(img_W_end/img_coef),
    speed = 400,
    moving_block = $('#content'),
    moving_block_marg_start = parseInt($('#content').css('marginTop')),
    moving_block_marg_end = 0,
    link_parent_push_class = 'btn-slide-active',
    parent_box = img.parents('.promo-box').eq(0),
    header = $('#header');
    parent_box_push_class = 'active';
  
  $('.droparea a.btn-slide').each(function(){
    var this_link =$(this);
    this_link.click(function(){
      if(!this_link.parent().hasClass(link_parent_push_class)){
        moving_block.animate({
          marginTop: moving_block_marg_end
        }, {queue:false, duration:speed/3});
        header.css({'visibility': 'hidden'});
        parent_box.animate({
          marginTop: -52
        }, {queue:false, duration:speed});
        img.animate({
          width: img_W_end,
          height: img_H_end
        }, {queue:false, duration:speed, complete:function(){
          this_link.parent().addClass(link_parent_push_class);
          parent_box.addClass(parent_box_push_class);
        }});
      }else{
        parent_box.animate({
          marginTop: 0
        }, {queue:false, duration:speed, complete:function(){
          header.css({'visibility': 'visible'});
        }});
        setTimeout(function(){
          parent_box.removeClass(parent_box_push_class);
          moving_block.animate({
            marginTop: moving_block_marg_start
          }, {queue:false, duration:speed, complete:function(){
            this_link.parent().removeClass(link_parent_push_class);
          }});
        }, speed/2);
        img.animate({
          width: img_W_start,
          height: img_H_start
        }, {queue:false, duration:speed});
      }
      return false;
    });
  });
}

function initOpenClass(){
  $('#mainnav li:has(".nav-search")').each(function(){
    var hold = $(this);
    var open_link = hold.find('.nav-search');
    var openClass = 'nav-search-open';
    var close_link = hold.find('.btn-search');
    open_link.click(function(){
      if(!hold.hasClass(openClass)){
        hold.addClass(openClass);
      }
      return false;
    });
    close_link.click(function(){
      if(hold.hasClass(openClass)){
        hold.removeClass(openClass);
      }
    });
    /*
    $(document).bind('mousedown', function(e){
      if(hold.hasClass(openClass)){
        e = e || event;
        var t = e.target || e.srcElement;
        t = $(t);
        if(t.parents('#mainnav li:has(".nav-search")').length == 0){
          hold.removeClass(openClass)
        }}
    });
    */
  });
}

//resizable textarea
function initResizableTextArea() {
 
  //$('textarea.resize')
  /*
  $('textarea.resize').focusin(function() {
    $(this).css({border:'2px solid #e4f1fc'});
  });
  $('textarea.resize').focusout(function() {
    $(this).css({border:'1px solid #d0d0d0'});
  });
  */
  $('textarea.resize').css('overflow','hidden').autoResize({
    animateDuration : 200,
    extraSpace : 0,
    onResize : function() {
        //$(this).css({border:'1px solid #e4f1fc'});
    },
    animateCallback : function() {
        //$(this).css({opacity:1});
    }
  });
}

function initPlayer() {
  $('ul.musiclist li a').each(function() {
    var _play = $(this);
    var _active = 'active';

    _play.click(function() {
      var _play = $(this);
      var _active = 'active';
      var _parent = _play.parent();

      var albumid = _play.attr('name');
      var songid = _play.attr('href').substr(1,_play.attr('href').length);
       
      if (_parent.hasClass(_active)) {
        sendToActionScriptStop();
      } else {
        sendToActionScript('0', albumid, songid);
      }
      return false;
    });
  });
}

function initHelp() {
  $(".user-process .link").each(function() {
    $(this).click(function() {
      $("#process").load($(this).attr('href'), function() {
        initHelp(); 
      });
      return false;
    });
  });

  $("#process .close").each(function() {
    $(this).click(function() {
      $.ajax({
        url: '/account/process/hide'
      });
      $(".process-box").hide('blind', function() {
        $(".topnav .help").removeClass("tab").addClass("separator");
        $(".topnav .setting").addClass("separator");
      });
    });
  });

  $(".topnav .help").each(function() {
    $(this).click(function() {
      if ($(".process-box").css('display') == 'none') {
        $.ajax({
          url: '/account/process/show'
        });
        $(".topnav .help").removeClass("separator").addClass("tab");
        $(".topnav .setting").removeClass("separator");
        $(".process-box").show('blind');
      }
    });
  });
}
 
//hover for IE
function ieHover(_list) {
  if ($.browser.msie && $.browser.version < 7) {
    $(_list).hover(function() {
      $(this).addClass('hover');
    }, function() {
      $(this).removeClass('hover');
    });
  }
}

var songupload = function() {
  var _animSpeed = 250;
  var _this;
  var listFile;
  var genKey = 0;

  return {
    init: function() {
      _this = this;

      $('div.upload-box').each(function(){
        var box = $(this);
        listFile = box.find('.upload-list');
        genKey = listFile.children().length;
        //log(genKey);

        listFile.children().each(function(){
          if($(this).hasClass("songholder"))
          {
            _this.remove($(this));
            //_this.edit($(this));
            _this.panel($(this));
          }
        });

        var btnAdd = box.find('a.plus');
        btnAdd.click(function(){
          _this.add();
          return false;
        });

        // replace exciting upload fields
        //_this.panel(listFile.children(':visible'));
      });
    },

    add: function() {
      genKey++;
      $.ajax({
        url: "/upload/music/panel",
        data: ({num:genKey}),
        success: function(data){
          listFile.append(data);
          var newItem = listFile.children(':last').hide();
          newItem.slideDown(_animSpeed,function(){
            _this.panel(newItem);
            _this.remove(newItem);
            _this.numberCheck();
            initInputs();
          });
        }
      });
    },
    
    remove: function(holder) {        
      holder.find('.cross').click(function(){
        if (listFile.children().length == 1) return false;
        
        var _input = holder.find('input[name=songName]');
        if (_input.val() == '') {
          remove();
          return false;
        }
        
        $.post("/upload/music/remove",
          {'key':holder.attr("id")}, 
          function(data) {
            holder.slideUp(_animSpeed,function(){
              remove();
            });
          }, "json"
        );
        return false;
      });
      
      function remove() {
        holder.remove();
        _this.numberCheck();
      }
    },

    edit: function(holder) {
      holder.find('.btn-edit').click(function(){
        holder.find('div.uploadify-inner').css('margin-top', '0');
        holder.find('div.uploadify-progress').hide();
        holder.find('div.uploadify-complete').hide();
        
        var songObj = holder.find("input[name=songName]");
        songName = songObj.val();
        
        return false;
      });
    },
    
    changeInfo: function(key, target, value) {
      $.post("/upload/music/update",
        {'key':key, 'target':target, 'value':value}, 
        function(data) {
        }, "json"
      );
    },

    panel: function(holder) {
      var uploadButton = holder.find('div.uploadify');
      var uploadContainer = holder.find('div.uploadify-box');
      
      var _songObj = holder.find("input[name=songName]");
      var _songName = _songObj.val();
      
      _songObj.blur(function() {
        var val = $(this).val();
        if (val != '' && val != _songName) {
          _this.changeInfo(holder.attr("id"), 'songName', val);
          songName = val;
        }
      });
      
      function uploadifyClear() {
        holder.find("div.progress-box").hide();
        progressBar.hide();
    
        _songObj.show();
        holder.find('a.cross').show();
        holder.find("div.uploadify-box").show();
      }
      
      var progressBar = new ProgressBar.Image({
        container:holder.find("div.progress-box"),
        onCancel: function() {
          uploader.stop();
        }
      });

      var songId = holder.attr("id");

      uploadContainer.attr("id","UploadContainer"+songId);
      uploadButton.attr("id","UploadButton"+songId);

      var serverUrl = songuploadData.server;

      var uploader = new plupload.Uploader({
        runtimes : 'html5,html4',
        browse_button : uploadButton.attr("id"),
        browse_button_hover : 'uploadify_hover',
        container : uploadContainer.attr("id"),
        max_file_size : '${20480000000000/1024}kb',
        url : serverUrl+'/upload/music/uploader?uploadId='+holder.attr("id"),
        filters : [{title : "Audio files", extensions : "mp3"}],
        multipart_params : {"key": holder.attr("id"),"id":holder.attr("id")}
      });
    
      uploader.init();
  
      uploader.bind('UploadProgress', function(up, file) {
        progressBar.onProgress(file.percent);
      });
  
      uploader.bind('Error', function(up, err) {
        songuploadData.errHandler(err);
        up.refresh();
      });
  
      uploader.bind('FilesAdded', function(up, files) {
        uploader.start();
        _songObj.hide();
        holder.find("a.cross").hide();
        holder.find("a.btn-lyrics").hide();
        holder.find("div.uploadify-box").hide();
        holder.find("div.progress-box").show();
      });
  
      uploader.bind('FileUploaded', function(up, file, response) {

        progressBar.hide();

        // hidden_json.jsp : make var jsonResult = 'resultJson';
        eval(response.response);    
        var json = jsonResult;
        if (json.success == false) {
          jAlert(json.message);
          uploadifyClear();
          up.refresh();
          return false;
        }

        _songObj.val(json.songName);
        _songObj.removeAttr("readonly");
        holder.attr("id", json.songId)
        
        uploadifyClear();
        holder.find('a.btn-lyrics').show();
        
        _this.edit(holder);
        _this.add();
        
        var onChangeJS = holder.attr("onChange");
        if(typeof onChangeJS != "undefined")
        {
          eval(onChangeJS);
        }
        up.refresh();
      });
  
      uploader.bind('StateChanged', function(up) {
        if (up.state == plupload.STOPPED) {
          uploadifyClear();
          progressBar.hide();
          up.refresh();
        }
      });
      
      _this.sort();
    },

    numberCheck: function() {
      $(".row .num span").each(function(idx) {
        $(this).text((idx+1)+".");
      });

      $.post("/upload/music/sort",
        {seqs:listFile.sortable('toArray').join('|')}, 
        function(data) {
        }, "json"
      );
    },
    
    sort: function() {
      $(".upload-list" ).sortable({
        revert: true,
        opacity: 0.5,
        axis: 'y',
        cursor: 'move',
        handle: 'span',

        update: function(event, ui){
          _this.numberCheck();
        }
      });
      $(".upload-list").disableSelection(); 
    }
  };
}();


var imageupload = function() {
  var _this;
  var limiter = 20;
  var count = 0;
  var genKey = 0;

  var holder;
  var coverList;
  var btnAdd;
  var blankImage = "/common/images/blank_cover.gif";
  var previewBtn;

  return {
    imageType : 'album',

    init: function() {
      _this = this;
      holder = $('#fanatic-image-list');
      coverList = holder.find('ul').children('li[id*=upload-image]');
      previewBtn = $(".preview")
      
      count = coverList.length;
      genKey = count;

      holder.each(function(){
        btnAdd = $(this).find('.btn-add');
        btnAdd.click(function(){
          _this.add();
          return false;
        });
        if(count >= limiter) btnAdd.hide();

        for(var i=1; i <= count; i++) {
          _this.action(i);
        }
      });
      
      previewBtn.each(function() {
        imageupload.preview();
      });
    },

    action: function(genKey) {
      var _panel = $('#upload-image'+genKey);
      _panel.each(function() {
        $('.cross', _panel).click(function() {
          _this.remove(_panel);
          return false;
        });
        
        $('input[type=radio]', _panel).click(function() {
          if ($(this).attr("title") == 'N') {
            jAlert("Please upload cover image.");
            $(this).removeAttr("checked");
          } else {
            _this.select(_panel);
          }
        });
      });
    },
    
    add: function() {
      if(count >= limiter) return;
      genKey++;

      $.ajax({
        url: "/upload/image/view",
        data: ({num:genKey,type:this.imageType}),
        success: function(data){
          holder.children('ul').children('li').eq(count).after(data);
          count++;
          
          if(count >= limiter) btnAdd.hide();
          _this.action(genKey);
        }
      });
    },

    remove: function(_panel) {
      //log(count);
      if (count > 1) {
        var _input = $('input', _panel);

        $.post("/upload/image/remove",
          {key:_input.val()}, 
          function(data) {
            // if isPrime cover...
            if ($('input[name=primeId]',_panel).attr("checked")) {
              $('.preview-image > img').attr("src", blankImage);
            }
            count--;
            _panel.remove();
            if (count < limiter) btnAdd.show();
          }, "json"
        );
      }
    },
    
    select: function(_panel) {
      var _img = $('img', _panel);
      $('.preview-image img').attr('src', _img.attr('src'));
    },
    
    autoCheck: function() {
      var _single;
      var _cnt = 0;
      
      coverList = holder.find('ul').children('li[id*=upload-image]');
      coverList.each(function() {
        var _panel = $(this);
        if ($('input[type=radio]', _panel).attr("title") == "Y") {
          _cnt++;
          _single = _panel
        }
      });
      
      if (_cnt == 1) {
        $('input[type=radio]', _single).attr("checked", "checked");
        this.select(_single);
      }
    },
    
    preview: function() {
      var _state = "stop";
      
      previewBtn.click(function() {
        if (_state == 'stop') {
          slideShow();
          _state = "play";
          previewBtn.children().text("Stop");
        } else {
          $('#slideshow').crossSlideFreeze();
          _state = "stop";
          previewBtn.children().text("Preview");
        }
        return false;
      });

      function slideShow() {
        var covers = [];
        var _cnt = 0;
        
        var _first = $(".preview-image img", holder).attr("src");
        if (_first != '/common/images/blank-cover-120.gif') {
          covers.push({ src: _first, time:5, from:'100% 80% 1x', to:'100% 0% 1.5x' });
        }
        
        coverList = holder.find('ul').children('li[id*=upload-image]');
        coverList.each(function() {
          var _panel = $(this);
          var _radio = $('input[type=radio]', _panel);
          var _cover = $("img", _panel).attr("src");
          
          if (_radio.attr("title") == "Y" && _radio.attr("checked") == false) {
            var _mod = _cnt%4;
            if (_mod == 0) {
              covers.push({ src: _cover, time:5, from:'100% 50%', to:'30% 50% 1.5x' });
            } else if (_mod == 1) {
              covers.push({ src: _cover, time:5, from:'100% 80% 1.5x', to:'80% 0%' });
            } else if (_mod == 2) {
              covers.push({ src: _cover, time:5, from:'100% 80% 1x', to:'100% 0% 1.5x' });
            } else if (_mod == 3) {
              covers.push({ src: _cover, time:5, from:'top left', to:'bottom right 1.5x' });
            }
            _cnt++;
          }
        });

        if (covers.length == 0) return;
        else if (covers.length == 1) covers.push(covers[0]);
        
        $('#slideshow').crossSlide({
          fade: 1,
          variant: true,
          easing: 'easeInOutQuad'
        }, covers, function() {
        });
      }
    }
  };
}();

/* Date Utils */

Date.prototype.addHours= function(h){
  this.setHours(this.getHours()+h);
  return this;
}

function intiTimeZone(holder){
  var gmtHours = new Date().getTimezoneOffset() * (-1);

  $(holder + " .tzo").each(function() {
    var _holder = $(this);
    //log(_holder.attr('id') + " ==> " + new Date(_holder.attr('id')));
    var _date = new Date(_holder.attr('id')).addHours(gmtHours/60).toDateString();
    var _parse = _date.split(/\s+/);
    _holder.text(_parse[1] + " " + _parse[2] +", " + _parse[3]);
  });
}

function getLocalDate(utc) {
  var d = new Date();
  var gmtHours = d.getTimezoneOffset() * (-1);
  var _local = new Date(utc).addHours(gmtHours/60);
  return _local;
}

/* currency  */
$("input.currency").each(function(){
  makeCurrencyInput($(this));
});

/* image progress bar */

var ProgressBar = ProgressBar || {};

ProgressBar.Image = function(options) {
  
  this.progressBarContainer = options.container;
    
  var containerWidth = this.progressBarContainer.width();
  var containerHeight = this.progressBarContainer.height();

  var progressBarWidth = containerWidth;
  if (typeof options.onCancel != "undefined") {
    progressBarWidth -= 20;
  }

  var htmlStr = "<div class=\"fileUploaderProgress\" style=\"width:" + progressBarWidth + "px;margin-top:" + (containerHeight / 2 - 3) + "px;\">";
  htmlStr += "<div class=\"fileUploaderProgressBar\"></div>";
  htmlStr += "</div>";
  htmlStr += "<div class=\"fileUploaderCancel\" style=\"margin-top:" + (containerHeight / 2 - 5) + "px;margin-left:" + (containerWidth - 15 - 3) + "px;\"></div>";

  this.progressBarContainer.html(htmlStr + this.progressBarContainer.html());

  this.barContainer = this.progressBarContainer.children().first();
  this.bar = this.barContainer.children().first();

  if (typeof options.onCancel != "undefined") {
    this.cancelButton = this.barContainer.next();
    this.cancelButton.click(options.onCancel);
  }

  this.onProgress = function(percent) {
    this.bar.css("width", "" + percent + "%");

    this.barContainer.show();
    if (typeof this.cancelButton != "undefined") {
      this.cancelButton.show();
    }
  };

  this.onProgressWhenActive = function(percent) {
    this.bar.css("width", "" + percent + "%");
  };

  this.show = function() {
    this.barContainer.show();
    if (typeof this.cancelButton != "undefined") {
      this.cancelButton.show();
    }
  };

  this.hide = function() {
    this.bar.css("width", "0%");
    this.barContainer.hide();
    if (typeof this.cancelButton != "undefined") {
      this.cancelButton.hide();
    }
  };

  this.refresh = function() {

    var containerWidth = this.progressBarContainer.width();
    var containerHeight = this.progressBarContainer.height();

    var progressBarWidth = containerWidth;
    if (typeof this.cancelButton != "undefined") {
      progressBarWidth -= 20;
    }

    this.barContainer.css("width", "" + progressBarWidth + "px");
    this.barContainer.css("margin-top", "" + (containerHeight / 2 - 3) + "px");

    if (typeof this.cancelButton != "undefined") {
      this.cancelButton.css("margin-top", "" + (containerHeight / 2 - 5) + "px");
      this.cancelButton.css("margin-left", "" + (containerWidth - 15 - 3) + "px");
    }
  };
};



