function event_trigger(triggerid, patientid, productid) {
	var triggerid		= new String(triggerid);
	var patientid		= new Number(patientid);
	var productid		= new Number(productid);
	var func_callback   = (typeof(arguments[3]) != 'undefined') ? arguments[3] : null;
	
	if (isNaN(patientid)) patientid = 0;
	if (isNaN(productid)) productid = 0;
	if (triggerid.valueOf() 	== 'undefind') triggerid = '';
	
	if (triggerid.valueOf() == '') {
		alert('Invalid TriggerID.');
		return;
	}
	if (patientid.valueOf() == 0 && productid.valueOf() == 0) {
		alert('No specific ID found.');
		return;
	}
	
	var vars = new Array();
		vars['triggerid'] = triggerid;
		vars['patientid'] = patientid;
		vars['productid'] = productid;

	AjaxCaller.postXml('/application/workflow/advance.asp', vars, return_trigger);
	//AjaxCaller.postText('/application/workflow/advance.asp', vars, return_trigger);
	function return_trigger(xmldoc) {
		/* for debuging
		var debug_win = window.open('debug_win');
			debug_win.document.open();
			debug_win.document.write(xmldoc);
			debug_win.document.close();
		
		return;
		 */
		//alert(xmldoc);
		var retval = new Number();
		var errmsg = new String();
		
		
		if (xmldoc.documentElement == null) {
			retval = -1;
			errmsg = 'Transaction could not be completed.';
		} else {
		
			if (xmldoc.documentElement.getElementsByTagName('VALUE').item(0).childNodes.item(0)) {
				retval = xmldoc.documentElement.getElementsByTagName('VALUE').item(0).childNodes.item(0).nodeValue;
			}
			if (xmldoc.documentElement.getElementsByTagName('ERROR').item(0).childNodes.item(0)) {
				errmsg = xmldoc.documentElement.getElementsByTagName('ERROR').item(0).childNodes.item(0).nodeValue;
				errmsg = unescape(errmsg);
			}
		}
		
		if (func_callback != null) {
			func_callback(retval, errmsg);
		} else {
			if (retval.valueOf() == -1) {
				alert('We apologize for the inconvenience.\nAn error has occured.\n[' + errmsg + ']');
			}
		}
	}
}
					
function load_locations(id, fieldid, selectedid) {

	// Default Arguments
	var id 			= new String(id);			// GEOLISTS.PARENTID
	var fieldid 	= new String(fieldid);		// Target Field Name
	var selectedid 	= new String(selectedid);	// Initial Selected Option ID

	// Optional Arguments
	var type_text 	= new String();		// Text in Pull Down Lists  [ID:ID, CD:ShortName, NM:Name]
	var type_value 	= new String();		// Value in Pull Down Lists [ID:ID, CD:ShortName, NM:Name]

		type_text  	= (arguments[3] == null) ? 'NM' : arguments[3];
		type_value 	= (arguments[4] == null) ? 'ID' : arguments[4];

	var field = document.getElementById(fieldid);

	if (id.valueOf() == '')	return;
	if (field == null) return;

	field.options.length = 1;
	
	var option = document.createElement('option');
		option.text = 'Loading...';

	field.options.add(option, 0);
	field.selectedIndex = 0;
	field.disabled = true;

	var url = '/application/functions/xml_option_list.asp' +
			  '?table=locations' +
			  '&order=geolists.name';
		url += (isNaN(id)) ? '&geo_parent.shortname=' + id : '&geolists.parentid=' + id;

	AjaxCaller.getXml(url, '', build_selection);

	function build_selection(xml) {

		var xmldoc = xml.documentElement;

		if (xmldoc == null) {
			alert('Error: Could not load location data.');
			return;
		}

		for (var i=0; i<xmldoc.childNodes.length; i++) {

			if (xmldoc.childNodes.item(i).nodeType == 3) continue;
			
			var id   	= new String(xmldoc.childNodes.item(i).getAttribute('ID'));
			var code 	= new String(xmldoc.childNodes.item(i).getAttribute('SHORTNAME'));
			var name 	= new String(xmldoc.childNodes.item(i).getAttribute('NAME'));
				code	= unescape(code);
				name	= unescape(name);
			var option 	= document.createElement('option');

			switch (type_text.valueOf()) {
				case 'ID':
					option.text = id;
					break;
				case 'CD':
					option.text = code;
					break;
				case 'NM':
					option.text = name;
					break;
				default:
			}

			switch (type_value.valueOf()) {
				case 'ID':
					option.value = id;
					break;
				case 'CD':
					option.value = code;
					break;
				case 'NM':
					option.value = name;
					break;
				default:
			}

			field.options.add(option);

			if (selectedid.valueOf() == option.value) {
				field.selectedIndex = field.length - 1;
			}
		}
		field.disabled = false;
		field.removeChild(field.options[0]); 
	}
}

