
try{
	if(undefined==ajax.config)ajax.config={};
	}catch(e){ajax={};ajax.config={};}

ajax.config.setDefault=function(option,defaultValue){
								if(undefined==ajax.config[option])
									ajax.config[option]=defaultValue;
						}
ajax.config.setDefault('waitCursor',false);
ajax.config.setDefault('statusMessages',false);
ajax.config.setDefault('baseDocument',document);
ajax.config.setDefault('requestURI',ajax.config.baseDocument.URL);
ajax.config.setDefault('defaultMode','asynchronous');
ajax.config.setDefault('defaultHttpVersion','HTTP/1.1');
ajax.config.setDefault('defaultContentType','application/x-www-form-urlencoded');
ajax.config.setDefault('defaultResponseDelayTime',1000);
ajax.config.setDefault('defaultExpirationTime',10000);
ajax.config.setDefault('defaultMethod','POST');
ajax.config.setDefault('defaultRetry',5);
ajax.config.setDefault('defaultReturnValue',false);
ajax.config.setDefault('maxObjectDepth',20);
ajax.config.setDefault('maxObjectSize',2000);
ajax.config.status={update:function(){
										return{onRequest:function(){window.status="Sending Request...";},
												onWaiting:function(){window.status="Waiting for Response...";},
												onProcessing:function(){window.status="Processing...";},
												onComplete:function(){window.status="Done.";}
												}
								},
					dontUpdate:function(){return{onRequest:function(){},
												onWaiting:function(){},
												onProcessing:function(){},
												onComplete:function(){}
									}
					}
}

ajax.config.cursor={update:function(){
						return{onWaiting:function(){if(ajax.config.baseDocument.body)
														ajax.config.baseDocument.body.style.cursor='wait';},
							onComplete:function(){ajax.config.baseDocument.body.style.cursor='auto';}
								}
						},
					dontUpdate:function(){return{onWaiting:function(){},
												onComplete:function(){}
										}
					}
				}
ajax.tools={}

ajax.tools.$=function(sId){
						if(!sId)
							return null;
						var oDoc=ajax.config.baseDocument;
						var obj=oDoc.getElementById(sId);
						if(obj)
							return obj;
						if(oDoc.all)
							return oDoc.all[sId];
						return obj;
				}

ajax.tools.arrayContainsValue=function(array,valueToCheck){
										var i=0;
										var l=array.length;
										while(i < l){if(array[i]==valueToCheck)
												return true;
										++i;}
									return false;
								}
ajax.tools.doubleQuotes=function(haystack){return haystack.replace(new RegExp("'",'g'),'"');}
ajax.tools.singleQuotes=function(haystack){return haystack.replace(new RegExp('"','g'),"'");}
ajax.tools._escape=function(data){
					if(undefined==data)
						return '';
					if('string'!=typeof(data))
						return data;
					var needCDATA=false;
					if(encodeURIComponent(data)!=data){
							needCDATA=true;
							var segments=data.split("<![CDATA[");
							data='';
							for(var i=0;i < segments.length;++i){
								var segment=segments[i];
								var fragments=segment.split("]]>");
								segment='';
								for(var j=0;j < fragments.length;++j){if(0!=j)
								segment+=']]]]><![CDATA[>';
								segment+=fragments[j];
							}
					if(0!=i)
					data+='<![]]><![CDATA[CDATA[';data+=segment;}
				}
			if(needCDATA)
				data='<![CDATA['+data+']]>';
			return data;
		}

ajax.tools._objectToXML=function(obj,guard){
						var aXml=[];
						aXml.push("<xjxobj>");
						for(var key in obj){
							++guard.size;
							if(guard.maxSize < guard.size)
								return aXml.join('');
							if(undefined!=obj[key]){
								if("constructor"==key)
									continue;
								if("function"==typeof(obj[key]))
									continue;
								aXml.push("<e><k>");
								aXml.push(ajax.tools._escape(key));
								aXml.push("</k><v>");
								if("object"==typeof(obj[key])){
									++guard.depth;
									if(guard.maxDepth > guard.depth){
										try{aXml.push(ajax.tools._objectToXML(obj[key],guard));}catch(e){}
									}
								--guard.depth;
								}else
									aXml.push(ajax.tools._escape(obj[key]));
								aXml.push("</v></e>");
							}
					}
	aXml.push("</xjxobj>");
	return aXml.join('');
}

ajax.tools._nodeToObject=function(node){if(null==node)
											return '';
										if(undefined!=node.nodeName){
											if("#cdata-section"==node.nodeName||"#text"==node.nodeName){
												var data='';
												do 
													if(undefined!=node.data)
														data+=node.data;
												while(node=node.nextSibling);
													return data;
											}else if("xjxobj"==node.nodeName){
												var key=null;
												var value=null;
												var data=new Array;
												var child=node.firstChild;
												if(undefined!=child){
													do{if('e'==child.nodeName){
														var grandChild=child.firstChild;
														if(undefined!=grandChild){
															do{if('k'==grandChild.nodeName)
																	key=grandChild.firstChild.data;
																else('v'==grandChild.nodeName)
																	value=ajax.tools._nodeToObject(grandChild.firstChild);
															}while(grandChild=grandChild.nextSibling);
														}
														if(null!=key&&null!=value){data[key]=value;key=value=null;}
														}
													}while(child=child.nextSibling);
												}
												return data;
											}
									}
				throw{name:'Invalid XML',message:'The response contains an unknown tag: '+node.nodeName};
			}

