﻿// ajax support library
function get_http(){
    var xmlhttp;
    /*@cc_on
    @if (@_jscript_version >= 5)
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new 
                ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
                xmlhttp = false;
            }
        }
    @else
        xmlhttp = false;
    @end @*/
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
        } catch (e) {
            xmlhttp = false;
        }
    }
    return xmlhttp;
}

var oXR = get_http();


function XMLNode2HTMLNode(oXMLNode){
	if (oXMLNode.nodeType == 3){
		var oTextNode = document.createTextNode(oXMLNode.nodeValue);
		//~ alert ("Found and returning TextNode"); //debug
		//~ var oRe = new RegExp("\n", "g");
		//~ var oText = new String(oTextNode.nodeValue);
		
		//~ oText.replace(oRe, "\r\n");
		//~ oTextNode.nodeValue = oText.toString();
		return oTextNode
	}
	
	if (oXMLNode.nodeType != 1){
		var oErrNode = document.createElement("P");
		var oErrTextNode = document.createTextNode("Bad calling of XMLNode2HTMLNode for nodeType" + oXMLNode.nodeType);
		oErrNode.appendChild(oErrTextNode);
		//~ alert ("Bad calling of XMLNode2HTMLNode for nodeType" + oXMLNode.nodeType); //debug
		return oErrNode
	}
	
	var tagname = oXMLNode.nodeName;
	
	//~ alert ("tagname is " + tagname); //debug
	var oNode = document.createElement(tagname);
	
	var numOfAttrs = oXMLNode.attributes.length;
	
	/*@cc_on
	var radioname;
	var radiovalue;
	var radiochecked;
	var isradio;
	
	for (var i=0; i<numOfAttrs; i++){
		if (oXMLNode.attributes[i].nodeName == "type" && oXMLNode.attributes[i].nodeValue == "radio"){
			isradio = true
		}
		if (oXMLNode.attributes[i].nodeName == "value"){
			radiovalue = oXMLNode.attributes[i].nodeValue
		}
		if (oXMLNode.attributes[i].nodeName == "name"){
			radioname = oXMLNode.attributes[i].nodeValue
		}
	}
	if (isradio){
		oNode =  document.createElement("<input type='radio' name='" + radioname + "' value='" + radiovalue + "'>");
	}
	@*/
	
	for (var i=0; i<numOfAttrs; i++){
		//~ alert (oXMLNode.attributes[i].nodeName + " attribute found, with value " + oXMLNode.attributes[i].nodeValue ); //debug
		oNode.setAttribute(oXMLNode.attributes[i].nodeName, oXMLNode.attributes[i].nodeValue);
		if (oXMLNode.attributes[i].nodeName == "onclick"){
        //~ alert ("Type of " + oNode.attributes[i].nodeName + " is: " + typeof(oNode.attributes[i].nodeValue) );
			  eval("oNode.onclick = function() {" + oXMLNode.attributes[i].nodeValue + "}")
		}
		if (oXMLNode.attributes[i].nodeName == "class"){
			  oNode.className = oXMLNode.attributes[i].nodeValue
		}
		if (oXMLNode.attributes[i].nodeName == "colspan"){
				//~ alert("colspan = " + oXMLNode.attributes[i].nodeValue);
			  oNode.colSpan = oXMLNode.attributes[i].nodeValue
		}
		if (oXMLNode.attributes[i].nodeName == "rowspan"){
			  oNode.rowSpan = oXMLNode.attributes[i].nodeValue
		}
		//~ if (oXMLNode.attributes[i].nodeName == "name"){
			  //~ oNode.name = oXMLNode.attributes[i].nodeValue
		//~ }
		//~ if (oXMLNode.attributes[i].nodeName == "checked"){
			  //~ oNode.checked = oXMLNode.attributes[i].nodeValue
		//~ }
	}
	
	var numOfChilds = oXMLNode.childNodes.length;
	//~ alert ("Found " +  numOfChilds + " childs for this " + tagname); //debug
	
	for (var i=0; i<numOfChilds; i++){
		var oXMLChild = oXMLNode.childNodes[i];
		var childType = oXMLChild.nodeType
		if (childType == 1 || childType == 3){
			var oChild = XMLNode2HTMLNode(oXMLChild);
			oNode.appendChild(oChild)
		}else{
			//~ alert ("Nodetype is " + childType + "-- bypass"); //debug
		}
	}
	
	return oNode;
}


