const debounce = (func, delay) => {
let inDebounce
return function() {
const context = this
const args = arguments
clearTimeout(inDebounce)
inDebounce = setTimeout(() => func.apply(context, args), delay)
}
}
if (window.addEventListener) {
window.addEventListener("resize", debounce(browserResize, 500));
} else if (window.attachEvent) {
window.attachEvent("resize", debounce(browserResize, 500));
}
function skyscraperResize() {
if (window.innerWidth < 975 + 17 && document.getElementById("snhb-wide_skyscraper-0")) {
document.getElementById("snhb-wide_skyscraper-0").style.minHeight="0";
}
}
function browserResize() {
if (Number(w3_getStyleValue(document.getElementById("main"), "height").replace("px", "")) > 2200) {
snhb.queue.push(function(){ snhb.startAuction(["main_leaderboard", "wide_skyscraper", "mid_content", "sidebar_sticky", "bottom_medium_rectangle", "right_bottom_medium_rectangle"]) });
}
else {
snhb.queue.push(function(){ snhb.startAuction(["main_leaderboard", "wide_skyscraper", "mid_content", "bottom_medium_rectangle", "right_bottom_medium_rectangle"]) });
}
googletag.cmd.push(function() {
snhb.queue.push(function() {
snhb.localSettings.auction.adUnitHasAdSlot = [];
googletag.destroySlots( googletag.pubads().getSlots() );
});
});
}
skyscraperResize();
function open_menu() {
var x, m;
m = (document.getElementById("leftmenu") || document.getElementById("sidenav"));
if (m.style.display == "block") {
close_menu();
} else {
w3_close_all_nav();
m.style.display = "block";
if (document.getElementsByClassName) {
x = document.getElementsByClassName("chapter")
for (i = 0; i < x.length; i++) {
x[i].style.visibility = "hidden";
}
x = document.getElementsByClassName("nav")
for (i = 0; i < x.length; i++) {
x[i].style.visibility = "hidden";
}
x = document.getElementsByClassName("sharethis")
for (i = 0; i < x.length; i++) {
x[i].style.visibility = "hidden";
}
}
fix_sidemenu();
}
}
function close_menu() {
var m;
m = (document.getElementById("leftmenu") || document.getElementById("sidenav"));
m.style.display = "none";
if (document.getElementsByClassName) {
x = document.getElementsByClassName("chapter")
for (i = 0; i < x.length; i++) {
x[i].style.visibility = "visible";
}
x = document.getElementsByClassName("nav")
for (i = 0; i < x.length; i++) {
x[i].style.visibility = "visible";
}
x = document.getElementsByClassName("sharethis")
for (i = 0; i < x.length; i++) {
x[i].style.visibility = "visible";
}
}
}
if (window.addEventListener) {
window.addEventListener("scroll", function () {fix_sidemenu(); });
window.addEventListener("resize", function () {fix_sidemenu(); });
window.addEventListener("touchmove", function () {fix_sidemenu(); });
window.addEventListener("load", function () {fix_sidemenu(); });
} else if (window.attachEvent) {
window.attachEvent("onscroll", function () {fix_sidemenu(); });
window.attachEvent("onresize", function () {fix_sidemenu(); });
window.attachEvent("ontouchmove", function () {fix_sidemenu(); });
window.attachEvent("onload", function () {fix_sidemenu(); });
}
function fix_sidemenu() {
var w, top;
w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
top = scrolltop()
if (w < 993 && w > 600) {
if (top == 0) {
document.getElementById("sidenav").style.top = "144px";
}
if (top > 0 && top < 100) {
document.getElementById("sidenav").style.top = (144 - top) + "px";
}
if (top > 100) {
document.getElementById("sidenav").style.top = document.getElementById("topnav").offsetHeight + "px";
document.getElementById("belowtopnav").style.paddingTop = "44px";
document.getElementById("topnav").style.position = "fixed";
document.getElementById("topnav").style.top = "0";
document.getElementById("googleSearch").style.position = "fixed";
document.getElementById("googleSearch").style.top = "0";
document.getElementById("google_translate_element").style.position = "fixed";
document.getElementById("google_translate_element").style.top = "0";
} else {
document.getElementById("belowtopnav").style.paddingTop = "0";
document.getElementById("topnav").style.position = "relative";
document.getElementById("googleSearch").style.position = "absolute";
document.getElementById("googleSearch").style.top = "";
document.getElementById("google_translate_element").style.position = "absolute";
document.getElementById("google_translate_element").style.top = "";
}
document.getElementById("leftmenuinner").style.paddingTop = "0"; //SCROLLNYTT
} else {
if (top == 0) {
document.getElementById("sidenav").style.top = "112px";
}
if (top > 0 && top < 66) {
document.getElementById("sidenav").style.top = (112 - top) + "px";
}
if (top > 66) {
document.getElementById("sidenav").style.top = "44px";
if (w > 992) {document.getElementById("leftmenuinner").style.paddingTop = "44px";} //SCROLLNYTT
document.getElementById("belowtopnav").style.paddingTop = "44px";
document.getElementById("topnav").style.position = "fixed";
document.getElementById("topnav").style.top = "0";
document.getElementById("googleSearch").style.position = "fixed";
document.getElementById("googleSearch").style.top = "0";
document.getElementById("google_translate_element").style.position = "fixed";
document.getElementById("google_translate_element").style.top = "0";
} else {
if (w > 992) { document.getElementById("leftmenuinner").style.paddingTop = (112 - top) + "px";} //SCROLLNYTT
document.getElementById("belowtopnav").style.paddingTop = "0";
document.getElementById("topnav").style.position = "relative";
document.getElementById("googleSearch").style.position = "absolute";
document.getElementById("googleSearch").style.top = "";
document.getElementById("google_translate_element").style.position = "absolute";
document.getElementById("google_translate_element").style.top = "";
}
}
}
function sidemenuitemintoview() {
var a, b, i = 0;
a = document.getElementById("leftmenuinnerinner");
if (!a || !a.getElementsByClassName) {return false;}
b = a.getElementsByClassName("active");
if (b.length < 1) {return false;}
while (!isIntoView(a, b[0])) {
i++
if (i > 1000) {break;}
a.scrollTop += 10;
}
}
function isIntoView(x, y) {
var a = x.scrollTop;
var b = a + window.innerHeight;
var ytop = y.offsetTop;
var ybottom = ytop + 140;
return ((ybottom <= b) && (ytop >= a));
}
function scrolltop() {
var top = 0;
if (typeof(window.pageYOffset) == "number") {
top = window.pageYOffset;
} else if (document.body && document.body.scrollTop) {
top = document.body.scrollTop;
} else if (document.documentElement && document.documentElement.scrollTop) {
top = document.documentElement.scrollTop;
}
return top;
}
function open_translate(elmnt) {
var a = document.getElementById("google_translate_element");
if (a.style.display == "") {
a.style.display = "none";
elmnt.innerHTML = "";
} else {
a.style.display = "";
if (window.innerWidth > 500) {
a.style.width = "40%";
} else {
a.style.width = "100%";
}
elmnt.innerHTML = "X";
}
}
function open_search(elmnt) {
var a = document.getElementById("googleSearch");
if (a.style.display == "") {
a.style.display = "none";
a.style.paddingRight = "";
elmnt.innerHTML = "";
} else {
a.style.display = "";
if (window.innerWidth > 700) {
a.style.width = "40%";
} else {
a.style.width = "80%";
}
if (document.getElementById("gsc-i-id1")) {document.getElementById("gsc-i-id1").focus(); }
elmnt.innerHTML = "X";
}
}
function w3_open_nav(x) {
var contentNode, h, menuHeight;
if (document.getElementById("nav_" + x).style.display == "block") {
w3_close_nav(x);
} else {
w3_close_all_nav();
document.getElementById("nav_" + x).style.display = "block";
if (document.getElementById("topnavbtn_" + x)) {
document.getElementById("topnavbtn_" + x).getElementsByTagName("i")[0].style.display = "none";
document.getElementById("topnavbtn_" + x).getElementsByTagName("i")[1].style.display = "inline";
//document.getElementById("nav_" + x).getElementsByTagName("h3")[0].focus();
}
}
h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
menuHeight = document.getElementById("nav_" + x).offsetHeight;
if (menuHeight > h) {
document.getElementById("nav_" + x).style.height = (h - 106) + "px";
}
}
function w3_close_nav(x) {
document.getElementById("nav_" + x).style.display = "none";
if (document.getElementById("topnavbtn_" + x)) {
document.getElementById("topnavbtn_" + x).getElementsByTagName("i")[0].style.display = "inline";
document.getElementById("topnavbtn_" + x).getElementsByTagName("i")[1].style.display = "none";
document.getElementById("nav_" + x).style.height = "";
}
}
function w3_close_all_nav() {
w3_close_all_topnav();
close_menu();
}
function w3_close_all_topnav() {
w3_close_nav("tutorials");
w3_close_nav("references");
w3_close_nav("examples");
}
(function () {
var x, i, a, b, c, d, m;
m = (document.getElementById("leftmenu") || document.getElementById("sidenav"));
x = m.getElementsByTagName("A");
d = document.location.href;
for (i = 0; i < x.length; i++) {
if (d.indexOf(x[i].href) >= 0) {
x[i].className = "active";
} else if (d.indexOf("/tags/att_") > -1) {
c = d.substring(d.indexOf("/tags/att_") + 10, d.lastIndexOf("_"));
if (x[i].href == d.substr(0, d.indexOf("/tags/")) + "/tags/tag_" + c + ".asp") {
x[i].className = "active";
}
} else if (d.indexOf("/howto/default_page") > -1) {
if (x[i].href.indexOf("default.asp") > -1) {
x[i].className = "active";
}
}
}
sidemenuitemintoview()
x = document.getElementById("topnav").getElementsByTagName("A");
for (i = 0; i < x.length; i++) {
a = document.location.pathname;
b = x[i].pathname;
if ((x[i].parentNode.tagName == "LI" || x[i].parentNode.className.indexOf("w3-bar") > -1) && a.substr(0, a.indexOf("/",1)) == b.substr(0, b.indexOf("/",1))) {
x[i].className += " active";
}
}
if (window.addEventListener) {
document.getElementById("main").addEventListener("click", w3_close_all_nav, true);
m.addEventListener("click", w3_close_all_topnav, true);
document.getElementById("right").addEventListener("click", w3_close_all_nav, true);
} else if (window.attachEvent) {
document.getElementById("main").attachEvent("onclick", w3_close_all_nav);
m.attachEvent("onclick", w3_close_all_topnav);
document.getElementById("right").attachEvent("onclick", w3_close_all_nav);
}
if ('ontouchstart' in window || 'onmsgesturechange' in window) {
document.getElementById("leftmenuinnerinner").style.overflowY = "scroll";
}
})();
(function() {
var cx = '012971019331610648934:m2tou3_miwy';
var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//www.google.com/cse/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s);
})();
function searchfield_focus(obj) {
obj.style.color = "";
obj.style.fontStyle = "";
if (obj.value == "Search w3schools.com") {obj.value = "";}
}
var addr = document.location.href;
function displayError() {
document.getElementById("err_url").value = addr;
document.getElementById("err_form").style.display = "block";
document.getElementById("err_email").focus();
hideSent();
}
function hideError() {
document.getElementById("err_form").style.display = "none";
}
function hideSent() {
document.getElementById("err_sent").style.display = "none";
}
function sendErr() {
var xmlhttp;
var err_url = document.getElementById("err_url").value;
var err_email = document.getElementById("err_email").value;
var err_desc = document.getElementById("err_desc").value;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST", "/err_sup.asp", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("err_url=" + err_url + "&err_email=" + err_email + "&err_desc=" + escape(err_desc));
document.getElementById("err_desc").value = "";
hideError();
document.getElementById("err_sent").style.display = "block";
}
function clickFBLike() {
document.getElementById("fblikeframe").style.display = 'block';
document.getElementById("popupDIV").innerHTML = "
";
}
function hideFBLike() {
document.getElementById("fblikeframe").style.display = 'none';
}
function googleTranslateElementInit() {
new google.translate.TranslateElement({
pageLanguage: 'en',
autoDisplay: false,
gaTrack: true,
gaId: 'UA-3855518-1',
layout: google.translate.TranslateElement.InlineLayout.SIMPLE
}, 'google_translate_element');
}
function printPage() {
var content = document.getElementById("main").innerHTML;
var css = "", i, j, c = document.getElementById("main").cloneNode(true);
for (i = 0; i < c.childNodes.length; i++) {
if (c.childNodes[i].nodeType == 1 && c.childNodes[i].getAttribute("id") == "mainLeaderboard") {
c.removeChild(c.childNodes[i]);
content = c.innerHTML;
break;
}
}
var head = document.getElementsByTagName("head")[0].innerHTML;
var myWindow=window.open('','','');
myWindow.document.write("
Copyright 1999-2015 by Refsnes Data. All Rights Reserved.
"); } function openGoogleTranslate() { var d = "text/javascript", e = "text/css", f = "stylesheet", g = "script", h = "link", k = "head", l = "complete", m = "UTF-8", n = "."; document.getElementById("google_translate_element").innerHTML = ""; function p(b) { var a = document.getElementsByTagName(k)[0]; a || (a = document.body.parentNode.appendChild(document.createElement(k))); a.appendChild(b) } function _loadJs(b) { var a = document.createElement(g); a.type = d; a.charset = m; a.src = b; p(a) } function _loadCss(b) { var a = document.createElement(h); a.type = e; a.rel = f; a.charset = m; a.href = b; p(a) } function _isNS(b) { b = b.split(n); for (var a = window, c = 0; c < b.length; ++c) if (!(a = a[b[c]])) return !1; return !0 } function _setupNS(b) { b = b.split(n); for (var a = window, c = 0; c < b.length; ++c) a.hasOwnProperty ? a.hasOwnProperty(b[c]) ? a = a[b[c]] : a = a[b[c]] = {} : a = a[b[c]] || (a[b[c]] = {}); return a } window.addEventListener && "undefined" == typeof document.readyState && window.addEventListener("DOMContentLoaded", function() { document.readyState = l }, !1); if (_isNS('google.translate.Element')) { return }(function() { var c = _setupNS('google.translate._const'); c._cl = 'no'; c._cuc = 'googleTranslateElementInit'; c._cac = ''; c._cam = ''; var h = 'translate.googleapis.com'; var s = (true ? 'https' : window.location.protocol == 'https:' ? 'https' : 'http') + '://'; var b = s + h; c._pah = h; c._pas = s; c._pbi = b + '/translate_static/img/te_bk.gif'; c._pci = b + '/translate_static/img/te_ctrl3.gif'; c._pli = b + '/translate_static/img/loading.gif'; c._plla = h + '/translate_a/l'; c._pmi = b + '/translate_static/img/mini_google.png'; c._ps = b + '/translate_static/css/translateelement.css'; c._puh = 'translate.google.com'; _loadCss(c._ps); _loadJs(b + '/translate_static/js/element/main_no.js'); })(); } /* w3codecolor ver 1.31 by w3schools.com */ ( function w3CodeColor() { var x, i, j, k, l, modes = ["html", "js", "css", "sql", "python"]; if (!document.getElementsByClassName) {return;} k = modes.length; for (j = 0; j < k; j++) { x = document.getElementsByClassName(modes[j] + "High"); l = x.length; for (i = 0; i < l; i++) { x[i].innerHTML = w3CodeColorize(x[i].innerHTML + " ", modes[j]); } } function w3CodeColorize(x, lang) { var tagcolor = "mediumblue"; var tagnamecolor = "brown"; var attributecolor = "red"; var attributevaluecolor = "mediumblue"; var commentcolor = "green"; var cssselectorcolor = "brown"; var csspropertycolor = "red"; var csspropertyvaluecolor = "mediumblue"; var cssdelimitercolor = "black"; var cssimportantcolor = "red"; var jscolor = "black"; var jskeywordcolor = "mediumblue"; var jsstringcolor = "brown"; var jsnumbercolor = "red"; var jspropertycolor = "black"; var phptagcolor = "red"; var phpcolor = "black"; var phpkeywordcolor = "mediumblue"; var phpglobalcolor = "goldenrod"; var phpstringcolor = "brown"; var phpnumbercolor = "red"; var pythoncolor = "black"; var pythonkeywordcolor = "mediumblue"; var pythonstringcolor = "brown"; var pythonnumbercolor = "red"; var angularstatementcolor = "red"; var sqlcolor = "black"; var sqlkeywordcolor = "mediumblue"; var sqlstringcolor = "brown"; var sqlnumbercolor = ""; if (!lang) {lang = "html"; } if (lang == "html") {return htmlMode(x);} if (lang == "css") {return cssMode(x);} if (lang == "js") {return jsMode(x);} if (lang == "php") {return phpMode(x);} if (lang == "sql") {return sqlMode(x);} if (lang == "python") {return pythonMode(x);} return x; function extract(str, start, end, func, repl) { var s, e, d = "", a = []; while (str.search(start) > -1) { s = str.search(start); e = str.indexOf(end, s); if (e == -1) {e = str.length;} if (repl) { a.push(func(str.substring(s, e + (end.length)))); str = str.substring(0, s) + repl + str.substr(e + (end.length)); } else { d += str.substring(0, s); d += func(str.substring(s, e + (end.length))); str = str.substr(e + (end.length)); } } this.rest = d + str; this.arr = a; } function htmlMode(txt) { var rest = txt, done = "", php, comment, angular, startpos, endpos, note, i; php = new extract(rest, "<\\?php", "?>", phpMode, "W3PHPPOS"); rest = php.rest; comment = new extract(rest, "<!--", "-->", commentMode, "W3HTMLCOMMENTPOS"); rest = comment.rest; while (rest.indexOf("<") > -1) { note = ""; startpos = rest.indexOf("<"); if (rest.substr(startpos, 9).toUpperCase() == "<STYLE") {note = "css";} if (rest.substr(startpos, 10).toUpperCase() == "<SCRIPT") {note = "javascript";} endpos = rest.indexOf(">", startpos); if (endpos == -1) {endpos = rest.length;} done += rest.substring(0, startpos); done += tagMode(rest.substring(startpos, endpos + 4)); rest = rest.substr(endpos + 4); if (note == "css") { endpos = rest.indexOf("</style>"); if (endpos > -1) { done += cssMode(rest.substring(0, endpos)); rest = rest.substr(endpos); } } if (note == "javascript") { endpos = rest.indexOf("</script>"); if (endpos > -1) { done += jsMode(rest.substring(0, endpos)); rest = rest.substr(endpos); } } } rest = done + rest; angular = new extract(rest, "{{", "}}", angularMode); rest = angular.rest; for (i = 0; i < comment.arr.length; i++) { rest = rest.replace("W3HTMLCOMMENTPOS", comment.arr[i]); } for (i = 0; i < php.arr.length; i++) { rest = rest.replace("W3PHPPOS", php.arr[i]); } return rest; } function tagMode(txt) { var rest = txt, done = "", startpos, endpos, result; while (rest.search(/(\s|