if("undefined"!=typeof XMLHttpRequest){ajax.tools.getRequestObject=function(){return new XMLHttpRequest();}
	}else if("undefined"!=typeof ActiveXObject){ajax.tools.getRequestObject=function(){try{return new ActiveXObject("Msxml2.XMLHTTP.4.0");}catch(e){ajax.tools.getRequestObject=function(){try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e2){ajax.tools.getRequestObject=function(){return new ActiveXObject("Microsoft.XMLHTTP");}
			return ajax.tools.getRequestObject();}
			}
		return ajax.tools.getRequestObject();}
		}
	}else if(window.createRequest){ajax.tools.getRequestObject=function(){return window.createRequest();}
	}else{ajax.tools.getRequestObject=function(){throw{name:'GetRequestObject',message:'XMLHttpRequest is not available, ajax is disabled'}
												}
	}

ajax.tools.getBrowserHTML=function(sValue){
									var oDoc=ajax.config.baseDocument;
									if(!oDoc.body)
										return '';
									var elWorkspace=ajax.$('ajax_temp_workspace');
									if(!elWorkspace){
										elWorkspace=oDoc.createElement("div");
										elWorkspace.setAttribute('id','ajax_temp_workspace');
										elWorkspace.style.display="none";
										elWorkspace.style.visibility="hidden";
										oDoc.body.appendChild(elWorkspace);
									}
								
									elWorkspace.innerHTML=sValue;
									var browserHTML=elWorkspace.innerHTML;
									elWorkspace.innerHTML='';
									return browserHTML;
							}

ajax.tools.willChange=function(element,attribute,newData){
								if("string"==typeof(element))
									element=ajax.$(element);
								if(element){
									var oldData;
									eval("oldData=element."+attribute);
								return(newData!==oldData);
								}
								return false;
							}

ajax.tools.getFormValues=function(parent){
									var submitDisabledElements=false;
									if(arguments.length > 1&&arguments[1]==true)
										submitDisabledElements=true;
									var prefix="";
									if(arguments.length > 2)
										prefix=arguments[2];
									if("string"==typeof(parent))
										parent=ajax.$(parent);
									var aFormValues={};
									if(parent)
										if(parent.childNodes)
												ajax.tools._getFormValues(aFormValues,parent.childNodes,submitDisabledElements,prefix);
									return aFormValues;
							}

ajax.tools._getFormValues=function(aFormValues,children,submitDisabledElements,prefix){
									var iLen=children.length;
									for(var i=0;i < iLen;++i){
										var child=children[i];
										if(undefined!=child.childNodes)
												ajax.tools._getFormValues(aFormValues,child.childNodes,submitDisabledElements,prefix);
										ajax.tools._getFormValue(aFormValues,child,submitDisabledElements,prefix);
									}
							}

ajax.tools._getFormValue=function(aFormValues,child,submitDisabledElements,prefix){
								if(!child.name)
									return;
								if(child.disabled)
									if(true==child.disabled)
										if(false==submitDisabledElements)
											return;
								if(prefix!=child.name.substring(0,prefix.length))
									return;
								if(child.type)
									if(child.type=='radio'||child.type=='checkbox')
										if(false==child.checked)
											return;
								var name=child.name;
								var values=[];
								if('select-multiple'==child.type){
									var jLen=child.length;
									for(var j=0;j < jLen;++j){
										var option=child.options[j];
										if(true==option.selected)
											values.push(option.value);
									}
								}else{values=child.value;}
								var keyBegin=name.indexOf("[");
								if(0 <=keyBegin){
									var n=name;
									var k=n.substr(0,n.indexOf("["));
									var a=n.substr(n.indexOf("["));
									if(aFormValues[k]==undefined)
										aFormValues[k]=[];
									var p=aFormValues;
								while(a.length!=0){
									var sa=a.substr(0,a.indexOf("]")+1);
									a=a.substr(a.indexOf("]")+1);
									p=p[k];k=sa.substr(1,sa.length-2);
									if(k=="")
										k=p.length;
									if(p[k]==undefined)
										p[k]=[];
								}
								p[k]=values;
								}else{aFormValues[name]=values;}
		}

ajax.tools.stripOnPrefix=function(sEventName){
									sEventName=sEventName.toLowerCase();
									if(0==sEventName.indexOf('on'))
										sEventName=sEventName.replace(/on/,'');return sEventName;
					}

ajax.tools.addOnPrefix=function(sEventName){
								sEventName=sEventName.toLowerCase();
								if(0!=sEventName.indexOf('on'))
									sEventName='on'+sEventName;return sEventName;
						}

ajax.tools.queue={}

ajax.tools.queue.create=function(size){
								return{start:0,
										size:size,
										end:0,
										commands:[],
										timeout:null
								}
						}

ajax.tools.queue.retry=function(obj,count){
								var retries=obj.retries;
								if(retries){
									--retries;
									if(1 > retries)
										return false;
								}else retries=count;
								obj.retries=retries;
								return true;
					}
					
ajax.tools.queue.rewind=function(theQ){
								if(0 < theQ.start)
									--theQ.start;
								else
									theQ.start=theQ.size;
						}

ajax.tools.queue.setWakeup=function(theQ,when){
									if(null!=theQ.timeout){
										clearTimeout(theQ.timeout);
										theQ.timeout=null;
									}
									theQ.timout=setTimeout(function(){
																	ajax.tools.queue.process(theQ);
															},when);
							}

ajax.tools.queue.process=function(theQ){
								if(null!=theQ.timeout){
									clearTimeout(theQ.timeout);
									theQ.timeout=null;
								}
								var obj=ajax.tools.queue.pop(theQ);
								while(null!=obj){
									try{if(false==ajax.executeCommand(obj))
										return false;}catch(e){}
									obj=ajax.tools.queue.pop(theQ);
								}
							return true;
					}

ajax.tools.queue.push=function(theQ,obj){
							var next=theQ.end+1;
							if(next > theQ.size)
								next=0;
							if(next!=theQ.start){
								theQ.commands[theQ.end]=obj;
								theQ.end=next;
							}else
								throw{name:'queue overflow',message:'cannot push object onto queue because it is full'}
					}

