// JavaScript Document
function var_dump(data,addwhitespace,safety,level) 
{
  var rtrn = '';
  var dt,it,spaces = '';
  if(!level) {level = 1;}
  for(var i=0; i<level; i++) {
	 spaces += '   ';
  }//end for i<level
  if(typeof(data) != 'object') {
	 dt = data;
	 if(typeof(data) == 'string') {
		if(addwhitespace == 'html') {
		   dt = dt.replace(/&/g,'&amp;');
		   dt = dt.replace(/>/g,'&gt;');
		   dt = dt.replace(/</g,'&lt;');
		}//end if addwhitespace == html
		dt = dt.replace(/\"/g,'\"');
		dt = '"' + dt + '"';
	 }//end if typeof == string
	 if(typeof(data) == 'function' && addwhitespace) {
		dt = new String(dt).replace(/\n/g,"\n"+spaces);
		if(addwhitespace == 'html') {
		   dt = dt.replace(/&/g,'&amp;');
		   dt = dt.replace(/>/g,'&gt;');
		   dt = dt.replace(/</g,'&lt;');
		}//end if addwhitespace == html
	 }//end if typeof == function
	 if(typeof(data) == 'undefined') {
		dt = 'undefined';
	 }//end if typeof == undefined
	 if(addwhitespace == 'html') {
		if(typeof(dt) != 'string') {
		   dt = new String(dt);
		}//end typeof != string
		dt = dt.replace(/ /g,"&nbsp;").replace(/\n/g,"<br>");
	 }//end if addwhitespace == html
	 return dt;
  }//end if typeof != object && != array
  for (var x in data) {
	 if(safety && (level > safety)) {
		dt = '*RECURSION*';
	 } else {
		try {
		   dt = var_dump(data[x],addwhitespace,safety,level+1);
		} catch (e) {continue;}
	 }//end if-else level > safety
	 it = var_dump(x,addwhitespace,safety,level+1);
	 rtrn += it + ':' + dt + ',';
	 if(addwhitespace) {
		rtrn += '\n'+spaces;
	 }//end if addwhitespace
  }//end for...in
  if(addwhitespace) {
	 rtrn = '{\n' + spaces + rtrn.substr(0,rtrn.length-(2+(level*3))) + '\n' + spaces.substr(0,spaces.length-3) + '}';
  } else {
	 rtrn = '{' + rtrn.substr(0,rtrn.length-1) + '}';
  }//end if-else addwhitespace
  if(addwhitespace == 'html') {
	 rtrn = rtrn.replace(/ /g,"&nbsp;").replace(/\n/g,"<br>");
  }//end if addwhitespace == html
  return rtrn;
}//end function var_dump

function ucfirst( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: ucfirst('kevin van zonneveld');
    // *     returns 1: 'Kevin van zonneveld'
 
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1, str.length-1);
}

function explode( delimiter, string, limit ) {
    // http://kevin.vanzonneveld.net
    // +     original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: kenneth
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: d3x
    // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: explode(' ', 'Kevin van Zonneveld');
    // *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
    // *     example 2: explode('=', 'a=bc=d', 2);
    // *     returns 2: ['a', 'bc=d']
 
    var emptyArray = { 0: '' };
    
    // third argument is not required
    if ( arguments.length < 2
        || typeof arguments[0] == 'undefined'
        || typeof arguments[1] == 'undefined' )
    {
        return null;
    }
 
    if ( delimiter === ''
        || delimiter === false
        || delimiter === null )
    {
        return false;
    }
 
    if ( typeof delimiter == 'function'
        || typeof delimiter == 'object'
        || typeof string == 'function'
        || typeof string == 'object' )
    {
        return emptyArray;
    }
 
    if ( delimiter === true ) {
        delimiter = '1';
    }
    
    if (!limit) {
        return string.toString().split(delimiter.toString());
    } else {
        // support for limit argument
        var splitted = string.toString().split(delimiter.toString());
        var partA = splitted.splice(0, limit - 1);
        var partB = splitted.join(delimiter.toString());
        partA.push(partB);
        return partA;
    }
}

function array_pop( array ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: array_pop([0,1,2]);
    // *     returns 1: 2
 
    // done popping, are we?
    if( !array.length ){
        return null;
    }
 
    return array.pop();
}