// IE COMPATIBILITY FUNCTIONS

Array.prototype.push    = arrPush;
Array.prototype.pop     = arrPop;
Array.prototype.unshift = arrUnShift;
Array.prototype.shift   = arrShift;
Array.prototype.pack    = arrPack;
Array.prototype.del     = arrDelete;
Array.prototype.find    = arrFind;
Array.prototype.debug   = arrDebug;
Array.prototype.Debugging = 0;

function arrPush(v)    { return  }
function arrPop()      { return  }
function arrUnShift(v) { return  }
function arrShift()    { return  }
function arrPack()     { return  }
function arrDelete(i)  { return  }
function arrFind(c)    { return  }

//=====================================================
//      I M P L E M E N T A T I O N 
//=====================================================
function arrPush(v)    { 
  if(v && v!=null && v!=0 && v!='0')  //v has a value 
    this[this.length] = v;  
  return this.length; 
}

function arrUnShift(v) {              // NEVER TESTED!
  var i;  
  this.length += 1; 
  for(i=this.length-1;i>0;i--) 
    this[i] = this[i-1];  
  this[0] = v; 
  return this.length; 
}

function arrPop()      {              //NEVER TESTED!               
  if(this.length < 1) return null; 
  var rv = this[this.length-1];   
  this.length -= 1; 
  return rv; 
}

function arrShift()    { 
  var i; 
  if(this.length < 1) return null; 
  var rv = this[0]; 
  for(i=1;i<this.length;i++) 
    this[i-1] = this[i]; 
  this.length -= 1; 
  return rv; 
}

function arrPack()     { 
  var i=0; var j=0; 
  for(i=0;i<this.length;i++) { 
    if(this[i]==null) { 
      this.debug("ARRAY: pack suppresses element no. " + i + ".");
      j++;  
    } else if(j>0){ 
      this[i-j]=this[i]; 
      this[i]=null; 
  } } 
  this.length -= j; 
}

function arrDelete(i)  {
  if(i<this.length && i>=0) {     //i is a valid index
    this.debug("ARRAY: deleted element no. " + i + ".");
    this[i]=null; 
    return true;
  }  
  return false;
}

function arrFind(v)    { 
  var i; 
  for(i=0;i<this.length;i++)  
    if(this[i]==v) {
      this.debug("ARRAY: element found at position " + i + ".");
      return i;
    }
  return false;
}


//-------------------- DEBUG -------------------------------
function arrDebug(m) { // m - message
  if(!this.Debugging || !m) { return }
  
  if(window.debug) { window.debug(m) } // pass message to specific debug method if implemented
  else { alert(m) }  
}


