PageSourceSearch

https://www.zdravrussia.ru/js/ptl.js?ts=1270736792000

js zdravrussia.ru collected 2026-10-02 12:49:38 UTC 16,614 bytes, 444 lines download raw bytes

1window.ptlHeadElements=new Array();
2window.ptlHead=document.getElementsByTagName("head")[0];
3for(var child=window.ptlHead.firstChild; child!=null;child=child.nextSibling) {
4    if("LINK"==child.tagName) {
5        window.ptlHeadElements.push(child.href);
6    } else if("SCRIPT"==child.tagName) {
7        window.ptlHeadElements.push(child.href)
8    }
9};
10
11/**
12 * A cross-browser method that replaces the markup of an element. The behavior
13 * is similiar to calling element.outerHtml=text in internet explorer. However
14 * this method also takes care of executing javascripts within the markup on
15 * browsers that don't do that automatically.
16 * Also this method takes care of replacing table elements (tbody, tr, td, thead)
17 * on browser where it's not supported when using outerHTML (IE, Opera).
18 *
19 * mode is null for replace, "before" or "after"
20 */
21function ptlReplaceOuterHtml(element, text, mode) {
22    if (element.outerHTML) { // internet explorer or opera support outerHtml
23		// find out the element's index and next element (if any).
24		// outerHtml can replace element with multiple elements and we need
25		// to track the new elements in order to execute the script elements
26		// they contain
27		var next = element.nextSibling;
28
29		var tn = element.tagName;
30
31		// elements inside tables have to be treated special
32		if (tn != 'TBODY' && tn != 'TR' && tn != "TD" && tn != "THEAD") {
33			// not inside table - regular replace
34			element.outerHTML = mode=='before'?text+element.outerHTML : mode=='after'?element.outerHTML+text:text;
35		} else {
36			// this is a hack to get around the fact that internet explorer doesn't allow the
37			// outerHtml attribute on table elements
38			var tempDiv = document.createElement("div");
39			tempDiv.innerHTML = '<table style="display: none">
39' + text + '</table>';
40
41			// we may have inserted multiple elements, so we need to take care of all of them
42			var tempParent = tempDiv.getElementsByTagName(tn).item(0).parentNode;
43
44			var elemNext = element.nextSibling;
45            while(tempParent.childNodes.length > 0) {
46                var tempElement = tempParent.childNodes[0];
47                if('after'==mode) {
48                    element.parentNode.insertBefore(tempElement, elemNext);
49                } else {
50                    element.parentNode.insertBefore(tempElement, element);
51                }
52            }
53
54			//element.parentNode.replaceChild(tempDiv.getElementsByTagName(tn).item(0), element);
55			if('before'!=mode && 'after'!=mode) element.parentNode.removeChild(element);
56		}
57
58    } else {
59    	// create range and fragment
60        var range = element.ownerDocument.createRange();
61        range.selectNode(element);
62		var fragment = range.createContextualFragment(text);
63
64        if('before'==mode) {
65            element.parentNode.insertBefore(fragment, element);
66        } else if('after'==mode) {
67            element.parentNode.insertBefore(fragment, element.nextSibling);
68        } else {
69            element.parentNode.replaceChild(fragment, element);
70        }
71    }
72};
73
74function ptlReplaceInterval(from,to, text) {
75    while(from.nextSibling!=to) from.parentNode.removeChild(from.nextSibling);
76    ptlReplaceOuterHtml(from,text,'after');
77};
78
79function ptlFormEncode(text) {
80    if (encodeURIComponent) {
81        return encodeURIComponent(text);
82    } else {
83        return escape(text);
84    }
85};
86
87function ptlFormSerializeSelect(select){
88	// if it is a non-multiple select, iterating on each element is not required
89	if (select.multiple == false){
90		return ptlFormEncode(select.name) + "=" + ptlFormEncode(select.value) + "&";
91	}
92
93    //else
94    var result = "";
95    for (var i = 0; i < select.options.length; ++i) {
96        var option = select.options[i];
97        if (option.selected) {
98            result += ptlFormEncode(select.name) + "=" + ptlFormEncode(option.value) + "&";
99        }
100    }
101    return result;
102};
103
104// this function intentionally ignores image and submit inputs
105function ptlFormSerializeInput(input) {
106    var type = input.type.toLowerCase();
107    if ((type == "checkbox" || type == "radio") && input.checked) {
108        return ptlFormEncode(input.name) + "=" + ptlFormEncode(input.value) + "&";
109    } else if (type == "text" || type == "password" || type == "hidden" || type == "textarea") {
110		return ptlFormEncode(input.name) + "=" + ptlFormEncode(input.value) + "&";
111	} else {
112		return "";
113    }
114};
115
116// Returns url/post-body fragment representing element (e)
117function ptlFormSerializeElement(e) {
118    var tag = e.tagName.toLowerCase();
119    if (tag == "select") {
120        return ptlFormSerializeSelect(e);
121    } else if (tag == "input" || tag == "textarea") {
122        return ptlFormSerializeInput(e);
123    } else {
124    	return "";
125    }
126};
127
128
129function ptlFormSerialize(element) {
130    while(element.tagName.toLowerCase() != "form" && element.tagName.toLowerCase() != "body") {
131        element=element.parentNode;
132    }
133
134    if (element.tagName.toLowerCase() == "form"){
135        var result = "";
136        for (var i = 0; i < element.elements.length; ++i) {
137            var e = element.elements[i];
138            if (e.name && e.name != "" && !e.disabled) {
139                result += ptlFormSerializeElement(e);
140            }
141        }
142        return result;
143    } else {
144        return ""
145    }
146};
147
148function ajax(element,action) {
149    var parameters=ptlFormSerialize(element);
150    for(var i=2; i<arguments.length; i++) {
151        parameters = parameters + '&' + arguments[i];
152    }
153    ajaxWithoutForm(action,parameters)
154    return false;
155};
156
157if (Function.prototype.bind == null) {
158	Function.prototype.bind = function(object) {
159		var __method = this;
160		return function() {
161			return __method.apply(object, arguments);
162		}
163	}
164};
165
166// do not collect form fields - call ajax only with supplied parameters
167function ajaxWithoutForm(action,parameters) {
168    if(arguments.length ==1) parameters="";
169    var url=window.location.href;
170
171    // set a special flag to allow server distinguish between ajax and non-ajax requests
172    var body="ptl-ajax=true&ptl-action=" + action + "&ptl-pagestate=" + ptlFormEncode(ptlGetState())
173    if(parameters.substring(0,1)!='&') parameters='&'+parameters;
174
175    var request = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
176	var i = url.indexOf('#');
177	if (i > 0)
178		url = url.substring(0, i);
179    request.open("POST", url, true);
180    request.onreadystatechange = ptlCallback.bind(request);
181    request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
182    request.send(body+parameters);
183
184    if (window.ptlAjaxCallInitiated) {
185        window.ptlAjaxCallInitiated();
186    }
187
188    return false;
189};
190
191function ptlCallback() {
192    if(this.readyState == 4) {
193        if (this.status == 200 || this.status == "") { // as stupid as it seems, IE7 sets satus to "" on ok
194            // parse the response if the callback needs a DOM tree
195            var xmldoc;
196//            alert("Request="+window.ptlCall.responseText)
197            if (typeof(window.XMLHttpRequest) != "undefined" && typeof(DOMParser) != "undefined") {
198                var parser = new DOMParser();
199                xmldoc = parser.parseFromString(this.responseText, "text/xml");
200            } else if (window.ActiveXObject) {
201                xmldoc = this.responseXML;
202            }
203            // invoke the loaded callback with an xml document
204            window.ptlProcessCallback(xmldoc);
205        }
206        if ( window.ptlAjaxCallCompleted ) {
207            window.ptlAjaxCallCompleted();
208        }
209        //this.onreadystatechange = function() {};
210        this.abort();
211    }
212};
213
214function ptlProcessCallback(envelope) {
215    var root = envelope.getElementsByTagName("ajax-response")[0];
216    if (!root || !root.childNodes) return;
217    for (var i = 0; i < root.childNodes.length; ++i) {
218        var node = root.childNodes[i];
219        if (node.tagName == "component") {
220           ptlProcessComponent(node);
221        } else if (node.tagName == "repeatable") {
222            var id = node.getAttribute("id");
223            var index = parseInt(node.getAttribute("index"));
224            var mode=node.getAttribute("mode");
225            if(mode=='insert' && index==0) {
226                var after=document.getElementById("ptl$"+id+"$B");
227
228                // change the ids of others
229                for(var renamed=document.getElementById("ptl$"+id+"$"+ index); renamed; index++) {
230                    var nextRenamed=document.getElementById("ptl$"+id+"$"+ (index+1));
231                    renamed.id = "ptl$"+id+"$"+(index+1);
232                    renamed=nextRenamed;
233                }
234                ptlReplaceOuterHtml(after,node.firstChild.nodeValue,'after')
235            } else if(mode=='insert') {
236            	var before = document.getElementById("ptl$"+id+"$" + index);
237            	if (!before){
238                	before = document.getElementById("ptl$"+id+"$E");
239                	ptlReplaceOuterHtml(before,node.firstChild.nodeValue,'before');
240                }
241                else {
242                	/*index++;
243                    for(var renamed=document.getElementById("ptl$"+id+"$"+ index); renamed; index++) {
244                        var nextRenamed=document.getElementById("ptl$"+id+"$"+ (index+1));
245                        renamed.id = "ptl$"+id+"$"+(index+1);
246                        renamed=nextRenamed;
247                    }*/
248                	ptlReplaceOuterHtml(before,node.firstChild.nodeValue,'after');
249                }
250            } else if(mode=='update'){
251                var before=document.getElementById("ptl$"+id+"$"+(index==0?"B":index-1));
252                var after=document.getElementById("ptl$"+id+"$"+index);
253            	if (!before){
254                	before = document.getElementById("ptl$"+id+"$B");
255            	}
256            	if (!after){
257                	after = document.getElementById("ptl$"+id+"$E");
258            	}
259//                alert("replacing="+before.id+" "+after.id)
260                ptlReplaceInterval(before,after,node.firstChild.nodeValue)
261                if (!after) {
262                	after.parentNode.removeChild(after);
263                }
264            } else if(mode=='delete'){
265                var before=document.getElementById("ptl$"+id+"$"+(index==0?"B":index-1));
266                var after=document.getElementById("ptl$"+id+"$"+index);
267                ptlReplaceInterval(before,after,"")
268
269                // delete one marker tag and change the ids of others
270                after.parentNode.removeChild(after)
271                var renamed=document.getElementById("ptl$"+id+"$"+ (++index));
272                while(renamed) {
273                    renamed.id = "ptl$"+id+"$"+(index-1)
274                    renamed=document.getElementById("ptl$"+id+"$"+ (++index));
275                }
276            }
277        } else if (node.tagName == "evaluate") {
278           ptlProcessEvaluation(node);
279        } else if (node.tagName == "header-contribution") {
280          ptlProcessHeaderContribution(node);
281        }
282    }
283};
284
285
286function ptlProcessComponent(node) {
287    // get the component id
288    var compId = node.getAttribute("id");
289    var text="";
290
291    // get the new component body
292    if (node.hasChildNodes()) {
293        text = node.firstChild.nodeValue;
294    }
295
296    // get existing component
297    var element = document.getElementById(compId);
298
299    if (element == null || typeof(element) == "undefined") {
300        window.status=("Component with id '"+compId+"' not found while trying to perform markup update. ");
301    } else {
302        // replace the component
303        ptlReplaceOuterHtml(element, text);
304    }
305};
306
307function ptlProcessEvaluation(node) {
308    var text = node.firstChild.nodeValue;
309    
310//    try {
311        eval(text);
312//    } catch (exception) {
313//        window.status="Exception evaluating javascript: " + exception;
314//    }
315};
316
317function ptlProcessHeaderContribution(node) {
318    var file = node.getAttribute("src");
319    for(var i=0;i<window.ptlHeadElements.length;i++)
320        if(window.ptlHeadElements[i]==file) return;
321    window.ptlHeadElements.push(file);
322
323    if (file.endsWith(".css")) {
324        var css = document.createElement("link");
325        css.rel = "stylesheet";
326        css.href = file;
327        css.type = "text/css";
328        window.ptlHead.appendChild(css);
329    } else if (file.endsWith(".js")) {
330        var js = document.createElement("script");
331        js.type = "text/javascript";
332        js.href = file;
333        window.ptlHead.appendChild(js);
334    }
335};
336
337function ptlSetState(str) {
338    var fld=document.getElementById("ptl-pagestate");
339    if(fld) fld.value=str;
340};
341
342function ptlGetState() {
343    var fld=document.getElementById("ptl-pagestate");
344    return fld ? fld.value : "";
345};
346
347function ptlStdUpload(){
348    var form = document.getElementById('ptlRootForm');
349    form.method = 'POST';
350    form.enctype = 'multipart/form-data';
351    form.encoding = 'multipart/form-data';
352    form.submit();
353};
354
355function ptlUpload(form,token){
356    window.parent.document.getElementById('ptlUploadProgress').style.display='block';
357    window.parent.document.getElementById('uploadIframe').style.display='none';
358    form.submit();
359    window.parent.setTimeout('ptlUploadRefresh()', 1000);
360};
361
362function ptlUploadRefresh() {
363    var container=document.getElementById('ptlUploadProgress');
364    var div=document.getElementById('ptlUploadProgressBar');
365    if(container.style.display=='block' && div.style.width!='100%') {
366        var body="ptl-ajax=true&ptl-action=queryUploadProgress&ptl-pagestate=" + ptlFormEncode(ptlGetState())+'&'+ptlFormSerialize(div)
367        var request = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
368        request.onreadystatechange = ptlCallback;
369        request.open("POST", window.location.href, true);
370        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
371        request.setRequestHeader('Content-length', body.length);
372    	request.setRequestHeader('Connection', 'close');
373    	//alert(body);
374    	//alert('sent');
375        request.send(body);
376        window.setTimeout('ptlUploadRefresh()', 300);
377    }
378};
379
380
381function splitMouseDown(event,div,isVertical,action, mouseUpHandler) {
382    div.style.position="relative"
383    div.style.top="0px"
384    div.style.left="0px"
385    window.draggedCursorY=event.clientY;
386    window.draggedCursorX=event.clientX;
387    window.dragged=div;
388    window.draggedVertical=isVertical;
389    window.draggedAction=action;
390    window.mouseUpHandler = mouseUpHandler;
391    addEvent(document,"mousemove",splitMouseMove)
392    addEvent(document,"mouseup",splitMouseUp)
393    stopEvent(event)
394};
395function splitMouseUp(event) {
396    var d=window.dragged;
397    d.style.position="static";
398    var h=(d.previousSibling.offsetHeight+event.clientY-window.draggedCursorY);
399    var v=(d.previousSibling.offsetWidth+event.clientX-window.draggedCursorX);
400    if(window.draggedVertical) d.previousSibling.style.height=h+"px"
401    if(!window.draggedVertical) d.previousSibling.style.width=v+"px"
402    d.previousSibling.childNodes[0].style.position="relative"
403    d.previousSibling.childNodes[0].style.position="static"
404    removeEvent(document,"mousemove",splitMouseMove)
405    removeEvent(document,"mouseup",splitMouseUp)
406    if (window.mouseUpHandler != null && (typeof window.mouseUpHandler) != 'undefined')
407        window.mouseUpHandler(d.previousSibling, d, d.nextSibling);
408    if(window.draggedAction.length>0) ajaxWithoutForm(window.draggedAction,"splitterPos="+(window.draggedVertical?h:v))
409};
410function splitMouseMove(e) {
411    if(draggedVertical)
412        // vertical splitters have no maximum boundary, since bottom block is just shifted down, not resized
413        window.dragged.style.top = Math.max(-window.dragged.previousSibling.offsetHeight,e.clientY-window.draggedCursorY)+"px";
414    else
415        window.dragged.style.left = Math.min(window.dragged.nextSibling.offsetWidth-5,Math.max(-window.dragged.previousSibling.offsetWidth,e.clientX-window.draggedCursorX))+"px";
416    stopEvent(e)
417};
418
419
420function addEvent(object,event,handler) {
421    if(document.attachEvent)
422        object.attachEvent('on'+event,handler);
423    else
424        object.addEventListener(event,handler,false);
425};
426
427function removeEvent(object,event,handler) {
428    if(document.detachEvent)
429        object.detachEvent('on'+event,handler);
430    else
431        object.removeEventListener(event,handler,false);
432};
433
434function stopEvent(e) {
435    if(!e) e = event;
436    if(typeof(e.stopPropagation) == 'function') e.stopPropagation();
437    if(e.preventDefault) e.preventDefault();
438    if(typeof(e.cancelBubble) == 'boolean') e.cancelBubble = true;
439    e.returnValue = false;
440    return false;
441};
442
443
444

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.