function Map(){
    var len = 0;
    var keys = new Array();
    var values = new Array();

    this.get = function(key){
        var val = null;
        for(var i=0; i<len; i++){
            if(keys[i] == key){
                val = values[i];
                break;
            }//end if
        }//end for

        return val;
    }//end get()

    this.put = function(key, value){
        keys[len] = key;
        values[len++] = value;
    }//end put()

    this.length = function(){
        return len;
    }//end length()

    this.contains = function(key){
	var con = false;
        for(var i=0; i<len; i++){
            if(keys[i] == key){
                con = true;
                break;
            }//end if
        }//end for

	return con;
    }//end contains()

    this.remove = function(key){
        var keyArr = new Array();
        var valArr = new Array();
        var l = 0;
        for(var i=0; i<len; i++){
            if(keys[i] != key){
                keyArr[l] = keys[i];
                valArr[l++] = values[i];
            }//end if
        }//end for

        keys = keyArr;
        values = valArr;
	len = l;
    }//end remove()        

}//end Map

//AJAX main class
function AJAX(){
    var nameSpace = "http://tempuri.org/";
    var map = new Map();

    var getAJAXIdentity = function(){
        return "AJAX" + (AJAX.indentity++);
    }//end GetAJAXIdentity()
    
    //Overridden toString method.
    this.toString = function(){
        return "AJAX Framework Class";
    }//end toString()
    
    //Method for error handling.
    this.onError = function(error){
        alert(error);
    };//end onError()

    //Call a page with a callback function name.
    this.callPage = function(url, callbackFunction){
        var iframe = document.createElement("IFRAME");
        var IE = (navigator.appName.indexOf("Microsoft") >= 0);
        iframe.id = getAJAXIdentity();
        map.put(iframe.id, callbackFunction);
        
        iframe.style.display = "none";
        document.body.appendChild(iframe);
        
        if(IE){
            
            if(iframe.addEventListener){
                //Opera
                iframe.addEventListener("load", function(){
                    callbackFunction(document.frames[this.id].document.body.innerHTML);
                    this.removeNode();
                }, false);
            }
            else{
                //IE
                iframe.onreadystatechange = function(){
                    if(this.readyState == "complete"){
                        callbackFunction(document.frames[this.id].document.body.innerHTML);
                        this.removeNode();
                    }//end if
                };
            }//end tc
        }
        else{
            //Mozilla
            iframe.addEventListener("load", function(){
                callbackFunction(document.getElementById(this.id).contentDocument.body.innerHTML);
                //this.removeNode();
            }, false);
        }//end if
        
        iframe.src = url;
    };//end callPage()
	
    //Method for setting the namespace
    this.setNameSpace = function(ns){
        nameSpace = ns;
    }//end setNameSpace()
	
    //Method for returning the namespace
    this.getNameSpace = function(){
        return ns;
    }//end getNameSpace()
	
}//end AJAX()

AJAX.indentity = 0;

