var Boxes = new Array("message_box_none", "message_box_forewarn", "message_box_moderate", "message_box_heavy", "message_box_extreme");
var specialBoxes = new Array("picture_div");
var protected_box;
document.onkeyup = KeyCheck; // listen for Keyup events


// var element_registered = new Object();

/**
* @brief
*/
// function element_register(group, elem)
// {
//     if( !isArray(element_registered[group]) )
//     {
//         element_registered[group] = new Array();
//     }
//     element_registered[group][] = elem;
// 
//     return;
// } // function register_element(elem)

/**
 * @TODO edit for more pics
 */

function show_user_photo(url, dstId)
{
    fetchUrl(url, dstId); // ajax.js

    document.getElementById(dstId).style.display = 'block';

    var div = dstId + "_outside";
    document.getElementById(div).style.display = 'block';

    return;
}

/**
* @brief
*/
function open_div(ereignis, ID)
{
    if (!ereignis)
    {
        ereignis = window.event;
    }

    var elem = get_html_element(ID);

    if( elem ) //&& elem.style.display=='none' )
    {
        protected=false;
        for (var i=0;i<specialBoxes.length;i++)
        {
            Box = specialBoxes[i];
            if(document.getElementById(Box).style.display == 'block')
            {
                protected=true;
                break;
            }
        }

        if(protected==false)
        {
            protected_box=ID;
            clear_visible(ID);
            elem.style.left  = 30+"%";
            elem.style.top = ereignis.clientY + "px";
            elem.style.display = 'block';
        }
    }
} // function open_div (ereignis,ID)

function open_div_middle(ID)
{
    if( !document.getElementById || document.getElementById(ID).style.display!='none' )
    {
        return;
    }
    if( open_div_middle.arguments.length < 5 )
    {
        return;
    }

    var text = arguments[2]
    var title = arguments[1];
    var author = arguments[3]
    var image = arguments[4];


    // set image
    //document.getElementById("hidden_dyn_picture").src = "";
    document.getElementById("hidden_dyn_picture").src = image;

    // set title
    if(document.getElementById("hidden_dyn_content_title").firstChild != null)
    {
        var zeichenanz = document.getElementById("hidden_dyn_content_title").firstChild.nodeValue.length;
        document.getElementById("hidden_dyn_content_title").firstChild.deleteData(0,zeichenanz);
    }
    document.getElementById("hidden_dyn_content_title").firstChild.data = title;

    // set message
    if(document.getElementById("hidden_dyn_content").firstChild != null)
    {
        var zeichenanz = document.getElementById("hidden_dyn_content").firstChild.nodeValue.length;
        document.getElementById("hidden_dyn_content").firstChild.deleteData(0,zeichenanz);
    }
    document.getElementById("hidden_dyn_content").firstChild.data = text;

    // set author
    if(document.getElementById("hidden_dyn_author").firstChild != null)
    {
        var zeichenanz = document.getElementById("hidden_dyn_author").firstChild.nodeValue.length;
        document.getElementById("hidden_dyn_author").firstChild.deleteData(0,zeichenanz);
    }
    document.getElementById("hidden_dyn_author").firstChild.data = author;

    protected=false;
    for (var i=0;i<specialBoxes.length;i++)
    {
        Box = specialBoxes[i];
        if(document.getElementById(Box).style.display == 'block')
        {
            protected=true;
            break;
        }
    }
    if(protected==false)
    {
        protected_box=ID;
        clear_visible(ID);
        document.getElementById(ID).style.left  = "50%";
        document.getElementById(ID).style.top = "50px";
        document.getElementById(ID).style.display = 'block';
    }

    return;
} // function open_div_middle(ID)

/**
*
*/
function close_div (ID)
{
    var elem = get_html_element(ID);
    if( elem.style.display == 'block' )
    {
        protected_box = 0;
        clear_visible(ID);
    }
} // function close_div (ID)