function load_broker_locations(id, fieldid, selectedid) {

	// Default Arguments
	var id 			= new String(id);			// GEOLISTS.PARENTID
	var fieldid 	= new String(fieldid);		// Target Field Name
	var selectedid 	= new String(selectedid);	// Initial Selected Option ID

	// Optional Arguments
	var type_text 	= new String();		// Text in Pull Down Lists  [ID:ID, CD:ShortName, NM:Name]
	var type_value 	= new String();		// Value in Pull Down Lists [ID:ID, CD:ShortName, NM:Name]

		type_text  	= (arguments[3] == null) ? 'NM' : arguments[3];
		type_value 	= (arguments[4] == null) ? 'ID' : arguments[4];

	var field = document.getElementById(fieldid);

	if (id.valueOf() == '')	return;
	if (field == null) return;

	field.options.length = 1;
	
	var option = document.createElement('option');
		option.text = 'Loading...';

	field.options.add(option, 0);
	field.selectedIndex = 0;
	field.disabled = true;

	var url = '/application/functions/xml_option_list.asp' +
			  '?table=brokerlocations' +
			  '&order=geolists.name';
		url += (isNaN(id)) ? '&geo_parent.shortname=' + id : '&geolists.parentid=' + id;

	AjaxCaller.getXml(url, '', build_selection);

	function build_selection(xml) {

		var xmldoc = xml.documentElement;

		if (xmldoc == null) {
			alert('Error: Could not load location data.');
			return;
		}

		for (var i=0; i<xmldoc.childNodes.length; i++) {

			if (xmldoc.childNodes.item(i).nodeType == 3) continue;
			
			var id   	= new String(xmldoc.childNodes.item(i).getAttribute('ID'));
			var code 	= new String(xmldoc.childNodes.item(i).getAttribute('SHORTNAME'));
			var name 	= new String(xmldoc.childNodes.item(i).getAttribute('NAME'));
				code	= unescape(code);
				name	= unescape(name);
			var option 	= document.createElement('option');

			switch (type_text.valueOf()) {
				case 'ID':
					option.text = id;
					break;
				case 'CD':
					option.text = code;
					break;
				case 'NM':
					option.text = name;
					break;
				default:
			}

			switch (type_value.valueOf()) {
				case 'ID':
					option.value = id;
					break;
				case 'CD':
					option.value = code;
					break;
				case 'NM':
					option.value = name;
					break;
				default:
			}

			field.options.add(option);

			if (selectedid.valueOf() == option.value) {
				field.selectedIndex = field.length - 1;
			}
		}
		field.disabled = false;
		field.removeChild(field.options[0]); 
	}
}

