/*
    Riksantikvarieämbetet Kulturmiljöserver: JavaScript för klientsidan.

    Version: CVS $Id: default.js,v 1.17 2008/03/26 13:08:13 martin Exp $
*/

/**
 *	Överlagras i app om man vill göra någon extra kontroll innan ett formulär
 *	postas som ett resultat av att ett onchange har inträffat på en droppis.
 *  Se BBR för exempel på hur man kan förhindra att formuläret postas då
 *  användaren tryckt på nedåt/uppåtpilen i en droppis.
*/
function doSubmit(theForm) {
    return true;
}

/**
 * Skickar ett formulär men ser till att det inte skickas mer än en gång pss
 * som formSubmitCheck. Försöker också behålla var i sidan man var i x- och
 * y-led. Främst för att förhindra snabba ompostningar.
 * Anropas från onChange för dropdowns
 */
function submitForm(theForm) {
    // skicka bara om det inte redan är skickat
    if (!validSubmitTime(theForm.submitted)) {
        return false;
    }
    setFormScrollPosition(theForm);

    // flagga att vi skickat detta formulär nu
    theForm.submitted = (new Date()).getTime(); // Ok i IE + Moz
    theForm.submit();
}

function setFormScrollPosition(theForm) {
    // fungerar både i IE6 och nyare FF (testat med 2.0)
    if (theForm.scrollX) {
        theForm.scrollX.value=document.documentElement.scrollLeft;
    }
    if (theForm.scrollY) {
        theForm.scrollY.value=document.documentElement.scrollTop;
    }
}

/**
 * Ser till att ett formulär inte skickas två gånger vid "vanlig browser submit".
 * Anropas vid form.onSubmit. setFormScrollPosition anropas också. BBR använder
 * sig av det, så om det blir problem med KMB får vi synka på något sätt.
 */
function formSubmitCheck(theForm) {
    // skicka bara om det inte redan är skickat
    if (!validSubmitTime(theForm.submitted)) {
        return false;
    }
    setFormScrollPosition(theForm);
    var div = document.getElementById('work-notice');
    if(div != null) {
        div.style.visibility='visible';
    }

    // flagga att vi har skickat detta formulär nu
    theForm.submitted = (new Date()).getTime(); // Ok i IE + Moz
    return true;
}

/**
 * Kontrollerar att den inskickade tiden är passerad med ett visst antal sekunder.
 * Används för att kontrollera när ett visst formulär senast postades.
 */
function validSubmitTime(theTimeInMillis) {
    var lastSubmitted = parseInt(theTimeInMillis);
    if (lastSubmitted == NaN) {
        // ej satt, då är det alltid ok
        return true;
    }
    // om det senast postades för X sek sedan är det ok, vi vill bara
    // hindra snabba ompostningar
    if ((new Date()).getTime() < (lastSubmitted + 5000)) {
        return false;
    }
    return true;
}

/**
 * Ser till att inte formulär postas vid tryck på returtangenten i inmatningsfält.
 * Användning: onkeypress="return noReturnHandler(event);" OBS, variabelnamnet
 *             måste vara event.
 * Bör stängas av för inmatningsfält i sökformulär så att dessa postas mha returtangenten
 * och ev i formulär som används för "bulkinmatning".
 */
function noReturnHandler(e) {
    // hämta rätt i olika browsers
    var key = (window.event ? e.keyCode : e.which);
    return (key != 13);
}

/**
 * Funktion som räknar tecken i främst textareor (onkeyup) och tillåter inte
 * fler än vad argumentet maxKeys anger.
 */
function countKeys(what, maxKeys) {
    var str = new String(what.value);
    var len = str.length;
    if (len > maxKeys) {
        alert('I det här fältet kan du max mata in ' + maxKeys + ' tecken');
        what.value = str.substring(0, maxKeys);
    }
}

/**
 * Tar bort CSS-klass på element om klassen finns. Påverkar ej övriga klasser.
 */
function removeClassName(element, className) {
    if (!element) return;
    var newClassName = '';
    var a = element.className ? element.className.split(' ') : '';
    for (var i = 0; i < a.length; i++) {
        if (a[i] != className) {
            if (i > 0) newClassName += ' ';
            newClassName += a[i];
        }
    }
    element.className = newClassName;
}

/**
 * Lägger till CSS-klass på element, utan att ta bort befintliga.
 */
function addClassName(element, className) {
    if (!element) return;
    removeClassName(element, className);
    element.className += ' ' + className;
}

/**
 * Växlar visning av element via CSS.
 */
var toggleShowText = "Visa";
function toggle(id) {
    var element = document.getElementById(id);
    with (element.style) {
        if (display == "none") {
            display = "";
        } else {
            display = "none";
        }
    }
    var text = document.getElementById(id + "-switch").firstChild;
    if (text.nodeValue.indexOf("Visa") != -1) {
        toggleShowText = text.nodeValue;
        text.nodeValue = "D\u00f6lj";
    } else {
        text.nodeValue = toggleShowText;
    }
}

/**
 * Lagra kaka i klientagenten.
 */
function setCookie(name, value, expires, path, domain, secure) {
    document.cookie= name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

/**
 * Läs kaka från klientagenten.
 */
function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}

/**
 * Radera kaka från klientagenten.
 */
function deleteCookie(name, path, domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}
