// ----------------------------------------------
var counter = 0;
function clone(object) // Копирует объект DOM со всеми его подобъектами, в рекурсии
{
		var i;
		var c;
		var t;

		t = object.cloneNode(false);

		if (t.id != undefined) {
		    counter++;
		    t.id += counter;
		}
		if (t.name != undefined) {
		    counter++;
		    t.name += counter;
		}
		if (t.className != undefined) {
		    t.className.replace("error", "")
		}
		var cl;
		var clean;

		if (t.nodeName == "INPUT") {
		    if (t.type != "button") {
		        cl = object.getAttribute("notcleaned");
		        clean = (cl == null || cl.toLowerCase() == 'false');

		        if (clean) {
		            t.value = "";
		        }
		    }
		} else
		    if (t.nodeName == "TEXTAREA" || t.nodeName == "SPAN") {
		    cl = object.getAttribute("notcleaned");
		    clean = (cl == null || cl.toLowerCase() == 'false');

		    if (clean) {
		        t.innerHTML = "";
		    }
		    else if (t.value) {
		        t.innerHTML = t.value;
		    }
		
		}
		else {
		    c = object.childNodes.length;
		    //alert(object.nodeName + ",childs: "+ c);
		    for (i = 0; i < c; i++) {

		        var ap = clone(object.childNodes[i]);
		        t.appendChild(ap);
		
		    }
		}
		return t;
}

// ----------------------------------------------

function genXML(xmlContainer, xmldest) { //Создает XML по схеме, заложенной на форме
		var xml;
		if (xmlContainer) {
				xml = genXMLBranch(xmlContainer);
				xmldest.value = xml;
		}
}

// ----------------------------------------------

function genXMLBranch(object) { //Служебная подфункция, генерирует кусок XML, в рекурсии
		var i;
		var c;
		var node;
		var x = "";

		c = object.childNodes.length;
		
		for (i = 0; i < c; i++) {
		    node = object.childNodes[i];
		    var nodename = getNodeName(node);				   
			
				switch(getNodeType(node))
				{
				  case "leaf": 
				  var rawval = getvalue(node);
				  if(nodename.toLowerCase() != "hash" && nodename.toLowerCase() != "sign")
				   rawval = encode(rawval);
				  x = x + "<" + nodename + ">" + rawval + "</" + nodename + ">";
				  break;
				  case "node": x = x + "<" + nodename + ">" + genXMLBranch(node) + "</" + nodename + ">";
				  break;
				  default: x = x + genXMLBranch(node);				
				}		
		}
		return x;
}

// ----------------------------------------------

function AddObjectByName(templateName, th) { // Ищет объект по имени в той же области документа и его копирует
		var p;
		var id;
		p = th.parentNode.parentNode;
		
		if (p) {
				id = findXMLNodeByName(p, templateName);
				if (id) {
						AddObject(id);
				}
		}
		window.focus(th);
}

// ----------------------------------------------

function RemoveThisObject(th,i) { //Удаляет 
	
		var p = GetNamedParent(th);
		if(p != null)
					 RemoveObject(p,i);

}
// ----------------------------------------------

function SetupCalendar(pnode) 
{
    var i;
    var ap;
    var j;
    var k;
    if (pnode && pnode.childNodes)
    {
        if (pnode.childNodes.length > 0) 
        {
            for (i = 0; i < pnode.childNodes.length; i++) 
            {
                    ap=pnode.childNodes[i];
                    if (ap.nodeName == "IMG") {
                        if (ap.src.toLowerCase().indexOf('calendar.gif') >= 0) {
                            for (j = i-1; j >= 0; j--) {
                                if (pnode.childNodes[j].nodeName == "INPUT") {
                                    CalendarSetup(pnode.childNodes[j].id, ap.id);
                                    if (j != i - 1) {
                                        var p = 0;
                                        for (k = j + 1; k <= i-1; k++) {
                                            pnode.removeChild(pnode.childNodes[k-p]);
                                            p = p + 1;
                                            
                                        }
                                        
                                    }
                                    break;
                                }
                            }
                        }
                    }

                    SetupCalendar(pnode.childNodes[i]);
                    
            }
        }   
    }
}

