// Paging and Sorting JavaScript Library
function poAjaxUpdate(model_name){
  Element.hide('po_'+model_name+'_records');
  Element.show('po_'+model_name+'_loading');
  var myAjax = new Ajax.Updater('tbl_'+model_name,window.location.href,{method:'get', evalScripts:true});
  return true;
}

function poSetPage(model_name,p){
  poObj = new poObject(model_name);
  poObj.setPage(p);
  return (! poAjaxUpdate(model_name));
}

function poStackO(model_name,idx){
  if(idx.constructor != Array){idx = [idx];}
  poObj = new poObject(model_name);
  for(var i=0;i<idx.length;i++){
    poObj.stackO(idx[i]);
  }
  return (! poAjaxUpdate(model_name));
}

function poFilterLoad(model_name,formObj){
  if (formObj == undefined){
    value = '';
    formObj = document.forms[model_name+'_poForm'];
  }else{
    value = formObj.elements['filter'].value
  }
  poObj = new poObject(model_name);
  poObj.setFilter(value);
  if(poAjaxUpdate(model_name)){
    return false;
  }else{
    window.location = formObj.action;
    return true;
  }
}

function poClearO(model_name){
  poObj = new poObject(model_name);
  poObj.clearO();
  return (! poAjaxUpdate(model_name));
}

function poObject(name){
  this.n = name;
  this.p = 1;
  this.filter = '';
  this.fs = new Array();
  this.ds = new Array();
  this.setCookie = function (){
    value = this.p + '|' + this.fs.join('.') + '|' + this.ds.join('.') + '|' + this.filter;
    setCookie('po_'+this.n,value);
  }
  this.setPage = function (p){
    this.p = p;
    this.setCookie();
  }
  // clears all sorting information
  this.clearO = function (){
    this.fs = new Array();
    this.ds = new Array();
    this.setPage(1);
  }
  // This will control the stacking order and the direction
  this.stackO = function (field_idx){
    if(this.fs[0] == field_idx){
      this.ds[0] = (this.ds[0] == 1) ? 0 : 1;
    }else{
      this.fs.unshift(field_idx);
      this.ds.unshift(0);
    }
    // remove fields that are in array twice
    tmp_f = new Array();
    tmp_d = new Array();
    for(var i=0;i<this.fs.length;i++){
      is_new = true;
      for(var j=0;j<tmp_f.length;j++){
        if(tmp_f[j] == this.fs[i]){
          is_new = false;
          break;
        }
      }
      if(is_new){
        tmp_f.push(this.fs[i]);
        tmp_d.push(this.ds[i]);
      }
    }
    this.fs = tmp_f;
    this.ds = tmp_d;
    // need to cut down number of fields to max of 3
    x = (this.fs.length < 3) ? this.fs.length : 3;
    this.fs = this.fs.slice(0,x);
    this.ds = this.ds.slice(0,x);
    this.setPage(1);
  }
  
  this.setFilter = function(string){
    this.filter = string;
    this.clearO();
  }

  // init values
  cookie = getCookie('po_'+name);
  if(cookie != null){
    var temp = cookie.split('|');
    parts = new Array();
    for(var i=0;i<temp.length;i++){
      if(i < 4){parts[i] = temp[i];}
      else{parts[3] += '|'+temp[i];}
    }
    if(parts[0] != undefined){this.p = parts[0];}
    if(parts[1] != undefined){this.fs = (parts[1].length > 0) ? parts[1].split('.') : new Array();}
    if(parts[2] != undefined){this.ds = parts[2].split('.');}
    if(parts[3] != undefined){this.filter = parts[3];}
    
  }
  
}
