//===============================================================================
//=== CDI AJAX Library v0.1.0.0
//=== Copyright (c) 2008..2011, Creative Design Interactive, All rights reserved.
//===============================================================================

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}

function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function getXMLHTTPRequestObject() {
   var reqObj = false;

   if (window.XMLHttpRequest) {
      reqObj = new XMLHttpRequest();
   } 
   else {
      if (window.ActiveXObject) {
         var avers = ["Microsoft.XmlHttp", "MSXML2.XmlHttp", "MSXML2.XmlHttp.3.0",  "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.5.0", "MSXML2.XmlHttp.6.0"];
         for (var i = (avers.length - 1); i >= 0; i--) {
            try {
               reqObj = new ActiveXObject(avers[i]);
            } catch(e) { 
               reqObj = false; 
            }
         }
      }
   }
   return reqObj;
}

function addAJAXParam(url) {
   var myRand = parseInt(Math.random()*99999999);
   var p = url.indexOf("#");

   if (p != -1) {
      if (url.indexOf("?") == -1)
         url = url.replace("#", "?ajax=" + myRand + "#");
      else
         url = url.replace("#", "&ajax=" + myRand + "#");
   } else {
      if (url.indexOf("?") == -1)
         url += "?"
      else
         url += "&"
      url += 'ajax=' + myRand;
   }
   return url;
}

function responseAJAX(ajaxObj, targetElement, errorHandler) {
   if (ajaxObj.readyState == 4) {
	  if (ajaxObj.status == 200) {
		 if (targetElement != '') { 
			var elem = document.getElementById(targetElement);
			elem.innerHTML = trim(ajaxObj.responseText);
		 }
		 else {
			document.write(trim(ajaxObj.responseText));
	     }
      } 
  	  else {
         if (errorHandler != null)
   		    errorHandler(ajaxObj.status);
	  }
   } 
}

function responseAJAXEx(ajaxObj, targetElement, responseHandler, errorHandler) {
   if (ajaxObj.readyState == 4) {
	  if (ajaxObj.status == 200) {
		 if (targetElement != '' && targetElement != null)
            responseHandler(document.getElementById(targetElement), trim(ajaxObj.responseText));
		 else
			 responseHandler(targetElement, trim(ajaxObj.responseText));
      } 
	  else {
	     if (errorHandler != null)
   		    errorHandler(ajaxObj.status);
	  }
   } 
}

function responseAJAXNoResponse(ajaxObj, errorHandler) {
   if (ajaxObj.readyState == 4) {
	  if (ajaxObj.status == 200) {
		 //--- Do nothing with response
      } 
  	  else {
         if (errorHandler != null)
   		    errorHandler(ajaxObj.status);
	  }
   } 
}

function AJAXGet(url, targetElement) {
   var AJAX = getXMLHTTPRequestObject();

   if (AJAX != null) {
	  AJAX.open('GET', encodeURI(addAJAXParam(url)), true);
      AJAX.onreadystatechange = function() {responseAJAX(AJAX, targetElement, null);}
      AJAX.send(null);
   }   
}

function AJAXGetNoResponse(url) {
   var AJAX = getXMLHTTPRequestObject();

   if (AJAX != null) {
	  AJAX.open('GET', encodeURI(addAJAXParam(url)), true);
      AJAX.onreadystatechange = function() {responseAJAXNoResponse(AJAX, null);}
      AJAX.send(null);
   }   
}

function AJAXGetError(url, targetElement, errorHandler) {
   var AJAX = getXMLHTTPRequestObject();

   if (AJAX != null) {
	  AJAX.open('GET', encodeURI(addAJAXParam(url)), true);
      AJAX.onreadystatechange = function() {responseAJAX(AJAX, targetElement, errorHandler);}
      AJAX.send(null);
   }   
}

function AJAXGetEx(url, targetElement, responseHandler) {
   var AJAX = getXMLHTTPRequestObject();

   if (AJAX != null) {
	  AJAX.open('GET', encodeURI(addAJAXParam(url)), true);
      AJAX.onreadystatechange = function() {responseAJAXEx(AJAX, targetElement, responseHandler, null);}
      AJAX.send(null);
   }   
}

function AJAXGetExError(url, targetElement, responseHandler, errorHandler) {
   var AJAX = getXMLHTTPRequestObject();

   if (AJAX != null) {
	  AJAX.open('GET', encodeURI(addAJAXParam(url)), true);
      AJAX.onreadystatechange = function() {responseAJAXEx(AJAX, targetElement, responseHandler, errorHandler);}
      AJAX.send(null);
   }   
}

function AJAXPost(url, targetElement, oForm) {
   var AJAX = getXMLHTTPRequestObject();

   if (AJAX != null) {
      var i;
      var formObj = document.getElementById(oForm);
      var strContent;

	  AJAX.open('POST', addAJAXParam(url), true);

	  strContent = '';
      for (i = 0; i < formObj.elements.length; i++) {
         if (formObj.elements[i].type == 'checkbox' || formObj.elements[i].type == 'radio') {
			if (formObj.elements[i].checked) {
    		   strContent += formObj.elements[i].name + '=' + encodeURIComponent(formObj.elements[i].value);
			}
         } 
         else if (formObj.elements[i].type == 'select-multiple') {
			var optObj = formObj.elements[i].options;
			for (ii=0; ii < optObj.length; ii++) {
               if (optObj[ii].selected) {
    		      strContent += formObj.elements[i].name + '=' + encodeURIComponent(optObj[ii].value);
				  if (ii < (optObj.length -1)) {
       	             strContent = strContent + '&';
				  }
			   }
			}
         }
		 else {
	        strContent += formObj.elements[i].name + '=' + encodeURIComponent(formObj.elements[i].value);
	     }

         if (i < (formObj.elements.length - 1)) {
	        strContent = strContent + '&';
         }
      }

	  AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	  AJAX.setRequestHeader("Content-length", strContent.length);
	  AJAX.onreadystatechange = function() {responseAJAX(AJAX, targetElement);}
	  AJAX.send(strContent);
   }   
}

function AJAXPostEx(url, targetElement, oForm, responseHandler) {
   var AJAX = getXMLHTTPRequestObject();

   if (AJAX != null) {
      var i;
      var formObj = document.getElementById(oForm);
      var strContent;

	  AJAX.open('POST', addAJAXParam(url), true);

	  strContent = '';
      for (i = 0; i < formObj.elements.length; i++) {
         if (formObj.elements[i].type == 'checkbox' || formObj.elements[i].type == 'radio') {
			if (formObj.elements[i].checked) {
    		   strContent += formObj.elements[i].name + '=' + encodeURIComponent(formObj.elements[i].value);
			}
         } 
         else if (formObj.elements[i].type == 'select-multiple') {
			var optObj = formObj.elements[i].options;
			for (ii=0; ii < optObj.length; ii++) {
               if (optObj[ii].selected) {
    		      strContent += formObj.elements[i].name + '=' + encodeURIComponent(optObj[ii].value);
				  if (ii < (optObj.length -1)) {
       	             strContent = strContent + '&';
				  }
			   }
			}
         }
		 else {
	        strContent +=  formObj.elements[i].name + '=' + encodeURIComponent(formObj.elements[i].value);
	     }

         if (i < (formObj.elements.length - 1)) {
	        strContent = strContent + '&';
         }
      }

	  AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	  AJAX.setRequestHeader("Content-length", strContent.length);
	  AJAX.onreadystatechange = function() {responseAJAXEx(AJAX, targetElement, responseHandler);}
	  AJAX.send(strContent);
   }   
}