function AddObject(template) // Добавляет объект
{
		newObj = clone(template);
		template.parentNode.appendChild(newObj);
		SetupCalendar(newObj);		
		
		
		return newObj;
}

// ----------------------------------------------

function RemoveObject(template,i) // Удаляет объект
{
		if (template.parentNode.childNodes.length > i) {
				template.parentNode.removeChild(template);
		} 

}


function GetThis(evt) {
		evt = evt || window.event;
		var current = evt.target || evt.srcElement;

		return current;
}

function parseXML(xmlContainer) {
		var xmldoc;
		var text = (typeof (xmlContainer) == 'string' ? xmlContainer : xmlContainer.value);
		
	if(navigator.appName.indexOf("Microsoft") != -1) 
	 {
				xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.async = "false";
				xmlDoc.loadXML(text);
				return xmlDoc;
		}
		else {
				
						parser = new DOMParser();
						xmlDoc = parser.parseFromString(text, "text/xml");
						return xmlDoc;
				}

	
}

function LoadXML(xmlField, xmlContainer) {
		if (xmlField) {
				var xmldoc = parseXML(xmlField);
				processedNodes = "";
				loadXmlBranch(xmlDoc, xmlContainer, processedNodes);
		}
}


function loadXmlBranch(xmlDoc, parentObject, processedNodes) {

		var loopMemoryN = new Array();
		var loopMemoryO = new Array();
		var loopMemoryCount;
		var i;
		var o;
		var n;

		loopMemoryCount = 0;
		//alert(xmlDoc.childNodes.length);

		for (i = 0; i < xmlDoc.childNodes.length; i++) {
				n = xmlDoc.childNodes[i];
			 
				o = findXMLNodeByName(parentObject, n.nodeName);

				if (o) {
					 
						if (getNodeType(o) == "node") {
								if (o.nodeName == 'TR') {
										o.style.display = '';
								}
								if (processedNodes.match("&" + n.nodeName + "&")) {
										o = AddObject(o);
								}
								else {
										processedNodes = processedNodes + "&" + n.nodeName + "&";
								}


								loopMemoryN[loopMemoryCount] = n;
								loopMemoryO[loopMemoryCount] = o;
								loopMemoryCount++;
						}
						if (getNodeType(o) == "leaf") {
						    //                alert(n.childNodes[0].nodeValue);
						    if (n.childNodes.length > 0) {
						        setvalue(o, decode(n.childNodes[0].nodeValue));
						    }
						    else
                            {
						        setvalue(o, decode(n.nodeValue));
                            }
						}
				}
		}

		for (i = 0; i < loopMemoryCount; i++) {
				loadXmlBranch(loopMemoryN[i], loopMemoryO[i], processedNodes);
		}
}

function findXMLNodeByName(obj, name) {
		var i;
		var n;
		var k;
		var nname;
		var l = obj.childNodes.length;
		for (i = 0; i < l; i++) {
						n = obj.childNodes[i];
						nname = getNodeName(n);
						if ((nname!=null) && (nname.toLowerCase() == name.toLowerCase()) ) {
										return n;
								}
				k = findXMLNodeByName(n, name);
				if (k)
						return k;
	 }
}