function open_option_list(fieldid, e) {
	if(!e) var e = e || window.event;
	var div = document.getElementById('div_list_' + fieldid);
	
	if(navigator.appName == "Microsoft Internet Explorer") {
		if (div.style.display == 'none') {
			for (var i=0; i<document.getElementById('form_editor').elements.length; i++) {
				var type = document.getElementById('form_editor').elements(i).type;
				if (type.indexOf('select') != -1) document.getElementById('form_editor').elements(i).style.visibility = 'hidden';
			}

			div.style.left    = window.event.x - 100;
			div.style.top     = '70px';
			div.style.display = 'block';
		} else {
			div.style.display = 'none';
			for (var i=0; i<document.getElementById('form_editor').elements.length; i++) {
				var type = document.getElementById('form_editor').elements(i).type;
				if (type.indexOf('select') != -1) document.getElementById('form_editor').elements(i).style.visibility = 'visible';
			}

		}
	} else {
		if (div.style.display == 'none') {
			for (var i=0; i<document.getElementById('form_editor').elements.length; i++) {
					var type = document.getElementById('form_editor').elements[i].type;
					if (type.indexOf('select') != -1) document.getElementById('form_editor').elements[i].style.visibility = 'hidden';
			}
			var left = e.x - 100;
			div.style.left    = left + "px";
			div.style.top     = '70px';
			div.style.display = 'block';
		} else {
			div.style.display = 'none';
			for (var i=0; i<document.getElementById('form_editor').elements.length; i++) {
				var type = document.getElementById('form_editor').elements[i].type;
				if (type.indexOf('select') != -1) document.getElementById('form_editor').elements[i].style.visibility = 'visible';
			}
		}
	}
}

function set_option_list(fieldid) {

	var str = new String('<font color="#FF6906"><b>[Click Here to Add/Remove]</b></font>');

	for (var i=0; i<document.getElementsByName(fieldid).length; i++) {
		if (document.getElementsByName(fieldid)[i].checked) {
			if (str != '') str += '<br>';
			str += unescape(document.getElementsByName(fieldid)[i].id);
		}
	}

	document.getElementById('div_text_' + fieldid).innerHTML = str;
	open_option_list(fieldid);
}

function uploader(id) {
	winUploader = window.open('', 'upload', 'menubar=no,toolbar=no,status=no,resizable=no,width=450,height=280');
	winUploader.document.open();
	winUploader.document.write('Loading...');
	winUploader.document.close();
	winUploader.location.href = '/application/uploader/index.asp?id=' + id;
	winUploader.focus();
}

String.prototype.trim = function() { // trim a function for string object
   var x=this;
   x=x.replace(/^\s*(.*)/, "$1");
   x=x.replace(/(.?)\s*$/, "$1");
   return x;
}

function reload(key, value) {
	url = window.location.protocol + '//' + window.location.hostname + window.location.pathname;
	query = window.location.search;
	url += setquery(query, key, value);
	if (key == 'order') {
		if (query.indexOf('desc') == -1) {
			url += '&desc';
		} else {
			url = url.replace('&desc', '');
		}
	}
	window.location.href = url;
}

function setquery(query, key, value) {

	var value = new String(value);
	var query = new String(query);

	value = value.trim();
	query = query.trim();
	query = query.replace('?', '');

	if(query.match(/^&/) == null) query = '&' + query;

	var re = new RegExp('&' + key + '=[^&]*', 'gi');

	if (value.valueOf() == '') {
		query = query.replace(re, '');
	} else {
		if (query.match(re) != null) {
			query = query.replace(re, '&' + key + '=' + value);
		} else {
			query += '&' + key + '=' + value;
		}
	}

	return query;

	/*
	query = query.trim();
	query = query.replace(/^&?(.*)/, '$1');

	var re = new RegExp(key + '=[^&]*&?', 'gi');

	alert(query + '\n' + key + ':' + query.match(re));

	if (value == '') {
		query = query.replace(re, '');
	} else {
		if (query.match(re) != null) {
			query = query.replace(re, key + '=' + value + '&');
		} else {
			//query += key + '=' + value + '&';
			query += '&' + key + '=' + value;
		}
	}

	query = query.replace(/^&?(.*)/, '$1');

	return query;
	*/
}

function parse_queries(str) {

	var val = new Array();

	var queries = new String(str);
		queries = unescape(queries);
		queries = queries.replace('?', '');

	var arr_queries = queries.split('&');

	for (i=0; i<arr_queries.length; i++) {
		var tmp = arr_queries[i].split('=');
		val[tmp[0].toLowerCase()] = tmp[1];
	}

	return val;
}

function parse_cookie() {

	var query = new String(document.cookie);
	var retval = new Array();	// Return Array: [name] = value;

	if (query.length == 0) return;

	arr_queries = query.split(';');

	for (key in arr_queries) {
		var arr_temp = arr_queries[key].split('=');
		if (!arr_temp[1]) arr_temp[1] = '';
		retval[arr_temp[0].trim()] = arr_temp[1].trim();
	}
	return(retval);
}

