		// remote scripting library
		// (c) copyright 2005 modernmethod, inc
		var sajax_debug_mode = false;
		var sajax_request_type = "POST";
		
		function sajax_debug(text) {
			if (sajax_debug_mode)
				alert("RSD: " + text)
		}
 		function sajax_init_object() {
 			sajax_debug("sajax_init_object() called..")
 			
 			var A;
			try {
				A=new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					A=new ActiveXObject("Microsoft.XMLHTTP");
				} catch (oc) {
					A=null;
				}
			}
			if(!A && typeof XMLHttpRequest != "undefined")
				A = new XMLHttpRequest();
			if (!A)
				sajax_debug("Could not create connection object.");
			return A;
		}
		function sajax_do_call(func_name, args) {
			var i, x, n;
			var uri;
			var post_data;
			
			uri = "/oosatdb/ajaxUpdate.do";
			if (sajax_request_type == "GET") {
				if (uri.indexOf("?") == -1) 
					uri = uri + "?rs=" + escape(func_name);
				else
					uri = uri + "&rs=" + escape(func_name);
				for (i = 0; i < args.length-1; i++) 
					uri = uri + "&rsargs[]=" + escape(args[i]);
				uri = uri + "&rsrnd=" + new Date().getTime();
				post_data = null;
			} else {
				post_data = "rs=" + escape(func_name);
				for (i = 0; i < args.length-1; i++) 
					post_data = post_data + "&rsargs[]=" + escape(args[i]);
			}
			
			x = sajax_init_object();
			x.open(sajax_request_type, uri, true);
			if (sajax_request_type == "POST") {
				x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
				x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			}
			x.onreadystatechange = function() {
				if (x.readyState != 4) 
					return;
				sajax_debug("received " + x.responseText);
				
				var status;
				data = x.responseText;
				args[args.length-1](data);
			}
			x.send(post_data);
			sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
//			alert(func_name + " uri = " + uri + "/post = " + post_data);			
			sajax_debug(func_name + " waiting..");
			delete x;
		}
		
				
		// wrapper for changeText		
		function x_changeText() {
			sajax_do_call("update",
				x_changeText.arguments);
		}
		
		
	function textChanger_cb(result) {
		var result_array=result.split("|");			
		var celName = result_array[1]+"|"+result_array[2];
		var type = result_array[5];		
		var _value = result_array[4];
		
				
		if (result_array[1]=="STATE_ORGANIZATION_CODE") {		
			document.getElementById(celName).innerHTML = "<div _value='"+_value+"' onclick=\"editCell('"+celName+"',this,'"+type+"');\">"
														+"<table><tr><td>"
														+"<img src=\"/images/flags/24/"+_value+".GIF\" align=\"absmiddle\" />"
														+"</td><td>"														
														+result_array[3]
														+"</td></tr>"														
														+"</div>";				
		} else {
			document.getElementById(celName).innerHTML = "<div _value='"+_value+"' onclick=\"editCell('"+celName+"',this,'"+type+"');\">"+result_array[3]+"</div>";		
		}		

		
		if (result_array[0]=='ok') {
			Fat.fade_element(celName, 30, 1500, "#00FF00", "#FFFFFF");
		} else {
			Fat.fade_element(celName, 30, 1500, "#FF0000", "#FFFFFF");		
			alert('Error:'+result_array[6]);
		}
	}
    
	function parseForm(cellID, inputID) {
		var temp = document.getElementById(inputID).value;
		var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
		if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
		var obj = /  /g;
		while (temp.match(obj)) { temp = temp.replace(obj, " "); }
		if (temp == " ") { temp = ""; }
//		if (! temp) {alert("This field must contain at least one non-whitespace character.");return;}
		var st = document.getElementById(inputID).value + '|' + cellID;
		document.getElementById(cellID).innerHTML = "<span class=\"update\">Updating...</span>";
		x_changeText(st, textChanger_cb);
		document.getElementById(cellID).style.border = 'none';
	}

	function editCell(id, cellSpan, type) {
        var cellWidth = document.getElementById(id).offsetWidth;
        var cellHeight = document.getElementById(id).offsetHeight;
        						        						
		var oldCellSpan = cellSpan.innerHTML;

		if(type=='text') {
		
		
			var inner = "<form name=\"activeForm\" onsubmit=\"parseForm('"+id+"', '"+id+"input');return false;\" style=\"margin:0;\" action=\"\">"
							+"<textarea rows='3' style=\"width:"+cellWidth+"px;height:"+cellHeight+"px;\" class=\"dynaInput\" id=\""+id+"input\" onblur=\"parseForm('"+id+"', '"+id+"input');return false;\">"+trim(oldCellSpan)+"</textarea><br />"
						+"</form>";			
			document.getElementById(id).innerHTML = inner;

//			document.getElementById(id+"input").value = ;						
		}
		if(type=='date') {		
			var inner = "<form name=\"activeForm\" onsubmit=\"parseForm('"+id+"', '"+id+"input');return false;\" style=\"margin:0;\" action=\"\">" 
			+"<input type=\"text\" class=\"dynaInput\" id=\""+id+"input\" size=\"10\" />"
			+"<button type=\"reset\" id=\""+id+"DateButton\">...</button>"				
			+"<button type=\"button\" onclick=\"parseForm('"+id+"', '"+id+"input');return false;\">OK</button>"	
			+"</form>";						
			document.getElementById(id).innerHTML = inner;			
			Calendar.setup({
				inputField     :    id+"input",
				ifFormat       :    "%m/%d/%Y",
				button         :    id+"DateButton",
				singleClick    :    false,
				step           :    1
			});				
			document.getElementById(id+"input").value = oldCellSpan;						
		}					
		if(type.match('enum')) {		
			enumType = type.split("4")[1];
			
			var inner = "<form name=\"activeForm\" onsubmit=\"parseForm('"+id+"', '"+id+"input');return false;\" style=\"margin:0;\" action=\"\">"			
				+"<select id=\""+id+"input\" class=\"dynaInput\" onblur=\"parseForm('"+id+"', '"+id+"input');return false;\" onchange=\"parseForm('"+id+"', '"+id+"input');return false;\">"
				+renderOptions(enumType, document.getElementById(id).getAttribute('_value') )
				+"</select>"
				+"</form>";						
			document.getElementById(id).innerHTML = inner;		
		}		
	
		document.getElementById(id+"input").focus();
		document.getElementById(id).style.background = '#ffc';
		document.getElementById(id).style.border = '1px solid #fc0';
	}
	
	function bgSwitch(ac, td) {
		if (ac == 'on'){
			td.style.background = '#ffc';
		} else if (ac == 'off'){
			td.style.background = '#ffffff';			
		}
	}	
	
	function renderOptions(enumType, currentValue) {
		var options="";
		for(i=0; i<enumValues[enumType].length; ++i ) {
			options += '<option value="'
			options += enumValues[enumType][i]+'"';
			if (currentValue == enumValues[enumType][i] ) {
				options += ' selected="1" ';			
			}
			options += '>';
			options += enumLabels[enumType][i];			
			options += '</option>';
						
		}
		return options;
	}

/**
 * trim()
 */
function trim(value) {
   var temp = value;
   var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
   if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
   var obj = /  /g;
   while (temp.match(obj)) { temp = temp.replace(obj, " "); }
   return temp;
};

