var zHTTP_Req = false;

function isAlien(a) {
   return isObject(a) && typeof a.constructor != 'function';
}

function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isBoolean(a) {
    return typeof a == 'boolean';
}

function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isfunction(v)) {
                return false;
            }
        }
    }
    return true;
}

function isfunction(a) {
    return typeof a == 'function';
}

function isNull(a) {
    return typeof a == 'object' && !a;
}

function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}

function isObject(a) {
    return (a && typeof a == 'object') || isfunction(a);
}

function isString(a) {
    return typeof a == 'string';
}

function isUndefined(a) {
    return typeof a == 'undefined';
} 

function trimField(a)
{ a.value = a.value.trim();	 }


String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

String.prototype.capitalize = function(){ //v1.0
    return this.replace(/\w+/g, function(a){
        return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
    });
};

String.prototype.swapcase = function(){
	return this.replace(/([a-z])|([A-Z])/g,function($0,$1,$2){
		return ($1) ? $0.toUpperCase() : $0.toLowerCase()
	})
}

function getAttribValueByPath(docElement,path,attrib) {

	var returnValue = "";
	
        if(!isObject(docElement)){
          	return returnValue;
        } 
        
        var  elem= docElement.selectSingleNode(path);
        if(!isObject(elem)){
        	elem= docElement.selectSingleNode(path.toUpperCase());
        	if(!isObject(elem)){
          		return returnValue;
          	}
        } 
        

        var attr = elem.attributes;
        if(!isObject(attr)){
          	return returnValue;
        } 

        var valueNode = attr.getNamedItem(attrib);
        if(!isObject(valueNode)){        
          	return returnValue;
        } 
        
        returnValue = valueNode.nodeValue;
        return returnValue;
	
}


function getParamValueFromDoc(docElement,param) {

	var returnValue = "";
	
        if(!isObject(docElement)){
        	//alert("doc");
          	return returnValue;
        } 
        
        var  elem= docElement.getElementsByTagName(param)[0];
        if(!isObject(elem)){
        	//alert("elem");
          	return returnValue;
        } 
        
        var child = elem.childNodes[0];
        if(!isObject(child)){ 
        	//alert("child");
          	return returnValue;
        } 

        var attr = child.attributes;
        if(!isObject(attr)){
        	//alert("attr");
          	return returnValue;
        } 

        var valueNode = attr.getNamedItem("value");
        if(!isObject(valueNode)){        
          	return returnValue;
        } 
        
        returnValue = valueNode.nodeValue;
        return returnValue;
	
}

function getAttribValueFromElement(docElement,param) {

	var returnValue = "";
	var entry = docElement.getElementsByTagName(param);
	if(entry.length > 0) {
		var param = entry[0].getElementsByTagName("param");
		if(param.length > 0)
			returnValue = param[0].getAttribute("value");
	}
    return returnValue;
}


function traverseExample() {
	var xmlDoc = loadXmlDocFile('t2.xml');
	var doc=xmlDoc.documentElement;
	traverse(doc);
}

function traverse(tree) {
	//tree = xmlDoc.documentElement;
    if(tree.hasChildNodes()) {
        document.write('<ul><li>');
        document.write('<b>'+tree.tagName+' : </b>');
        var nodes=tree.childNodes.length;
        for(var i=0; i<tree.childNodes.length; i++)
            traverse(tree.childNodes(i));
        document.write('</li></ul>');
    } else {
        document.write(tree.text);
    }
}

function loadXmlDocString(xmlString){
	var xmlDoc=getXmlDomObj();
	if (xmlDoc){
	    xmlDoc.async="false";
	    xmlDoc.onreadystatechange=function(){
			if (xmlDoc.readyState == 4) {
				return true;
			} else {
				return false;
			}
	    }
	    xmlDoc.loadXML(xmlString);
	}
	return xmlDoc;
}

function loadXmlDocFile(xmlFile){
	var xmlDoc=getXmlDomObj();
	if (xmlDoc){
	    xmlDoc.async="false";
	    xmlDoc.onreadystatechange=function(){
			if (xmlDoc.readyState == 4) {
				return true;
			} else {
				return false;
			}
	    }
	    xmlDoc.load(xmlFile);
	}
	return xmlDoc;
}

function getXmlDomObj(){
	var xmlObj=false;
	if (window.ActiveXObject){
		try{
		xmlObj = new ActiveXObject("Microsoft.XMLDOM");
		}catch(e){
		}
	}
	return xmlObj;
}

// AjaxAsynch class
function AjaxAsynch() {
}

function AjaxRequestObj(){
  var zHRObj=false;
  if (window.XMLHttpRequest) {
    zHRObj = new XMLHttpRequest();
    if (zHRObj.overrideMimeType) {
      zHRObj.overrideMimeType("text/xml");
    }
  }else if (window.ActiveXObject){
    try{
    zHRObj = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
      try{
      zHRObj = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {}
    }
  }
  return zHRObj;
}


function AjaxAsynch_call(url) {
	var instance = this;
	zHTTP_Req=AjaxRequestObj();
	if (!zHTTP_Req) {
		alert("Invalid Request Object(AJAX Error 02)");
		return false;
	}

	zHTTP_Req.onreadystatechange = function(){
		switch (zHTTP_Req.readyState) {
			case 1: instance.loading(); break;
			case 2: instance.loaded(); break;
			case 3: instance.intractive(); break;
			case 4: instance.complete(zHTTP_Req.status, zHTTP_Req.statusText,zHTTP_Req.responseText, zHTTP_Req.responseXML); break;
		}
	}
	zHTTP_Req.open("GET", url, true);
	zHTTP_Req.send(null);
}

function AjaxAsynch_post(url, params) {
	var instance = this;
	zHTTP_Req=AjaxRequestObj();
	if (!zHTTP_Req) {
		alert("Invalid Request Object(AJAX Error 02)");
		return false;
	}

	zHTTP_Req.onreadystatechange = function(){
		switch (zHTTP_Req.readyState) {
			case 1: instance.loading(); break;
			case 2: instance.loaded(); break;
			case 3: instance.intractive(); break;
			case 4: instance.complete(zHTTP_Req.status, zHTTP_Req.statusText,zHTTP_Req.responseText, zHTTP_Req.responseXML); break;
		}
	}
	zHTTP_Req.open("POST", url, true);
	zHTTP_Req.send(params);
}

function AjaxAsynch_loading() {}
function AjaxAsynch_loaded() {}
function AjaxAsynch_intractive() {}
function AjaxAsynch_complete() {}

AjaxAsynch.prototype.loading = AjaxAsynch_loading;
AjaxAsynch.prototype.loaded = AjaxAsynch_loaded;
AjaxAsynch.prototype.intractive = AjaxAsynch_intractive;
AjaxAsynch.prototype.complete = AjaxAsynch_complete;
AjaxAsynch.prototype.call = AjaxAsynch_call;
AjaxAsynch.prototype.post = AjaxAsynch_post;

// end of class AjaxAsynch
