function login_submit() {
	var ajaxObj = new XMLHTTP("./mybic/mybic_server.php");
	ajaxObj.call('action=login' + form_vars, ajx_fill);
}
function postForm(theForm) {
	var ajaxObj = new XMLHTTP("./mybic/mybic_server.php");
	var form_vars = ajaxObj.getFormObj(theForm);
	ajaxObj.call('action=postform' + form_vars + '&form_name='
			+ urlencode(theForm.name), ajx_fill);
	return false;
}
function loadBusinessCase() {
	if (document.getElementById('bcfield')) {
		var ajaxObj = new XMLHTTP("./mybic/mybic_server.php");
		ajaxObj.call('action=loadbusinesscase', ajx_fill);
	}
}
function logout() {
	var ajaxObj = new XMLHTTP("./mybic/mybic_server.php");
	ajaxObj.call('action=login&logout=true', ajx_fill);
}

// -------------------------------------------------------------------------------------
Function.prototype.mybicBind = function(object) {
	var __method = this;
	return function() {
		return __method.apply(object, arguments)
	}
};
function XMLHTTP(server_url, readyStateFunction) {
	this.server_url = server_url;
	this.async = true;
	this.debug = 1;
	this.throttle = 1;
	this.method = "POST";
	this.format = "JSON";
	this.headers = new Array();
	this.abort_timeout = 50000;
	this.failed_threshold = 3;
	this.ignoreCall = 0;
	this.stopRequest = 0;
	this.jsErrorHandler = '';
	this.notAuthorizedHandler = '';
	this.net_down_func = this.down;
	this.version = '1.0.1';
	this.req = null;
	this.debugID = 0;
	this.errors = new Array();
	this.queue = new Array();
	this.queue_in_process = 0;
	this.currentCallIgnore = 0;
	this.readySateTimer = '';
	this.callBack = '';
	this.IEObjCache = 0;
	this.failed_requests = 0;
	this.readyStateFunction = (readyStateFunction) ? readyStateFunction
			: this.responseHandler;
	this._msgQueueInfo = new Array();
	this.readyStateTimer = '';
	this.poolTimerInterval = 50;
}
XMLHTTP.prototype = {
	getXMLHTTP : function() {
		if (window.XMLHttpRequest) {
			this.req = new XMLHttpRequest()
		} else if (this.IEObjCache != 0) {
			try {
				this.req = new ActiveXObject(this.IEObjCache)
			} catch (e) {
			}
		} else if (window.ActiveXObject) {
			var progIDs = [ 'MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0',
					'Microsoft.XMLHTTP' ];
			for ( var i = 0; i < progIDs.length; i++) {
				try {
					this.req = new ActiveXObject(progIDs[i]);
					this.IEObjCache = progIDs[i];
					break
				} catch (ex) {
				}
			} 
		} else {
			if (this.debug == 1) {
				this
						.showDebug("<BR>FATAL ERROR: Could not create XMLHTTPRequest Object!<BR>")
			}
		}
		return this.req
	},
	call : function(queryVars, userCallback, queue_request) {
		if (this.failed_requests >= this.failed_threshold) {
			this.net_down_func('disable');
			return false
		} else {
			var currentVars;
			var callback;
			this.fullUrl = '';
			if (this.throttle == 1 && queue_request != 'queue'
					|| this.stopRequest == 1) {
				this.add2Queue(queryVars, userCallback)
			}
			if (this.queue_in_process == 0) {
				if (!this.getXMLHTTP()) {
					return false
				}
				if (this.throttle == 1) {
					this.queue_in_process = 1;
					var currentCall = this.queue.shift();
					currentVars = currentCall.queryVars;
					callback = currentCall.userCallback;
					this.format = currentCall.format;
					this.method = currentCall.method;
					this.abort_timeout = currentCall.abortTimeout;
					this.currentCallIgnore = currentCall.ignoreCall;
					this.async = currentCall.async
				} else {
					currentVars = queryVars;
					callback = userCallback;
					var ignoreCall = 0
				}
				this.callBack = callback;
				if (this.format != 'JSON') {
					currentVars = currentVars + '&json=false'
				}
				this.full_url = (this.method == "POST") ? this.server_url
						: this.server_url + '?' + currentVars;
				if (this.debug == 1 && this.currentCallIgnore != 1) {
					try {
						var matches = currentVars.match(/action=(\w+)&?/);
						this.showDebug('new', 'MYBIC - CALLING: ' + matches[1]);
						this.showDebug("Server Page: " + this.server_url
								+ "<BR>HTTP Method: " + this.method
								+ "<BR>Encoding Format: " + this.format
								+ "<BR>Query String: " + currentVars + "<BR>")
					} catch (e) {
					}
				}
				this.req.open(this.method, this.full_url, this.async);
				if (this.headers) {
					for ( var i in this.headers) {
						if (i != '' && (this.headers[i] instanceof String)) {
							try {
								this.req.setRequestHeader(i, this.headers[i]);
								if (this.debug == 1) {
									this
											.showDebug('Setting Custom Header: ' + this.headers[i] + '<br>')
								}
							} catch (e) {
							}
						}
					}
				}
				if (this.abort_timeout != -1) {
					this.end_timer = setInterval(this.endCall.mybicBind(this),
							this.abort_timeout)
				}
				if (this.method == 'POST') {
					this.req.setRequestHeader('Content-Type',
							'application/x-www-form-urlencoded');
					this.request = currentVars;
					this.req.send(currentVars)
				} else {
					this.req.send(null)
				}
				if (this.readyStateFunction) {
					this.readyStateTimer = window.setInterval(
							this.readyPoolFunc.mybicBind(this),
							this.poolTimerInterval)
				}
			}
		}
	},
	readyPoolFunc : function() {
		if (this.req && this.req.readyState == 4) {
			window.clearInterval(this.readyStateTimer);
			this.readyStateTimer = null;
			this.readyStateFunction()
		}
	},
	responseHandler : function() {
		if (this.req) {
			try {
				if (this.req.readyState == 4) {
					if (this.req.status && this.req.status == 200) {
						if (this.req.responseText.indexOf('ajax_msg_failed') != -1) {
							this
									.showDebug("Fatal Error: mybic_server sent back ajax_msg_failed! - MSG: "
											+ this.req.responseText + "<br/>");
							if (this.req.responseText.indexOf('login') != -1) {
								var regs = this.req.responseText.split("|");
								top.document.location = "<!--basepath_rel-->?login&ref="
										+ urlencode(regs[2]);
								return
							}
							if (this.req.responseText.indexOf('notauth') != -1) {
								if (this.abort_timeout != -1) {
									clearInterval(this.end_timer)
								}
								if (this.notAuthorizedHandler == '') {
									this.callBack('notauthorized')
								} else {
									try {
										this.notAuthorizedHandler()
									} catch (e) {
									}
								}
							} else {
								this.callBack(false)
							}
						} else {
							if (this.abort_timeout != -1) {
								clearInterval(this.end_timer)
							}
							if (this.throttle == 1) {
								var req = this._msgQueueInfo.shift();
								var format = req.format
							} else {
								var format = this.format
							}
							if (format == "JSON") {
								try {
									var myObject = JSON
											.parse(this.req.responseText);
									if (document.getElementById(this.callBack)) {
										document.getElementById(this.callBack).innerHTML = myObject
									} else {
										this.callBack(myObject)
									}
								} catch (e) {
									if (this.jsErrorHandler == '') {
										alert('An error occurred in your response function, NOT mybic related. Error Name: '
												+ e.name
												+ '  Message:'
												+ e.message)
									} else {
										try {
											this.jsErrorHandler(e)
										} catch (err) {
											alert('Error: your errorhandling function has an error - name: '
													+ err.name
													+ ' message: '
													+ JSON
															.parse(this.req.responseText))
										}
									}
								}
							} else if (this.format == "XML") {
								this.callBack(this.req.responseXML)
							} else {
								try {
									if (document.getElementById(this.callBack)) {
										document.getElementById(this.callBack).innerHTML = this.req.responseText
									} else {
										this.callBack(this.req.responseText)
									}
								} catch (e) {
									if (this.jsErrorHandler == '') {
										alert('An error occurred in your response function, NOT mybic related. Error Name: '
												+ e.name
												+ '  Message:'
												+ e.message)
									} else {
										try {
											this.jsErrorHandler(e)
										} catch (err) {
											alert('Error: your errorhandling function has an error - name: '
													+ err.name
													+ ' message: '
													+ err.message)
										}
									}
								}
							}
						}
						this.failed_requests = 0
					} else {
						try {
							this.showDebug("Fatal Error: MSG: "
									+ this.req.responseText + " StatusText: "
									+ this.req.statusText + "<br/>")
						} catch (e) {
						}
						this.endCall()
					}
					try {
						if (this.debug == 1 && this.currentCallIgnore != 1) {
							var str = this.req.responseText.replace(/(\<)/gi,
									'&lt;');
							var str = str.replace(/(\>)/gi, '&gt;');
							this.showDebug("HTTP Server Response:<br/> " + str
									+ "<br>")
						}
					} catch (e) {
					}
					this.restoreDefaults();
					this.queue_in_process = 0;
					this.req = null;
					if (this.queue.length > 0) {
						this.call('', '', 'queue')
					}
				}
			} catch (e) {
			}
		}
	},
	loadScript : function(url, remove) {
		try {
			var scripts = document.getElementsByTagName('script');
			s_len = scripts.length;
			for ( var i = 0; i < s_len; i++) {
				var reg = new RegExp(url + "$");
				if (reg.test(scripts[i].src)) {
					var p2 = scripts[i];
					p2.parentNode.removeChild(p2);
					break
				}
			}
			if (remove != 'remove') {
				newScript = document.createElement("script");
				newScript.setAttribute("type", "text/javascript");
				newScript.setAttribute("src", url);
				document.getElementsByTagName('head')[0].appendChild(newScript)
			}
		} catch (e) {
			this.showDebug("MyBIC - loadScript failed URL: " + url
					+ " ErrName: " + e.name + " Msg: " + e.message)
		}
	},
	add2Queue : function(queryVars, userCallback) {
		var addAjax = new Array();
		addAjax['queryVars'] = queryVars;
		addAjax['userCallback'] = userCallback;
		addAjax['ignoreCall'] = this.ignoreCall;
		addAjax['abortTimeout'] = this.abort_timeout;
		addAjax['format'] = this.format;
		addAjax['method'] = this.method;
		addAjax['async'] = this.async;
		var opts = new Object();
		opts.format = this.format;
		this._msgQueueInfo.push(opts);
		this.ignoreCall = 0;
		this.queue.push(addAjax)
	},
	restoreDefaults : function() {
		this.method = "POST";
		this.format = "JSON";
		this.callback = "";
		this.abort_timeout = 5000;
		this.failed_threshold = 3;
		this.async = true
	},
	getFormObj : function(formobj) {
		var fields = new Array();
		var form_len = formobj.elements.length;
		for ( var x = 0; x < form_len; x++) {
			switch (formobj.elements[x].type) {
			case 'select-one':
				fields
						.push(encodeURIComponent(formobj.elements[x].name)
								+ '='
								+ encodeURIComponent(formobj.elements[x].options[formobj.elements[x].selectedIndex].value));
				break;
			case 'select-multiple':
				var obj = formobj.elements[x];
				for ( var y = 0; y < formobj.elements[x].options.length; y++) {
					if (formobj.elements[x].options[y].selected) {
						if (formobj.elements[x].options[y].value == '') {
							fields
									.push(encodeURIComponent(formobj.elements[x].name)
											+ '='
											+ encodeURIComponent(formobj.elements[x].options[y].text))
						} else {
							fields
									.push(encodeURIComponent(formobj.elements[x].name)
											+ '='
											+ encodeURIComponent(formobj.elements[x].options[y].value))
						}
					}
				}
				break;
			case 'radio':
				if (formobj.elements[x].checked) {
					fields.push(encodeURIComponent(formobj.elements[x].name)
							+ '='
							+ encodeURIComponent(formobj.elements[x].value))
				}
				break;
			case 'checkbox':
				if (formobj.elements[x].checked) {
					fields.push(encodeURIComponent(formobj.elements[x].name)
							+ '='
							+ encodeURIComponent(formobj.elements[x].value))
				}
				break;
			default:
				fields.push(encodeURIComponent(formobj.elements[x].name) + '='
						+ encodeURIComponent(formobj.elements[x].value));
				break
			}
		}
		var new_qstring = '&' + fields.join('&');
		return new_qstring
	},
	getForm : function(formid) {
		var formobj = document.getElementById(formid);
		var fields = new Array();
		var form_len = formobj.elements.length;
		for ( var x = 0; x < form_len; x++) {
			switch (formobj.elements[x].type) {
			case 'select-one':
				fields
						.push(encodeURIComponent(formobj.elements[x].name)
								+ '='
								+ encodeURIComponent(formobj.elements[x].options[formobj.elements[x].selectedIndex].value));
				break;
			case 'select-multiple':
				var obj = formobj.elements[x];
				for ( var y = 0; y < formobj.elements[x].options.length; y++) {
					if (formobj.elements[x].options[y].selected) {
						if (formobj.elements[x].options[y].value == '') {
							fields
									.push(encodeURIComponent(formobj.elements[x].name)
											+ '='
											+ encodeURIComponent(formobj.elements[x].options[y].text))
						} else {
							fields
									.push(encodeURIComponent(formobj.elements[x].name)
											+ '='
											+ encodeURIComponent(formobj.elements[x].options[y].value))
						}
					}
				}
				break;
			case 'radio':
				if (formobj.elements[x].checked) {
					fields.push(encodeURIComponent(formobj.elements[x].name)
							+ '='
							+ encodeURIComponent(formobj.elements[x].value))
				}
				break;
			case 'checkbox':
				if (formobj.elements[x].checked) {
					fields.push(encodeURIComponent(formobj.elements[x].name)
							+ '='
							+ encodeURIComponent(formobj.elements[x].value))
				}
				break;
			default:
				fields.push(encodeURIComponent(formobj.elements[x].name) + '='
						+ encodeURIComponent(formobj.elements[x].value));
				break
			}
		}
		var new_qstring = '&' + fields.join('&');
		return new_qstring
	},
	endCall : function() {
		try {
			this.net_down_func();
			this.req.abort();
			this.req = null;
			clearInterval(this.end_timer);
			clearInterval(this.readyStateTimer);
			this.failed_requests++;
			this.queue_in_process = 0;
			if (this.queue.length > 0) {
				this.call('', '', 'queue')
			}
			if (this.debug == 1) {
				this
						.showDebug("Request Failed - Network Down! Current Failed Attempts: "
								+ this.failed_requests + "<br>")
			}
		} catch (e) {
			clearInterval(this.end_timer);
			this.net_down_func('disable')
		}
		this.req = null
	},
	down : function(status) {
		var notif_div = '<div id="mybic_notification" style="text-align:center;padding:20px;position:absolute;top:100px;left:100px;width:300px;border:thin solid black;background-color:#F8F021;">';
		notif_div += '<span id="mybic_notif_msg"> MSGHERE </span> <br><br><input type="button" value="OK" onclick="document.getElementById(\'mybic_notification\').style.display=\'none\';"></div>';
		if (status == 'disable') {
			var notif = 'A network issue has disabled network connections for this page. Please reload this page or contact the site administrator'
		} else {
			var notif = 'A network issue has occurred which canceled your last request'
		}
		try {
			if (document.getElementById('mybic_notification')) {
				document.getElementById('mybic_notification').style.display = 'block'
			} else {
				var new_div = document.createElement('div');
				new_div.innerHTML = notif_div;
				document.body.appendChild(new_div)
			}
			document.getElementById('mybic_notif_msg').innerHTML = notif
		} catch (e) {
			alert('Network Unavailable: Please re-load page or contact the site administrator')
		}
	},
	loadCSS : function(url) {
		try {
			var scripts = document.getElementsByTagName('link');
			s_len = scripts.length;
			if (s_len > 0) {
				for ( var i = 0; i < s_len; i++) {
					var reg = new RegExp(url + "$");
					if (reg.test(scripts[i].href)) {
						var p2 = scripts[i];
						p2.parentNode.removeChild(p2);
						break
					}
				}
			}
			newScript = document.createElement("link");
			newScript.setAttribute("type", "text/css");
			newScript.setAttribute("rel", "stylesheet");
			newScript.setAttribute("href", url);
			document.getElementsByTagName('head')[0].appendChild(newScript)
		} catch (e) {
			if (this.debug == 1) {
				this.showDebug("MyBIC - loadCSS failed URL: " + url
						+ " ErrName: " + e.name + " Msg: " + e.message)
			}
		}
	},
	showDebug : function(msg, label, expand) {
		if (this.debug == 1) {
			if (!document.getElementById('mybic_debug')) {
				var errs = document.createElement('div');
				errs.id = 'mybic_errs';
				var deb = document.createElement('div');
				deb.id = 'mybic_debug';
				deb.style.border = "thick solid black";
				deb.style.backgroundColor = "#eeeeee";
				deb.style.padding = "10px";
				deb.style.margin = '75px 10px 10px 10px';
				deb.style.width = '90%';
				deb.style.position = 'absolute';
				deb.style.zIndex = '999';
				deb.innerHTML += 'MyBic Debugger: <a href="#" onclick="document.getElementById(\'mybic_errs\').style.display = (document.getElementById(\'mybic_errs\').style.display==\'none\') ? \'\':\'none\'; return false;" >hide/show me!</a>';
				deb.innerHTML += '&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onclick="document.getElementById(\'mybic_errs\').innerHTML = \'\'; return false;">Clear</a>';
				deb.innerHTML += '&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onclick="XMLHTTP.prototype.debug_expand(\'block\');return false;">Expand All</a>';
				deb.innerHTML += '&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onclick="XMLHTTP.prototype.debug_expand(\'none\'); return false;">Contract All</a><br><br>';
				deb.appendChild(errs);
				if (document.body) {
					document.body.appendChild(deb)
				} else {
					document.lastChild.appendChild(deb)
				}
			}

			var deb = document.getElementById('mybic_errs');
			if (msg == 'new') {
				this.debugID++;
				var dimg = '<a style="color:white;font-size:1.1em;text-decoration:none" href="#" onclick="XMLHTTP.prototype.debug_expand(this);return false;">+</a>';
				deb.innerHTML += '<div id="mybiclabel_'
						+ this.debugID
						+ '" style="display:block;border:thin solid #999999;padding:2px;background-color:#cccccc;">'
						+ dimg + ' label' + this.debugID + ': ' + label
						+ '</div>'
			} else {
				deb.innerHTML += '<div class="mybic_debug'
						+ this.debugID
						+ '" style="padding:5px;display:none; border:thin solid white;">'
						+ msg + '</div>'
			}
		}
	},
	debug_expand : function(el) {
		var deb = document.getElementById('mybic_errs');
		var deb_len = deb.childNodes.length;
		if (el == 'none' || el == 'block') {
			var label = "mybic_debug";
			var links = deb.getElementsByTagName('a');
			var links_len = links.length;
			for ( var q = 0; q < links_len; q++) {
				links[q].innerHTML = (el == 'none') ? '+' : '>'
			}
		} else {
			var label = el.parentNode.id;
			label = label.split('_');
			label = "mybic_debug" + label[1]
		}
		for ( var i = 0; i < deb_len; i++) {
			try {
				if (deb.childNodes[i].className.match(new RegExp("(^" + label
						+ ".*$)"))) {
					if (el == 'none' || el == 'block') {
						deb.childNodes[i].style.display = el
					} else {
						if (deb.childNodes[i].style.display == 'block') {
							el.innerHTML = '+';
							deb.childNodes[i].style.display = 'none'
						} else {
							el.innerHTML = '>';
							deb.childNodes[i].style.display = 'block'
						}
					}
				}
			} catch (e) {
			}
		}
	},
	restart : function() {
		this.stopRequest = 0;
		this.call('', '', 'queue')
	}
};
var JSON = function() {
	var m = {
		'\b' :'\\b',
		'\t' :'\\t',
		'\n' :'\\n',
		'\f' :'\\f',
		'\r' :'\\r',
		'"' :'\\"',
		'\\' :'\\\\'
	}, s = {
		'boolean' : function(x) {
			return String(x)
		},
		number : function(x) {
			return isFinite(x) ? String(x) : 'null'
		},
		string : function(x) {
			if (/["\\\x00-\x1f]/.test(x)) {
				x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
					var c = m[b];
					if (c) {
						return c
					}
					c = b.charCodeAt();
					return '\\u00' + Math.floor(c / 16).toString(16)
							+ (c % 16).toString(16)
				})
			}
			return '"' + x + '"'
		},
		object : function(x) {
			if (x) {
				var a = [], b, f, i, l, v;
				if (x instanceof Array) {
					a[0] = '[';
					l = x.length;
					for (i = 0; i < l; i += 1) {
						v = x[i];
						f = s[typeof v];
						if (f) {
							v = f(v);
							if (typeof v == 'string') {
								if (b) {
									a[a.length] = ','
								}
								a[a.length] = v;
								b = true
							}
						}
					}
					a[a.length] = ']'
				} else if (x instanceof Object) {
					a[0] = '{';
					for (i in x) {
						v = x[i];
						f = s[typeof v];
						if (f) {
							v = f(v);
							if (typeof v == 'string') {
								if (b) {
									a[a.length] = ','
								}
								a.push(s.string(i), ':', v);
								b = true
							}
						}
					}
					a[a.length] = '}'
				} else {
					return
				}
				return a.join('')
			}
			return 'null'
		}
	};
	return {
		copyright :'(c)2005 JSON.org',
		license :'http://www.JSON.org/license.html',
		stringify : function(v) {
			var f = s[typeof v];
			if (f) {
				v = f(v);
				if (typeof v == 'string') {
					return v
				}
			}
			return null
		},
		parse : function(text) {
			try {
				return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text
						.replace(/"(\\.|[^"\\])*"/g, '')))
						&& eval('(' + text + ')')
			} catch (e) {
				return false
			}
		}
	}
}();
function ajx_fill(resp) {
	var regEx1 = new RegExp("javascript:", "g");
	var regEx2 = new RegExp("<script[^>]+>((.|\n|\r|\t)*)\</script\>", "im");
	var iItems = [];
	var x = 0;
	var jsCode = "";
	if (typeof (resp) == 'object') {
		for ( var item in resp) {
			var val = resp[item];
			var key = "template_" + item;
			var iType = "test";
			try {
				if (typeof (val) == "string") {
					if (val.match(regEx1, "")) {
						iItems[x] = [ "js", "js", val.replace(regEx1, "") ];
						x++;
						continue
					}
				}
			} catch (err) {
				alert(err)
			}
			try {
				if (typeof (val) == "string" && val.length) {
					if (val.match(regEx2)) {
						jsCode = val.match(regEx2);
						iItems[x] = [ "js", "js", jsCode[1] ];
						x++;
						val = val.replace(regEx2, "")
					}
				}
			} catch (err) {
				alert(err)
			}
			if (document.getElementById(key)) {
				iItems[x] = [ "div", key, val ];
				x++
			} else {
				iItems[x] = [ "input", item, val ];
				x++
			}
		}
		for (i = 0; i != iItems.length; i++) {
			if (iItems[i][0] == "div" && document.getElementById(iItems[i][1])) {
				document.getElementById(iItems[i][1]).innerHTML = iItems[i][2]
			}
		}
		for (j = 0; j != iItems.length; j++) {
			if (iItems[j][0] == "div" && document.getElementById(iItems[j][1])) {
				document.getElementById(iItems[j][1]).innerHTML = iItems[j][2]
			}
		}
		for (k = 0; k != iItems.length; k++) {
			if (iItems[k][0] == "input"
					&& document.getElementById(iItems[k][1])) {
				if (typeof (iItems[k][2]) == "string")
					document.getElementById(iItems[k][1]).value = iItems[k][2]
			}
			if (iItems[k][0] == "js") {
				if (typeof (iItems[k][2]) == "string" && iItems[k][2].length)
					eval(iItems[k][2])
			}
		}
	} else {
		ajaxObj.debug = '1';
		if (ajaxObj.debug && resp) {
			alert("Problem with output:\n\n " + resp)
		}
	}
};
