function sendAJAXRequest(idName, funcName, subName, vars) {

	var ajaxObject;
	
	try {
		// Opera 8.0+, Firefox, Safari
		ajaxObject = new XMLHttpRequest();
	} catch (e) {
		// Internet Exploder
		try {
			ajaxObject = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				ajaxObject = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				// Outdated browser
				alert("Please use a browser that supports Javascript");
				return false;
			}
		}
	}
	
	ajaxObject.onreadystatechange = function() {
		if (ajaxObject.readyState == 4) {
			document.getElementById("ajax_in_progress").innerHTML = "";
			var rText = ajaxObject.responseText;
			if (rText.substring(0, 8) == "Redirect") {
				window.location = rText.substring(10);
			} else {
				document.getElementById(idName).innerHTML = parseResponse(rText);
//				parseScripts();
			}
		} else {
			document.getElementById("ajax_in_progress").innerHTML = "<img src='images/ajax_loader.gif'>";
		}
	}
	
	ajaxObject.open("GET", "ajax_func.php?no-cache="+(Math.random() * Date.parse(new Date()))+"&func="+funcName+"&sub="+subName+"&"+vars, true);
	ajaxObject.send(null);
	
}

function buildRequest(obj, idName, funcName, subName) {
	
	var varstr = "";
    for (i=0; i<obj.getElementsByTagName("input").length; i++) {
    	var sel = obj.getElementsByTagName("input")[i];
   		if (sel.type == "text" || sel.type == "password" || sel.type == "hidden") {
   			varstr += sel.name + "=" + sel.value + "&";
   		}
   		if (sel.type == "checkbox") {
   			if (sel.checked) {
   				varstr += sel.name + "=" + sel.value + "&";
   			} else {
   				varstr += sel.name + "=&";
   			}
   		}
   		if (sel.type == "radio") {
   			if (sel.checked) {
   				varstr += sel.name + "=" + sel.value + "&";
   			}
   		}
	}
    for (i=0; i<obj.getElementsByTagName("select").length; i++) {
		var sel = obj.getElementsByTagName("select")[i];
		varstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
    }
    for (i=0; i<obj.getElementsByTagName("textarea").length; i++) {
    	var sel = obj.getElementsByTagName("textarea")[i];
    	varstr += sel.name + "=" + sel.value + "&";
    }
    
    //alert(varstr);
    
    sendAJAXRequest(idName, funcName, subName, varstr);
		
}

function parseResponse(responseString) {
	var source = responseString;
	var scripts = new Array();
	// Strip out tags
	var html_doc = document.getElementsByTagName('head').item(0);
	while(source.indexOf("<script") > -1 || source.indexOf("</script") > -1) {
		var scriptTagOpenStart = source.indexOf("<script");
		var scriptTagOpenEnd = source.indexOf(">", scriptTagOpenStart);
		var scriptTagCloseStart = source.indexOf("</script", scriptTagOpenEnd);
		var scriptTagCloseEnd = source.indexOf(">", scriptTagCloseStart);
		var scriptTag = source.substring(scriptTagOpenStart, scriptTagCloseEnd + 1);
//		alert(source.substring(scriptTagOpenEnd+1, scriptTagCloseStart));
//		alert(scriptTagOpenEnd - scriptTagOpenStart);
		var scriptTypeStart = scriptTag.indexOf("type=\"");
		if (scriptTypeStart != -1) {
			var scriptTypeEnd = scriptTag.indexOf("\"", scriptTypeStart + 6);
			var scriptType = scriptTag.substring(scriptTypeStart + 6, scriptTypeEnd);
			var scriptFilenameStart = scriptTag.indexOf("src=\"");
			var scriptFilenameEnd = scriptTag.indexOf("\"", scriptFilenameStart + 5);
			var scriptFilename = scriptTag.substring(scriptFilenameStart + 5, scriptFilenameEnd);
			if (scriptType == 'text/javascript') {
				var file = document.createElement('script');
				file.setAttribute('language', 'javascript');
				file.setAttribute('type', 'text/javascript');
				file.setAttribute('src', scriptFilename);
			} else if (scriptType = 'text/css') {
				var file = document.createElement('link');
				file.setAttribute('rel', 'stylesheet');
				file.setAttribute('type', 'text/css');
				file.setAttribute('href', scriptFilename);
			}
			html_doc.appendChild(file);
		} else {
			scripts.push(source.substring(scriptTagOpenEnd + 1, scriptTagCloseStart));
		}
		source = source.substring(0, scriptTagOpenStart) + source.substring(scriptTagCloseEnd + 1);
	}
	
	while(source.indexOf("<link") > -1) {
		var linkTagOpen = source.indexOf("<link");
		var linkTagClose = source.indexOf("/>", linkTagOpen);
		var linkTag = source.substring(linkTagOpen + 5, linkTagClose);
		var linkRelStart = linkTag.indexOf("rel=\"");
		var linkRelEnd = linkTag.indexOf("\"", linkRelStart + 5);
		var linkRel = linkTag.substring(linkRelStart + 5, linkRelEnd);
		var linkFilenameStart = linkTag.indexOf("href=\"");
		var linkFilenameEnd = linkTag.indexOf("\"", linkFilenameStart + 6);
		var linkFilename = linkTag.substring(linkFilenameStart + 6, linkFilenameEnd);
		var file = document.createElement('link');
		file.setAttribute('rel', linkRel);
		file.setAttribute('type', 'text/css');
		file.setAttribute('href', linkFilename)
		html_doc.appendChild(file);
		source = source.substring(0, linkTagOpen) + source.substring(linkTagClose + 2);
	}
		
//		if (s_e - s != 7 && s_e - s != 30) {
			// Add the script file to the head
//			var scriptBlock = source.substring(s, e_e + 1);
//			var sc = scriptBlock.indexOf("src=\"");
//			var sc_e = scriptBlock.indexOf("\"", sc + 5);
//			$import(scriptBlock.substring(sc + 5, sc_e));
//		} else {
			// Add to scripts array
//			scripts.push(source.substring(s_e+1, e));
//		}
		// Strip from source
//		source = source.substring(0, s) + source.substring(e_e+1);
	
//	var headID = document.getElementsByTagName("head")[0];
//	for(var i=0; i<stylesheets.length; i++) {
//		var cssNode = array();
//		cssNode[i] = document.createElement('link');
//		cssNode[i].type = 'text/css';
//		cssNode[i].rel = 'stylesheet';
//		cssNode[i].href = stylesheets[i];
//		cssNode[i].media = 'screen';
//		headID.appendChild(cssNode[i]);
//	}

	// Loop through every script collected and eval it
	for(var i=0; i<scripts.length; i++) {
		try {
			eval(scripts[i]);
		}
		catch(err) {
			// do what you want here when a script fails
			alert(err.message + "\n" + err.number + ":" + err.name + "\n" + err.description);
		}
	}

	return source;

}

function $import(srcFile) {

	var scriptElem = document.createElement('script');
	scriptElem.setAttribute('type', 'text/javascript');
	scriptElem.setAttribute('src', srcFile);
	document.getElementsByTagName('head')[0].appendChild(scriptElem);
	
	
}