function ShowHide(ObjectName, th) {
		//var p = th.parentNode;
		//while(p && p.nodeName != 'TABLE' && p.nodeName !='DIV' && p.nodeName != 'TR')
		//{
		//p = p.parentNode;
		//}
		var p = GetNamedParent(th);

		var obj = findXMLNodeByName(p, ObjectName);

		if (obj) {
				if (obj.style) {

						if (obj.style.display == "none") {
								obj.style.display = "";
								if (th.nodeName == "IMG") {
										th.src = "/img/minus.jpg";
								}

						}
						else {
								obj.style.display = "none";
								if (th.nodeName == "IMG") {
										th.src = "/img/plus.jpg";
								}
						}

				}
		}

}
function empty()
{}
var dictReturnObject1, dictReturnObject2, dictReturnObject3, dictReturnObject4;
var dictReturnObjectArr;

function OpenDictExt(url, th, ret, popupheight, popuptitle) 
{
    if(popupheight==null) popupheight=600;
    if(popuptitle==null) popuptitle="Выбор из справочника";

  	var p = GetNamedParent(th);
		dictReturnObjectArr = new Array();

		for (i = 0; i < ret.length; i++) {
				
				dictReturnObjectArr[i] = findXMLNodeByName(p, ret[i]);
				if(!dictReturnObjectArr[i])
						alert('Не найден объект: '+ ret[i]);
		}
	 $("#spravIframe")[0].height= popupheight;
 
	// $("#spravIframe")[0].src=url
	// $("#spravIframe")[0].location.href=url; 
    //$("#spravIframe")[0].location.reload(true);
	 document.frames["spravIframe"].location.href=url;
	 $("#DictDialog").dialog("option","title",popuptitle);	 
	 $("#DictDialog").dialog("open");

}



function setvalue(o, value) {
		var lvalue = value;
		var n = 0;
		var i = 0;
		var offset = 0;
		
		var format = o.getAttribute('format');
		if (format)
		if (format == "money") {
				if (value.indexOf(".") > 0) {
						value = value + "00";
						value = value.substring(0, value.indexOf(".") + 3);
				}
				n = Math.floor((value.length - 3) / 3);
				offset = value.length - n * 3 - 3;
				lvalue = value.substring(0, offset) + " ";
				for (i = 0; i <= n - 1; i++) {
						lvalue = lvalue + " " + value.substr((offset + i * 3), 3);
				}
				value = lvalue + value.substr(value.indexOf("."), 3);


	
		}


		if (value == "null" || value == null)
				value = "";

		if (o.nodeName == "INPUT") {
		    if (o.type == "checkbox" || o.type == "radio") {
		        if (value == "on")
		            o.checked = true;
		        else
		            o.checked = false;
		    }
		    else {
		        $(o).val(decode(value)).change();
		    }
		}
		if (o.nodeName == "TD" || o.nodeName == "SPAN" || o.nodeName == "DIV") {
				o.innerHTML = decode(value);
		}
		if (o.nodeName == "A") {
				o.href = decode(value);
		}
		if (o.nodeName == "TEXTAREA") {
				o.value = decode(value);
		}
		if (o.nodeName == "SELECT") {

				for (i = 0; i < o.length; i++) {
						if (o.options[i].value == value) {
								o.options[i].selected = true;
						}
				}
		}
		if (o.nodeName == "IMG") {
				o.src = value;
		}
}

function getvalue(o) {
		var value;
		if (o.nodeName == "INPUT") {
				//         alert(node.style.xml);

				if (o.type == "checkbox" || o.type == "radio") {
						if (o.checked)
								value = "on";
						else
								value = "";
				}
				else
						value = encode(TrimStr(o.value));
		}
		if (o.nodeName == "TD" || o.nodeName == "SPAN" || o.nodeName == "DIV") {
		    //alert(o.innerHTML);
		    value = encode(TrimStr(o.innerHTML));
	        //alert(value);
		}
		if (o.nodeName == "A") {
		    value = encode(TrimStr(o.href));
		}
		if (o.nodeName == "TEXTAREA") {
		    value = encode(TrimStr(o.value));
		}
		if (o.nodeName == "SELECT") {
		    value = encode(TrimStr(o.value));
		}
		return value;
}