function setcookie(name, value, expdate) {

	var strcookie 	= new String(name + '=' + value + '; ');
	var expdate 	= new Date(expdate);	//expdate = 'YYYY/MM/DD'

	if (!isNaN(expdate)) {
		strcookie += 'expires=' + expdate.toGMTString();
	}
	document.cookie = strcookie;
}


function get_post_values(window_object, form_name) {

	if(navigator.appName == "Microsoft Internet Explorer") {
		var form_object = window_object.document.getElementById(form_name);
		var vars = new Array();

		for (var i=0; i<form_object.elements.length; i++) {

			var name   = new String(form_object.elements[i].name);
			var value  = new String(form_object.elements[i].value);
			var fields = window_object.document.getElementsByName(name);
			if (fields.length > 1) {
				if (vars[name] == null) {
					vars[name] = '';
					for (var n=0; n < fields.length; n++) {
						if(form_name == 'form_business') {
							if(!fields[n].type == 'checkbox')
								if (!fields[n].checked.valueOf()) continue;
						}
						else
							if (!fields[n].checked.valueOf()) continue;
						if (vars[name] != '') vars[name] += ',';
						vars[name] += fields[n].value;
					}
				}
			} else {
				if (window_object.document.getElementById(name) != null && 
					window_object.document.getElementById(name).type == 'checkbox') {
					if (!window_object.document.getElementById(name).checked) continue;
				}
				vars[name] = value;
			}
		}
	}
	else {
		var obj = new String(eval(window_object));
		
		if(obj == "[object Window]")
			var form_object = window_object.document.getElementById(form_name);
		else
			var form_object = window_object.contentWindow.document.forms[0];
			
		var vars = new Array();
		if(obj == "[object Window]") {
			for (var i=0; i<form_object.elements.length; i++) {

				var name   = new String(form_object.elements[i].name);
				var value  = new String(form_object.elements[i].value);
				var fields = window_object.document.getElementsByName(name);
				if (fields.length > 1) {
					if (vars[name] == null) {
						vars[name] = '';
						for (var n=0; n < fields.length; n++) {
							if(form_name == 'form_business') {
								if(!fields[n].type == 'checkbox')
									if (!fields[n].checked.valueOf()) continue;
							}
							else
								if (!fields[n].checked.valueOf()) continue;
							if (vars[name] != '') vars[name] += ',';
							vars[name] += fields[n].value;
						}
					}
				} else {
					if (window_object.document.getElementById(name) != null && 
						window_object.document.getElementById(name).type == 'checkbox') {
						if (!window_object.document.getElementById(name).checked) continue;
					}
					vars[name] = value;
				}
			}
		} else {
			for (var i=0; i<form_object.elements.length; i++) {
				var name   = new String(form_object.elements[i].name);
				var value  = new String(form_object.elements[i].value);
				var fields = window_object.contentWindow.document.getElementsByName(name);
				
				if (fields.length > 1) {
					if (vars[name] == null) {
						vars[name] = '';
						for (var n=0; n < fields.length; n++) {
							if(form_name == 'form_business') {
								if(!fields[n].type == 'checkbox')
									if (!fields[n].checked.valueOf()) continue;
							}
							else
								if (!fields[n].checked.valueOf()) continue;
							if (vars[name] != '') vars[name] += ',';
							vars[name] += fields[n].value;
						}
					}
				} else {
					if (window_object.contentWindow.document.getElementById(name) != null && 
						window_object.contentWindow.document.getElementById(name).type == 'checkbox') {
						if (!window_object.contentWindow.document.getElementById(name).checked) continue;
					}
					vars[name] = value;
				}
			}
		}
	}
	return vars;
}

