// AUSWÄRTIGES AMT WEBSITE
// BEHAVIOR LAYER

// create print page link on the fly if key items are supported
var hasPrintFeature = (window.print) ? true : false;

if (hasPrintFeature && (document.createElementNS || document.createElement) && document.createTextNode && document.insertBefore && document.appendChild) {
    if (typeof A_PRINT_TEXT == 'string') {
        var li = (document.createElementNS) ? document.createElementNS(XHTML_NS_URI, 'li') : document.createElement('li');
        li.setAttribute('id', 'page-print');
        var a = (document.createElementNS) ? document.createElementNS(XHTML_NS_URI, 'a') : document.createElement('a');
        a.setAttribute('href', '#');
        a.onclick = function() {
            window.print();
            return false;
        }
        a.appendChild(document.createTextNode(A_PRINT_TEXT));
        li.appendChild(a);
        var refNode = document.getElementById('page-send');
        if (refNode) {
            var span = (document.createElementNS) ? document.createElementNS(XHTML_NS_URI, 'span') : document.createElement('span');
            span.appendChild(document.createTextNode(','));
            li.appendChild(span);
            refNode.parentNode.insertBefore(li, refNode);
        } else {
            var siteinfo = document.getElementById('siteinfo');
            if (siteinfo) {
                var ul = (document.createElementNS) ? document.createElementNS(XHTML_NS_URI, 'ul') : document.createElement('ul');
                ul.appendChild(li);
                var hrEls = siteinfo.getElementsByTagName('hr');
                refNode = (hrEls.length > 0) ? hrEls[0] : null;
                if (refNode) {
                    refNode.parentNode.insertBefore(ul, refNode);
                }
            } else {
                var divNode = document.getElementById('print_leaflet');
                if (divNode) {
                    var ul = (document.createElementNS) ? document.createElementNS(XHTML_NS_URI, 'ul') : document.createElement('ul');
                    ul.appendChild(li);
                    if (divNode) {
                        divNode.appendChild(ul);
                    }
                }
            }
        }
    }
}

// Attach events to certain form elements
var searchInputEls = new Array();
if (document.getElementById('search-input')) {
    searchInputEls[searchInputEls.length] = document.getElementById('search-input');
}
if (document.getElementById('search-adv-input')) {
    searchInputEls[searchInputEls.length] = document.getElementById('search-adv-input');
}
for (var q = 0; q < searchInputEls.length; q++) {
    // searchInputEl.setAttribute('autocomplete', 'off'); // prevents exception occuring with mozilla's autocomplete feature
    // this exception though does not break/impact the script but maybe we want to avoid an error at the console...
    var searchInputEl = searchInputEls[q];
    var listener = function(evt) {
        toggleValue(evt);
    }
    addEventHandler(searchInputEl, 'focus', listener);
    addEventHandler(searchInputEl, 'blur', listener);
}

// Prepare external links
var externalLinks = document.getElementsBySelector('a.external'); // 'a.external' instead of '.external' is required by Safari
// also look out for leaflet links...
var leafletLinks = document.getElementsBySelector('a.leaflet');
// also look out for external language links...
var extLangLinks = document.getElementsBySelector('a.extlang');

var aElems = externalLinks.concat(leafletLinks).concat(extLangLinks);

for (var i = 0; i < aElems.length; i++) {
    var aElem = aElems[i];

    // Add click event

    // Woraround for Safari 1.0, which does not execute preventDefault()
    var isSafari = navigator.userAgent.toLowerCase().indexOf('safari') != -1;
    if (isSafari) {
        var onClick = aElem.onclick; // save existing event
        aElem.onclick = function() {
            return false;
        };
        if (typeof onClick == 'function') {
            addEventHandler(aElem, 'click', onClick);
        }
    }
    if (aElem.id == 'nav-chronicle') {
        addEventHandler(aElem, 'click', function(evt) {
            var elem;
            if (this == window && event) { // IE/Win does not understand "this", if event is attached other than "a.onclick = '...'"
                elem = event.srcElement;
                // Source element might be a nested node inside the desired a-node
                while (elem.nodeName.toLowerCase() != 'a') {
                    elem = elem.parentNode;
                }
            } else {
                elem = this;
            }
            openNewWindow(elem.href, '', 'width=804,height=620,resizable,scrollbars,status');
            if (evt && evt.preventDefault) { // cancle default action of click event (W3C DOM approach)
                evt.preventDefault();
            } else { // cancle default action of click event (IE/Win and anything else that gets this far)
                event.returnValue = false; // IE/Win
            }
        });
    } else {
        addEventHandler(aElem, 'click', function(evt) {
            var elem;
            if (this == window && event) { // IE/Win does not understand "this", if event is attached other than "a.onclick = '...'"
                elem = event.srcElement;
                // Source element might be a nested node inside the desired a-node
                while (elem.nodeName.toLowerCase() != 'a') {
                    elem = elem.parentNode;
                }
            } else {
                elem = this;
            }
            openNewWindow(elem.href, '', WINDOW_DEFAULT_FEATURES);
            if (evt && evt.preventDefault) { // cancle default action of click event (W3C DOM approach)
                evt.preventDefault();
            } else { // cancle default action of click event (IE/Win and anything else that gets this far)
                event.returnValue = false; // IE/Win
            }
        });
    }

    // Add or modify existing title attribute
    var className = aElem.className;
    if (!className || "extlang" != className) {
        var titleAttribute = aElem.getAttribute('title');
        if (titleAttribute) {
            titleAttribute = getTitlePrefix(getDocumentLanguage()) + titleAttribute;
        } else {
            titleAttribute = getTitlePrefix(getDocumentLanguage()) + getTextNodeValues(aElem);
        }
        aElem.setAttribute('title', titleAttribute);
    }
}


