var ajax = Class.extend({
    request : null,
    url:'',
    params:'',
    targetPane:'',
    afterLoaded:'',
    
    construct : function(URL) {
        this.url = URL;
        this.request = false;
    },
    
    parameters : function(paramStr) {
        this.params += paramStr;
    },
    
    formTag : function(formName) {
        var mf = document.forms[formName];
	    for (var i=0;i<mf.length; i++) {
  	        if((mf.elements[i].name!="__LASTFOCUS")&&(mf.elements[i].name!="__VIEWSTATE")&&(mf.elements[i].name!="__EVENTTARGET")&&(mf.elements[i].name!="__EVENTARGUMENT")&&(mf.elements[i].name!="__EVENTVALIDATION")) {
	  	        if (mf.elements[i].name!="") {
			        if (mf.elements[i].type=="checkbox") {
				        if (mf.elements[i].checked) {
					        this.params += mf.elements[i].name+"=1&";
				        }
			        } else if (mf.elements[i].type=="radio") {
				        if (mf.elements[i].checked) {
					        this.params += mf.elements[i].name+"="+mf.elements[i].value+"&";
				        }
			        } else if (mf.elements[i].type=="select-multiple") {
						this.params += mf.elements[i].name.replace("[]", "")+"=";
						for (var s=0; s<mf.elements[i].options.length; s++) {
							if (mf.elements[i].options[s].selected) { 
								if (mf.elements[i].options[s].value != "") {
									this.params += mf.elements[i].options[s].value+",";
								}
							}
						}
						this.params += "&";
					} else {
				        this.params += mf.elements[i].name+"="+encodeURI(mf.elements[i].value)+"&";
			        }
		        }
		    }
  	    }
    },
    
    call : function() {
        if (window.XMLHttpRequest) {
		    this.request = new XMLHttpRequest();
		    if (this.request.overrideMimeType) {
			    this.request.overrideMimeType('text/html');
		    }
	    } else if (window.ActiveXObject) { 
		    this.request = new ActiveXObject("Msxml2.XMLHTTP");
	    }
	    //
	    this.request.open("POST", this.url, true);
	    
	    var ajaxCallDelegateClass = this;
	    
 	    this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
	    this.request.onreadystatechange = function() {
	        if (ajaxCallDelegateClass.request.readyState == 4) {
	            if (ajaxCallDelegateClass.request.status == 200) {
	                
	                if (ajaxCallDelegateClass.targetPane!="") 
	                    if (ajaxCallDelegateClass.request.responseText.length > 0) 
                            document.getElementById(ajaxCallDelegateClass.targetPane).innerHTML = ajaxCallDelegateClass.request.responseText;
        				
                    ajaxCallDelegateClass.checkForUpdates(ajaxCallDelegateClass.request.responseText, 0);
        			
                    if (ajaxCallDelegateClass.afterLoaded!="") 
                        eval(ajaxCallDelegateClass.afterLoaded);
        				
			        return ajaxCallDelegateClass.request.responseText;
                } else {
                    alert("Server Too Busy...");
					page.getURL("index.php");
                }
            }
        };
	    this.request.send(this.params);
    },
    
    write : function(targetName) {
        this.targetPane = targetName;
        this.call();
    },
    
    getContent : function() {
        this.call();  
    },
    
    checkForUpdates : function(content,turn) {
        if (content.indexOf("<!--code", turn)>-1) {
            startIndex = content.indexOf("<!--code(", turn)+9;
            var theEnd = (content.indexOf(")-->", startIndex));
            finishIndex = (content.indexOf(")-->", startIndex))-startIndex;
            eval(content.substr(startIndex, finishIndex));
            this.checkForUpdates(content, theEnd);
        }
    },
    
    setAfterLoad : function(fnc) {
        this.afterLoaded = fnc;
    }
    
});