ajax.tools.queue.pushFront=function(theQ,obj){
									ajax.tools.queue.rewind(theQ);
									theQ.commands[theQ.start]=obj;
							}

ajax.tools.queue.pop=function(theQ){
								var next=theQ.start;
								if(next==theQ.end)
									return null;
								next++;
								if(next > theQ.size)
									next=0;
								var obj=theQ.commands[theQ.start];
								theQ.commands[theQ.start]=null;
								theQ.start=next;
							return obj;
					}

ajax.responseProcessor={};
ajax.responseProcessor.xml=function(oRequest){
									var xx=ajax;
									var xt=xx.tools;
									var xcb=xx.callback;
									var gcb=xcb.global;
									var lcb=oRequest.callback;
									var oRet=oRequest.returnValue;
									var request=oRequest.request;
									var status=request.status;
									if(xt.arrayContainsValue(xx.responseSuccessCodes,status)){
										xcb.execute([gcb,lcb],'onSuccess',oRequest);
										var seq=0;
										if(request.responseXML){
											var responseXML=request.responseXML;
											if(responseXML.documentElement){
												oRequest.status.onProcessing();
												var child=responseXML.documentElement.firstChild;
												while(child){if('cmd'==child.nodeName){
													var obj={};
													obj.cmdFullName='*unknown*';
													obj.sequence=seq;
													obj.request=oRequest;
													obj.context=oRequest.context;
													xx.parseAttributes(child,obj);
													xx.parseChildren(child,obj);
													xt.queue.push(xx.response,obj);
												}else if('xjxrv'==child.nodeName){
														oRet=xt._nodeToObject(child.firstChild);
													}else if('debugmsg'==child.nodeName){}else
												throw{name:'Invalid response',message:'The response contains an unexpected tag or text: '+child.nodeName}
												++seq;child=child.nextSibling;
												}
										}
									}
								var obj={};
								obj.cmdFullName='Response Complete';
								obj.sequence=seq;
								obj.request=oRequest;
								obj.cmd='rcmplt';
								xt.queue.push(xx.response,obj);
								if(null==xx.response.timeout)
									xt.queue.process(xx.response);
							}else if(xt.arrayContainsValue(xx.responseRedirectCodes,status)){
								xcb.execute([gcb,lcb],'onRedirect',oRequest);
								window.location=request.getResponseHeader("location");
								xx.completeResponse(oRequest);
							}else if(xt.arrayContainsValue(xx.responseErrorsForAlert,status)){
										xcb.execute([gcb,lcb],'onFailure',oRequest);
										xx.completeResponse(oRequest);
								}
							return oRet;
				}

ajax.js={}

ajax.js.includeScriptOnce=function(fileName){
								var oDoc=ajax.config.baseDocument;
								var loadedScripts=oDoc.getElementsByTagName('script');
								var iLen=loadedScripts.length;
								for(var i=0;i < iLen;++i){
									var script=loadedScripts[i];
									if(script.src){
										if(0 <=script.src.indexOf(fileName))
											return true;
									}
								}
							return ajax.js.includeScript(fileName);
				}

ajax.js.includeScript=function(fileName){
								var oDoc=ajax.config.baseDocument;
								var objHead=oDoc.getElementsByTagName('head');
								var objScript=oDoc.createElement('script');
								objScript.type='text/javascript';
								objScript.src=fileName;
								objHead[0].appendChild(objScript);
							return true;
				}
				
ajax.js.removeScript=function(fileName,unload){
								var oDoc=ajax.config.baseDocument;
								var loadedScripts=oDoc.getElementsByTagName('script');
								var iLen=loadedScripts.length;
								for(var i=0;i < iLen;++i){
									var script=loadedScripts[i];
									if(script.src){
										if(0 <=script.src.indexOf(fileName)){
											if(undefined!=unload){
												var args={};
												args.data=unload;args.context=window;
												ajax.js.execute(args);
											}
											var parent=script.parentNode;parent.removeChild(script);
										}
									}
								}
						return true;
				}

ajax.js.sleep=function(args){
						if(ajax.tools.queue.retry(args,args.property)){
							ajax.tools.queue.setWakeup(ajax.response,100);
							return false;
						}
					return true;
		}

ajax.js.confirmCommands=function(msg,numberOfCommands){
								if(false==confirm(msg)){
									while(0 < numberOfCommands){
										ajax.tools.queue.pop(ajax.response);--numberOfCommands;
									}
								}
							return true;
				}

ajax.js.execute=function(args){
						args.cmdFullName='execute Javascript';
						var returnValue=true;
						args.context.ajaxDelegateCall=function(){eval(args.data);}
						args.context.ajaxDelegateCall();
						return returnValue;
			}

ajax.js.waitFor=function(args){
						args.cmdFullName='waitFor';
						var bResult=false;
						var cmdToEval='bResult = (';cmdToEval+=args.data;cmdToEval+=');';
						try{args.context.ajaxDelegateCall=function(){eval(cmdToEval);}
							args.context.ajaxDelegateCall();}catch(e){}
						if(false==bResult){
							if(ajax.tools.queue.retry(args,args.property)){
								ajax.tools.queue.setWakeup(ajax.response,100);
								return false;
							}
						}
				return true;
		}

ajax.js.call=function(args){
					args.cmdFullName='call js function';
					var parameters=args.data;
					var scr=new Array();
					scr.push(args.func);
					scr.push('(');
					if(undefined!=parameters){
						if('object'==typeof(parameters)){
							var iLen=parameters.length;
							if(0 < iLen){
								scr.push('parameters[0]');
								for(var i=1;i < iLen;++i)
									scr.push(', parameters['+i+']');
							}
						}
					}
					scr.push(');');
					args.context.ajaxDelegateCall=function(){eval(scr.join(''));}
					args.context.ajaxDelegateCall();
				return true;
		}
		
