//
// Creative Edge
// www.creativeedge.co.uk
// (c) Dan Mitchell / Amplifeye Solutions
//
// v0.1 ~ 15th Oct 06
//

// ----------------------------
// Amplifeye AJAX functions


// define variables
	var box;
	var client;
	var contentid;
	var xmlReq = null;
	var jsret;

// start the client
	createClient();

// our main set of functions

	// loadAJAXContent( <url>, <DOM> )
	// ------=	For general loading of content, easily invoked (GET)
	function loadAJAXContent(ourcommand,cid) {
		if(cid) contentid=cid;
		client.onreadystatechange = callback;
		client.open("get",ourcommand,true);
		client.send(null);
	}

	// sendFormData( <form>, <url>, <DOM> )
	// ------=	POST forms using this function (POST)
	function sendFormData(f, url, cid)
	{
	   if(cid) contentid=cid;
	   var file = url;
	   var str = getFormValues(f);
	   xmlReq = getXML(file,str);
	   return;
	}

// embedded util functions, only edit if u know what ur doing

	function createClient() {
		try {
			client = window.XMLHttpRequest ? new XMLHttpRequest() : 
								new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) { 
			alert("Sorry, your browser is not AJAX-enabled!"); 
		}
	}
	
	function callback() {
		if (client.readyState == 4) {
			if (client.status == 200) {
				document.getElementById(contentid).innerHTML = client.responseText;

				// a newer way to execute javascript within ajax content
				var scripts = document.getElementById(contentid).getElementsByTagName("script");
				for(var i=0; i < scripts.length;i++){
					eval(scripts[i].innerHTML);
				}

				//decipherJavascript( client.responseText );
				createClient();
			} else {
				alert("There was a problem retrieving the response:\n" +
					client.statusText);
				createClient();
			}
		}
	}

	// used to run and exectute embedded javascript
	function decipherJavascript( viewData ) {
        var regexp1 = /<script(.|\n)*?>(.|\n|\r\n)*?<\/script>/ig;
        var regexp2 = /<script(.|\n)*?>((.|\n|\r\n)*)?<\/script>/im;

        /* draw the html first */
        htmlpart = viewData.replace(regexp1, "");

        var result = viewData.match(regexp1);
        if (result) {
            for (var i = 0; i < result.length; i++) {
                var realScript = result[i].match(regexp2);
                runScript(realScript[2]);
                /* Note: do not try to write more than one <script> in your view.*/
                /* break;  process only one script element */
            }
        } 
	}
	function runScript (scriptText) {
		var scriptContainer = document.createElement('script');
		scriptContainer.text = scriptText;
		document.body.appendChild(scriptContainer);
	} 

	function getXML(file,str)
	{
	   client.onreadystatechange = callback;
	   client.open( "POST", file, true );
	   client.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
	   client.send(str);
	
	}
	
	function getFormValues(fobj,valFunc)
	{
	   var str = "";
	   var valueArr = null;
	   var val = "";
	   var cmd = "";
	   //fobj = document.getElementById( fobj );
	   for(var i = 0;i < fobj.elements.length;i++)
	   { 
		   switch(fobj.elements[i].type)
		   {
			   case "hidden":
					str += fobj.elements[i].name +
					 "=" + escape(fobj.elements[i].value) + "&";
					 break;
			   case "textarea":
					str += fobj.elements[i].name +
					 "=" + escape(fobj.elements[i].value) + "&";
					break;
			   case "text":
					if(valFunc)
					{
						//use single quotes for argument so that the value of
						//fobj.elements[i].value is treated as a string not a literal
						cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
						val = eval(cmd)
					}
					str += fobj.elements[i].name +
					 "=" + escape(fobj.elements[i].value) + "&";
					 break;
			   case "password":
					if(valFunc)
					{
						//use single quotes for argument so that the value of
						//fobj.elements[i].value is treated as a string not a literal
						cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
						val = eval(cmd)
					}
					str += fobj.elements[i].name +
					 "=" + escape(fobj.elements[i].value) + "&";
					 break;
	
				case "select-one":
					str += fobj.elements[i].name +
					"=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
					break;
				case "checkbox":
					if(fobj.elements[i].checked) {
						str += fobj.elements[i].name + 
						"=" + fobj.elements[i].value + "&";
					}
					break;
				case "radio":
					if(fobj.elements[i].checked) {
						str += fobj.elements[i].name + 
						"=" + fobj.elements[i].value + "&";
					}
					break;

				case 'file':
					
					break;
		   }
	   }
	   str = str.substr(0,(str.length - 1));
	   return str;
	}
	
	var pos; // variable for posting information
	function loadXMLPosDoc(url,posData) {
		// branch for native XMLHttpRequest object
		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);
		// branch for IE/Windows ActiveX version
		} 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);
			}
		}
	}
	
	function grabPosXML (tagName) {
	return pos.responseXML.documentElement.getElementsByTagName(tagName)[0].childNodes[0].nodeValue;
	}
	
	function processPosChange() {
		// page loaded "complete"
		if (pos.readyState == 4) {
			// page is "OK"
			if (pos.status == 200) {
				if ( grabPosXML("posStatus") == 'NOTOK' ) { 
					alert('There were problems sending your form. Please check back in a couple of minutes');
				}
			}
		}
	}
	