/* Author: Jack Tang
 1) getElementsByClassName
 2) Class manipulation functions
 3) AJAX Get/POST request
 4) Build Query/Post from form
 5) Form Limit/Check Chars
 Last updated: Apr 17th, 2010
*/

/*
  getElementsByClassName function if the web browser doesnt alreayd support it
*/
if (document.getElementsByClassName == undefined) {
	document.getElementsByClassName = function(className)
	{
		var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
		var allElements = document.getElementsByTagName("*");
		var results = [];

		var element;
		for (var i = 0; (element = allElements[i]) != null; i++) {
			var elementClass = element.className;
			if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
				results.push(element);
		}

		return results;
	}
}

/* ====================================================================================================================
  Class manipulation functions
*/
function hasClass(ele,cls) {
//alert(ele.className);
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
//alert('1:'+ele.className);
	if (hasClass(ele,cls)) {
//alert(ele.className);
		var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
//alert(ele.className);
	}
}


/* ====================================================================================================================
  AJAX Get/POST request
*/
var http_request = false;
function http_Page(rqtype,url) {
   http_request = false;
   if (window.XMLHttpRequest) { // Mozilla, Safari,...
      http_request = new XMLHttpRequest();
      if (http_request.overrideMimeType) {
      	// set type accordingly to anticipated content type
         //http_request.overrideMimeType('text/xml');
         http_request.overrideMimeType('text/html');
      }
   } else if (window.ActiveXObject) { // IE
      try {
         http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
         try {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (e) {}
      }
   }
   if (!http_request) {
      alert('Cannot create XMLHTTP instance');
      ajaxhttp.error('-1');
      return false;
   }
   http_request.onreadystatechange = http_PageDone;
   if (rqtype.toLowerCase()=='get'){
    http_request.open('GET', url, true);
    http_request.send(null);
   } else {
    http_request.open('POST', url, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
   }
}

function http_PageDone() {
   if (http_request.readyState == 4) {
      ajaxhttp.complete(http_request.status,http_request.responseText);
      if (http_request.status == 200) {
         //alert(http_request.responseText);
        ajaxhttp.ok(http_request.responseText);
      } else {
	ajaxhttp.error(http_request.status);
         //alert('There was a problem with the request.');
      }
   }
}

var ajaxhttp = {
	get:function(url){http_Page('get',url)},
	post:function(url){http_Page('post',url)},
	complete:function(errorCode){	},
	ok:function(errorCode){	},
	error:function(errorCode){	}
}

/* ====================================================================================================================
  Build Query/Post from form
*/
function buildQueryStr(formname) {
var theForm = document.forms[formname];
var PostText = "";
var amp = "";
for(i=0; i<theForm.elements.length; i++){
if(theForm.elements[i].type == "text" || theForm.elements[i].type == "textarea" || theForm.elements[i].type == "hidden"){
PostText += amp+theForm.elements[i].name+"="+encodeURIComponent(theForm.elements[i].value);
} else if (theForm.elements[i].type == "checkbox") {
PostText += amp+theForm.elements[i].name+"="+theForm.elements[i].checked;
} else if (theForm.elements[i].type == "select-one") {
PostText += amp+theForm.elements[i].name+"="+theForm.elements[i].options[theForm.elements[i].selectedIndex].text;
}
amp = "&";
}
return PostText;
}

/* ====================================================================================================================
  Form Limit Chars
*/
function limitfrmChars(t,v){
var w = "";
for (i=0; i < t.value.length; i++) {
x = t.value.charAt(i);
if (v.indexOf(x,0) != -1)
w += x;
}
t.value = w;
}
// True is invalid chars
function checkChars(str,v){
var w = "";
for (i=0; i < str.length; i++) {
if (v.indexOf(str.charAt(i),0) == -1)
 return true;
}
return false;
}
function checkLength(str,minlen,maxlen){
 if (str.length < minlen || str.length > maxlen) return true;
 return false;
}