// hides arrow-navigation divs
function hide_arrows ()
{
    if (document.getElementById('left_arrow')) document.getElementById('left_arrow').style.display='none';
    if (document.getElementById('right_arrow')) document.getElementById('right_arrow').style.display='none';
    if (document.getElementById('up_arrow')) document.getElementById('up_arrow').style.display='none';
    if (document.getElementById('down_arrow')) document.getElementById('down_arrow').style.display='none';
}

// shows arrow-navigation divs
function show_arrows ()
{
    if (document.getElementById('left_arrow')) document.getElementById('left_arrow').style.display='block';
    if (document.getElementById('right_arrow')) document.getElementById('right_arrow').style.display='block';
    if (document.getElementById('up_arrow')) document.getElementById('up_arrow').style.display='block';
    if (document.getElementById('down_arrow')) document.getElementById('down_arrow').style.display='block';
}

function clear_visible(ID)
{
    for (var i=0;i<Boxes.length;i++)
    {
        Box = Boxes[i];
        if(protected_box!=Box)
        {
            document.getElementById(Box).style.display = 'none';
        }
    }

    var elem = get_html_element(ID);
    elem.style.display = 'none';
}

/**
* @brief drop help text
* @param input_number unused!
* @return
*/
function focusInputValue(def_val, type, sender)
{
    //if the value is the default-text
    if( sender.value == def_val )
    {
        //sender.setAttribute("type", type); // IE < 8 does not allow this

        var newInput = document.createElement("input");
        newInput.setAttribute("id", sender.getAttribute("id"));
        newInput.setAttribute("onfocus", sender.getAttribute("onfocus"));
        newInput.setAttribute("onblur", sender.getAttribute("onblur"));
        newInput.setAttribute("name", sender.getAttribute("name"));
        newInput.setAttribute("type", type);

        // append & remove - IE8 wont set focus on newly created element :/
        sender.parentNode.appendChild(newInput);
        sender.parentNode.removeChild(sender);
        //sender.parentNode.replaceChild(newInput, sender);

        newInput.style.color = "#000000";
        newInput.value = "";
        newInput.focus();
    }

    return;
} // function focusInputValue(def_val, type, sender)

/**
* @brief display help text in input field
* @param input_number unused!
* @return
*/
function blurInputValue(def_val, type, sender)
{
    if( sender.value == "" )
    {
        //sender.setAttribute("type", "text"); // IE < 8 does not allow this

        var input = document.createElement("input");
        input.setAttribute("id", sender.getAttribute("id"));
        input.setAttribute("onfocus", sender.getAttribute("onfocus"));
        input.setAttribute("onblur", sender.getAttribute("onblur"));
        input.setAttribute("value", def_val);
        input.setAttribute("name", sender.getAttribute("name"));
        input.setAttribute("type", "text");
        input.style.color = "#A6A6A6";
        sender.parentNode.replaceChild(input, sender);
    }
    return;
} // function blurInputValue(def_val, type, sender)


var current_menu_element = 0;
var current_menu_status = 0;
var current_timeout;
var delay_time = 50;

/**
* @brief
*/
function hide_all_menu_elements(id)
{
    var i = 0;
    //if the menu-element was not displayed in the last 50ms
    if( current_menu_status!=2 )
    {
        for(i=0;i<25;i++)
        {
            if(document.getElementById(id+i))
            {
                current_menu_element = 0;
                current_menu_status = 0;
                document.getElementById(id+i).style.display="none";
            }
        }
    }
    return;
} // function hide_all_menu_elements(id)

function mark_menu_element_inactive(key,id)
{
    current_menu_element=id+key;
    current_menu_status=-1;
    window.clearTimeout(current_timeout);
    current_timeout = window.setTimeout("hide_menu_element("+key+",'"+id+"')", delay_time);
}

function hide_menu_element(key,id)
{
    if(current_menu_element==id+key && current_menu_status==-1)
    {
        current_menu_element=0;
        current_menu_status=0;
        document.getElementById(id+key).style.display="none";
    }
}