function getFormData(oElement) {
  var data = new Object;
	var oInputs = oElement.getElementsByTagName("input");
	//~ alert (oElement.id);
	var numOfInputs = oInputs.length;
	//~ alert (numOfInputs + " inputs detected");
	for (var i=0; i<numOfInputs; i++){
		var Name = oInputs[i].getAttribute("name");
		var Type = oInputs[i].getAttribute("type");
		var Value = oInputs[i].value;
		if (Type == 'radio' || Type == 'checkbox'){
			//~ alert (Type);
			var Chk = oInputs[i].checked;
			//~ alert (Name + "("+ Value +")" +" : " + Chk);
			if (!Chk){
				continue
			}
		}
		if (data[Name]){
			//~ alert ("Current Name is " + Name + " already valued " + data[Name]);
			if (data[Name] instanceof Array){
				//~ alert ("Array detected " + Name + " already valued " + data[Name].join("::"));
				data[Name].push(Value)
			}else{
				data[Name] = [data[Name], Value]
			}
		}else{
			data[Name] = Value;
		}
		//~ alert("Input " + Name + " = " + Value);
	}
	var oSelects = oElement.getElementsByTagName("select");
	var numOfSelects = oSelects.length;
	for (var i=0; i<numOfSelects; i++){
		var Name = oSelects[i].getAttribute("name");
		var Value = oSelects[i].value;
		if (data[Name]){
			if (data[Name] instanceof Array){
				data[Name].push(Value)
			}else{
				data[Name] = [data[Name], Value]
			}
		}else{
			data[Name] = Value;
		}
	}
	var oTAs = oElement.getElementsByTagName("textarea");
	var numOfTAs = oTAs.length;
	for (var i=0; i<numOfTAs; i++){
		var Name = oTAs[i].getAttribute("name");
		var Value = oTAs[i].value;
		if (data[Name]){
			if (data[Name] instanceof Array){
				data[Name].push(Value)
			}else{
				data[Name] = [data[Name], Value];
			}
		}else{
			data[Name] = Value;
		}
	}
	return data
}



function get_xml(App, phase, data){
	var query = [];
	var querystr;
	if (data instanceof Object) {
			for (var k in data) {
					if (data[k] instanceof Array){
						for (var i=0; i < data[k].length; i++ ){
							query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k][i]))
						}
					}else{
						query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]))
					}
			}
			querystr = query.join('&')
	} else {
			querystr = data
	}
	//~ alert (querystr);
	oXR.open("get", "/XML_" + App + "/?phase=" + phase + "&" + querystr + "&hash=" + Math.random(), false);
	oXR.send(null);
	
	if (oXR.status == 200 && oXR.responseXML){
		//~ alert ("Статус " + oXR.status + "\n\n" + oXR.responseText);
		return oXR.responseXML
	}else{
		alert ("Ошибка сервера " + oXR.status );
		return null
	}
}

function post_xml(App, phase, data){
	var additionalData = "phase=" + phase + "&hash=" + Math.random();
	var query = [];
	var querystr;
	if (data instanceof Object) {
			for (var k in data) {
					if (data[k] instanceof Array){
						for (var i in data[k] ){
							//~ alert (k + " = " + data[k][i]);
							query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k][i]))
						}
					}else{
						query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]))
					}
			}
			querystr = query.join('&')
	} else {
			querystr = data
	}
	oXR.open("POST", "/XML_" + App + "/?" + additionalData , false);
	oXR.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	oXR.send(querystr + "&" + additionalData);
	if (oXR.status == 200 && oXR.responseXML){
		return oXR.responseXML
	}else{
		//~ alert ("Ошибка сервера " + oXR.status );
		return null
	}
}