function GetNamedParent(obj) {
		while (obj.parentNode) {
				obj = obj.parentNode;
									 if (getNodeType(obj) > "" && getNodeType(obj) != "leaf") {

								return obj;
						}				
		}
}


function encode(val) {
		var div = document.createElement('div');
		var text = document.createTextNode(val);
		div.appendChild(text);
		//r = div.innerHTML.replace(/\n/g, "<br>");//.replace("<", escape('<'));
		return div.innerHTML.split("&").join(escape("&"));
	};

	function decode(val) {
	    if (val != null) {
	        val = val.split(escape("&")).join("&").split("&amp;").join("&");
	    }
        return val;//.replace(/<br>/gi, "\n");
    }

function de_encode(val) {
    if (val == null)
        return val;    
	r=val.replace(/<br>/gi, "\n");
	return r;  
};

function myDownFile(fid) {
		if (fid == null || fid == '') {
				fid = 0;
		}
		var url = '/download.aspx?fid=' + fid.toString();
		window.open(url);
}

function mySignFile(fid) {
		if (fid == null || fid == '') {
				fid = 0;
		}
		var url = '/dict/SignFile.aspx?fid=' + fid.toString();
	
		window.open(url);
}

function OpenAttachment(th) {
		var pr;
		pr = GetNamedParent(th);

		var c;
		var i;

		c = pr.childNodes.length;
		for (i = 0; i < c; i++) {
				if (pr.childNodes[i].type == "hidden") {
						c = pr.childNodes[i].value;
						var url = '/download.aspx?fid=' + c.toString();
						window.open(url);
						return true;
				}
		}
}


function TrimStr(theString) {
    if (typeof (theString) == 'string') {
        var s = theString.replace("\r", "");
        while (s.indexOf("\r") >= 0) {
            s = s.replace("\r", "");       
        }
        while (s.indexOf("\n") >= 0) {
            s = s.replace("\n", " ");
        }
        return s.replace(/(^\s+)|(\s+$)/g, "");
    }
    else
        return theString;
}

function getNodeType(obj){

if(obj != null)
{
		oType = obj.nodeName;
		if(oType != '#text')
		{
				XMLStr = obj.getAttribute('content');
				if(XMLStr != null)
						return XMLStr.substr(0, XMLStr.search(':')).toLowerCase();
				else
						return '';
		}
}
else
return '';
			 
}

function getNodeName(obj){
var XMLStr
var oType
if(obj != null)
{
		oType = obj.nodeName;
		if(oType != '#text')
		{
				XMLStr = obj.getAttribute('content');
				if(XMLStr != null)
				{
						return XMLStr.substr(XMLStr.search(':')+1, 50).toLowerCase();
				}
				else
				{
						return '';
				}
		}
}
else
{
return '';
}
			 
}

		function dictRetValueExt(t, Obj) {
				var p;
				var o;
				var t;
				p = GetNamedParent(t);
				parent.$("#spravIframe")[0].src = "";
				parent.$("#DictDialog").dialog("close");
				if (p) {
						for (i = 0; i < Obj.length; i++) {
								o = findXMLNodeByName(p, Obj[i]);
								
								if (o) {
										if (window.parent.dictReturnObjectArr[i]) {                                            
										    setvalue(window.parent.dictReturnObjectArr[i], getvalue(o));										    
										}
								}
						}
				}
			 
		}

	
		function SetPos() {
				self.moveTo(300, 100);
				self.resizeTo(600, 600);

		}
		
		function clearValues(t, Obj)
		{
				
				var p;
				var o;
				var t;
				
				p = GetNamedParent(t);
			 
				if (p)
				{
						for (i = 0; i < Obj.length; i++) 
						{
								o = findXMLNodeByName(p, Obj[i]);
								if (o) 
								{
										setvalue(o, "");
								}
						}
				}
		}    

