// PheliX <phelix.truba@gmail.com> http://savs.sytes.net
// http://www.metaleks.lv

// + IE mod + ==================================================================
var testArr = new Array();
if( ! testArr.push ){
 Array.prototype.push = function( v ){
  this[ this.length ] = v;
 }
}
if( ! testArr.pop ){
 Array.prototype.pop = function(){
  delete this[ this.length - 1 ];
 }
}
delete testArr;
// - IE mod - ==================================================================

// + misc + ====================================================================
function doNothing(){}
// - misc - ====================================================================

// + sdxml mod + ===============================================================
String.prototype.toUrl = function(){
 return this.replace(/%/g,'%25').replace(/\+/g,'%2B').replace(/&/g,'%26');
}

String.prototype.toXml = function(){
 return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#39;');
}

String.prototype.clone = function(){
 return this;
}

String.prototype.toSdxml = function( key ){
 return '<s' + ( ( typeof key == 'undefined' || key == '' )? '': ' k="' + key.toXml() + '"' ) + '>' + this.toXml() + '</s>';
}

Number.prototype.clone = function(){
 return this;
}

Number.prototype.toSdxml = function( key ){
 return '<n' + ( ( typeof key == 'undefined' || key == '' )? '': ' k="' + key.toXml() + '"' ) + '>' + this + '</n>';
}

Boolean.prototype.toSdxml = function( key ){
 return '<n' + ( ( typeof key == 'undefined' || key == '' )? '': ' k="' + key.toXml() + '"' ) + '>' + ( this? '1': '0' ) + '</n>';
}
// - sdxml mod - ===============================================================

// + l + =======================================================================
function l( arr ){
 if( typeof arr == 'undefined' ) arr = new Array()
 this.fromArray( arr );
}

l.prototype.add = function( d ){
 this._.push( d );
}

l.prototype.rmNr = function( nr ){
 if( this._.length < 1 ) return false;
 var maxNr = this._.length - 1;
 for( var it = nr; it < maxNr; ++ it ) this._[ it ] = this._[ it + 1 ];
 this._.pop();
}

l.prototype.rm = function( d ){
 for( var it = 0; it < this._.length; it++ ) if( this._[ it ] === d ){
  this.rmNr( it );
  return true;
 }
 return false;
}

l.prototype.toArray = function(){
 return this._;
}

l.prototype.fromArray = function( arr ){
 this._ = arr;
 this.pointer = 0;
}

l.prototype.fromL = function( lOb ){
 this.fromArray( lOb.toArray() );
}

l.prototype.cnt = function(){
 return this._.length;
}

l.prototype.next = function(){
 if( this.pointer >= this.cnt() ){
  this.pointer = 0;
  return false;
 }
 return this._[ this.pointer++ ];
}

l.prototype.clone = function(){
 var ar = this._;
 var nl = new l();
 var len = ar.length;
 for( nr = 0; nr < len; ++nr ){
  nl.add( ar[ nr ].clone() );
 }
 return nl;
}

l.prototype.toSdxml = function( key ){
 var sdxml = '<l' + ( ( typeof key == 'undefined' || key == '' )? '': ' k="' + key.toXml() + '"' ) + '>';
 var key = '';
 for( var it = 0; it < this._.length; it++ ){
  sdxml += this._[ it ].toSdxml( key );
 }
 sdxml += '</l>';
 return sdxml;
}
// - l - =======================================================================

// + i + =======================================================================
function i( ob ){
 if( typeof ob == 'undefined' ) ob = new Object();
 this.fromObject( ob );
}

i.prototype.v = function( key, d ){
 if( typeof d != 'undefined' ) this._[ key ] = d;
 if( d === null ) delete this._[ key ];
 if( typeof this._[ key ] == 'undefined' ) return null;
 return this._[ key ];
}

i.prototype.toObject = function(){
 return this._;
}

i.prototype.fromObject = function( obj ){
 this._ = obj;
 this.pointer = 0;
}

i.prototype.keys = function(){
 var ob = this._;
 var key;
 var list = new l();
 for( key in ob ){
  list.add( key );
 }
 return list;
}

i.prototype.fromI = function( iOb ){
 this.fromObject( iOb.toObject() );
}

i.prototype.clone = function(){
 var ob = this._;
 var ni = new i();
 for( key in ob ){
  ni.v( key, ob[ key ].clone() );
 }
 return ni;
}

i.prototype.toSdxml = function( key ){
 var sdxml = '<i' + ( ( typeof key == 'undefined' || key == '' )? '': ' k="' + key.toXml() + '"' ) + '>';
 var key = '';
 for( key in this._ ){
  sdxml += this._[ key ].toSdxml( key );
 }
 sdxml += '</i>';
 return sdxml;
}
// - i - =======================================================================