function show_menu_element(key,id)
{
    hide_all_menu_elements(id);
    current_menu_element = id+key;
    current_menu_status = 2;
    document.getElementById(id+key).style.display="block";
    window.setTimeout("change_menu_status(1)", delay_time);
}

/*
* @brief
*/
function toggle_menu_element(key, id)
{
    if( !document.getElementById(id + key) )
    {
        return;
    }

    set_display_none_group(id);
    current_menu_element = id + key;
    current_menu_status = 2;

    if( document.getElementById(id + key).style.display != "block" )
    {
        document.getElementById(id + key).style.display = "block";
    }
    else
    {
        document.getElementById(id + key).style.display = "none";
    }

    // hide all other elements in this "group" (id*)
    var allDivs = document.getElementsByTagName('div');
    for(var i=0; i<allDivs.length; i++)
    {
        var sID = allDivs[i].id;
        if( sID.search(id) != -1 && sID != id + key )
        {
            document.getElementById(sID).style.display = 'none';
        }
    } // for(i=0; i<allDivs.length; i++)

    window.setTimeout("change_menu_status(1)", delay_time);

    return;
} // function toggle_menu_element(key,id)

/**
* @brief set display=none 
*/
function set_display_none_group(id_regexp)
{
    return;
} // function set_display_none_group(id_regexp)

/*
* @brief
*/
function change_background(element,color)
{
    element.style.backgroundColor = color;
    return;
} // function change_background(element,color)

/*
* @brief
*/
function change_menu_status(status)
{
    current_menu_status = status;
    return;
} // function change_menu_status(status)

/**
* @brief check if a variable is an array or not
*/
function isArray(obj)
{
    if( obj.constructor.toString().indexOf("Array") == -1 )
    {
        return false;
    }
    else
    {
        return true;
    }
} // function isArray(obj)

/**
* @brief future feature
*/
function showTooltip()
{
}

/**
* @brief analyses keypresses, needed for keyboard navigation in photo-archive
*/
function KeyCheck(e)
{
    if( document.getElementById('picture_div').style.display != 'block' )
    {
        return;
    }

    // ie knows window.event, mozilla expects parameter
    var KeyID = (window.event) ? event.keyCode : e.keyCode;

    // useful output to find out new key ids
    //alert(KeyID);

    switch(KeyID)
    {
        case 27:
        // ESC key
        // hide photo archive
        close_div('picture_div_outside');
        close_div('picture_div');
        break;

        case 37:
        // left arrow key
        if(document.getElementById("left_arrow"))
        {
            window.location = document.getElementById("prev_image_link").href;
        }
        break;

        case 38:
        // top arrow key
        if(document.getElementById("up_arrow"))
        {
            window.location = document.getElementById("next_image_link").href;
        }
        break;

        case 39:
        // right arrow key
        if(document.getElementById("right_arrow"))
        {
            window.location = document.getElementById("next_image_link").href;
        }
        break;

        case 40:
        // down arrow key
        if(document.getElementById("down_arrow"))
        {
            window.location = document.getElementById("prev_image_link").href;
        }
        break;

        default:
        // do nothing, some other key has been pressed
        break;
    } // switch(KeyID)
} // function KeyCheck(e)

/**
* @brief get html element
* @usage get_html_element(element id, object)
*/
function get_html_element(something)
{
    // check if it is already an object (call: get_html_element(this) )
    if( typeof something == 'object' )
    {
        return something;
    }

    var elem = false;
    // this is the way the standards work
    if( document.getElementById(something) )
    {
        elem = document.getElementById(something);
    }
    else if( document.all && document.all[something] ) // this is the way old msie versions work
    {
        elem = document.all[something];
    }
    else if( document.layers && document.layers[something] ) // this is the way nn4 works
    {
        elem = document.layers[something];
    }

    return elem;
} // function get_html_element(something)
/**
* @brief active radio button
*/
function input_radio_checked(something)
{
    var element = get_html_element(something);

    if( !element )
    {
        return false;
    }

    element.checked = 'checked';

    return;
} // function input_radio_checked(element)