ajax.js.setFunction=function(args){
							args.cmdFullName='setFunction';
							var code=new Array();
							code.push(args.func);
							code.push(' = function(');
												   if('object'==typeof(args.property)){
													   var separator='';
													   for(var m in args.property){
														   code.push(separator);
														   code.push(args.property[m]);separator=',';
														}
													}else code.push(args.property);
							code.push(') { ');
							code.push(args.data);code.push(' }');
							args.context.ajaxDelegateCall=function(){eval(code.join(''));}
							args.context.ajaxDelegateCall();
					return true;
			}

ajax.js.wrapFunction=function(args){
							args.cmdFullName='wrapFunction';
							var code=new Array();
							code.push(args.func);
							code.push(' = ajax.js.makeWrapper(');
							code.push(args.func);
							code.push(', args.property, args.data, args.type, args.context);');
							args.context.ajaxDelegateCall=function(){eval(code.join(''));}
							args.context.ajaxDelegateCall();
					return true;
			}

ajax.js.makeWrapper=function(origFun,args,codeBlocks,returnVariable,context){
							var originalCall='';
							if(0 < returnVariable.length){
								originalCall+=returnVariable;
								originalCall+=' = ';
							}
							var originalCall='origFun(';
							originalCall+=args;
							originalCall+='); ';
							var code='wrapper = function(';
							code+=args;code+=') { ';
							if(0 < returnVariable.length){
								code+=' var ';
								code+=returnVariable;
								code+=' = null;';
							}
							var separator='';
							var bLen=codeBlocks.length;
							for(var b=0;b < bLen;++b){
								code+=separator;
								code+=codeBlocks[b];
								separator=originalCall;
							}
							if(0 < returnVariable.length){
								code+=' return ';
								code+=returnVariable;
								code+=';';
							}
							code+=' } ';
							var wrapper=null;
							context.ajaxDelegateCall=function(){eval(code);}
							context.ajaxDelegateCall();
					return wrapper;
			}

ajax.dom={}
ajax.dom.assign=function(element,property,data){
							switch(property){
								case 'innerHTML':
									element.innerHTML=data;
								break;
								case 'outerHTML':
									if(undefined==element.outerHTML){
										var r=ajax.config.baseDocument.createRange();
										r.setStartBefore(element);
										var df=r.createContextualFragment(data);
										element.parentNode.replaceChild(df,element);
									}else element.outerHTML=data;
								break;
								default:
									if(ajax.tools.willChange(element,property,data))
										eval('element.'+property+' = data;');
								break;
							}
				return true;
		}

ajax.dom.append=function(element,property,data){
							eval('element.'+property+' += data;');
						return true;
			}
			
ajax.dom.prepend=function(element,property,data){
							eval('element.'+property+' = data + element.'+property);
						return true;
			}
			
ajax.dom.replace=function(element,sAttribute,aData){
							var sSearch=aData['s'];
							var sReplace=aData['r'];
							if(sAttribute=='innerHTML')
								sSearch=ajax.tools.getBrowserHTML(sSearch);
							if("string"==typeof(element))
								element=ajax.$(element);
							eval('var txt = element.'+sAttribute);
							var bFunction=false;
							if('function'==typeof(txt)){
								txt=txt.toString();
								bFunction=true;
							}
							var start=txt.indexOf(sSearch);
							if(start >-1){
								var newTxt=[];
								while(start >-1){
									var end=start+sSearch.length;
									newTxt.push(txt.substr(0,start));
									newTxt.push(sReplace);
									txt=txt.substr(end,txt.length-end);
									start=txt.indexOf(sSearch);
								}
							newTxt.push(txt);
							newTxt=newTxt.join('');
							if(bFunction){
								eval('element.'+sAttribute+'=newTxt;');
							}else if(ajax.tools.willChange(element,sAttribute,newTxt)){
									eval('element.'+sAttribute+'=newTxt;');
								}
							}
					return true;
			}
			
ajax.dom.remove=function(element){
						if('string'==typeof(element))
							element=ajax.$(element);
						if(element&&element.parentNode&&element.parentNode.removeChild)
							element.parentNode.removeChild(element);
				return true;
		}
		
ajax.dom.create=function(objParent,sTag,sId){
						if('string'==typeof(objParent))
							objParent=ajax.$(objParent);
						objElement=ajax.config.baseDocument.createElement(sTag);
						objElement.setAttribute('id',sId);
						if(objParent)
							objParent.appendChild(objElement);
					return true;
			}
			
ajax.dom.insert=function(objSibling,sTag,sId){
						if('string'==typeof(objSibling))
							objSibling=ajax.$(objSibling);
						objElement=ajax.config.baseDocument.createElement(sTag);
						objElement.setAttribute('id',sId);
						objSibling.parentNode.insertBefore(objElement,objSibling);
				return true;
		}
		
ajax.dom.insertAfter=function(objSibling,sTag,sId){
							if('string'==typeof(objSibling))
								objSibling=ajax.$(objSibling);
							objElement=ajax.config.baseDocument.createElement(sTag);
							objElement.setAttribute('id',sId);
							objSibling.parentNode.insertBefore(objElement,objSibling.nextSibling);
					return true;
			}
			
ajax.dom.contextAssign=function(args){
								args.cmdFullName='context assign';
								var code=[];
								code.push('this.');
								code.push(args.property);
								code.push(' = data;');
								args.context.ajaxDelegateCall=function(data){eval(code.join(''));}
								args.context.ajaxDelegateCall(args.data);
						return true;
				}
				
ajax.dom.contextAppend=function(args){
								args.cmdFullName='context append';
								var code=[];
								code.push('this.');
								code.push(args.property);
								code.push(' += data;');
								args.context.ajaxDelegateCall=function(data){eval(code.join(''));}
								args.context.ajaxDelegateCall(args.data);
						return true;
				}
				
