
var RAND_STR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var RAND_STR_LENGTH = RAND_STR.length;

function trace( value )
{
    alert( value );
}

function Redirect_timer( location, seconds )
{
    var timer_id = setTimeout( "Redirect( \"" + location + "\" )", seconds * 1000 );
}

function Redirect( new_location )
{
    var filtered_location = new_location;
    if( filtered_location.substr( filtered_location.length - 1, 1 ) == "#"
     && filtered_location.length > 2 )
    {
        filtered_location = filtered_location.substr( 0, filtered_location.length - 1 );
    }
    location.href = filtered_location;
}

function Refresh_page()
{
    Redirect( location.href );
}

function GE( name )
{
    return document.getElementById( name );
}

function GV( name )
{
    var element = GE( name );
    if( element == null ) {
        return null;
    }

    return encodeURIComponent( element.value );
}

function SV( name, value )
{
    var element = GE( name );
    if( element != null ) {
        element.value = value;
    }
}

function AE( parent, element )
{
    parent.appendChild( element );
}

function AEN( element_name, element )
{
    AE( GE( element_name ), element );
}

function RE( name )
{
    var element = GE( name );
    if( element == null ) {
        return;
    }
    var parent = element.parentNode;
    parent.removeChild( element );
}

function EE( name )
{
    var element = GE( name );
    if( element == null ) {
        return;
    }

    while( element.hasChildNodes() ) {
        element.removeChild( element.firstChild );
    }
}

function CE( name )
{
    return document.createElement( name );
}

function FE( name )
{
    var element = GE( name );
    if( element == null ) {
        return;
    }

    element.focus();
}

function SIH( name, value )
{
    var element = GE( name );
    if( element == null ) {
        return;
    }

    element.innerHTML = value;
}

function Append_class_name( name, class_name )
{
    var element = GE( name );
    if( element == null ) {
        return;
    }

    var classes = element.className.split( " " );
    if( classes.length != 0 ) {
        for( var i = 0; i < classes.length; i++ ) {
            if( classes[i] == class_name ) {
                return;
            }
        }
        element.className += " " + class_name;
    } else {
        element.className = class_name;
    }
}

function Remove_class_name( name, class_name )
{
    var element = GE( name );
    if( element == null ) {
        return;
    }

    var classes = element.className.split( " " );
    if( classes.length != 0 ) {
        var new_class_name = "";
        for( var i = 0; i < classes.length; i++ ) {
            if( classes[i] == class_name ) {
                continue;
            }
            if( new_class_name != "" ) {
                new_class_name += " ";
            }
            new_class_name += classes[i];
        }

        element.className = new_class_name;
    }
}

var g_load_functions = new Array();

function Add_load_function( func )
{
    g_load_functions.push( func );
}

function Load_init_functions()
{
    for( var i = 0; i < g_load_functions.length; i++ ) {
        g_load_functions[i]();
    }
}

function Enter_key_monitor( e, callback )
{
    var code = -1;
    
    if( e && e.which != null ) {
        code = e.which;
    } else if( event != undefined ) {
        code = event.keyCode;
    }

    if( code == 13 ) {
        callback();
        return true;
    }
    return true;
}

function Is_valid_email_address( email )
{
    if( email == null || email.length < 5 ) {
        return false;
    }

    return ( email.search( /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/ ) != -1 );
}

function Fatal_error( error )
{
    Redirect( "error/" + error );
    return;
}

function Set_status_text( type, text )
{
    var status = GE( "status_" + type );
    if( status == null ) {
        alert( text );
        return;
    }

    status.innerHTML = text;
}
