
var request;
var queryString;   //will hold the POSTed data
var target;
var responseHandler;

function urlEncode(str)
{
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var plaintext = str;
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
			    alert( "Unicode Character '" 
                        + ch 
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted." );
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	}

	return encoded;
};

function urlDecode(str)
{
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var encoded = str;
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   
   return plaintext;
};

function setQueryString(  ){
    queryString="";
    var frm = document.forms["invite_form"];
    var numberElements =  frm.elements.length;
    for(var i = 0; i < numberElements; i++) {
        if(i < numberElements-1) {
            queryString += frm.elements[i].name+"="+
                           encodeURIComponent(frm.elements[i].value)+"&";
        } else {
            queryString += frm.elements[i].name+"="+
                           encodeURIComponent(frm.elements[i].value);
        }
    }
}

function httpRequest(reqType,url,asynch,targetDiv,_responseHandler){
	
	target = targetDiv;
	responseHandler = _responseHandler;
	
    if(window.XMLHttpRequest){
        request = new XMLHttpRequest();
    } else if (window.ActiveXObject){
		
        request=new ActiveXObject("Msxml2.XMLHTTP");
        if (!request){
            request=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
	
    if(request){
        initReq(reqType,url,asynch);
    } else {
        alert("Your browser does not permit the use of all "+
              "of this application's features!");
    }
}

function initReq(reqType,url,isAsynch){
	request.onreadystatechange=responseHandler
    request.open(reqType,url,isAsynch)
	if(window.XMLHttpRequest){
		request.setRequestHeader("Content-Type","Content-Type", "application/x-www-form-urlencoded")
	}
    request.send(queryString)
}

function decodeResponse(responseText){
	var list = responseText.split('&');
	var obj = new Object();
	for (var i = 0; i < list.length; i++){
		var pair = list[i];
		var fv = pair.split('=');
		obj[fv[0]] = fv[1];
	}
	return obj;
}

function objectToString(obj){
	var ret = "";
	for (var key in obj){
		ret += key + " => " + obj[key] + "<br>";	
	}
	return ret;
}

var genricResponseHandler = function(){
    if(request["readyState"] == 4){
		if(request["status"]==200) {
			var obj = document.getElementById(target)
			obj.innerHTML = URLDecode(unicodeRecover(request.responseText));
		}
	}	
}