ajax.dom.contextPrepend=function(args){
								args.cmdFullName='context prepend';
								var code=[];
								code.push('this.');
								code.push(args.property);
								code.push(' = data + this.');
								code.push(args.property);
								code.push(';');
								args.context.ajaxDelegateCall=function(data){eval(code.join(''));}
								args.context.ajaxDelegateCall(args.data);
						return true;
				}
				
ajax.css={}
ajax.css.add=function(filename){
						var oDoc=ajax.config.baseDocument;
						var oHeads=oDoc.getElementsByTagName('head');
						var oHead=oHeads[0];
						var oLinks=oHead.getElementsByTagName('link');
						var found=false;
						var iLen=oLinks.length;
						for(var i=0;i < iLen&&false==found;++i)
							if(0 < oLinks[i].href.indexOf(filename))
								found=true;
						if(false==found){
							var oCSS=oDoc.createElement('link');
							oCSS.rel='stylesheet';
							oCSS.type='text/css';
							oCSS.href=filename;
							oHead.appendChild(oCSS);
						}
				return true;
		}
		
ajax.css.remove=function(filename){
						var oDoc=ajax.config.baseDocument;
						var oHeads=oDoc.getElementsByTagName('head');
						var oHead=oHeads[0];
						var oLinks=oHead.getElementsByTagName('link');
						var i=0;
						while(i < oLinks.length)
							if(0 <=oLinks[i].href.indexOf(filename))
								oHead.removeChild(oLinks[i]);
							else++i;
				return true;
		}
		
ajax.css.waitForCSS=function(args){
							var oDocSS=ajax.config.baseDocument.styleSheets;
							var ssEnabled=[];
							var iLen=oDocSS.length;
							for(var i=0;i < iLen;++i){
								ssEnabled[i]=0;
								try{ssEnabled[i]=oDocSS[i].cssRules.length;}catch(e){
									try{ssEnabled[i]=oDocSS[i].rules.length;}catch(e){}
									}
							}
							var ssLoaded=true;
							var iLen=ssEnabled.length;
							for(var i=0;i < iLen;++i)
								if(0==ssEnabled[i])
									ssLoaded=false;
							if(false==ssLoaded){
								if(ajax.tools.queue.retry(args,args.property)){
									ajax.tools.queue.setWakeup(ajax.response,10);
									return false;
								}
							}
					return true;
			}

ajax.forms={}
			if(undefined==window.addEventListener){
				ajax.forms.getInput=function(type,name,id){
											return ajax.config.baseDocument.createElement('<input type="'+type+'" name="'+name+'" id="'+id+'">');
									}
			}else{ajax.forms.getInput=function(type,name,id){
											var oDoc=ajax.config.baseDocument;
											var Obj=oDoc.createElement('input');
											Obj.setAttribute('type',type);
											Obj.setAttribute('name',name);
											Obj.setAttribute('id',id);
										return Obj;
								}
			}

ajax.forms.createInput=function(objParent,sType,sName,sId){
								if('string'==typeof(objParent))
									objParent=ajax.$(objParent);
								var objElement=ajax.forms.getInput(sType,sName,sId);
								if(objParent&&objElement)
									objParent.appendChild(objElement);
						return true;
				}

ajax.forms.insertInput=function(objSibling,sType,sName,sId){
								if('string'==typeof(objSibling))
									objSibling=ajax.$(objSibling);
								var objElement=ajax.forms.getInput(sType,sName,sId);
								if(objElement&&objSibling&&objSibling.parentNode)
									objSibling.parentNode.insertBefore(objElement,objSibling);
						return true;
				}
				
ajax.forms.insertInputAfter=function(objSibling,sType,sName,sId){
									if('string'==typeof(objSibling))
										objSibling=ajax.$(objSibling);
									var objElement=ajax.forms.getInput(sType,sName,sId);
									if(objElement&&objSibling&&objSibling.parentNode)
										objSibling.parentNode.insertBefore(objElement,objSibling.nextSibling);
							return true;
					}
ajax.events={}
ajax.events.setEvent=function(element,event,code){
								if('string'==typeof element)
									element=ajax.$(element);
								event=ajax.tools.addOnPrefix(event);
								code=ajax.tools.doubleQuotes(code);
								eval('element.'+event+' = function() { '+code+'; }');
						return true;
				}

	if(window.addEventListener){
		ajax.events.addHandler=function(element,event,fun){
										if('string'==typeof element)
											element=ajax.$(element);
										event=ajax.tools.stripOnPrefix(event);
										eval('element.addEventListener("'+event+'", '+fun+', false);');
									return true;
								}
	}else{
		ajax.events.addHandler=function(element,event,fun){
											if('string'==typeof element)
												element=ajax.$(element);
											event=ajax.tools.addOnPrefix(event);
											eval('element.attachEvent("'+event+'", '+fun+', false);');
									return true;
								}
	}

	if(window.addEventListener){
		ajax.events.removeHandler=function(element,event,fun){
											if('string'==typeof element)
												element=ajax.$(element);
											event=ajax.tools.stripOnPrefix(event);
											eval('element.removeEventListener("'+event+'", '+fun+', false);');
										return true;
								}
	}else{
		ajax.events.removeHandler=function(element,event,fun){
											if('string'==typeof element)
												element=ajax.$(element);
											event=ajax.tools.addOnPrefix(event);
											eval('element.detachEvent("'+event+'", '+fun+', false);');
										return true;
								}
	}

ajax.callback={}

ajax.callback.create=function(){
								var xx=ajax;
								var xc=xx.config;
								var xcb=xx.callback;
								var oCB={}
								oCB.timers={};
								oCB.timers.onResponseDelay=xcb.setupTimer((arguments.length > 0)? arguments[0]:xc.defaultResponseDelayTime);
								oCB.timers.onExpiration=xcb.setupTimer((arguments.length > 1)? arguments[1]:xc.defaultExpirationTime);
								oCB.onRequest=null;
								oCB.onResponseDelay=null;
								oCB.onExpiration=null;
								oCB.beforeResponseProcessing=null;
								oCB.onFailure=null;
								oCB.onRedirect=null;
								oCB.onSuccess=null;
								oCB.onComplete=null;
						return oCB;
				}
				
