// $Id: $
// utilities

function popup (url) {
    fensterDetail = window.open(url,'fenster_1','height=580, width=500, scrollbars=1');
    fensterDetail.focus();
}

function _updateValue (id, value) {
    var element = document.getElementById(id);
    if (element.innerHTML) {
        element.innerHTML = value;
    }
    else {
        element.value = value;
    }
}

// calendar stuff

/**
 * Calendar setup.
 */
function calendarSetup (input, display, button, value, type) {
    // initialize hidden calendar
    // todo: jsCalendar has problems with time part
    // var isDateTime = type == 'dateTime';
    var isDateTime = false;
    var dateValue = value && value.length > 0 ? value : null;
    var ifFormat = isDateTime ? '%Y-%m-%dT%H:%M:%S' : '%Y-%m-%d';
    var daFormat = isDateTime ? '%d.%m.%Y %H:%M' : '%d.%m.%Y';
    Calendar.setup({
        date: dateValue, // use null for empty value
        firstDay: 1, // use monday as first day of week
        showsTime: isDateTime, // configure time display
        inputField: input, // hidden input field
        displayArea: display, // formatted display area
        button: button, // date control image button
        ifFormat: ifFormat, // ISO date/dateTime format
        daFormat: daFormat, // configurable display format
        onSelect: calendarOnSelect, // callback for updating display
        electric: false, // matches xf:incremental, should be a parameter
        singleClick: true
    });

    // initialize display area
    if (dateValue) {
        _updateValue(display, Date.parseDate(dateValue, ifFormat).print(daFormat));
    }
}

/**
 * Calendar onselect callback.
 *
 * Allows jsCalendar to use form controls as display area too.
 */
function calendarOnSelect (calendar) {
    // copied from calendar-setup.js
    var p = calendar.params;
    var update = (calendar.dateClicked || p.electric);
    if (update && p.inputField) {
        p.inputField.value = calendar.date.print(p.ifFormat);
        if (typeof p.inputField.onchange == "function")
            p.inputField.onchange();
    }
    if (update && p.displayArea)
        // start patch by unl
        // check for 'innerHTML' property, otherwise try 'value' property
        if (p.displayArea.innerHTML) {
            p.displayArea.innerHTML = calendar.date.print(p.daFormat);
        }
        else {
            p.displayArea.value = calendar.date.print(p.daFormat);
        }
        // end patch by unl
    if (update && typeof p.onUpdate == "function")
        p.onUpdate(calendar);
    if (update && p.flat) {
        if (typeof p.flatCallback == "function")
            p.flatCallback(calendar);
    }
    if (update && p.singleClick && calendar.dateClicked)
        calendar.callCloseHandler();
}


// l10n stuff

function generifyNumber (id, value) {
    if (!value || value.length == 0) {
        _updateValue(id, "");
        return;
    }

    var parts = value.split(",");
    var number = parts[0].replace(/\./, ",");
    if (parts.length > 1) {
        number = number + "." + parts[1];
    }

    var parse = parseFloat(number);
    if (isNaN(parse)) {
        _updateValue(id, value);
        return;
    }

    _updateValue(id, parse);
}

function localizeNumber (id, value) {
    var parse = parseFloat(value);
    if (isNaN(parse)) {
        _updateValue(id, value);
        return;
    }

    var parts = value.toString().split(".");
    var number = parts[0].replace(/,/, ".");
    if (parts.length > 1) {
        number = number + "," + parts[1];
    }

    _updateValue(id, number);
}


// list selection stuff

function changeSelection (form, source, target) {
    var checked = document.forms[form].elements[source].checked;
    var elements = document.forms[form].elements[target];

    if (elements.length) {
        // array of elements
        for (i = 0; i < elements.length; i++) {
            elements[i].checked = checked;
        }
    }
    else {
        // single element
        elements.checked = checked;
    }

    document.forms[form].elements[source].title = checked ? "Keine auswählen" : "Alle auswählen";
    resetButtons(form, "button", !checked);
    return true;
}

function resetSelection (form, source, target) {
    var checked = eval("document." + form + "." + source + ".checked");
    var disabled = true;

    if (checked) {
        disabled = false;
    }
    else {
        var box = document.forms[form].elements[target];
        box.checked = false;
        box.title = "Alle auswählen";

        var elements = document.forms[form].elements[source];
        if (elements.length) {
            // array of elements
            for (i = 0; i < elements.length; i++) {
                disabled = disabled && !elements[i].checked;
            }
        }
        else {
            // single element
            disabled = true;
        }
    }

    resetButtons(form, "button", disabled);
    return true;
}

function resetButtons (form, name, disabled) {
    var elements = document.forms[form].elements[name];

    if (elements.length) {
        // array of elements
        for (i = 0; i < elements.length; i++) {
            elements[i].disabled = disabled;
        }
    }
    else {
        // single element
        elements.disabled = disabled;
    }

    return true;
}

// view stuff

function hide (prefix, start) {
    var i = start;
    var element = document.getElementById(prefix + "" + i);
    while (element) {
        element.style.display = "none";
        i++;
        element = document.getElementById(prefix + "" + i);
    }
}

function show (prefix, start) {
    var i = start;
    var element = document.getElementById(prefix + "" + i);
    while (element) {
        element.style.display = "";
        i++;
        element = document.getElementById(prefix + "" + i);
    }
}
