// ajax.js -- very (very) simple Ajax library for use with Perl scripts

// Tom Auger, Zeitguys inc. www.zeitguys.com

// version history:
// 1.0 -- first implementation for Summerlee.com, Jan 2009


// Run code when the page loads.
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}
addLoadEvent(ajaxifyForms);
function ajaxifyForms(){
	if (document.getElementsByTagName) {
		var links = document.getElementsByTagName("form");
		for (var i=0; i < links.length; i++) {
			links[i].onsubmit = function () { xmlhttpPost(this); return false; } // may require encapsulation if used with multiple forms
			setupAutoHighlight(links[i]);
		}
	}
}





function xmlhttpPost(whichForm) {
	var strURL = whichForm.action;

    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            updatepage(whichForm, self.xmlHttpReq.responseText);
        }
    }
    
    var qs = ""; 
    for (var i=0; i < whichForm.elements.length; i++){
    	var elem = whichForm.elements[i];
    	var elemName = elem.name ? elem.name : elem.id;
    	if (elemName) qs += "&" + elemName + "=" + elem.value;
    }
    
    qs = "isajax=true" + qs;
    self.xmlHttpReq.send(qs);

	// request has been sent, hide the form, show the waiting indicator
	var formDivs = whichForm.getElementsByTagName("div");
	for (var i=0; i< formDivs.length; i++){
		if (formDivs[i].className.match(/display/i)){
			formDivs[i].style.display = "none";
		} else if (formDivs[i].className.match(/result/i)){
			formDivs[i].innerHTML = "<p>Sending email...</p>";
		}
	}
    
    return false;
}


function updatepage(whichForm, str){
    //document.getElementById("result").innerHTML = str;
    var formDivs = whichForm.getElementsByTagName("div"); 
	for (var i=0; i< formDivs.length; i++){
		if (formDivs[i].className.match(/result/i)){
			formDivs[i].innerHTML = str;
		}
	}
}


// setupAutoHighlight - this has nothing to do with Ajax - it's an add-on for the Summerlee form to make the form auto-highlight when a form field is clicked
function setupAutoHighlight(whichForm){
	for (var i=0; i<whichForm.elements.length; i++){
		var elem = whichForm.elements[i];
		if (/^text/i.test(elem.type)){
			elem.onfocus = function(){ this.select(); }
		}
	}

}