ajax.callback.setupTimer=function(iDelay){
									return{timer:null,delay:iDelay};
							}
							
ajax.callback.clearTimer=function(oCallback,sFunction){
									if(undefined!=oCallback.timers){
										if(undefined!=oCallback.timers[sFunction]){
											clearTimeout(oCallback.timers[sFunction].timer);
										}
									}else if('object'==typeof oCallback){
												var iLen=oCallback.length;
												for(var i=0;i < iLen;++i)
													ajax.callback.clearTimer(oCallback[i],sFunction);
											}
							}

ajax.callback.execute=function(oCallback,sFunction,args){
								if(undefined!=oCallback[sFunction]){
									var func=oCallback[sFunction];
									if(undefined!=oCallback.timers[sFunction]){
										oCallback.timers[sFunction].timer=setTimeout(function(){func(args);},oCallback.timers[sFunction].delay);
									}
									else{func(args);}
								}else if('object'==typeof oCallback){
										var iLen=oCallback.length;
										for(var i=0;i < iLen;++i)
											ajax.callback.execute(oCallback[i],sFunction,args);
									}
						}
						
ajax.callback.global=ajax.callback.create();
ajax.response=ajax.tools.queue.create(1000);
ajax.responseSuccessCodes=['0','200'];
ajax.responseErrorsForAlert=['400','401','402','403','404','500','501','502','503'];
ajax.responseRedirectCodes=['301','302','307'];
if(undefined==ajax.commands)
	ajax.commands=[];
ajax.commands['rcmplt']=function(args){
								ajax.completeResponse(args.request);
							return true;
					}
					
ajax.commands['css']=function(args){
								args.cmdFullName='includeCSS';
							return ajax.css.add(args.data);
					}

ajax.commands['rcss']=function(args){
								args.cmdFullName='removeCSS';
							return ajax.css.remove(args.data);
					}

ajax.commands['wcss']=function(args){
								args.cmdFullName='waitForCSS';
							return ajax.css.waitForCSS(args);
					}

ajax.commands['as']=function(args){
								args.cmdFullName='assign/clear';
								try{return ajax.dom.assign(args.objElement,args.property,args.data);}catch(e){}
							return true;
					}

ajax.commands['ap']=function(args){
							args.cmdFullName='append';
						return ajax.dom.append(args.objElement,args.property,args.data);
				}

ajax.commands['pp']=function(args){
							args.cmdFullName='prepend';
						return ajax.dom.prepend(args.objElement,args.property,args.data);
				}

ajax.commands['rp']=function(args){
							args.cmdFullName='replace';
						return ajax.dom.replace(args.id,args.property,args.data);
				}
				
ajax.commands['rm']=function(args){
							args.cmdFullName='remove';
						return ajax.dom.remove(args.id);
				}
				
ajax.commands['ce']=function(args){
							args.cmdFullName='create';
						return ajax.dom.create(args.id,args.data,args.property);
				}

ajax.commands['ie']=function(args){
							args.cmdFullName='insert';
						return ajax.dom.insert(args.id,args.data,args.property);
				}
				
ajax.commands['ia']=function(args){
							args.cmdFullName='insertAfter';
						return ajax.dom.insertAfter(args.id,args.data,args.property);
				}
				
ajax.commands['c:as']=ajax.dom.contextAssign;
ajax.commands['c:ap']=ajax.dom.contextAppend;
ajax.commands['c:pp']=ajax.dom.contextPrepend;
ajax.commands['s']=function(args){
								args.cmdFullName='sleep';
							return ajax.js.sleep(args);
					}

ajax.commands['ino']=function(args){
								args.cmdFullName='includeScriptOnce';
							return ajax.js.includeScriptOnce(args.data);
					}

ajax.commands['in']=function(args){
								args.cmdFullName='includeScript';
							return ajax.js.includeScript(args.data);
					}
					
ajax.commands['rjs']=function(args){
								args.cmdFullName='removeScript';
								if('object'==typeof args.data){
									if(2==args.data.length)
										return ajax.js.removeScript(args.data[0],args.data[1]);
									else
										return ajax.js.removeScript(args.data[0]);
								}else
									return ajax.js.removeScript(args.data);
					}

ajax.commands['wf']=ajax.js.waitFor;
ajax.commands['js']=ajax.js.execute;
ajax.commands['jc']=ajax.js.call;
ajax.commands['sf']=ajax.js.setFunction;
ajax.commands['wpf']=ajax.js.wrapFunction;
ajax.commands["al"]=function(args){
							args.cmdFullName="alert";
							alert(args.data);
						return true;
				}
				
ajax.commands["cc"]=function(args){
							args.cmdFullName="confirmCommands";
						return ajax.js.confirmCommands(args.data,args.id);
				}
				
ajax.commands["ci"]=function(args){
								args.cmdFullName="createInput";
							return ajax.forms.createInput(args.id,args.type,args.data,args.property);
					}
					
ajax.commands["ii"]=function(args){
							args.cmdFullName="insertInput";
						return ajax.forms.insertInput(args.id,args.type,args.data,args.property);
				}
				
ajax.commands["iia"]=function(args){
							args.cmdFullName="insertInputAfter";
						return ajax.forms.insertInputAfter(args.id,args.type,args.data,args.property);
				}
				
ajax.commands["ev"]=function(args){
							args.cmdFullName="addEvent";
						return ajax.events.setEvent(args.id,args.property,args.data);
				}

