/************************ XMLHttp Handler Class ********************************
 * Author: Alex@2007, alex@skybyte.net
 * This library is licensed under a MIT-style license, so you can use it for anything you like, as long as you include the copyright notice.

 * NOTE Javascript FILES included only once!
 * ONLY Javascript CODE included in <var x='_onload'> is being evaluated each time in ajax calls!!!
 ******************************************************************************/
if(!Prototype){ throw("ajax.js requires Prototype.js library"); }

var AjaxBase = {
	s_load  : '',
	s_done	: '',
	s_eval  : '',
	action	: '',	//last action
	options	: {},	//last options
	init:function(path,index){ this.path=path||'./';  this.index=index || 'ajax.php'; this.s_load ='<img src=\''+this.path+'/images/loader.gif\'/>'+this.s_load; },
	getpath:function(action){ return AjaxBase.path+'/'+AjaxBase.index+'?action='+encodeURIComponent(action); },
	_load:function(){
		var x=$('loader'); x.innerHTML=AjaxBase.s_load;
		if(this.options.window || this.options.overlay || this.options.position){
			UI.options=this.options;
			UI.win();
		}
	},
	_done:function(){
		var x=$('loader'); s=x.innerHTML;
		if (s.indexOf("loader")!=-1){  x.innerHTML=AjaxBase.s_done; }
		if(this.options.window || this.options.overlay || this.options.position){
			//UI.options=this.options;
			//UI.win();
		}
	},
	_call: function(action, options, container) {
		options=Object.extend({
			method		: 'get',
			position	: false,
			window		: false,
			overlay		: false,
			loader		: 'cursor'
		}, arguments[1] || {});
		if(action=='submit'){ action=this.action; }	//restore last action
		this.action=action; this.options=options;	//remember last action/options
		url = this.getpath(action); container=container || '';
		new Ajax.Updater(container, url, options);
	},
	_failure : function(r) { return; },
	_success : function(r) { return; },
	_complete: function(r) {
		AjaxBase._done();		//stop loader screen
		if(r.responseXML && r.responseXML.documentElement){
			xml= r.responseXML.documentElement; var tar=null; var html=null;
			for (var i=0; i<xml.childNodes.length; i++){
			//--for---------------------------------------------------------
				if (xml.childNodes[i].nodeName == 'one'){
					var x; var xa=""; var xt=""; var xs=""; var xf=""; var xc=""; var xv="";
					//------------------------------------------------------
					for (var y=0; y<xml.childNodes[i].childNodes.length; y++){
						var n = xml.childNodes[i].childNodes[y];
						if 		(n.nodeName == 'xa') {	xa=n.firstChild.data;	}
						else if (n.nodeName == 'xt') {	xt=n.firstChild.data;	}
						else if (n.nodeName == 'xs') {	xs=n.firstChild.data;	}
						else if (n.nodeName == 'xf') {	xf=n.firstChild.data;	}
						else if (n.nodeName == 'xcc'){
							for (var j=0; j<n.childNodes.length; j++){
								if(n.childNodes[j].nodeName == 'xc'){ try{ xc  += n.childNodes[j].firstChild.data; }catch(e){}	}
							}
						}
						else if (n.nodeName == 'xvv'){
							for (var j=0; j<n.childNodes.length; j++){
								if(n.childNodes[j].nodeName == 'xv'){ try{ xv  += n.childNodes[j].firstChild.data; }catch(e){}	}
							}
						}
					}
					//------------------------------------------------------
					if(xf!='null')		{	AjaxBase._include(xf);	}	//include css/js
					if(xt!='null')		{	x=$(xt);				}	//find element
					if(xs!='null' && x) {	x.className=xs;			}	//apply style
					if(xc!='null')		{	AjaxBase._add_eval(xc);	}	//eval javascript
					if(xv!='null' && x) {
						switch (xa){
							case "html"	:	tar=x;  html=xv;	break;
							case "frame":	x.contentWindow.document.body.innerHTML	= xv;	break;
							case "redirect":document.location.href= xv;	break;
							case "value":	x.value		= xv;	break;
							case "src"	:	x.src		= xv;	break;
							case "select":
								var len=x.options.length; id=0; newid=0;
								for (var t=0; t<len; t++){
									var v0= x.options[id].value;    //value
									var t0= x.options[id].text;     //text
									//alert(v0 +'='+ xv);
									if(v0 == xv){ newid=id; } id++;
									//alert(v0 +'='+ t0);
								}
								x.selectedIndex = newid;
							break;
						}
					}
					//------------------------------------------------------
					//alert('\n action='+xa+',\n target='+xt+',\n value= '+xv+',\n style= '+xs+',\n file='+xf+',\n js='+xc);
				} //end if one
			}
			//AjaxBase._view_source(xml);
			//--------------------------------------------------------------
			if(html){ tar.innerHTML=html; }
			AjaxBase._eval(); //evaluate scripts after all html and files included
			//endfor--------------------------------------------------------
		}else{
			var x=$('loader');
			if(x){x.innerHTML=r.responseText;} else{ alert('Ajax Failure:'+r.responseText); }
		}
		//---------------------------------
		r=''; //delete request
		//---------------------------------
	},
	_add_eval: function(c) { AjaxBase.s_eval+=c; },
	_eval    : function()  { c=AjaxBase.s_eval; //After eval complete, clean it up
		if(c!=''){ try{ eval(c); AjaxBase.s_eval=''; }catch(e){ setTimeout(AjaxBase._eval, 20);  }} /*!!!Firefox needs 10ms /*alert(e +',code:'+ c);*/
	},
	_include: function(file){ var f;
		if (file!=null && file!=""){
			if (file.indexOf(".js")!=-1){ 
				AjaxBase.include_js(file); 
			}else if(file.indexOf(".css")!=-1){ 
				AjaxBase.include_css(file); 
			}
		}
	},
	include_js: function(file){ var s,len,f,doc;
		var all=document.getElementsByTagName("script");
		for (i=0, len=all.length; i<len; ++i){  s=all[i];
			if(s.src && s.src.indexOf(file)!=-1){  f=true; break; } //dont include js if found
		}
		if(!f){
			//alert('Including js: '+file);
			doc=document.getElementsByTagName("head").item(0);
			f=document.createElement('script');
			f.setAttribute("type","text/javascript");
			f.setAttribute("src", file);
			doc.appendChild(f);
		}	
	},
	include_css: function(file){ var s,len,f,doc;
		var all=document.getElementsByTagName("link");
		for (i=0, len=all.length; i<len; ++i){  s=all[i];
			if(s.href && s.href.indexOf(file)!=-1){  s.parentNode.removeChild(s); break; }
		}
		if(!f){
			//alert('Including CSS:'+file);
			doc=document.getElementsByTagName("head").item(0);
			f=document.createElement("link");
			f.setAttribute("rel", "stylesheet");
			f.setAttribute("type", "text/css");
			f.setAttribute("href", file);
			doc.appendChild(f);
		}
	},
	_view_source:function(){
		//var debugWindow = window.open('about:blank', 'debug', 'width=800,height=600,scrollbars=1,resizable,status');
		//debugWindow.document.write(xml);
		//alert ("<html>"+document.getElementsByTagName("HTML")[0].innerHTML+"</html>");
	}
}

/*
		$A(document.getElementsByTagName("link")).findAll( function(s) {
			if(s.src && s.src.indexOf(file)==0){ //=0 included in document, -1 not included
				//e.parentNode.removeChild(e); 
				alert('Removing CSS:'+file);
				document.getElementsByTagName("head").item(0).removeChild(s);
				return 0;
			}else{
				alert('Including CSS:'+file);
				f=document.createElement("link");
				f.setAttribute("rel", "stylesheet");
				f.setAttribute("type", "text/css");
				f.setAttribute("href", file);
				return f;
			}
		});
*/
