/* begin javascript for HTML_QuickForm_advmultiselect */

var selectfrom;
var selectto;
var selectelements;

function getSelects()
{
    return selectelements;
}

function setSelects(from, to)
{
    selectelements = new Array(from, to);
}

function addAdvancedMultiSelect(appendto_id, selectto_id, name, size, addtext, removetext)
{
    var appendto = document.getElementById(appendto_id);
    var to = document.getElementById(selectto_id);

    // create new div
    var div = document.createElement('div');
    div.setAttribute('id', 'transferbuttons');

    // create buttons
    var addtxt = document.createTextNode(addtext);
    var addbutton = document.createElement('button');
    var removetxt = document.createTextNode(removetext);
    var removebutton = document.createElement('button');

    // add text to buttons and append them to new div
    addbutton.appendChild(addtxt);
    removebutton.appendChild(removetxt);
    div.appendChild(addbutton);
    div.appendChild(removebutton);

    // create new select
    var from = document.createElement('select');
    from.setAttribute('name', name);
    from.setAttribute('id', name);
    from.setAttribute('size', size);
    from.setAttribute('multiple', 'multiple');

    // add onclick events to select and buttons
    addbutton.action = 'add';
    removebutton.action = 'remove';
    from.action = 'add';
    to.action = 'remove';

    if (window.addEventListener) {
        addbutton.addEventListener('click', moveSelections, false);
        removebutton.addEventListener('click', moveSelections, false);
        to.addEventListener('dblclick', moveSelections, false);
        from.addEventListener('dblclick', moveSelections, false);
    } else {
        addbutton.attachEvent('onclick', moveSelections);
        removebutton.attachEvent('onclick', moveSelections);
        to.attachEvent('ondblclick', moveSelections);
        from.attachEvent('ondblclick', moveSelections);
    }

    // append as first child
    var firstchild = appendto.firstChild;
    appendto.insertBefore(div, firstchild);
    appendto.insertBefore(from, div);

    setSelects(from, to);
    moveAllOptions();
}

function moveAllOptions()
{
    var selects = getSelects();
    var menuFrom = selects[1];
    var menuTo = selects[0];
    var action = 'all';

    // Add items to the 'TO' list.
    for (var i = 0; i < menuFrom.length; i++) {
        if (action == 'all' || action == 'none' || menuFrom.options[i].selected == true ) {
            menuTo.options[menuTo.length]= new Option(menuFrom.options[i].text, menuFrom.options[i].value);
        }
    }

    // Remove items from the 'FROM' list.
    for (var i = (menuFrom.length - 1); i>=0; i--){
        if (action == 'all' || action == 'none' || menuFrom.options[i].selected == true) {
            menuFrom.options[i] = null;
        }
    }
}

function selectOptions()
{
    var selects = getSelects();
    var select = selects[1];
    var option;

    for (var i = 0; i < select.options.length; i++) {
        option = select.options[i];
        if (option) {
            if (option.value == '') {
                option.selected = false;
            } else {
                option.selected = true;
            }
        }
    }
    return true;
}

function moveSelections(e)
{
    // fetch node by determing event target / scrElement
    var target = e['target'] ? 'target' : 'srcElement'; // Gecko uses target to access element properties, IE uses srcElement
    var node = e[target];
    var nodename = node.nodeName;
    var action = node['action'];

    // get select elements
    var selects = getSelects();
    var selectLeft = selects[0];
    var selectRight = selects[1];

    // the (double) clicked node is an <option> node, bubble up to its parent select node
    if (nodename.toLowerCase() == 'option') {
        while (node.parentNode) {
            node = node.parentNode;
            if (node.nodeName.toLowerCase() == 'select') {
                break;
            }
        }
    }

    // set actions if clicked node is a <select> node
    if (node.nodeName.toLowerCase() == 'select') {
        if (node == selectLeft) {
            action = 'add';
        } else {
            action = 'remove';
        }
    }

    if (action) {
        if (action == 'add') {
            menuFrom = selectLeft;
            menuTo = selectRight;
        } else {
            menuFrom = selectRight;
            menuTo = selectLeft;
        }

        // Don't do anything if nothing selected. Otherwise we throw javascript errors.
        if (menuFrom.selectedIndex == -1 && (action == 'add' || action == 'remove')) return;

        // Add items to the 'TO' list.
        for (var i = 0; i < menuFrom.length; i++) {
            if (action == 'all' || action == 'none' || menuFrom.options[i].selected == true ) {
                menuTo.options[menuTo.length]= new Option(menuFrom.options[i].text, menuFrom.options[i].value);
            }
        }

        // Remove items from the 'FROM' list.
        for (var i = (menuFrom.length - 1); i>=0; i--){
            if (action == 'all' || action == 'none' || menuFrom.options[i].selected == true) {
                menuFrom.options[i] = null;
            }
        }

        // cancel event, if possible
        if (e.cancelable) {
            e.preventDefault();
        }
    }
}

/* end javascript for HTML_QuickForm_advmultiselect */

function swapMapImage(imagename, title)
{
    var cityMapOver = document.getElementById('citymap-image');
    cityMapOver.setAttribute('src', '/images/map_'+imagename+'.gif');
    cityMapOver.setAttribute('title', title);
}

function printWindow()
{
    window.print();
}

function onPopup(e)
{
    var target = getTarget(e);
    var node = document.getElementById(target.targetid);

    cancelEvent(e);

    if (node.value != '') {
        popup(target.targethref,target.targetwidth,target.targetheight,target.targethref,'no','no','no');
    }
    return false;
}

function addFavorite(e)
{
    var target = getTarget(e);
    var node = document.getElementById(target.targetid);

    cancelEvent(e);

    if (node.value != '') {
        if (window.sidebar) { // Mozilla Firefox Bookmark
            if (document.all && document.getElementById) {
                window.external.AddFavorite(location.href,target.title);
            } else {
                window.sidebar.addPanel(target.title, location.href,"");
            }
        } else if (document.all ) { // IE Favorite
            window.external.AddFavorite(location.href,target.title);
        } else if (window.opera && window.print) { // Opera Hotlist
            return true;
        }
    }
    return false;
}

function getCookie(name)
{
    var start = document.cookie.indexOf( name + "=" );
    var len = start + name.length + 1;
    if ((!start) && (name != document.cookie.substring(0, name.length))) {
        return null;
    }
    if (start == -1) return null;
    var end = document.cookie.indexOf(";", len);
    if (end == -1) end = document.cookie.length;
    return unescape(document.cookie.substring(len, end));
}

function initBillBoard()
{
    // check if cookie has been set
    var cookie = getCookie('hideBillBoard');

    if (cookie) return;

    openBillBoard();
}

function openBillBoard()
{
    var id = "survey-container";
    var node = document.getElementById(id);
    if (node) {
        node.className = node.className.replace(/nodisplay/, '');
    }
}

function closeBillBoard()
{
    var id = "survey-container";
    var node = document.getElementById(id);
    if (node) {
        node.className = "nodisplay";
    }
}

function closeBillBoardTemporarily()
{
    closeBillBoard();

    // set expiration date for cookie
    var date = new Date();
    date.setDate((date.getDate()+1)); // set to 1 days

    // set cookie
    var cookiestring = 'hideBillBoard=1; expires=' + date;
    document.cookie = cookiestring;
}

function closeBillBoardForever()
{
    closeBillBoard();

    // set expiration date for cookie
    var date = new Date();
    date.setDate((date.getDate()+30)); // set to 30 days

    // set cookie
    var cookiestring = 'hideBillBoard=1; expires=' + date;
    document.cookie = cookiestring;
}
