/** Library, erweitert DOM-Elemente um weitere Functionen
 * Sammlung fremdem und eigenem Codes
 *
 * @date    19.04.2008   
 * @version 0.001
 *
 * String: trim()
 * Array:  push(), pop(), shift(), splice(), unshift()
 * 
 *
 * Inspiriert/Übernommen von:
 * @source 'fix_ecma.js' 
 * @author Copyright 2003 Mark D. Anderson (mda@discerning.com)
 *        
 */ 


var xlib_fixed = [];

// function to register a fixed name
function xlib_fixing(name) {
   xlib_fixed[xlib_fixed.length] = name;
}

// Get the version of JScript, or null.
var xlib_jscript_version = null;

if (typeof ScriptEngineMajorVersion == 'function') {
  xlib_jscript_version = parseFloat(ScriptEngineMajorVersion() + '.' + ScriptEngineMinorVersion());
}
/*@cc_on
  xlib_jscript_version = @_jscript_version;
@*/


/** Browser *******************************************************************/

/** Window ********************************************************************/

/** Date **********************************************************************/

/** Firefox getYear returns "100" for 2000
 */
  if(String(new Date().getYear()).length===3){
    Date.prototype.getYear=function(){
    return this.getFullYear();
    }
  }
/** Document ******************************************************************/

/** String ********************************************************************/
  if (!String.prototype.trim) {
    xlib_fixing('String.push');
    String.prototype.trim = function () {
        return this.replace(/^\s+|\s+$/g, "");
    }; 
  }
/** Array *********************************************************************/

if (!Array.prototype.push) {
  xlib_fixing('Array.push');
  Array.prototype.push = function () {
    for (var i = 0; i < arguments.length; i++) {this[this.length] = arguments[i];}
    return this.length;
  };
}

if (!Array.prototype.pop) {
  xlib_fixing('Array.pop');
  Array.prototype.pop = function () {
    if (this.length == 0) return UNDEFINED;
    return this[--this.length];
  }
}

if (!Array.prototype.shift) {
  xlib_fixing('Array.shift');
  Array.prototype.shift = function () {
     this.reverse();
     var lastv = this.pop();
     this.reverse();
     return lastv;
  }
}

if (!Array.prototype.unshift) {
  xlib_fixing('Array.unshift');
  Array.prototype.unshift = function () {
     // prepare for a call to splice
     var a = [0,0];
     for(var i=0;i<arguments.length;i++) {a.push(arguments[i]);}
     var ret = this.splice.apply(a);
     return this.length;
  }
}

if (!Array.prototype.in_array) {
  xlib_fixing('Array.in_array');
  Array.prototype.in_array = function (find){
    for(z in this) {
      if (find == this[z]) {
        return true;
        break;
      }
    }
    return false;
  }
}

if (!Array.prototype.splice) {
  xlib_fixing('Array.splice');
  Array.prototype.splice = function (start, deleteCount) {
    var len = parseInt(this.length);

    start = start ? parseInt(start) : 0;
    start = (start < 0) ? Math.max(start+len,0) : Math.min(len,start);

    deleteCount = deleteCount ? parseInt(deleteCount) : 0;
    deleteCount = Math.min(Math.max(parseInt(deleteCount),0), len);

    var deleted = this.slice(start, start+deleteCount);

    var insertCount = Math.max(arguments.length - 2,0);
    // new len, 1 more than last destination index
    var new_len = this.length + insertCount - deleteCount;
    var start_slide = start + insertCount;
    var nslide = len - start_slide; // (this.length - deleteCount) - start
    // slide up
    for(var i=new_len - 1;i>=start_slide;--i) {this[i] = this[i - nslide];}
    // copy inserted elements
    for(i=start;i<start+insertCount;++i) {this[i] = arguments[i-start+2];}
    return deleted;
  }
}



/** Math **********************************************************************/

//alert(xlib_fixed);

