//SAMPLE USE
// see: /common/js/search/result_map.js
//function ajax_onSubmit() {
//	address = encodeURI(document.moveMap.address.value);
//	addressAjax = new ajax();
//	addressAjax.setURL("/ajax/strutsname");
//	addressAjax.addParameter("name", "value");
//	addressAjax.setSuccessHandler(localFunctionThatTakesAReq);
//	addressAjax.setFailureHandler(localFunctionThatTakesAReq);
//	addressAjax.execute();
//}

function ajax() {

    var req;

    var debugMode = false;
    if (location.search.indexOf("debugAjax") > -1) {
        debugMode = true;
    }
    this.setDebugMode = function(b) {
		debugMode = b;
	}

    this.defaultErrorHandler = function(req){
		window.alert("An Error Occured");
	}

	this.defaultSuccessHandler = function(req){
		window.alert("Request Complete");
	}

	this.defaultLoadingHandler = function(req){
	}

	var url = "";
	this.setURL = function(s) {
		this.url = s;
	}

	//parameters should be stored in an array and then added during request creation
    var parameters = new Array();
    this.addParameter = function(n,v) {
        nVP = new nameValuePair(n,v);
        parameters[parameters.length] = nVP;
	}
    this.buildQueryString = function() {
        var queryString = "";
        for (i = 0; i < parameters.length; i++) {
            if (i > 0) { queryString = queryString + "&"; }
            nVP = parameters[i];
            queryString = queryString + nVP.name + "=" + nVP.value;
        }
        return queryString;
    }

    var successHandler = this.defaultSuccessHandler;
	this.setSuccessHandler = function(f) {
		successHandler = f;
	}

	var failureHandler = this.defaultErrorHandler;
	this.setFailureHandler = function(f) {
		failureHandler = f;
	}
	var loadingHandler = this.defaultLoadingHandler;
	this.setLoadingHandler = function(f) {
		loadingHandler = f;
	}
	var timeStampURL = true;
	this.setTimeStampURL = function(b) {
		timeStampURL = b;
	}
	this.execute = function() {

		if (this.url=="") { window.alert("URL MUST BE SET");  return false;}

		if (timeStampURL) {
			this.addParameter("timestamp", new Date().getTime());
		}

		requestUrl = this.url
		if (this.queryString != "") {
			requestUrl = requestUrl + "?" + this.buildQueryString();
		}

		if (debugMode) {
			window.open(requestUrl, "AJAX_WINDOW", 'toolbar=1,scrollbars=1,location=1,statusbar=1,menubar=1,resizable=1,width=600,height=600');
		}
		// branch for native XMLHttpRequest object
		if (window.XMLHttpRequest) {
			req = new XMLHttpRequest();
			req.onreadystatechange = this.processRequestChange;
			req.open("GET", requestUrl, true);
			req.send(null);
		// branch for IE/Windows ActiveX version
		} else if (window.ActiveXObject) {
			req = new ActiveXObject("Microsoft.XMLHTTP");
			if (req) {
				req.onreadystatechange = this.processRequestChange;
				req.open("GET", requestUrl, true);
				req.send();
			}
		// The browser cannot support dynamic loading - say so
		} else {
			window.alert('Feature Not Supported By Your Browser');
		}
	}
	this.processRequestChange = function() {
		if (debugMode) {
			//window.alert("Request readyState:" +req.readyState);
		}
		if (req.readyState == 1) {
			loadingHandler(req);
		}
		// only if req shows "loaded"
		if (req.readyState == 4) {
			// only if "OK"
			if (req.status == 200) {
				successHandler(req);
			} else {
				failureHandler(req);
			}
		}
	}
}

function nameValuePair(n, v) {
    this.name = n;
    this.value = v;
}

function getSubNodeValue(node, tagname) {
	subNode = node.getElementsByTagName(tagname);
	if (subNode[0] != null) {
		if(subNode[0].firstChild != null) {
			return subNode[0].firstChild.nodeValue;
		}
	}
	return "";
}