var SERVER_URL=location.protocol+'//'+location.host;
var JSERVER_URL=SERVER_URL+'/jserver/jserver.php';
var JDATA_URL=SERVER_URL+'/jserver/data/';
var WATCH_URL=SERVER_URL+'/jserver/watch/';
var IMAGES_URL=location.protocol+'//images.'+location.host;
var WATCH_DEFAULT_INTERVAL=(30*1000);
var LAST_AJAX_STATUS=null;
var AJAX_DO_PING=false;
var AJAX_DUMP_XML=false;
var AJAX_CONTENT_TYPE_HTML='text/html';
var AJAX_CONTENT_TYPE_XML='text/xml';
var AJAX_CONTENT_TYPE_JSON='application/json';
var AJAX_EVENT_FORM_NEXT='form_next';
var AJAX;
var PAJAX;
var AJAX_QUEUE=new Array();
var HANDLER=false;


function AjaxPacket(action,extras){
	if(action==null){
		return err('Missing req. action');
	}
	this.action=action;
	this.params={
		action:action,type:AJAX_CONTENT_TYPE_XML,arid:1,extra:new Array()
	};
	this.raw='action='+action;
	this.pcount=1;
	this.add=AjaxPacket__add;
	this.toString=AjaxPacket__toString;
		if(extras!=null){
			for(var i=0;
				i<extras.length;
				i++){
					var val=extras[(i+1)];
					this.add(extras[i],val);
					i++;

				}
			}
		};
		function AjaxPacket__add(key,value){
			if(!pcheck(new Array('key',key,'value',value)))return false;
			try{
				if(this.pcount!=0){
					this.raw+='&';
					this.pcount++;

					}this.raw+=key+'='+value;

				}catch(e){
					return fail(e);

					}return true;

				};
				function AjaxPacket__toString(){
					return this.raw;

				};
				function AjaxWizard(){
					this.OBJECTNAME='AjaxWizard';
					this.url=JSERVER_URL;
					this.xmlobj=null;
					this.alive=false;
					this.success=false;
					this.http_code=0;
					this.async=true;
					this.content_type=AJAX_CONTENT_TYPE_XML;
					this.action=false;
					this.data=false;
					this.packet=false;
					this.data_type='xml';
					this.request_type='GET';
					this.passParsed=false;
					this.pending=new Bucket();
					this.status=null;
					this.code=null;
					this.msg=null;
					this.seq=null;
					this.host=null;
					this.more=false;
					this.brief=null;
					this.full=null;
					this.handleResponse=AjaxWizard__handleResponse;
					this.handleError=AjaxWizard__handleError;
					this.send=AjaxWizard__send;
					this.request=AjaxWizard__request;
					this.getMsg=AjaxWizard__getMsg;
					this.ping=AjaxWizard__ping;
					this.wait=AjaxWizard__wait;
					this.__addRequest=AjaxWizard__addRequest;
					this.__doneRequest=AjaxWizard__doneRequest;
				};
					function AjaxWizard__addRequest(){
						var seq=false;
						var min=1;
						var max=9000;
						seq=AJAX_QUEUE.length+1;
						AJAX_QUEUE[seq]=true;
						return seq;

					};
					function AjaxWizard__doneRequest(seq){
						if(!pcheck(new Array('seq',seq))){
							return false;

						}try{
							log('Searching for seq: '+seq);
							if(AJAX_QUEUE[seq]==null){
								return true;
							}
							AJAX_QUEUE[seq]=false;

						}catch(e){
							return fail(e);
						}return true;
					};
					
					
							function AjaxWizard__handleResponse(doc){
								var root,node=false;
								var nodename,nodetext=false;
								if(doc==null){
									return false;

								}try{
									if(AJAX_DUMP_XML&&LOG_SHOW_AJAX){
										dumpXML(doc);

										}var root=doc.documentElement;
										node=root.firstChild;
										while(node!=null){
											node=node.nextSibling;
											if(node==null){
												continue;

											}if(node.nodeType!=1){
												continue;

											}if(jQuery.browser.msie){

												}nodename=node.tagName;
												nodetext=node.firstChild.nodeValue;
												switch(nodename){
													case 'status':this.status=nodetext;
													LAST_AJAX_STATUS=nodetext;
													break;
													case 'rstatus':this.status=nodetext;
													LAST_AJAX_STATUS=nodetext;
													break;
													case 'code':break;
													case 'msg':break;
													case 'seq':this.seq=nodetext;
													break;
													case 'host':this.host=nodetext;
													break;
													case 'short':this.brief=nodetext;
													break;
													case 'full':this.full=nodetext;
													break;
													case 'action':this.action=nodetext;
													break;
													case 'debug_log':break;
													case 'sourcetext':this.success=false;
													return false;
													break;
													default:break;

												}
												}this.success=true;
												return true;

											}catch(e){
												return fail(e);

												}return false;

											};
											function AjaxWizard__handleError(xmlobj,reason,exp){
												try{
													log('AJAX CALL FAILED',LOG_AJAX_ERR);
													log('REASON: '+reason,LOG_AJAX_ERR);
													log('HTTP CODE: '+xmlobj.status,LOG_AJAX_ERR);
													log('TEXT: '+xmlobj.responseText,LOG_AJAX_ERR);
													if(exp!=null){

													}else{

													}
												}catch(e){
													return fail(e);

													}return true;

												};
												function AjaxWizard__request(packet){
													return err('Not IMPLEMENTED');

												};
												function AjaxWizard__send(packet,handlerFunc,errorFunc){
													var reqid=false;
													if(packet==null){
														log('No packet provided',LOG_AJAX_ERR);
														return false;

													}if(handlerFunc==null){
														handlerFunc=this.handleResponse;

													}if(errorFunc==null){
														errorFunc=this.handleError;

													}try{
														var seq=this.pending.size();
														packet.add('seq',seq);
														this.pending.add(packet);
														this.xmlobj=$J.ajax({
															url:this.url,processData:true,data:packet.toString(),async:this.async,contentType:this.content_type,dataType:this.data_type,type:this.request_type,success:handlerFunc,error:errorFunc
														});

													}catch(e){
														return fail(e);

														}return this.xmlobj;

													};
													function AjaxWizard__getMsg(){
														try{
															return this.msg;

														}catch(e){
															return fail(e);

														}
													};
													function AjaxWizard__ping(){
														try{
															var packet=new AjaxPacket('Ping');
															this.send(packet);

														}catch(e){
															this.alive=false;
															return fail(e);

															}return true;

														};
														function AjaxWizard__wait(seq){
															if(!pcheck(new Array('seq',seq))){
																return false;

															}try{
																switch(AJAX_QUEUE[seq]){
																	case true:return false;
																	break;
																	case false:return true;
																	break;
																	default:log('Seq #'+seq+' invalid',LOG_WARN);
																	return false;
																	break;

																}
															}catch(e){
																return fail(e);

																}return true;

															};
															function AjaxResult(xmldoc){
																this.ready=false;
																this.success=false;
																this.xmldoc=xmldoc;
																this.status='ERROR';
																this.brief='NONE';
																this.full='NONE';
																this.seq='NONE';
																this.host='NONE';
																this.action='NONE';
																try{
																	var result=AJAX.handleResponse(doc);
																	if(!result){
																		log('Unable to parse response.',LOG_AJAX_ERR);

																		}this.status=AJAX.status;
																		this.brief=AJAX.brief;
																		this.full=AJAX.full;
																		this.seq=AJAX.seq;
																		this.host=AJAX.host;
																		this.action=AJAX.action;

																	}catch(e){
																		return fail(e);

																		}this.ready=true;

																	};
																	function Watcher(el,resource,interval){
																		this.pid=false;
																		this.interval=WATCH_DEFAULT_INTERVAL;
																		this.el=el;
																		this.url=false;
																		this.counter=1;
																		this.max_counter=1;
																		this.stop=Watcher__stop;
																		this.check=Watcher__check;
																		try{
																			if(!pcheck(new Array('el',el,'resource',resource))){
																				return false;

																				}this.url=WATCH_URL+resource+'.php';
																				if(interval!=null&&interval>0){
																					this.interval=interval*1000;

																					}PAJAX=this;
																					this.pid=window.setInterval(this.check,this.interval);
																					this.check();

																				}catch(e){
																					return fail(e);

																				}
																			};
																			function Watcher__stop(){
																				if(!pcheck(new Array('pid',PAJAX.pid))){
																					return false;

																				}try{
																					window.clearInterval(this.pid);

																				}catch(e){
																					return fail(e);

																					}return true;

																				};
																				function Watcher__check(){
																					if(!pcheck(new Array('el',PAJAX.el,'pid',PAJAX.pid,'url',PAJAX.url))){
																						log('Missing required parameter. No check done',LOG_WARN);
																						return false;

																					}try{
																						PAJAX.counter++;
																						if(PAJAX.counter>=PAJAX.max_counter){
																							log('Counter maximum exceeded. No longer updating.',LOG_WARN);
																							PAJAX.stop();

																							}log('Loading watch content',LOG_AJAX_LOW);
																							$J(PAJAX.el).load(PAJAX.url);

																						}catch(e){
																							return fail(e);

																							}return true;

																						};
																						jQuery(document).ready(function($){
																							try{
																								AJAX=new AjaxWizard();

																							}catch(e){
																								return fail(e);

																							}
																						});

