var ie6 = (window.external &&	typeof window.XMLHttpRequest == "undefined");
var ieblows=/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
var $frm_indep=false;
function gi(ctl){
	return document.getElementById(ctl);
}
function fi(ctl,f){
	if(!f){f=form;}
	return f.elements[ctl];
}
function f0(ctl,f){
	if(!f){f=document.body.getElementsByTagName("form")[0];}
	return f.elements[ctl];
}
function ge(ctl,vl,div){
	if(isarray(ctl) || div){
		var v=[];
		var lbl;
		var invalid='',ni=0,min,minx;
		if(div){
			ctl=document.getElementById(div).getElementsByTagName('INPUT');			
		}
		for(var i=0;i<ctl.length;i++){			
			if(vl){
				lbl=(vl[i]);
			}else{
				lbl=div?rip(ctl[i].id,'.',0):rip(ctl[i],'.',0);
			}
			targ=div?ctl[i]:document.getElementById(ctl[i]);
			v[lbl]=db_val(targ,0,1);
			mag=targ.getAttribute('mag');
			min=targ.getAttribute('minlen');
			minx=min?(v[lbl].length-2<min):false;
			if(mag==99 && (v[lbl]=='Null' || minx)){
				ni++;
				lbl=targ.parentNode.childNodes[1].innerHTML;
				if(!lbl){
					lbl=targ.parentNode.innerHTML;
					lbl=rip(lbl,'>',0,true);
				}
				if(min){lbl+=' (minimum '+min+' characters)'}
				invalid+='\n&#9658; '+lbl+' &#9668;';
			}
		}
		if(invalid){
			var s=(ni>1)?'s':'';
			var si=(ni>1)?'are':'is';
			valert('The following mandatory field'+s+' '+si+' not filled in correctly:\n  '+invalid);
			v='invalid';
		}
		return v;
	}else{
		return document.getElementById(ctl);
	}
}
function gev(ctl){
	return $pdg_e.getSVGDocument().getElementById(ctl)
}
function gec(classname,node){
	if(!node) node=document.getElementsByTagName("body")[0];
	var a=[];
	var re=new RegExp('\\b' + classname + '\\b');
	var els=node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
	if(re.test(els[i].className))a.push(els[i]);
	return a;
}
function fire_event(element,event){
	if (document.createEventObject){ // dispatch for IE
		var evt = document.createEventObject();
		return element.fire_event('on'+event,evt)
	}	else{	// dispatch for firefox + others
		var evt = document.createEvent("HTMLEvents");
		evt.initEvent(event, true, true ); // event type, bubbling, cancelable
		return !element.dispatchEvent(evt);
	}
}
function cell_rowindex(cell,a){
	if(a){cell=cell.parentNode;}
	var row = cell.parentNode;
	var table = row.parentNode;
	for (var i = 0; i < table.rows.length; i++)
	if (row == table.rows[i]) {
		return i;
	}
	return -1;
}
function key_code(e){
	var e=(e) ? e: ((event) ? event : null);
	return e.keyCode;
}
function clear_val(targ){
	if(targ.value!=''){
		targ.value='';
		if(targ.id.substring(0,5)=='i_fli'){
			targ=gi(targ.id.substring(6,targ.id.length));
			targ.value='';
		}
		frm_dirty(targ);
	}
}
function time_format(timex){
	var t=timex.split(':');
	if(right(t[1],2)=='PM'){
		if(t[0]!='12'){
			t[0]=t[0]*1+12;
		}
	}else{
		if(t[0]=='12'){
			t[0]='00';
		}
	};
	return '0000-00-00 ' + t[0] + ':' + t[1].substring(0,2);
}
function time_num(timex,slot,minutes){
	if(timex.length==0){
		return -1;
	}else{
		var t=timex.split(':');
		if(right(t[1],2)=='PM'){
			if(t[0]!='12'){
				t[0]=t[0]*1+12;
			}
		}else{
			if(t[0]=='12'){
				t[0]='00';
			}
		};
		var mins=t[1].substring(0,2)*1;
		if(slot){
			if(mins>0){
				mins= Math.round((mins/slot)-0.50);
			}
			var hm=t[0]*60;
			//alert(hm+mins);
			if(hm<480 || hm+mins>1139){ //if outside slot trange
				return -1;
			}else{
				return hm/slot + mins;
			}
		}else{
			if(minutes){
				return t[0]*60 + mins;
			}else{
				return t[0]*100 + mins;
			}
		}
	}
}
function date_format(datex){
	var d=datex.split('-');
	var m=new Array(12);
	var rdate='!';
	m[1]='Jan';
	m[2]='Feb';
	m[3]='Mar';
	m[4]='Apr';
	m[5]='May';
	m[6]='Jun';
	m[7]='Jul';
	m[8]='Aug';
	m[9]='Sep';
	m[10]='Oct';
	m[11]='Nov';
	m[12]='Dec';
	for(var i=1; i<13; i++){
		if(d[1]==m[i]){
			rdate=d[2]*10000 + i*100 + d[0]*1;
			i=13;
		}
	}
	return rdate;
}
function form_date(dtx){
	return dtx.substr(6,2) + '-' + month_mmm(dtx.substr(4,2)*1) + '-' + dtx.substr(0,4);
}
function mmm_month(mo){
	var m=new Array(12);
	m['Jan']=1;
	m['Feb']=2;
	m['Mar']=3;
	m['Apr']=4;
	m['May']=5;
	m['Jun']=6;
	m['Jul']=7;
	m['Aug']=8;
	m['Sep']=9;
	m['Oct']=10;
	m['Nov']=11;
	m['Dec']=12;
	return m[mo];
}
function month_mmm(ix){
	var m=new Array(12);
	m[1]='Jan';
	m[2]='Feb';
	m[3]='Mar';
	m[4]='Apr';
	m[5]='May';
	m[6]='Jun';
	m[7]='Jul';
	m[8]='Aug';
	m[9]='Sep';
	m[10]='Oct';
	m[11]='Nov';
	m[12]='Dec';
	return m[ix];
}
function text_wrap(tx,len,brk){
	var flag;
	var conti=0;
	var ret='';
	if(brk="\n"){
		tx=tx.replace(/\n/g,' ')
		tx=tx.replace(/\r/g,' ')
	}else{
		tx=tx.replace(/<br>/g,' ')
		tx=tx.replace(/<BR>/g,' ')
	}
	for(var i=0;i<tx.length;i++){
		chr=tx.substring(i,i+1);
		flag=(chr==' ');
		if(flag && conti>=len){
			ret+=brk;
			conti=0;
		}else{
			ret+=chr;
			conti++;
		}
	}
	return ret;
}
function cursor_end(box){
	if(ieblows){
		var rng = box.createTextRange();
		rng.collapse(true);
		rng.moveEnd('character',box.value.length);
		rng.moveStart('character',box.value.length);
		rng.select();
	}
}
function nan(val,dec,x){
	if(isNaN(val) || val=='NaN' || val=='-Infinity'){
		return '';
	}else{
		if(dec){
			return val.toFixed(dec);
		}else{
			return val;
		}
	}	
}
function f_pos(obj,tscro){
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	if(tscro){
		curleft-=tscro.scrollLeft;
		curtop-=tscro.scrollTop;
	}
	return [curleft,curtop];
}
function right(str,n){
  if (n <= 0)
    return "";
  else if (n > String(str).length)
    return str;
  else {
    var iLen = String(str).length;
    return String(str).substring(iLen, iLen - n);
  }
}
function session_set(vari,valu){
	$ajx='%';
	ajax_post('../00I/ajx_cfg.php?ix=session','var='+sys_v+'_'+vari+'&val='+valu);
	return;
}
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
function rip(tx,lead,tail,trim){
	p0=tx.indexOf(lead);
	if(p0==-1 || !lead){
		p0=0;
	}else{
		p0+=lead.length;
	}
	p1=tx.indexOf(tail,p0);
	if(!p1 || !tail){
		p1=tx.length;
	}
	tx=tx.substring(p0,p1);	
	if(trim){tx=tx.trim();}
	//alert(tx);
	return tx;
}	

