var browserType;

// set browser variables
if (document.layers)
	browserType = 'nn4';
else if (document.all)
	browserType = 'ie';
else if (document.getElementById)
	browserType = 'gecko';

// used to log progress to status bar
function logger( err, cat ) {
	document.getElementById('stat').innerHTML = '';
	document.getElementById('stat').innerHTML = cat + ': ' + err;
}

// creates parameter string and then calls posting function
function sendPage ( el, page ) {
	data = frmLoop(el);
	loadXMLPosDoc( page, data );
}

// toggle the visibility property on passed element
function showhide (el) {
	if (browserType == "gecko" )
		document.poppedLayer = eval('document.getElementById(\'' + el + '\')');
	else if (browserType == "ie")
		document.poppedLayer = eval('document.all[\'' + el + '\']');
	else
		document.poppedLayer = eval('document.layers[\'`' + el + '\']');

	if ( document.poppedLayer.style.visibility == "hidden" ) {
		document.poppedLayer.style.visibility = "visible";
		document.poppedLayer.style.display = "block";
	}
	else {
		document.poppedLayer.style.visibility = "hidden";
		document.poppedLayer.style.display = "none";
	}
}

function frmLoop( frm ){

	// grab the form elements
	var theForm = eval('document.getElementById(\'' + frm + '\')');
	var str = "";

	// name for parser to identify
	str = "frmName=" + frm;

	// loop through form elements
	for(i=0; i<theForm.elements.length; i++){

	if (theForm.elements[i].name) {
		// make sure we're only using the form values we want
		if ( theForm.elements[i].name.indexOf( 'frm_') == 0 || theForm.elements[i].name.indexOf( 'q') == 0 ) {
			if(theForm.elements[i].type == "text"
				|| theForm.elements[i].type == "hidden"
				|| theForm.elements[i].type == "checkbox"
				|| theForm.elements[i].type == "textarea"
				|| theForm.elements[i].type == "button"
				|| theForm.elements[i].type == "radio"
				|| theForm.elements[i].type == "select-one" ){

				if ( theForm.elements[i].type == "checkbox" ) {
					str += "&" + theForm.elements[i].name + "=";
					if ( theForm.elements[i].checked ) {
						str += "on";
					}
					else {
						str += "off";
					}
				}
				// only add checked radio buttons to the post string
				else if ( theForm.elements[i].type == "radio" ) {
					if (theForm.elements[i].checked) {
						str += "&" + theForm.elements[i].name + "=";
						str += theForm.elements[i].value;
					}
				}
				// get the selected element from a select
				else if ( theForm.elements[i].type == "select" ) {
					str += "&" + theForm.elements[i].name + "=";
					str += theForm.elements[i].options[theForm.elements[i].selectedIndex].value
				}
				else {
					str += "&" + theForm.elements[i].name + "=";
					str += theForm.elements[i].value;
				}
			}
		}
	}
	}

	return str;
}

// creates XMLHTTP request, then passes posData to passed url
function loadXMLPosDoc ( url, posData ) {
	var $err = false;

	// set the status bar
	document.getElementById('stat').innerHTML = url + '-' + posData;

	try {
		logger( 'Please wait.  Saving...', 'STAT' );

		// not IE, native support
		if (window.XMLHttpRequest) {
			pos = new XMLHttpRequest();
			pos.onreadystatechange = processPosChange;
			pos.open("POST", url, false);
			pos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			pos.send(posData);

//			alert( pos.responseXML.documentElement.getElementsByTagName('status')[0].childNodes[0].nodeValue );
		// branch for IE/Windows ActiveX version
		}

		// IE, ActiveX object
		else if (window.ActiveXObject) {
			pos = new ActiveXObject("Microsoft.XMLHTTP");
			if (pos) {
				pos.onreadystatechange = processPosChange;
				pos.open("POST", url, false);
				pos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				pos.send(posData);
			}
		}
	}
	catch (e) {
//		alert(e.name + ' = ' + e.message);
		$err = true;
		logger( e.name + ' = ' + e.message, 'ERRO' );
	}
	finally {
		if ( !$err ) {
			logger( 'Record saved.', 'CONF' );
		}
	}
}

function grabPosXML ( tagName ) {
	return pos.responseXML.documentElement.getElementsByTagName(tagName)[0].childNodes[0].nodeValue;
}

// monitors status of page posting
function processPosChange () {
	// page loaded "complete"
	if (pos.readyState == 4) {
		// page is "OK"
		if (pos.status == 200) {
			if ( grabPosXML("posStatus") == 'NOTOK' ) {
				alert('Error during processing. Please try again in a few minutes');
				document.getElementById('stat').innerHTML = grabPosXML("status");
			}
		}
	}

	alert(grabPosXML("posStatus"));
}

/* begin utility functions */
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) { 
	elm.addEventListener(evType, fn, useCapture); 
	return true; 
	}
	else if (elm.attachEvent) { 
	var r = elm.attachEvent('on' + evType, fn); 
	EventCache.add(elm, evType, fn);
	return r; 
	}
	else {
	elm['on' + evType] = fn;
	}
}
function getEventSrc(e) {
	if (!e) e = window.event;

	if (e.originalTarget)
	return e.originalTarget;
	else if (e.srcElement)
	return e.srcElement;
}
function addLoadEvent(func) {
var oldonload = window.onload;
	if (typeof window.onload != 'function') {
	window.onload = func;
	} else {
	window.onload = 
		function() {
		oldonload();
		func();
		}
	}
}
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
	
		add : function(node, sEventName, fHandler, bCapture){
			listEvents.push(arguments);
		},
	
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				
				/* From this point on we need the event names to be prefixed with 'on" */
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				
				item[0][item[1]] = null;
			};
		}
	};
}();


addEvent(window,'unload',EventCache.flush, false);