function num(obj, integer, decimal, delimiter) {

	var val = new String(obj.value);
	var is_negative = new Boolean();
	var reg = new RegExp('-?\\d{0,' + integer + '}\\.\\d{0,' + decimal + '}');

	if (val.length == 0) return;
	if (val.indexOf('-') == 0) is_negative = true;

	val = obj.value.replace(/[^\d.]/g, '');

	if (val.indexOf('.') == -1) val += '.';

	val = new String(val.match(reg));
	val = val.split('.');

	var val_int = new String(val[0]);
	var val_dec = new String(val[1]);

	if (delimiter.valueOf()) {
		var tmp_val = new String();
		while (val_int != (tmp_val = val_int.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))) {
    		val_int = tmp_val;
  		}
	}

	if (val_int.length == 0) val_int = '0';
	var retval = new String(val_int);
	if (val_dec.length > 0) retval += '.' + val_dec;
	if (is_negative.valueOf()) retval = '-' + retval;

	obj.value = retval;
}

function check_textarea_length(obj, length) {

	var length = new Number(length);
	if (length == 0) return;
	if (obj.value.length > length) {
		alert('The fields allows maximum ' + length + ' characters to be entered.\nOverflowed characters will be omitted.');
		obj.value = obj.value.substr(0, length);
	}
}

// Spell Checker
var interface_object;

function interface_instance(field) {
	this.field   = field;
	this.setText = spell_callback;
}

function spell_callback(text) {
	document.getElementById(interface_object.field).value = text;
}

function spell(field){

	interface_object = new interface_instance(field);

	str = document.getElementById(field).value;
	str = escQuotes(escEntities(str));

 	spellBoot = "<html>" +
				"<body onLoad='document.forms[0].submit();'>" +
				"<font face='arial, helvetica' size=2>Spell checking document...</font>" +
				"<form action='/application/email/spell.aspx' method='post'>" +
				'	<input type="hidden" name="textToCheck" 						value="' + str + '">' +
				"	<input type='hidden' name='InterfaceObject' 					value='interface_object'>" +
				"	<input type='hidden' name='mode' 								value='popup'>" +
				"	<input type='hidden' name='UserDictionaryFile' 					value=''>" +
				"	<input type='hidden' name='DictFile' 							value=''>" +
				"	<input type='hidden' name='SuggestionsMethod' 					value='HASHING_SUGGESTIONS'>" +
				"	<input type='hidden' name='LanguageParser' 						value='ENGLISH'>" +
				"	<input type='hidden' name='SeparateHyphenWords' 				value='False'>" +
				"	<input type='hidden' name='ShowFinishedMessage' 				value='True'>" +
				"	<input type='hidden' name='ShowNoErrorsMessage' 				value='True'>" +
				"	<input type='hidden' name='CreatePopUpWindow' 					value='True'>" +
				"	<input type='hidden' name='FinishClosesWindow' 					value='True'>" +
				"	<input type='hidden' name='SuggestSplitWords' 					value='True'>" +
				"	<input type='hidden' name='CheckCompoundWords' 					value='False'>" +
				"	<input type='hidden' name='CorrectionNotifyListener' 			value=''>" +
				"	<input type='hidden' name='Modal' 								value='False'>" +
				"	<input type='hidden' name='IncludeUserDictionaryInSuggestions' 	value='False'>" +
				"	<input type='hidden' name='LookIntoHyphenatedText' 				value='True'>" +
				"	<input type='hidden' name='FinishedListener' 					value=''>" +
				"	<input type='hidden' name='GuiLanguage' 						value='ENGLISH'>" +
				"	<input type='hidden' name='callBack' 							value=''>" +
				"	<input type='hidden' name='IgnoreXML' 							value='True'>" +
				"	<input type='hidden' name='IgnoreCapitalizedWords' 				value='False'>" +
				"	<input type='hidden' name='ConsiderationRange' 					value='-1'>" +
				"</form></body>" +
				"</html>";

     var sc = window.open('', 'rspellwin', 'resizable=yes,scrollbars=auto,dependent=yes,toolbar=no,left=100,top=100,status=no,location=no,menubar=no,width=370,height=400');
     sc.focus();
     sc.document.open();
     sc.document.write(spellBoot);
     sc.document.close();
}

function escQuotes(text){
    var rx = new RegExp("\"", "g");
    return text.replace(rx,"&#34;");
}

function escEntities(text){
    var rx = new RegExp("&", "g");
    return text.replace(rx,"&amp;");
}