ajax.commands["ah"]=function(args){
							args.cmdFullName="addHandler";
						return ajax.events.addHandler(args.id,args.property,args.data);
				}
				
ajax.commands["rh"]=function(args){
							args.cmdFullName="removeHandler";
						return ajax.events.removeHandler(args.id,args.property,args.data);
				}

ajax.commands['dbg']=function(args){
							args.cmdFullName='debug message';
						return true;
				}

ajax.initializeRequest=function(oRequest){
							oRequest.set=function(option,defaultValue){
												if(undefined==this[option])
													this[option]=defaultValue;}
												var xx=ajax;
												var xc=xx.config;
												oRequest.set('statusMessages',xc.statusMessages);
												oRequest.set('waitCursor',xc.waitCursor);
												oRequest.set('mode',xc.defaultMode);
												oRequest.set('method',xc.defaultMethod);
												oRequest.set('URI',xc.requestURI);
												oRequest.set('httpVersion',xc.defaultHttpVersion);
												oRequest.set('contentType',xc.defaultContentType);
												oRequest.set('retry',xc.defaultRetry);
												oRequest.set('returnValue',xc.defaultReturnValue);
												oRequest.set('maxObjectDepth',xc.maxObjectDepth);
												oRequest.set('maxObjectSize',xc.maxObjectSize);
												oRequest.set('context',window);
												var xcb=xx.callback;
												var gcb=xcb.global;
												var lcb=xcb.create();
												lcb.take=function(frm,opt){
																if(undefined!=frm[opt]){
																	lcb[opt]=frm[opt];
																	lcb.hasEvents=true;
																}
																frm[opt]=undefined;
														}
												lcb.take(oRequest,'onRequest');
												lcb.take(oRequest,'onResponseDelay');
												lcb.take(oRequest,'onExpiration');
												lcb.take(oRequest,'beforeResponseProcessing');
												lcb.take(oRequest,'onFailure');
												lcb.take(oRequest,'onRedirect');
												lcb.take(oRequest,'onSuccess');
												lcb.take(oRequest,'onComplete');
												if(undefined!=oRequest.callback){
													if(lcb.hasEvents)
														oRequest.callback=[oRequest.callback,lcb];
												}else
													oRequest.callback=lcb;

												oRequest.status=(oRequest.statusMessages) ? xc.status.update():xc.status.dontUpdate();
												oRequest.cursor=(oRequest.waitCursor) ? xc.cursor.update():xc.cursor.dontUpdate();
												oRequest.method=oRequest.method.toLowerCase();

												if('get'!=oRequest.method)
													oRequest.method='POST';
												oRequest.requestRetry=oRequest.retry;
												if(undefined==oRequest.URI)
													throw{name:'Invalid request',message:'Missing URI; autodetection failed; please specify a one explicitly.'}
					}
					
ajax.processParameters=function(oRequest){
								var xx=ajax;
								var xt=xx.tools;
								var rd=[];
								var separator='';
								for(var sCommand in oRequest.functionName){
									if('constructor'!=sCommand){
										rd.push(separator);
										rd.push(sCommand);
										rd.push("=");
										rd.push(encodeURIComponent(oRequest.functionName[sCommand]));
										separator='&';
									}
								}
								rd.push("&xjxr=");
								rd.push(new Date().getTime());
								if(oRequest.parameters){
									var i=0;
									var iLen=oRequest.parameters.length;
									while(i < iLen){
										var oVal=oRequest.parameters[i];
										if("object"==typeof(oVal)){
											try{oVal=xt._objectToXML(oVal,{depth:0, maxDepth:oRequest.maxObjectDepth, size:0, maxSize:oRequest.maxObjectSize });}catch(e){oVal='';}
										}else
											oVal=xt._escape(oVal);
										rd.push("&xjxargs[]=");
										rd.push(encodeURIComponent(oVal));++i;
									}
								}

								oRequest.requestURI=oRequest.URI;

								if('get'==oRequest.method){
									oRequest.requestURI+=oRequest.requestURI.indexOf('?')==-1 ? '?':'&';
									oRequest.requestURI+=rd.join('');rd=[];
								}
								oRequest.requestData=rd.join('');
				}
				
ajax.prepareRequest=function(oRequest){
							var xx=ajax;
							var xt=xx.tools;
							oRequest.request=xt.getRequestObject();
							oRequest.setCommonRequestHeaders=function(){
																	this.request.setRequestHeader('If-Modified-Since','Sat, 1 Jan 2000 00:00:00 GMT');
															}
							if('asynchronous'==oRequest.mode){
								oRequest.request.onreadystatechange=function(){
																			if(oRequest.request.readyState!=4)
																				return;
																			ajax.responseReceived(oRequest);
																}
								oRequest.finishRequest=function(){return this.returnValue;}
							}else{oRequest.finishRequest=function(){return ajax.responseReceived(oRequest);}
								}

							if(undefined!=oRequest.userName&&undefined!=oRequest.password){
								oRequest.open=function(){
													this.request.open(this.method, this.requestURI, 'asynchronous'==this.mode, oRequest.userName, oRequest.password);
											}
							}else{oRequest.open=function(){
														this.request.open(this.method, this.requestURI, 'asynchronous'==this.mode);
												}
								}

							if('POST'==oRequest.method){
								oRequest.setRequestHeaders=function(){
																this.setCommonRequestHeaders();
																try{this.request.setRequestHeader('User-Agent','ajax 0.5 beta 3');
																	this.request.setRequestHeader('content-type',this.contentType);}
																catch(e){this.method='get';
																		this.requestURI+=this.requestURI.indexOf('?')==-1 ? '?':'&';
																		this.requestURI+=this.requestData;
																		this.requestData='';
																		if(0==this.requestRetry)
																			this.requestRetry=1;
																	throw e;}
														}
							}else{oRequest.setRequestHeaders=oRequest.setCommonRequestHeaders;}
			}