function getStyle(oElm, strCssRule){
  var strValue = "";
  if(document.defaultView && document.defaultView.getComputedStyle){
    strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
  }
  else if(oElm.currentStyle){
    strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
      return p1.toUpperCase();
    });
    strValue = oElm.currentStyle[strCssRule];
  }
  return strValue;
}
function login_submit(typ){
	typ=typ?'?typ='+typ:'';
	form.method = 'post';
	form.action = 'y_validate.php'+typ;
  form.submit();
}
function trim(str, chars){
  return ltrim(rtrim(str, chars), chars);
}
function ltrim(str, chars){
  chars = chars || "\\s";
  return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
function rtrim(str, chars){
  chars = chars || "\\s";
  return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
function zpad(tx,len){
	tx=tx+'';
	var n=tx.length;
	for(var i=n;i<len;i++){
		tx='0'+tx;
	}
	return tx;
}
function addslashes(str,quot){
	var tx=str.replace(/(["'\\])/g, "\\$1").replace(/\0/g, "\\0");
	if(quot){
		if(tx==''){
			tx="null";
		}else{
			tx="'"+tx+"'";
		}
	}
	return tx; 
}
function niv(val,replace){
	if(val==null || val==''){
		return replace;
	}else{
		return val;
	}
}
function decimatic(val){
	if(val.indexOf('.')>-1){
		v=val.split('.');
		if(v[1]*1==0){
			return v[0];
		}else{
			return val;
		}
	}else{
		return val;
	}
}
function popwin(url, wid, hgt, scrol){
  var winl = (screen.width-wid)/2;
  var wint = (screen.height-hgt)/2;
  if (winl < 0) {winl = 0;}
  if (wint < 0) {wint = 0;}
  newwindow=window.open(url,'',"width="+wid+",height="+hgt+",top="+wint+",left="+winl+",toolbar=0,scrollbars="+scrol+",location=0,directories=0,status=0,menuBar=0,resizable=0");
  newwindow.resizeTo(wid, hgt);
  if (window.focus) {newwindow.focus()}
}
function y_scro(){
	var val=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;
	return val*1;
}
function isnumeric(x){
	x+="";
	var RegExp = /^(-)?(\d*)(\.?)(\d*)$/; 
	var result = x.match(RegExp);
	return result;
}
function is_numeric(val,def,currency){
	if(currency){val=val.replace(/\$|\,/g,'');}
	if(!def){def=false;}
	var ret=!isNaN(parseFloat(val))
	ret=ret?val*1:def;
  return ret;
}

function clone_object(obj) {
	var c = obj instanceof Array ? [] : {};
	for (var i in obj) {
		var prop = obj[i];
		if (typeof prop == 'object') {
			if (prop instanceof Array) {
				c[i] = [];
				for (var j = 0; j < prop.length; j++) {
					if (typeof prop[j] != 'object') {
						c[i].push(prop[j]);
					} else {
						c[i].push(clone_object(prop[j]));
					}
				}
			} else {
				c[i] = clone_object(prop);
			}
		} else {
			c[i] = prop;
		}
	}
	return c;
}
function intval( mixed_var, base ) {
    var tmp;
    if( typeof( mixed_var ) == 'string' ){
        tmp = parseInt(mixed_var*1);
        if(isNaN(tmp) || !isFinite(tmp)){
            return 0;
        } else{
            return tmp.toString(base || 10);
        }
    } else if( typeof( mixed_var ) == 'number' && isFinite(mixed_var) ){
        return Math.floor(mixed_var);
    } else{
        return 0;
    }
}
function cursor_wait(){
	document.body.style.cursor = 'wait';
}
function cursor_clear(){
	document.body.style.cursor = 'default';
}
function cursor_tag(tag,cursor,prev){
	var e;
	tag=tag.split(',');
	for(ix in tag){
		e= document.getElementsByTagName(tag[ix]);
		for(var i=0;i<e.length;i++){
			e[i].style.cursor=cursor;
		}
	}
}
function isarray(v) {if(v.constructor.toString().indexOf("Array") == -1){return false;}else{return true;}}
function array_from_post(v){
	var arr=[];
	v=v.split("&");
	for(var i in v){
		x=v[i].split("=");
		arr[x[0]]=x[1];
	}
	return arr;
}
function array_remix(arr,x){
	var arx=new Array();
	var i=0;
	for(ix in arr){
		if(ix!=x){
			arx[ix]=arr[ix];
			i++;
		}
	}
	if(i==0){arx=false;}
	return arx;
}
function array_to_post(arr,valu,dbv){
	var tx='';
	var val;
	for(v in arr){
		if(tx){tx+='&';}
		if(valu){
			val=arr[v].value;
			if(dbv){
				val=db_val(val,arr[v].getAttribute('typ'));
			}
			tx+=v+'='+val;
		}else{
			tx+=v+'='+arr[v];
		}
	}
	return tx;
}
function url_var(vari){
	var v=location.href;
	var p=v.indexOf('&'+vari);
	var len=v.length;
	if(p>0){
		p=p+vari.length+2;
		v=v.substring(p,len);
		p=v.indexOf('&');
		if(p==-1){
			p=v.length;
		}
		v=v.substring(0,p);
		return v;
	}else{
		return false;
	}
}
function clear_selection(){
	var sel;
	if(document.selection && document.selection.empty){
		document.selection.empty() ;
	} else if(window.getSelection) {
		sel=window.getSelection();
		if(sel && sel.removeAllRanges){
			sel.removeAllRanges() ; 
		}
	}
}
function hourglass(wait,shadfixed){
	//var scroll
	if(!shadfixed){
		var shad=ge('page_shade');
		if(shad){
			shad.style.display=wait?'block':'none';
			if(wait){
				shad.style.height=page_height()+y_scro()+"px";
			}else{
				shad.style.height='1px';
			}
		}
	}
	var targ=gi('hourglass');
	if(wait){center_show(targ,18,18);targ.style.display='block';}else{targ.style.display='none';}
	if($frm_indep && !$cascade){
		var con=gi('content');
		if(con){con.className=wait?'frm_status_02':'frm_status_00';}
	}
}
function set_opacity(targ,opacity){
  opacity=(opacity==100)?99.999:opacity;
  if(ieblows){
		targ.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+ opacity + ");";
	}else{
		targ.style.opacity = opacity/100;
	}
}
function center_show(targ,wid,hig,noscro){
	var x=document.documentElement.clientWidth;
	var y=document.documentElement.clientHeight*1;
	if(!wid){wid=targ.offsetWidth;}
	if(!hig){hig=targ.offsetHeight;}
	if(noscro){
		x=((x-wid)/2);
		y=((y-hig)/2-45);	
	}else{
		x=((x-wid)/2+document.documentElement.scrollLeft*1);
		y=((y-hig)/2-45+y_scro()*1);	
	}
	if(y<0){
		//alert(hig+" : "+document.documentElement.clientHeight)
		y=100;
	}
	x+='px';	
	y+='px';	
	targ.style.left=x;
	targ.style.top=y;
}
function email_client(to,subject,body){
	var mailto_link = 'mailto:'+to+'?Subject='+subject+'&Body='+body;
	self.location = mailto_link;
	return false;
} 
function page_height(){
	var hgt=0;
	var whg=window.innerHeight?window.innerHeight:0;
	if(window.innerHeight && window.scrollMaxY){
		hgt=window.innerHeight + window.scrollMaxY;
	}else if(document.body.scrollHeight>document.body.offsetHeight){
		hgt=document.body.scrollHeight;
	}else{ 
		hgt=document.body.offsetHeight + document.body.offsetTop; 
	}	
	if(hgt>whg){
		return hgt;
	}else{
		return whg;
	}
}
function list_sort(id,rev,sel,txt){
  var is_numeric=false;
  var lst = document.getElementById(id);
  var opt = new Array();  
  var ord = new Array();  
	var selix=-1;
  try{
		for(i=0;i< lst.length;i++){
			opt[i]=new Array();
			opt[i][0]=lst.options[i].text.toLowerCase(); ;
			opt[i][1]=lst.options[i].value;
			opt[i][2]=lst.options[i].text;
			if(!txt){is_numeric=(!is_numeric?!isNaN((lst.options[i].text*1)):is_numeric);}
		}
    if(is_numeric){
      for(i=0;i<lst.length-1;i++){
        for(j=i;j<lst.length;j++){
          if((lst.options[i].text*1)>(lst.options[j].text*1)){
            tNum=lst.options[i].text;
            tVal=lst.options[i].Value;
            lst.options[i].text=lst.options[j].text
            lst.options[i].Value=lst.options[j].value
            lst.options[j].text=tNum;
            lst.options[j].value=tVal;
          }
        }
      }
    }
    else{
      opt.sort();
			var mx=lst.length;
      for(j=0;j<mx;j++){
				jj=rev?(mx-1-j):j;
				if(sel==opt[jj][1]){
					selix=j;
				}
        lst.options[j].text=opt[jj][2];
        lst.options[j].value=opt[jj][1];
      }
			lst.selectedIndex=selix;
    }
  }
  catch(e){
    //In case of any error, dont do anything.
    alert('The following error occurred: ' + e.name + ' - ' + e.message);
  }
} 
var dateFormat = function () {
	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
		timezoneClip = /[^-+\dA-Z]/g,
		pad = function (val, len) {
			val = String(val);
			len = len || 2;
			while (val.length < len) val = "0" + val;
			return val;
		};

	// Regexes and supporting functions are cached through closure
	return function (date, mask, utc) {
		var dF = dateFormat;

		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
		if (arguments.length == 1 && (typeof date == "string" || date instanceof String) && !/\d/.test(date)) {
			mask = date;
			date = undefined;
		}

		// Passing date through Date applies Date.parse, if necessary
		date = date ? new Date(date) : new Date();
		if (isNaN(date)) throw new SyntaxError("invalid date");

		mask = String(dF.masks[mask] || mask || dF.masks["default"]);

		// Allow setting the utc argument via the mask
		if (mask.slice(0, 4) == "UTC:") {
			mask = mask.slice(4);
			utc = true;
		}

		var	_ = utc ? "getUTC" : "get",
			d = date[_ + "Date"](),
			D = date[_ + "Day"](),
			m = date[_ + "Month"](),
			y = date[_ + "FullYear"](),
			H = date[_ + "Hours"](),
			M = date[_ + "Minutes"](),
			s = date[_ + "Seconds"](),
			L = date[_ + "Milliseconds"](),
			o = utc ? 0 : date.getTimezoneOffset(),
			flags = {
				d:    d,
				dd:   pad(d),
				ddd:  dF.i18n.dayNames[D],
				dddd: dF.i18n.dayNames[D + 7],
				m:    m + 1,
				mm:   pad(m + 1),
				mmm:  dF.i18n.monthNames[m],
				mmmm: dF.i18n.monthNames[m + 12],
				yy:   String(y).slice(2),
				yyyy: y,
				h:    H % 12 || 12,
				hh:   pad(H % 12 || 12),
				H:    H,
				HH:   pad(H),
				M:    M,
				MM:   pad(M),
				s:    s,
				ss:   pad(s),
				l:    pad(L, 3),
				L:    pad(L > 99 ? Math.round(L / 10) : L),
				t:    H < 12 ? "a"  : "p",
				tt:   H < 12 ? "am" : "pm",
				T:    H < 12 ? "A"  : "P",
				TT:   H < 12 ? "AM" : "PM",
				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
			};

		return mask.replace(token, function ($0) {
			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
		});
	};
}();

// Some common format strings
dateFormat.masks = {
	"default":      "ddd mmm dd yyyy HH:MM:ss",
	shortDate:      "m/d/yy",
	mediumDate:     "mmm d, yyyy",
	longDate:       "mmmm d, yyyy",
	fullDate:       "dddd, mmmm d, yyyy",
	shortTime:      "h:MM TT",
	mediumTime:     "h:MM:ss TT",
	longTime:       "h:MM:ss TT Z",
	isoDate:        "yyyy-mm-dd",
	isoTime:        "HH:MM:ss",
	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
	dayNames: [
		"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat",
		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
	],
	monthNames: [
		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
	]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
	return dateFormat(this, mask, utc);
}

jstring={
	compactOutput:false, 		
	includeProtos:false, 	
	includeFunctions: false,
	detectCirculars:true,
	restoreCirculars:true,
	make:function(arg,restore) {
		this.restore=restore;
		this.mem=[];this.pathMem=[];
		return this.toJsonStringArray(arg).join('');
	},
	toObject:function(x){
		if(!this.cleaner){
			try{this.cleaner=new RegExp('^("(\\\\.|[^"\\\\\\n\\r])*?"|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$')}
			catch(a){this.cleaner=/^(true|false|null|\[.*\]|\{.*\}|".*"|\d+|\d+\.\d+)$/}
		};
		if(!this.cleaner.test(x)){return {}};
		eval("this.myObj="+x);
		if(!this.restoreCirculars || !alert){return this.myObj};
		if(this.includeFunctions){
			var x=this.myObj;
			for(var i in x){if(typeof x[i]=="string" && !x[i].indexOf("JSONincludedFunc:")){
				x[i]=x[i].substring(17);
				eval("x[i]="+x[i])
			}}
		};
		this.restoreCode=[];
		this.make(this.myObj,true);
		var r=this.restoreCode.join(";")+";";
		eval('r=r.replace(/\\W([0-9]{1,})(\\W)/g,"[$1]$2").replace(/\\.\\;/g,";")');
		eval(r);
		return this.myObj
	},
	toJsonStringArray:function(arg, out) {
		if(!out){this.path=[]};
		out = out || [];
		var u; // undefined
		switch (typeof arg) {
		case 'object':
			this.lastObj=arg;
			if(this.detectCirculars){
				var m=this.mem; var n=this.pathMem;
				for(var i=0;i<m.length;i++){
					if(arg===m[i]){
						out.push('"JSONcircRef:'+n[i]+'"');return out
					}
				};
				m.push(arg); n.push(this.path.join("."));
			};
			if (arg) {
				if (arg.constructor == Array) {
					out.push('[');
					for (var i = 0; i < arg.length; ++i) {
						this.path.push(i);
						if (i > 0)
							out.push(',\n');
						this.toJsonStringArray(arg[i], out);
						this.path.pop();
					}
					out.push(']');
					return out;
				} else if (typeof arg.toString != 'undefined') {
					out.push('{');
					var first = true;
					for (var i in arg) {
						if(!this.includeProtos && arg[i]===arg.constructor.prototype[i]){continue};
						this.path.push(i);
						var curr = out.length; 
						if (!first)
							out.push(this.compactOutput?',':',\n');
						this.toJsonStringArray(i, out);
						out.push(':');                    
						this.toJsonStringArray(arg[i], out);
						if (out[out.length - 1] == u)
							out.splice(curr, out.length - curr);
						else
							first = false;
						this.path.pop();
					}
					out.push('}');
					return out;
				}
				return out;
			}
			out.push('null');
			return out;
		case 'unknown':
		case 'undefined':
		case 'function':
			if(!this.includeFunctions){out.push(u);return out};
			arg="JSONincludedFunc:"+arg;
			out.push('"');
			var a=['\n','\\n','\r','\\r','"','\\"'];
			arg+=""; for(var i=0;i<6;i+=2){arg=arg.split(a[i]).join(a[i+1])};
			out.push(arg);
			out.push('"');
			return out;
		case 'string':
			if(this.restore && arg.indexOf("JSONcircRef:")==0){
				this.restoreCode.push('this.myObj.'+this.path.join(".")+"="+arg.split("JSONcircRef:").join("this.myObj."));
			};
			out.push('"');
			var a=['\n','\\n','\r','\\r','"','\\"'];
			arg+=""; for(var i=0;i<6;i+=2){arg=arg.split(a[i]).join(a[i+1])};
			out.push(arg);
			out.push('"');
			return out;
		default:
			out.push(String(arg));
			return out;
		}
	}
};