function AddFile(id) {
				var p = document.getElementById(id);
				var lastTr = p.rows[p.rows.length - 1];
                
				//$(lastTr).find("input:checkbox").click();
				//enable(findXMLNodeByName(lastTr, "docfID"));
				//enable(findXMLNodeByName(lastTr, "docfName"));
				$(lastTr).find("input:button:eq(0)").click();
		}
		 

    var SettingA = 0;
    function OpenPage(th, url, parmName, newWin, forFile) {
        var p;
        p = GetNamedParent(th);
        var tag=$(th)[0].tagName;
        var po;
        po = findXMLNodeByName(p, parmName);

        if (po) {
            val = getvalue(po);
            url = url.replace('%parm%', val);
          
            if (forFile != null && forFile) {
                if (SettingA == 0) {
                    OpenDictExt(url, this, new Array(), 200, 'Скачивание файла')
                }

            }
            else {
                if (tag == 'A' && SettingA==1) {
                    $(th).attr('onclick', '');
                    $(th).attr('href', url);
                    if (newWin) {
                        $(th).attr('_target', 'blank');
                    }

                }
                else {
                    if (newWin) {
                        window.open(url);
                    }
                    else {
                        window.location = url;
                    }
            
                }
          
            }


            
        }
        else {
            alert('Не найден объект: ' + parmName);
        }
    }

    
    function OpenPageForFile(th, url, parmName) {
        
        
    }
    function OpenPageUrl(url,newWin) {

            if (newWin) {
                window.open(url);
            }
            else {
                window.location = url;
            }
    }
    
    
    function OpenPageFromDict(th, url, parmName) {
        var p;
        p = GetNamedParent(th);

        var po;
        po = findXMLNodeByName(p, parmName);
        
        if (po) {
            val = getvalue(po);
            url = url.replace('%parm%', val);
            //window.parent.open(url);
            window.parent.document.location = url;
        }
        else {
            alert('Не найден объект: ' + parmName);
        }
    }

    /* Изменить аттрибут disabled в теге input. Полезно для формы редактирования. */
    function changeFieldState(cbEl, fieldName) {
        var o;
        o = findXMLNodeByName(XMLContainer, fieldName);
        if (o) {
            if (o.style.xml == 'leaf') {
                o.style.xml = 'disabled';
                o.disabled = true;
                /*o.disabled = 'disabled';*/
            }
                else {
                o.style.xml = 'leaf';
                o.disabled = false;
                /*o.disabled = '';*/
            }
        }
        cbEl.disabled = true;
    }
    function changeContainerState(cbEl, elSelector) {
        if (cbEl == null || elSelector == null || elSelector == '')
            return;
        if(cbEl.checked)
            $(elSelector).show();
        else
            $(elSelector).hide();
        cbEl.disabled = true;
    }
    function changeContainerDisableState(cbEl, elSelector) {
        if (cbEl == null || elSelector == null || elSelector == '')
            return;
        if (cbEl.checked)
            $(elSelector).attr('disabled','');
        else
            $(elSelector).attr('disabled', 'disabled');
        /*cbEl.disabled = true;*/
    }
    /* не нужно, если нигде не используется - удалить!
    function changeContainersState(cbEl, containersSelector, btnAddId) {
        if (cbEl.checked) {
            if(containersSelector != null && containersSelector != '')
                $(containersSelector).show();
            if (btnAddId != null && btnAddId != '') {
                $('#' + btnAddId).show();
            }
        } else {
            if(containersSelector != null && containersSelector != '')
                $(containersSelector).hide();
            if (btnAddId != null && btnAddId != '') {
                $('#' + btnAddId).hide();
            }
        }
        
    }*/


    function checkIfNum() {//debugger;
        var symbl;
        var evt;
        evt = (event == null ? window.event : event);

        symbl = String.fromCharCode(evt.keyCode);
        if ("0123456789".indexOf(symbl) >= 0) return true;
        else return false;
    }