// Attach events to form elements with a class attribute "error" to remove this class after a change
var elem;
// input and textarea elements
var formElems = new Array();
formElems = formElems.concat(collectionToArray(document.getElementsByTagName('input')), collectionToArray(document.getElementsByTagName('textarea')));
for (var n = 0; n < formElems.length; n++) {
    elem = formElems[n];
    if (elem.className.match(/\berror\b/g)) {
        formElems[n].onchange = function () {
            this.className = this.className.replace(/\berror\b/, '');
            var labelNode = this.previousSibling;
            while(labelNode != null && labelNode.nodeName.toLowerCase() != 'label') {
                labelNode = labelNode.previousSibling;
            }
            deleteErrorClass(labelNode);
        };
    }
}
// input[type="radio"] plus assigned label
var filterFieldsets = document.getElementsBySelector('fieldset.filter-choice');
formElems = new Array();
for (var x = 0; x < filterFieldsets.length; x++) {
    formElems = formElems.concat(collectionToArray(filterFieldsets[x].getElementsByTagName('label')));
    formElems = formElems.concat(collectionToArray(filterFieldsets[x].getElementsByTagName('input')));
}
for (var y = 0; y < formElems.length; y++) {
    formElems[y].onclick = function () {
        var parent = this.parentNode;
        while(parent.tagName.toLowerCase() != 'p') {
            parent = parent.parentNode;
        }
        var labelEls = new Array();
        labelEls = labelEls.concat(collectionToArray(parent.getElementsByTagName('label')), collectionToArray(parent.getElementsByTagName('span')));
        for (var z = 0; z < labelEls.length; z++) {
            deleteErrorClass(labelEls[z]);
        }
    };
}

function deleteErrorClass(el) {
    if (el) {
        el.className = el.className.replace(/\berror\b/, '');
    }
}


// Attach onsubmit event for AJAX
if (req) {
    var forms = document.getElementsBySelector('form.handle-doc');
    for (var j = 0; j < forms.length; j++) {
        var form = forms[j];
        form.onsubmit = function () {
            return false;
        }
        for (var m = 0; m < form.getElementsByTagName('input').length; m++) {
            var input = form.getElementsByTagName('input')[m];
            if (input.type == 'submit' || input.type == 'image') {
                input.setAttribute('title', getTitlePrefix(getDocumentLanguage()) + input.getAttribute('title'));
                input.onclick = function() {
                    this.blur(); // remove ugly border
                    var formNode = this.parentNode;
                    while (formNode.nodeName.toLowerCase() != 'form') {
                        formNode = formNode.parentNode;
                    }
                    var postData;
                    var inputs = formNode.getElementsByTagName('input');
                    for (var k = 0; k < inputs.length; k++) {
                        var input = inputs[k];
                        if (input.type == 'hidden') {
                            postData = (typeof postData == 'undefined') ? '' : (postData + '&');
                            postData += (input.name + '=' + input.value);
                        }
                    }
                    // IE/Win returns an object if we try to get the value of the action
                    // attribute via form.action. We have to get that attribute's value
                    // by reading the attribute node itself.
                    var url = this.form.attributes['action'].nodeValue;
                    url = url.replace('popup.jsp', 'ajax.jsp');
                    handleDownload(url, postData);
                };
            }
        }
    }
}