ajax.request=function(){
					var numArgs=arguments.length;

					if(0==numArgs)
						return false;
					var oRequest={}
					if(1 < numArgs)
						oRequest=arguments[1];

					oRequest.functionName=arguments[0];

					var xx=ajax;
					xx.initializeRequest(oRequest);
					xx.processParameters(oRequest);

					while(0 < oRequest.requestRetry){
							try{--oRequest.requestRetry;
								xx.prepareRequest(oRequest);
								return xx.submitRequest(oRequest);
							}catch(e){ajax.callback.execute([ajax.callback.global,oRequest.callback], 'onFailure',oRequest);
										if(0==oRequest.requestRetry)
											throw e;}
					}
		}

ajax.call=function(){
					var numArgs=arguments.length;
					if(0==numArgs)
						return false;
					var oRequest={}
					if(1 < numArgs)
						oRequest=arguments[1];
					oRequest.functionName={xjxfun:arguments[0]};

					var xx=ajax;
					xx.initializeRequest(oRequest);
					xx.processParameters(oRequest);
					while(0 < oRequest.requestRetry){
						try{--oRequest.requestRetry;
							xx.prepareRequest(oRequest);
							return xx.submitRequest(oRequest);
						}catch(e){ajax.callback.execute([ajax.callback.global,oRequest.callback],'onFailure',oRequest);
						if(0==oRequest.requestRetry)
							throw e;}
					}
			}

ajax.submitRequest=function(oRequest){
							oRequest.status.onRequest();
							var xcb=ajax.callback;
							var gcb=xcb.global;
							var lcb=oRequest.callback;
							xcb.execute([gcb,lcb],'onResponseDelay',oRequest);
							xcb.execute([gcb,lcb],'onExpiration',oRequest);
							xcb.execute([gcb,lcb],'onRequest',oRequest);
							oRequest.open();
							oRequest.setRequestHeaders();
							oRequest.cursor.onWaiting();
							oRequest.status.onWaiting();
							ajax._internalSend(oRequest);
							return oRequest.finishRequest();
				}
				
ajax._internalSend=function(oRequest){
							oRequest.request.send(oRequest.requestData);
				}

ajax.abortRequest=function(oRequest){
							oRequest.aborted=true;
							oRequest.request.abort();
							ajax.completeResponse(oRequest);
				}

ajax.responseReceived=function(oRequest){
							var xx=ajax;
							var xcb=xx.callback;
							var gcb=xcb.global;
							var lcb=oRequest.callback;
							if(oRequest.aborted)
								return;
							xcb.clearTimer([gcb,lcb],'onExpiration');
							xcb.clearTimer([gcb,lcb],'onResponseDelay');
							xcb.execute([gcb,lcb],'beforeResponseProcessing',oRequest);
							var fProc=xx.getResponseProcessor(oRequest);
							if(undefined==fProc){
								xcb.execute([gcb,lcb],'onFailure',oRequest);
								xx.completeResponse(oRequest);
								return;
							}
						return fProc(oRequest);
				}

ajax.getResponseProcessor=function(oRequest){
								var fProc;
								if(undefined==oRequest.responseProcessor){
									var cTyp=oRequest.request.getResponseHeader('content-type');
									if(cTyp){
										if(0 <=cTyp.indexOf('text/xml')){
											fProc=ajax.responseProcessor.xml;
										}
									}
								}else 
									fProc=oRequest.responseProcessor;
							return fProc;
					}

ajax.parseAttributes=function(child,obj){
								var iLen=child.attributes.length;
								for(var i=0;i < iLen;++i){
									var attr=child.attributes[i];
									switch(attr.name){
										case "n":
											obj.cmd=attr.value;
										break;
										case "t":
											obj.id=attr.value;
										break;
										case "p":
											obj.property=attr.value;
										break;
										case "c":
											obj.type=attr.value;
										break;
										case "f":
											obj.func=attr.value;
										break;
									}
								}
				}

ajax.parseChildren=function(child,obj){
							obj.data='';
							if(0 < child.childNodes.length){
								if(1 < child.childNodes.length){
									var grandChild=child.firstChild;
									do{
										if('#cdata-section'==grandChild.nodeName||'#text'==grandChild.nodeName){
											obj.data+=grandChild.data;
										}
									}while(grandChild=grandChild.nextSibling);
								}else{
									var grandChild=child.firstChild;
									if('xjxobj'==grandChild.nodeName){
										obj.data=ajax.tools._nodeToObject(grandChild);
									}else if('#cdata-section'==grandChild.nodeName||'#text'==grandChild.nodeName){
											obj.data=grandChild.data;
											}
								}
							}else if(undefined!=child.data){obj.data=child.data;}
			}

ajax.executeCommand=function(obj){
							if(ajax.commands[obj.cmd]){
								if(obj.id)
									obj.objElement=ajax.$(obj.id);
								if(false==ajax.commands[obj.cmd](obj)){
									ajax.tools.queue.pushFront(ajax.response,obj);
									return false;
								}
							}
						return true;
				}

ajax.completeResponse=function(oRequest){
								ajax.callback.execute([ajax.callback.global,oRequest.callback],'onComplete',oRequest);
								oRequest.cursor.onComplete();
								oRequest.status.onComplete();
								oRequest.requestData=undefined;
								oRequest.requestURI=undefined;
								oRequest.request=undefined;
								oRequest.open=undefined;
								oRequest.setCommonRequestHeaders=undefined;
								oRequest.setRequestHeaders=undefined;
								oRequest.finishRequest=undefined;
						}

ajax.$=ajax.tools.$;
ajax.getFormValues=ajax.tools.getFormValues;
ajax.isLoaded=true;
xjx={}
xjx.$=ajax.tools.$;
xjx.getFormValues=ajax.tools.getFormValues;
xjx.call=ajax.call;
xjx.request=ajax.request;