//v2.0
var xmlReq = null,that=null;

function isdefined( variable)
{
    return (typeof(window[variable]) == "undefined")?  false: true;
}

function tajax()
{
	var data;
	var url;
	var http_request;
	var result;
	var handleFunction;
	this.returnRequestData=returnRequestData;
	this.getXML=getXML;
	this.handleFormRequest=handleFormRequest;
	this.handleFormResponse=handleFormResponse;

	function getXML(url,handlefunction,parameters)
	{
		this.http_request =false;
		if (window.XMLHttpRequest)
		{
			this.http_request = new XMLHttpRequest();
			if (this.http_request.overrideMimeType)
			{
				this.http_request.overrideMimeType('text/html');
			}
		} else if (window.ActiveXObject)
		{
			try {
				this.http_request = new ActiveXObject('Msxml2.XMLHTTP');
			} catch (e) {
				try {
				this.http_request = new ActiveXObject('Microsoft.XMLHTTP');
				} catch (e) {}
			}
		}
		if (!this.http_request) {
			alert('Cannot create XMLHTTP instance');
			return false;
		}
		this.handlefunction = handlefunction;
		that=this;
		this.http_request.onreadystatechange = returnRequestData;
		this.http_request.open('POST', url, true);
		this.http_request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		//this.http_request.setRequestHeader('boundary', '------095601534030418504');
		//
		this.http_request.setRequestHeader('Content-length', parameters.length);
		//this.http_request.setRequestHeader('Connection', 'close');
		this.http_request.send(parameters);
	}

	function handleFormRequest(url,handlefunction,data)
	{
		this.url = url;
		this.data = data;
		var parameters = '';
		if(typeof data == 'object')
		{
			if (data && data.tagName == 'FORM')
			{
				var formElements = data.elements;
				for( var i=0; i < formElements.length; i++)
				{
					if (!formElements[i].name)
						continue;
					if (formElements[i].type && (formElements[i].type == 'radio' || formElements[i].type == 'checkbox') && formElements[i].checked == false)
						continue;
					if (formElements[i].disabled && formElements[i].disabled == true)
						continue;
					var name = formElements[i].name;
					if (name)
					{
						if (parameters != '')parameters += '&';
						if(formElements[i].type.substr(0,7)=='select-')
						{
							for (var j = 0; j < formElements[i].length; j++)
							{
								if (formElements[i].options[j].selected == true)
									if(formElements[i].options[j].value)parameters += name+'='+encodeURIComponent(formElements[i].options[j].value);
									else parameters += name+'='+encodeURIComponent(formElements[i].options[j].innerText);
									//\r\n------095601534030418504\r\nContent-Disposition: form-data; name="'+name+'"\r\n\r\n'+encodeURIComponent(
							}
						}
						else
						{
							if(formElements[i].type=='textarea' && typeof(tinyMCE) != "undefined" && tinyMCE.get(name) && tinyMCE.get(name).isHidden()==false)
                            {
                                parameters += name+'='+encodeURIComponent(tinyMCE.get(name).getContent());
                            }
                            else parameters += name+'='+encodeURIComponent(formElements[i].value);
						}
					}
				}
			}
			else for(var c = 0; c < data.length ; c++)
			{
				if( c == 0 ) parameters = data[c] + '=' + encodeURIComponent( document.getElementById(data[c]).value );
				else parameters = parameters + '&' + data[c] + '=' + encodeURIComponent( document.getElementById(data[c]).value );
			}
			//var parameters = 'Content-Type: multipart/form-data; boundary=------095601534030418504\r\nContent-Length: '+parameters.length+'\r\n'+parameters;
		
		}
		else if (typeof data == 'string')
		{
			parameters = data + '=' + encodeURIComponent( data );
		}

		xmlReq = getXML(url,handlefunction,parameters);
	}

	function returnRequestData() {
		if (that.http_request.readyState == 4) {
			if (that.http_request.status == 200) {
				that.result = that.http_request.responseText;
				if(that.handlefunction.length == 0)eval('handleFormResponse(\''+that.result+'\');');
				else eval(that.handlefunction+'(\''+that.result+'\');');
			} else {
				//alert('Die Tajax-Anfrage wurde unterbrochen!');
			}
		}
	}
	function handleFormResponse(response)
	{
		var headerstart=response.search(/::tajax-response::/);
		if(headerstart==-1) parseHTML(response);
		//alert('No Tajax-Response: '+response);
		if(headerstart>=0)
		{
			var responseparts=response.split(/::tajax-response::/);
			for(var ri=0;ri<responseparts.length;ri++)
			{
				if(responseparts[ri].length>0)
				{
					if(responseparts[ri].search(/::tajax-form-data::/)>-1)
					{
						responsepart = responseparts[ri].replace(/::tajax-form-data::/,'');
						var datafields=responsepart.split('::tajax_dataset::');
						for(var i=0;i<datafields.length;i++)
						{
							dataarray=datafields[i].split('::tajax_data::');
							if(dataarray)
							{
								if(dataarray[0]=='tajax-form')var tajax_form=dataarray[1]
								else if(dataarray[0]=='tajax-prefix')var tajax_prefix=dataarray[1];
								else
								{
									if(eval('document.' + tajax_form + '.' + tajax_prefix + dataarray[0]))
									{
										var tajax_field_type = eval('document.' + tajax_form + '.' + tajax_prefix + dataarray[0] + '.type');
										if(tajax_field_type=='radio' || tajax_field_type=='checkbox')
										{
											if(dataarray[1]=='on' || dataarray[1]==1)eval('document.' + tajax_form + '.' + tajax_prefix + dataarray[0] + '.checked=\'checked\';');
											else eval('document.' + tajax_form + '.' + tajax_prefix + dataarray[0] + '.checked=false;');
										}
										else if(tajax_field_type.substr(0,7)=='select-')
										{
											var formElements = eval('document.' + tajax_form + '.' + tajax_prefix + dataarray[0]);
											for (var j = 0; j < formElements.length; j++)
											{
												if (formElements.options[j].value == dataarray[1] || formElements.options[j].innerText == dataarray[1])formElements.options[j].selected = true;
											}
										}
										else
										{
											if(tajax_field_type=='textarea' && typeof(tinyMCE) != "undefined" && tinyMCE.get(tajax_prefix + dataarray[0]))
                                            {
                                                tinyMCE.get(tajax_prefix + dataarray[0]).setContent(dataarray[1])
                                            }else{
                                                eval('var element = document.' + tajax_form + '.' + tajax_prefix + dataarray[0]);
											    element.value = dataarray[1];
											}
										}
									}
								}
								if(1==2)
								{if(dataarray[0]=='ObjectLayout') if(dataarray[1]=='1') document.getElementById('layout_ObjectLayout').checked=true;
								else document.getElementById('layout_ObjectLayout').checked=false;
								else if(document.getElementById('layout_'+dataarray[0])) document.getElementById('layout_'+dataarray[0]).value=dataarray[1];}
							}
							else
							{
								alert(datafields[i]);
							}
						}
					}
					else if(responseparts[ri].search(/::tajax-dom-data::/)>-1)
					{
						responsepart = responseparts[ri].replace(/::tajax-dom-data::/,'');
						parseDOMdata(responsepart);
					}
					else if(responseparts[ri].search(/::tajax-JS-response::/)>-1)
					{
						responsepart = responseparts[ri].replace(/::tajax-JS-response::/,'');
						dataarray=responsepart.split('::tajax_data::');
						if(dataarray)
						{
							if(dataarray[0]=='tajax-js')eval(dataarray[1]);
						}
					}else alert('tajax-response is broken: '+response);
				}
			}
		}
	}
	function handleOtherResponse(response)
	{
		for(ji=0;ji<response.length;ji++)
		{
		}
	}
	function splitTag(tagstr)
	{
		var entinhalt=tagstr.substr(1);
		var infoarray= new Array();
		var valuearray= new Array();
		var arraycounter=0;
		var splicer;
		var hook;
		var securitycounter=0;
		var last;
		while(entinhalt.length>0)
		{
		securitycounter++;
			arraycounter=infoarray.length;
			//entinhalt=entinhalt.substr(entinhalt.search(/[^\s]+/));
			infoarray[arraycounter]=entinhalt.substr(0,entinhalt.search(/[^a-zA-Z]+/));
			entinhalt=entinhalt.substr(entinhalt.search(/[^a-zA-Z]+/));
			splicer=entinhalt.substr(0,1);
			//	alert(infoarray[arraycounter]+'-'+splicer);
			if(splicer=="=")
			{
				entinhalt=entinhalt.substr(1);
				hook=entinhalt.substr(0,1);
				if(hook=='"' || hook=="'")
				{
					entinhalt=entinhalt.substr(1);
					valuearray[arraycounter]="";
					while(entinhalt.substr(0,1)!=hook && last!="\\")
					{
						last=entinhalt.substr(0,1);
						valuearray[arraycounter]+=last;
						entinhalt=entinhalt.substr(1);
					}
					//info2array[arraycounter]=entinhalt.substr(0,entinhalt.search(/[\"]+/));
					entinhalt=entinhalt.substr(1);
				}
				//else if(hook=="'")
				//{
				//	entinhalt=entinhalt.substr(1);
				//	info2array[arraycounter]=entinhalt.substr(0,entinhalt.search(/[\']+/));
				//	entinhalt=entinhalt.substr(entinhalt.search(/[\']+/)+1);
				//}
				else
				{
					valuearray[arraycounter]=entinhalt.substr(0,entinhalt.search(/[ >]+/));
					entinhalt=entinhalt.substr(entinhalt.search(/[ >]+/)+1);
				}
			}
			else
			{
				valuearray[arraycounter]="";
			}
			entinhalt=entinhalt.substr(entinhalt.search(/[^ ]+/));
			if(entinhalt==" " || entinhalt==">")entinhalt="";
			if(securitycounter>20)break;
		}
		var returnarray=new Array(infoarray,valuearray);
		return returnarray;
	}
	function parseHTML(responsehtml)
	{
		//alert(responsehtml);
		var entstart=0;
		var infostr="";
		var taginfo="";
		var entpos=0;
		var entstr=0;
		var tobj="";
		var nusearch= new Array();
		var testsearch="";
		var tobjid= new Array();
		var tagText="";
		var actingOBJ;
		var createLayoutElement=true;
		var replaceLayoutData=false;
		var htmlEnt = "";
		var rest="";
		var AttrCount=0;
		var depthcounter=0;
		tobj=document.body;
		while(responsehtml.length>0)
		{
		//	alert(responsehtml);
			var htmlAttr = new Array();
			var htmlValue = new Array();
			var htmlStyle = new Array();
			var htmlStyleValue = new Array();
			var tagstyle="";
			var actstyle="";
			createLayoutElement=true;
			entstart=responsehtml.search(/<[^>]+>/);
			if(responsehtml.substr(0,1)==">")alert(responsehtml);
			if(entstart==0)
			{
				entstr=responsehtml.match(/<[^>]+>/);
				taginfo=splitTag(entstr[0]);
				htmlEnt=taginfo[0][0];
			//	alert(htmlEnt);
				if(taginfo[0].length==1)createLayoutElement=true;
				else for(b=1;b<taginfo[0].length;b++)
				{
					if(taginfo[0][b]=="style")
					{
						tagstyle=taginfo[1][b].split(";");
						//alert(taginfo[1][b]+'--'+tagstyle.length);
						for(si=0;si<tagstyle.length;si++)
						{
							if(tagstyle[si].length>0)
							{
								actstyle=tagstyle[si].split(":");
								styletypstr=actstyle[0].split("-");
								htmlStyle[si]=styletypstr[0];
								htmlStyleValue[si]=actstyle[1];
								for(sti=1;sti<styletypstr.length;sti++)
								{
									htmlStyle[si]=htmlStyle[si]+styletypstr[sti].substr(0,1).toUpperCase() + styletypstr[sti].substr(1);
								}
							}
						}
					}
					else
					{
						if(taginfo[0][b]=="id")
						{
							if(document.getElementById(taginfo[1][b]))
							{
								tobj=document.getElementById(taginfo[1][b]);
								createLayoutElement=false;
							}
						}
						if(taginfo[0][b]=="scemos" && taginfo[1][b]=="replace")replaceLayoutData=true;
						else
						{
							AttrCount=htmlAttr.length;
							htmlAttr[AttrCount]=taginfo[0][b];
							htmlValue[AttrCount]=taginfo[1][b];
						}
					}
					//infostr+=taginfo[0][b]+'-'+taginfo[1][b]+'\n';
				}
				//alert(infostr);
				entpos=entstart+entstr[0].length;
				responsehtml=responsehtml.substr(entpos);
			
			if(tobjid.length>0)tobj=document.getElementById(tobjid[tobjid.length-1]);
		//	alert(tobj.id);
			if(replaceLayoutData)
			{
				while(tobj.firstChild)tobj.removeChild(tobj.firstChild);
				replaceLayoutData=false;
			}
			if(createLayoutElement)
			{
				actingOBJ = document.createElement(htmlEnt);
		//		alert(htmlEnt);
				tobj.appendChild(actingOBJ);
			}else actingOBJ=tobj;
			for(attrcount=0;attrcount<htmlAttr.length;attrcount++)
			{
				var Attribut = document.createAttribute(htmlAttr[attrcount]);
				Attribut.nodeValue = htmlValue[attrcount];
				if(htmlAttr[attrcount].substr(0,2)=="on")eval('actingOBJ.'+htmlAttr[attrcount]+' = function(){'+htmlValue[attrcount]+';}');
				else actingOBJ.setAttributeNode(Attribut);
			}
			//alert(htmlEnt+'-'+htmlAttr.length+'-'+tobj.id+'-'+rest.search(/</)+'-'+htmlStyle.length);
			for(stylecount=0;stylecount<htmlStyle.length;stylecount++)
			{
				//alert(htmlStyle[stylecount]+'-'+htmlStyleValue[stylecount]);
				if(htmlStyleValue[stylecount].search(/'/)>-1) eval('actingOBJ.style.'+htmlStyle[stylecount]+'='+htmlStyleValue[stylecount].replace(/'/,'\''));
				else eval('actingOBJ.style.'+htmlStyle[stylecount]+'=\''+htmlStyleValue[stylecount]+'\'');
			}

			}else
			{
				tagText=responsehtml.substr(0,responsehtml.search(/</));
				responsehtml=responsehtml.substr(responsehtml.search(/</));
				var Textknoten = document.createTextNode(tagText);
				tobj.appendChild(Textknoten);
			}
			
			//alert(tobj.id);
			
		/*	teststr="";
			for(testc=0;testc<nusearch.length;testc++)teststr=teststr+tobjid[testc]+' '+nusearch[testc]+'\n';
			alert(teststr);*/
			
			testsearch="<\/"+htmlEnt+">";
			if(responsehtml.search(testsearch)>0 && responsehtml.search(/</)>0)
			{
				tagText=responsehtml.substr(0,responsehtml.search(/</));
				responsehtml=responsehtml.substr(responsehtml.search(/</));
				var Textknoten = document.createTextNode(tagText);
				actingOBJ.appendChild(Textknoten);
			}
			if(responsehtml.search(testsearch)>=0)nusearch[nusearch.length]=testsearch;
			if(responsehtml.search(testsearch)>0)
			{
				if(actingOBJ.id==0)
				{
				//	alert(actingOBJ.id);
		//		alert(tobj.id+'-'+(tobj.childNodes.length)+'--');
					var Attribut = document.createAttribute("id");
				Attribut.nodeValue = tobj.id+'-'+(tobj.childNodes.length);
				actingOBJ.setAttributeNode(Attribut);
				//actingOBJ.id=tobj.id+tobj.childNodes.length;
		//			alert(actingOBJ.id);
				}
				tobjid[tobjid.length]=actingOBJ.id;
			}
			
			while(nusearch.length>0 && responsehtml.search(nusearch[nusearch.length-1])==0)
			{
		//		alert(nusearch[nusearch.length-1]+'-'+nusearch[nusearch.length-1].length);
				responsehtml=responsehtml.substr(nusearch[nusearch.length-1].length);
		//		if(!confirm(nusearch[nusearch.length-1]+'\n'+responsehtml))break;
				nusearch=nusearch.slice(0,nusearch.length-1);
				if(tobjid.length>nusearch.length)tobjid=tobjid.slice(0,tobjid.length-1);
			}
			if(tobjid.length>0)tobj=document.getElementById(tobjid[tobjid.length-1]);
			/*if(responsehtml.length<10 && responsehtml.length>0)
			{
			teststr="";
			for(testc=0;testc<nusearch.length;testc++)teststr=teststr+tobjid[testc]+' '+nusearch[testc]+'\n';
			alert(teststr);
			}*/
			//alert(actingOBJ.id+'3'+rest);
			//if(rest.length>0 && parseHTML.arguments[2]<1)rest=parseHTML(rest,actingOBJ.id,tobjid,nusearch);
			//alert('4'+rest);
			//return rest;
		}
	}
	function parseDOMdata(responsepart)
	{
		var datafields=responsepart.split('::tajax_dataset::');
		var objectstring='';
		for(var i=0;i<datafields.length;i++)
		{
			dataarray=datafields[i].split('::tajax_data::');
			if(dataarray)
			{
				if(dataarray[0]=='tajax-parent-obj')var tajax_parent_obj=dataarray[1];
				else if(dataarray[0]=='tajax-obj-type')
				{
					var tajax_obj_type=dataarray[1];
					if(tajax_obj_type.length==0)var addChild=false;
					else var addChild=true;
					if(addChild==false) var newOBJ=document.getElementById(tajax_parent_obj);
					else var newOBJ = document.createElement(tajax_obj_type);
					if(addChild)document.getElementById(tajax_parent_obj).appendChild(newOBJ);
				}
				else
				{
					if(dataarray[0]=='value')
					{
						var Textknoten = document.createTextNode(dataarray[1]);
						newOBJ.appendChild(Textknoten);
					}
					else if(dataarray[0]=='style')
					{
								/*		var Style = document.createAttribute(dataarray[0]);
								Style.nodeValue = dataarray[1];
								newOBJ.setAttributeNode(Style);*/
						var styles=dataarray[1].split(/;;/);
						for(var si=0;si<styles.length;si++)
						{
							if(styles[si].length>0)
							{
								var style = styles[si].split(/:/);
								if(style[1].match(/'/)) eval('newOBJ.style.'+style[0]+'='+style[1].replace(/'/,'\''));
								else eval('newOBJ.style.'+style[0]+'=\''+style[1]+'\'');
							}
						}
					}
					else
					{
						var attribs=dataarray[1].split(/;;/);
						for(var si=0;si<attribs.length;si++)
						{
							if(attribs[si].length>0)
							{
								attrib=attribs[si].split(/=/);
								var Attribut = document.createAttribute(attrib[0]);
								var Attributwert='';
								for(var sia=1;sia<attrib.length;sia++)
								{
									Attributwert+=attrib[sia];
									if(sia<attrib.length-1)Attributwert+='=';
								}
								Attribut.nodeValue = Attributwert;
								if(attrib[0].substr(0,2)=="on")eval('newOBJ.'+attrib[0]+' = function(){'+attrib[1]+';}');
                                else newOBJ.setAttributeNode(Attribut);
                                            //newOBJ.setAttribute(attrib[0],Attributwert);
							//	alert('newOBJ.'+attrib[0]+'=\''+attrib[1]+'\'');
									//	eval('newOBJ.'+attrib[0]+'=\''+attrib[1]+'\'');
							}
						}
					}
				}
			}
			else
			{
				alert(datafields[i]);
			}
		}
	}
}
var tajax=new tajax();

