
var scrollInfo=new Array();

function scrollPrev(sn) {
  var si=scrollInfo[sn];
  scrollSection(sn,"prev");
}

function scrollRemoveSelected(sn) {
  var si=scrollInfo[sn];
  if (si["selected"]==-1) return;
  var clipsRow=document.getElementById('scroll_ul_'+sn);
  var lis=clipsRow.getElementsByTagName('li');
  var li=lis[si["selected"]];
  clipsRow.removeChild(li);
  scrollInfo[sn]["selected"]=-1;
  var lis=clipsRow.getElementsByTagName('li');
  if (!lis || lis.length==0) clipsRow.innerHTML='&nbsp;';
}

function scrollPaneClick(sn,li) {
  if (li.firstChild.className!='selected_scrollpane_item') {

    var clipsRow=document.getElementById('scroll_ul_'+sn);
    var lis=clipsRow.getElementsByTagName('li');
    foundidx=-1;
    for (var k=0;k<lis.length;k++) if (lis[k]==li) {foundidx=k;break;}
    if (foundidx==-1) return;

    iecompat(li.parentNode);
    var his=li.parentNode.querySelectorAll('.selected_scrollpane_item');
    for (var k=0;k<his.length;k++) his[k].parentNode.removeChild(his[k]);


    var dx=document.createElement("div");
    dx.className='selected_scrollpane_item';
    dx.style.position='relative';
    var d=document.createElement("div");
    d.style.position='absolute';
    d.style.width=li.offsetWidth+'px';
    d.style.height=li.offsetHeight+'px';
    d.style.backgroundColor='black';
    d.style.opacity=0.4;

    dx.appendChild(d);
    li.insertBefore(dx,li.firstChild);
    scrollInfo[sn]["selected"]=foundidx;
  } else {
    li.removeChild(li.firstChild);
    scrollInfo[sn]["selected"]=-1;
  }
}

function scrollLoadInit() {
  for (var sn in scrollInfo) {
    if (!scrollInfo.hasOwnProperty(sn)) continue;
    var si=scrollInfo[sn];
    if (!si["selectable"]) continue;
    var clipsRow=document.getElementById('scroll_ul_'+sn);
    var lis=clipsRow.getElementsByTagName('li');
    for (var k=0;k<lis.length;k++) {

      var func=function(sname,li) {
        return function () {scrollPaneClick(sname,li);};
      }

      lis[k].addEventListener("click",func(sn,lis[k]),false);
    }
  }
}

window.addEventListener("load",scrollLoadInit,false);

function setNextWait(sn,enableWaitMode) {
  var si=scrollInfo[sn];

  for (var i=1;i<=si["numberButtons"];i++) {
    var button=sn+'_'+i;
    nb=document.getElementById('next_button_'+button);
    nbo=document.getElementById('next_button_offline_'+button);
    wb=document.getElementById('wait_button_'+button);
    if (enableWaitMode) {
      scrollInfo[sn]["old_display_state_next"]=nb.style.display;
      scrollInfo[sn]["old_display_state_next_offline"]=nbo.style.display;
      nb.style.display='none';
      nbo.style.display='none';
      wb.style.display='block';
    } else {
      if (typeof si["old_display_state_next"]!='undefined') nb.style.display=si["old_display_state_next"];
      if (typeof si["old_display_state_next_offline"]!='undefined') nbo.style.display=si["old_display_state_next_offline"];
      wb.style.display='none';
    }
  }
}

function scrollNext(sn) {
  var si=scrollInfo[sn];

  if (si["currentPosition"]+si["countPerPage"]>=si["alreadyLoadedCount"]) {
        var returnfunc="scrollSectionLoaded('"+sn+"',#result)";
    setNextWait(sn,true);
    //alert(si['link']+'?cnext='+(si["currentPosition"]+si["countPerPage"])+'&countperpage='+si["countPerPage"]+'&category='+sn+'&gap='+si["gap"]+'&uid='+globalScrollUID+'&folder='+globalScrollFolder+si['query']);
    if (!si['query']) si['query']='';
    if (si['link'].indexOf('?')!=false)
      ajax_get_url(si['link']+'&cnext='+(si["currentPosition"]+si["countPerPage"])+'&countperpage='+si["countPerPage"]+'&category='+sn+'&gap='+si["gap"]+'&uid='+globalScrollUID+'&folder='+globalScrollFolder+si['query'],returnfunc);
    else
      ajax_get_url(si['link']+'?cnext='+(si["currentPosition"]+si["countPerPage"])+'&countperpage='+si["countPerPage"]+'&category='+sn+'&gap='+si["gap"]+'&uid='+globalScrollUID+'&folder='+globalScrollFolder+si['query'],returnfunc);
    return;
  }
  scrollSection(sn,"next");
}

function getNewScrollPosition(sn,mode) {
  var si=scrollInfo[sn];
  var p=si["currentPosition"];
  if (mode=="next") p+=si["moveCount"]; else p-=si["moveCount"];
  p=Math.min(Math.max(p,0),si["countAll"]-si["countPerPage"]);
  return p;
}

function scrollSetLength(sn,cnt) {
  scrollInfo[sn]["alreadyLoadedCount"]=cnt;
  scrollInfo[sn]["countAll"]=cnt;
  scrollUpdateButtons(sn);
  scrollSectionUpdateSize(sn);
}

