(function(){
  var H=YAHOO.util.Event,D=YAHOO.util.Dom;
  YAHOO.namespace("Imgo2");
  var C=function(L,K){
    var J=Array.prototype.slice.call(arguments);
    J=J.slice(2);
    if(typeof L=="function"){
      return L.apply(K||this,J);
    }
  };
  var A=function(L,K){
    for(var J=(L==1)?this.config.perPage+1:this.config.perPage;J>=1;J--){
      var M=D.get("imgo2-items-"+L+"-"+J);
      if(M){
        break ;
      }
    }
    if(M){
      D.insertAfter(K,M);
    }else {
      if(!this.loaded[(L-1)<1?1:L-1]&&this.container.firstChild){
        this.container.insertBefore(K,this.container.firstChild);
      }else {
        var M=D.get("imgo2-items-"+(L-1)+"-"+((L-1)==1?this.config.perPage+1:this.config.perPage));
        if(M){
          D.insertAfter(K,M);
        }else {
          this.container.appendChild(K);
        }
      }
    }
  };
  var B=function(P,O){
    for(var M=0,K=O.length;M<K;M++){
      var Q="imgo2-items-"+P+"-"+(M+1);
      var N=D.get(Q);
      if(!N){
        N=document.createElement("li");
        N.id=Q;
        for(var L in O[M]){
          if(typeof O[M][L]!="undefined"){
            N.setAttribute("param:"+L,O[M][L]);
          }
        }
        var J=O[M];
        N.innerHTML="<span class=\"pic\"><a href=\"#\"><img alt=\"\" src=\"../include/showpics.jsp?path="+J.img_small+"&pic=small\" /></a></span>";
        A.call(this,P,N);
      }
    }
  };
  var E=function(N){
    if(this.loaded[1]){
      return (N-1)*850-((N-1)*85);
    }else {
      var K=this.container.getElementsByTagName("li");
      var O="imgo2-items-"+(N-1)+"-9";
      for(var L=0,J=K.length,M=0;L<J;L++){
        if(K[L].id==O){
          return M;
        }
        M+=85;
      }
    }
  };
  var I=function(O,K){
    if(this.loaded[O]||this._scrolling||this.loading){
      return ;
    }
    this.loading=true;
    C(this.config.onBeforeLoad,this);
    var N=parseInt((O-1)*this.config.perPage,10);
    var J=parseInt((O-1)*this.config.perPage+this.config.cache*this.config.perPage,10);
    if(!this.loaded[1]){
      var P=true;
      N=parseInt(N-this.config.perPage*2,10);
    }else {
      if(J>this.totalItem){
        J=parseInt(this.totalItem,10);
      }
    }
    if(N<0){
      N=0;
    }
    var L=this.config.api+"&ps_b="+N+"&pe_e="+J+"&var=Imgo2";
    var M=YAHOO.util.Get.script(L,{onSuccess:function(){
        if(!this.inited){
          this.orgTotalItem=Imgo2.total;
          this.totalItem=Imgo2.total;
          this.key=Imgo2.key;
          if(this.config.limit&&this.config.limit<this.totalItem){
            this.totalItem=this.config.limit;
          }
          this.totalPage=Math.ceil(this.totalItem/this.config.perPage);
          C(this.config.onInit,this);
        }
        var T=O;
        if(typeof P!="undefined"){
          T=T-2;
        }
        if(T<1){
          T=1;
        }
        for(var Q=0;Q<this.config.cache;Q++){
          var S=T+Q;
          if(S==1){
            var R=Imgo2.data.slice(0,10);
          }else {
            var R=Imgo2.data.slice(Q*this.config.perPage+1,Q*this.config.perPage+this.config.perPage+1);
          }
          this.loaded[S]=true;
          B.call(this,S,R);
        }
        delete Imgo2;
        this.loading=false;
        this.inited=true;
        C(this.config.onLoadComplete,this);
        this.goGroup(O,K);
      },scope:this,charset:"gbk",timeout:1000});
  };
  var F={currentClass:"current",limit:5000,perPage:9,api:"",useAnim:true,go:1,cache:3};
  YAHOO.Imgo2=function(J,K){
    this.config=YAHOO.lang.merge(F||{},K);
    this.container=D.get(J);
    this.init();
  };
  var G=YAHOO.Imgo2.prototype;
  G.init=function(){
    this.loaded=[];
    this.container.innerHTML="";
    D.setStyle(this.container,"overflow","hidden");
    this.goGroup(this.config.go||1,false);
  };
  G.selectItem=function(K){
    K=D.get(K);
    if(!K){
      return ;
    }
    var J=this.config.currentClass;
    if(this.lastSelected){
      D.removeClass(this.lastSelected,J);
    }
    D.addClass(K,J);
    this.lastSelected=K;
    C(this.config.onSelectItem,this,K);
  };
  G.goGroup=function(N,M){
    if(N<1||N>this.totalPage||this._scrolling){
      return ;
    }
    if(!this.loaded[N]){
      I.call(this,N,M);
      return ;
    }
    if(Math.abs(N-this.currentPage)>=5){
      M=false;
    }
    
    var K=N<this.currentPage;
    this.currentPage=N;
    var L=E.call(this,this.currentPage);
    M=(typeof M=="undefined")?this.config.useAnim:M;
    if(M){
      this.anim=new YAHOO.util.Scroll(this.container,{scroll:{to:[L,0]}},0.8,YAHOO.util.Easing.easeBoth);
      this.anim.onComplete.subscribe(function(){
        this._scrolling=false;
        C(this.config.onGroupChange,this);
        if(this.currentPage==1){
          C(this.config.onFirstPage,this);
        }
        if(this.currentPage==this.totalPage){
          C(this.config.onLastPage,this);
        }
        if(N==1){
          this.selectItem("imgo2-items-"+N+"-"+(this.config.perPage+1));
        }else {
          var O="imgo2-items-"+(K?(N+"-"+this.config.perPage):((N-1)+"-"+(N==2?this.config.perPage+1:this.config.perPage)));
          this.selectItem(O);
        }
      },this,true);
      this._scrolling=true;
      this.anim.animate();
    }else {
      this.container.scrollLeft=L;
      C(this.config.onGroupChange,this);
      if(this.currentPage==1){
        C(this.config.onFirstPage,this);
      }
      if(this.currentPage==this.totalPage){
        C(this.config.onLastPage,this);
      }
      if(N==1){
        this.selectItem("imgo2-items-"+N+"-1");
      }else {
        var J="imgo2-items-"+(K?(N+"-"+this.config.perPage):((N-1)+"-"+(N==2?this.config.perPage+1:this.config.perPage)));
        this.selectItem(J);
      }
    }
  };
  G.selectNextItem=function(){
    var K=D.getNextSibling(this.lastSelected);
    if(K){
      var J=K.id.match(/\-(\d+)\-(\d+)$/);
      if(this.currentPage!=J[1]){
        this.nextGroup();
      }else {
        this.selectItem(K);
      }
    }else {
      if(this.currentPage<this.totalPage){
        this.nextGroup();
      }
    }
  };
  G.selectPrevItem=function(){
    var K=D.getPreviousSibling(this.lastSelected);
    if(K&&this.currentPage>=1){
      var J=K.id.match(/\-(\d+)\-(\d+)$/);
      if(this.currentPage!=J[1]){
        this.prevGroup();
      }else {
        this.selectItem(K);
      }
    }
  };
  G.prevGroup=function(){
    var J=this.currentPage-1;
    if(J<1){
      J=1;
    }
    this.goGroup(J);
  };
  G.nextGroup=function(){
    var J=this.currentPage+1;
    if(J>this.totalPage){
      J=this.totalPage;
    }
    this.goGroup(J);
  };
})();