Array.prototype.map = function(f) {  
      var returnArray=[];  
      for (i=0; i<this.length; i++) {    
            returnArray.push(f( _proxy_jslib_handle(this, (i), 0, 0)));  
      }  
      return returnArray;
};

Array.prototype.inArray = function (value) {
      var i;
      for (i=0; i < this.length; i++) {
            if ( _proxy_jslib_handle(this, (i), 0, 0) ===  _proxy_jslib_handle(null, 'value', value, 0, 0)) {
                  return true;
            }
      }
      return false;
};

String.prototype.trim = function() {   
      return  _proxy_jslib_handle(this, 'replace', '', 1, 0)(/^\s+|\s+$/g,"");
};

String.prototype.ltrim = function() {   
      return  _proxy_jslib_handle(this, 'replace', '', 1, 0)(/^\s+/g,"");
};

String.prototype.rtrim = function() {   
      return  _proxy_jslib_handle(this, 'replace', '', 1, 0)(/\s+$/g,"");
};

Array.prototype.sortNum = function() {   
      return this.sort( function (a,b) { return a-b; } );
};


/*
*************************************************
* Yang namespace
*************************************************
*/
var Yang = new function(){

      this.req = null;

      this.$ = function() {
            var elements = new (Array)();
            for (var i = 0; i < arguments.length; i++) {
                  var element =  _proxy_jslib_handle(arguments, (i), 0, 0);
                  if (typeof element == 'string')
                        element =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(element);
                  if (arguments.length == 1)
                        return element;
                  elements.push(element);
            }
            return elements;
      }

      this.padZeros = function(num, totalLen) {
         var numStr =  _proxy_jslib_handle(num, 'toString', '', 1, 0)();             // Initialize return value as string
         var numZeros = totalLen - numStr.length; // Calculate no. of zeros
         for (var i = 1; i <= numZeros; i++) {
              numStr = "0" + numStr;
         }
         return numStr;
      }

      this.formatNumber = function(num,prefix) {   
            prefix = prefix || '';   
            num += '';   
            var splitStr = num.split('.');   
            var splitLeft = splitStr[0];   
            var splitRight = splitStr.length > 1 ? '.' + splitStr[1] : '';   
            var regx = /(\d+)(\d{3})/;   
            
            while (regx.test(splitLeft)) {      
                  splitLeft =  _proxy_jslib_handle(splitLeft, 'replace', '', 1, 0)(regx, '$1' + ',' + '$2');   
            }   
            
            return prefix + splitLeft + splitRight;
      }

      this.unformatNumber = function(num) {   
            return  _proxy_jslib_handle(num, 'replace', '', 1, 0)(/([^0-9\.\-])/g,'')*1;
      }

      this.isArray = function(testObject) {       
            return testObject && 
                  !(testObject.propertyIsEnumerable('length')) && 
                  typeof testObject === 'object' && 
                  typeof testObject.length === 'number';
      }

      this.getElementsByClass = function(searchClass,tag, node) {
            var classElements = new (Array)();
            if ( node == null )
                  node = document;
            if ( tag == null )
                  tag = '*';
            var els =  _proxy_jslib_handle(node, 'getElementsByTagName', '', 1, 0)(tag);
            var elsLen = els.length;
            var pattern = new (RegExp)('(^|\\\\s)'+searchClass+'(\\\\s|$)');
            for (i = 0, j = 0; i < elsLen; i++) {
                  if ( pattern.test( _proxy_jslib_handle(els, (i), 0, 0).className) ) {
                         _proxy_jslib_assign('', classElements, (j), '=', (  _proxy_jslib_handle(els, (i), 0, 0)));
                        j++;
                  }
            }
            return classElements;
      }

      this.addLoadEvent = function(func) {
            var oldonload = window.onload;
            if (typeof window.onload != 'function') {
                  window.onload = func;
            }
            else {
                  window.onload = function() {
                        oldonload();
                        func();
                  }
            }
      }


      this.addEvent = function(elm, evType, fn, useCapture) {

            if (elm.addEventListener) {
                  elm.addEventListener(evType, fn, useCapture);
                  return true;
            }
            else if (elm.attachEvent) {
                  var r = elm.attachEvent('on' + evType, fn);
                  return r;
            }
            else {
                   _proxy_jslib_assign('', elm, ('on' + evType), '=', ( fn));
            }
      }

      this.toggle = function(obj) {
            var el =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(obj);
            if ( el.style.display != 'none' ) {
                  el.style.display = 'none';
            }
            else {
                  el.style.display = '';
            }
      }

      this.insertAfter = function(parent, node, referenceNode) {
             _proxy_jslib_handle(null, 'parent', parent, 0, 0).insertBefore(node, referenceNode.nextSibling);
      }

      this.getCookie = function( name ) {
            var start =  _proxy_jslib_handle(document, 'cookie', '', 0, 0).indexOf( name + "=" );
            var len = start + name.length + 1;
            if ( ( !start ) && ( name !=  _proxy_jslib_handle(document, 'cookie', '', 0, 0).substring( 0, name.length ) ) ) {
                  return null;
            }
            if ( start == -1 ) return null;
            var end =  _proxy_jslib_handle(document, 'cookie', '', 0, 0).indexOf( ';', len );
            if ( end == -1 ) end =  _proxy_jslib_handle(document, 'cookie', '', 0, 0).length;
            return unescape(  _proxy_jslib_handle(document, 'cookie', '', 0, 0).substring( len, end ) );
      }

      this.setCookie = function( name, value, expires, path, domain, secure ) {
            var today = new (Date)();
            today.setTime( today.getTime() );
            if ( expires ) {
                  expires = expires * 1000 * 60 * 60 * 24;
            }
            var expires_date = new (Date)( today.getTime() + (expires) );
             _proxy_jslib_assign('', document, 'cookie', '=', ( name+'='+escape(  _proxy_jslib_handle(null, 'value', value, 0, 0) ) +
                  ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
                  ( ( path ) ? ';path=' + path : '' ) +
                  ( (  _proxy_jslib_handle(null, 'domain', domain, 0, 0) ) ? ';domain=' +  _proxy_jslib_handle(null, 'domain', domain, 0, 0) : '' ) +
                  ( ( secure ) ? ';secure' : '' )));
      }

      this.deleteCookie = function( name, path, domain ) {
            if ( getCookie( name ) )  _proxy_jslib_assign('', document, 'cookie', '=', ( name + '=' +
                        ( ( path ) ? ';path=' + path : '') +
                        ( (  _proxy_jslib_handle(null, 'domain', domain, 0, 0) ) ? ';domain=' +  _proxy_jslib_handle(null, 'domain', domain, 0, 0) : '' ) +
                        ';expires=Thu, 01-Jan-1970 00:00:01 GMT'));
      }

      this.cookiesAllowed = function() {   
            setCookie('checkCookie', 'test', 1);   
            
            if (getCookie('checkCookie')) {      
                  deleteCookie('checkCookie');      
                  return true;   
            }
            
            return false;
      }
      
      this.postAjaxRequest = function(url, vars, callbackFunction) {
            //vars = name/value pairs - delimited by '='
            var request = window.XMLHttpRequest ? new (XMLHttpRequest)() : new (ActiveXObject)("MSXML2.XMLHTTP.3.0");

             _proxy_jslib_handle(request, 'open', '', 1, 0)("POST", url, true);
            request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
            request.setRequestHeader("Content-length", vars.length);
            request.setRequestHeader("Connection", "close");

            request.onreadystatechange = function() {
                  if (request.readyState == 4 && request.status == 200)
                  {
                        if (request.responseText)callbackFunction(request.responseText);
                  }
                  else if (request.readyState == 4 && request.status != 200)
                  {
                        callbackFunction("<response><status>-1</status><message>failed connection</message><response>");
                  }
            };
            
            request.send(vars);
      }
      
      this.getAjaxRequest = function(url, callbackFunction) {
            var request = window.XMLHttpRequest ? new (XMLHttpRequest)() : new (ActiveXObject)("MSXML2.XMLHTTP.3.0");

             _proxy_jslib_handle(request, 'open', '', 1, 0)("GET", url, true);

            request.onreadystatechange = function() {
                  if (request.readyState == 4 && request.status == 200)
                  {
                        if (request.responseText)callbackFunction(request.responseText);
                  }
                  else if (request.readyState == 4 && request.status != 200)
                  {
                        callbackFunction("<response><status>-1</status><message>failed connection</message><response>");
                  }
            };
            
            request.send();
      }
      
      this.getXmlDoc = function(xml) {
            var xmlDoc;
            
            if (window.ActiveXObject)
            {
                  // code for IE
                  xmlDoc = new (ActiveXObject)("Microsoft.XMLDOM");
                  xmlDoc.async="false";
                  xmlDoc.loadXML(xml);
            }
            else if (document.implementation.createDocument)
            {
                  var parser = new (DOMParser)();
                  xmlDoc = parser.parseFromString(xml,"text/xml");

            }
            else
            {
                  alert("Your browser cannot handle this script");
                  return;
            }
            
            return xmlDoc;
      }

}//end Yang namespace
 ;
_proxy_jslib_flush_write_buffers() ;