function scrollUpdateButtons(sn) {
  var si=scrollInfo[sn];
  for (var i=1;i<=si["numberButtons"];i++) {
    var button=sn+'_'+i;

    if (si["currentPosition"]>=si["countAll"]-si["countPerPage"]) {
      document.getElementById('next_button_'+button).style.display='none';
      document.getElementById('next_button_offline_'+button).style.display='block';
    } else {
      document.getElementById('next_button_'+button).style.display='block';
      document.getElementById('next_button_offline_'+button).style.display='none';
    }

    if (si["currentPosition"]==0) {
      document.getElementById('back_button_'+button).style.display='none';
      document.getElementById('back_button_offline_'+button).style.display='block';
    } else {
      document.getElementById('back_button_'+button).style.display='block';
      document.getElementById('back_button_offline_'+button).style.display='none';
    }

  }
}

function scrollSection(sn,mode) {
  scrollInfo[sn]["currentPosition"]=getNewScrollPosition(sn,mode);
  var si=scrollInfo[sn];

  scrollUpdateButtons(sn);

  var d=document.getElementById("section_"+sn);
  JSTweener.removeTweens(d);
  if (si["direction"]=="V") {
    JSTweener.addTween(d,{time:2,transition:'easeoutexpo', scrollTop:si["currentPosition"]*(si["itemSize"]+si["gap"])});
  } else {
    JSTweener.addTween(d,{time:2,transition:'easeoutexpo', scrollLeft:si["currentPosition"]*(si["itemSize"]+si["gap"])});
  }
}

function scrollSectionUpdateSize(sn) {
  var si=scrollInfo[sn];

  var d=document.getElementById("section_"+sn);
  var clipsRow=document.getElementById('scroll_ul_'+sn);

  if (si["direction"]=="H") {
        var requiredw=(scrollInfo[sn]["alreadyLoadedCount"]*si["itemSize"]+(scrollInfo[sn]["alreadyLoadedCount"]-1)*si["gap"]);
    if (parseInt(clipsRow.style.width)<requiredw) clipsRow.style.width=requiredw+"px";
  } else {
        var requiredh=(scrollInfo[sn]["alreadyLoadedCount"]*si["itemSize"]+(scrollInfo[sn]["alreadyLoadedCount"]-1)*si["gap"]);
    if (parseInt(clipsRow.style.height)<requiredh) clipsRow.style.height=requiredh+"px";
  }
}

function scrollSectionLoaded(sn,result) {
  var si=scrollInfo[sn];
  setNextWait(sn,false);
  if ((result[0]==undefined && !result) || result=='#') return;

  var result_html;

  if (typeof result=="string") {
    result_html=document.createElement('div');
    result_html.innerHTML=result;
    var lis=result_html.getElementsByTagName("li");
    var result=new Array();
    for (var k=0;k<lis.length;k++) result.push(lis[k]);
    scrollInfo[sn]["alreadyLoadedCount"]+=result.length;
  } else {
    scrollInfo[sn]["alreadyLoadedCount"]+=result.length;
  }

  var d=document.getElementById("section_"+sn);
  var clipsRow=document.getElementById('scroll_ul_'+sn);

  if (si["direction"]=="H") var spos=d.scrollLeft; else var spos=d.scrollTop;

  scrollSectionUpdateSize(sn);

  /*
  if (si["direction"]=="H") {
    var spos=d.scrollLeft;
        var requiredw=(scrollInfo[sn]["alreadyLoadedCount"]*si["itemSize"]+(scrollInfo[sn]["alreadyLoadedCount"]-1)*si["gap"]);
    if (parseInt(clipsRow.style.width)<requiredw) clipsRow.style.width=requiredw+"px";
  } else {
    var spos=d.scrollTop;
        var requiredh=(scrollInfo[sn]["alreadyLoadedCount"]*si["itemSize"]+(scrollInfo[sn]["alreadyLoadedCount"]-1)*si["gap"]);
    if (parseInt(clipsRow.style.height)<requiredh) clipsRow.style.height=requiredh+"px";
  }
  */

  var lis=clipsRow.getElementsByTagName("li");
  var lis_length=0;
  if (lis) lis_length=lis.length;

  if (lis_length==0) clipsRow.innerHTML="";

    if (lis_length>0) lis[lis_length-1].style.width=(parseInt(lis[lis_length-1].style.width)+si["gap"])+"px";

  if (result_html) {
    for (var i=0;i<result.length;i++) {
      var ew=si['itemSize'];
      if (i<result.length-1) ew+=si['gap'];
      result[i].style.width=ew+"px";

      var func=function(sname,li) {
        return function () {scrollPaneClick(sname,li);};
      }
      iecompat(result[i]);
      if (si["selectable"]) result[i].addEventListener("click",func(sn,result[i]),false);
      clipsRow.appendChild(result[i]);
    }
  } else {
    for (var i=0;i<result.length;i++) {
      var newElement=document.createElement("li");
      var ew=si['itemSize'];
      if (i<result.length-1) ew+=si['gap'];
      newElement.style.width=ew+"px";
      newElement.innerHTML='<div style="width:'+si['itemSize']+'px">'+result[i]['code']+'<div style="clear:both"></div>&nbsp;</div>';
      clipsRow.appendChild(newElement);
    }
  }

  var count_now=lis_length+result.length;
  if (count_now>si["countAll"] || !si["countAll"]) scrollInfo[sn]["countAll"]=count_now;
  if (count_now<=si["countPerPage"]) return;

  if (si["direction"]=="H") {
        d.scrollLeft=spos;
  }

  scrollSection(sn,"next");

  if (typeof(itemsLoaded)=="function") itemsLoaded(sn);
}


