var xmlHttp = createXmlHttpRequestObject();
var as = {
	timest: 5000,
	script: "ajax.php",
	params: "",
	separ : /\s*,\s*/,
	repeat: true
};
function createXmlHttpRequestObject() {
  try {
		var xmlHttpObject = new XMLHttpRequest();
	} catch(e){
		// старые версии IE
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP");
		// пробуем все возможные версии
		for (var i=0; i<XmlHttpVersions.length && !xmlHttpObject; i++){
			try {
				var xmlHttpObject = new ActiveXObject(XmlHttpVersions[i]);
			} catch(e) {}
		}
	}
  // вернуть созданный объект
  if (xmlHttpObject){return xmlHttpObject;}
}
function xmlHTTPrequest(){	var result;
	if(!xmlHttp || !obj) { return False;}

	params = "rule=ajax"
	for(i=0;i<obj.length;i++){  	// определяем роль
  	params += "&id["+obj[i].id+"]="+obj[i].rule;
  	if(obj[i].action){
  		params += "&act["+obj[i].id+"]="+obj[i].action;
  		if(obj[i].action == "off"){  			// если действие выкл
  			continue;
  		}
  	}
  	if(obj[i].fldId){  		// собираем поля, которые необходимо сохранять			for(a=0;a<obj[i].fldId.length;a++){
		  	try{
		  		var fldValue = document.getElementById(obj[i].fldId[a]).value;
		  		// если это роль = select, то берем только послденее слово.
		  		if(obj[i].rule == "select" && fldValue.length > 0){
		  			var fldValueArray = fldValue.split(as.separ);
		  			fldValue = fldValueArray[fldValueArray.length-1];
		  		}
		  		if(fldValue.length > 0){params += "&fld["+obj[i].id+"]["+obj[i].fldId[a]+"]="+encodeURIComponent(fldValue);}
		  	} catch(e) {}
			}
  	}
	}
	// работа возможна только если обеъкт не занят
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
		// обращаемся к сценарию, который будет производить автосохранение
		xmlHttp.open("POST", as.script, true);
		xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		// метод который будет отрабатывать ответы
		xmlHttp.onreadystatechange = handleServerResponse;
		// отправляем
		if(params && params.length > 1) {xmlHttp.send(params);}
	} else {
		setTimeout('xmlHTTPrequest', as.timest);
	}
}
function handleServerResponse(response){
	// проверяем завершена ли транзакция с сервером
	if (xmlHttp.readyState == 4){
		// значение 200 если транзакция прошла успешно
		if (xmlHttp.status == 200){
			try {
				// read answer server
				var response = xmlHttp.responseText.split(String.fromCharCode(2));
				for(i=0;i<response.length;i++){
					// получаем ID rule
					var ruleId = Number(response[i].charAt(0));
					if(ruleId >= 0){
						if(response[i].length > 0) {
							// получаем ID div контейнера
							if(obj[ruleId].div){								var DivResponse = document.getElementById(obj[ruleId].div);
								if(response[i].length > 1){									DivResponse.innerHTML = response[i].substring(1,response[i].length);
								} else {									DivResponse.innerHTML = "";
								}
							} else if(obj[ruleId].rule == "select" && response[i].length > 1){
					  		// берем только послденее слово.
					  		iTextbox = document.getElementById(obj[ruleId].fldId[0]);
					  		fldValueArray = iTextbox.value.split(as.separ);
					  		if(fldValueArray.length > 1){
						  		fldValueArray.length = fldValueArray.length - 1;
	                fldValue = fldValueArray.join() + "," + response[i].substring(1,response[i].length);
	        			} else {	        				fldValue = response[i].substring(1,response[i].length)
	        			}
								if(iTextbox.value != fldValue){
	        				var oTextbox = new AutoSuggestControl(iTextbox);
									oTextbox.typeAhead(fldValue);
	        			}
							}
						}
					}
				}
			} catch(e) {}
			// повторяем
			if(as.repeat) {				setTimeout('xmlHTTPrequest()', as.timest);
			} else {				as.repeat = true;
			}
		}
	}
}
function AutoSuggestControl(oTextbox){	this.textbox = oTextbox;
}
AutoSuggestControl.prototype.selectRange = function (iStart,iEnd){	if(this.textbox.createTextRange){		var oRange = this.textbox.createTextRange();
		oRange.moveStart("character",iStart);
		oRange.moveEnd("character",iEnd - this.textbox.value.length);
		oRange.select();
	} else if(this.textbox.setSelectionRange){		this.textbox.setSelectionRange(iStart,iEnd)
	}
		this.textbox.focus();
}
AutoSuggestControl.prototype.typeAhead = function (sSuggestion){	if(this.textbox.createTextRange || this.textbox.setSelectionRange){		var iLen = this.textbox.value.length;
		this.textbox.value = sSuggestion;
		this.selectRange(iLen,sSuggestion.length);
	}
}
function setPreview(objId,status){
	obj[objId].action = status;
	as.repeat = false;
	xmlHTTPrequest();
}
function setlist(zeichen){
	document.post.list.value += zeichen;
	as.repeat = false;
	xmlHTTPrequest();
}
function setcode(zeichen){
	document.post.keywords.value += zeichen;
}
function Insert(qname, text){
	if (text!="") paste("<["+qname+"\n"+text+"]>\n", 0);
}
function paste(text, flag){
	if ((document.selection)&&(flag)) {
		document.comment.message.focus();
		document.comment.document.selection.createRange().text = text;
	} else {
		document.comment.message.value += text;
	}
}
function get_selection() {
	if (document.getSelection){
		selection = document.getSelection();
		selection = selection.replace(/\r\n\r\n/gi, "_doublecaret_");
		selection = selection.replace(/\r\n/gi, " ");
  	while (selection.indexOf("  ") !=-1) selection = selection.replace(/  /gi, "");
		selection = selection.replace(/_doublecaret_/gi, "\r\n\r\n");
  } else {
  	selection = document.selection.createRange().text;
  }
}