// File: /include/js/VoiceMail.js
// Desc: Utility functions
// $Revision: 42$
// $Date: 4/24/2007 11:15:16 AM$
// $Author: Donnie Tognazzini$

function VM_ApplyIE6CacheFix( )
{
    try
    {
        // tell IE6 to cache background images
        document.execCommand('BackgroundImageCache', false, true);
    }
    catch( e )
    {
        // whatever
    }
}

function preloadImages( imageArr )
{
    __imageArray = new Array( );
    for ( var i = 0; i < imageArr.length; ++i )
    {
        var __imageArrayIndex = __imageArray.length;
        __imageArray[ __imageArrayIndex ] = new Image( );
        __imageArray[ __imageArrayIndex ].src = imageArr[ i ];
    }
}

function IsExceptionFiltered( message )
{
    var regexArray = [ /0x[0-9]+\s*\(NS_ERROR_NOT_AVAILABLE\)\s*\[nsIXMLHttpRequest\.status\]/gi ];

    for ( var i = 0; i < regexArray.length; ++i )
    {
        var regex = regexArray[ i ];

        if ( regex.test( message ) )
        {
            return true;
        }
    }

    return false;
}



function EX_Log( message )
{
    if ( IsExceptionFiltered( message ) )
    {
        return;
    }

    var callerInfo;
    if ( controller !== undefined )
    {
        callerInfo = controller.source + ", " + controller.version + ", " + controller.osVersion;
    }
    else
    {
        callerInfo = UTILS.getWithDefault( VM_WIDGET_SOURCE, "" ) + ", " +
                     UTILS.getWithDefault( VM_WIDGET_VERSION, "" ) + ", " +
                     UTILS.getWithDefault( VM_WIDGET_OS_VERSION, "" );
    }

    ( new Image() ).src = "/~r.asp?act=1&caller=" + UTILS.escapeUri( callerInfo ) + "&msg=" + UTILS.escapeUri( message );
}


// Google-specific preference updates
PREF_GetPreferences( ).HiddenPrefs = new PREF_PreferenceInfo( "hiddenPrefs", { } );
PREF_GetPreferences( ).HiddenPrefs.defaultValue[ PREF_KEY_AUTH_INFO ]   = UTILS.toJSONString( PREF_GetPreferences( ).AuthInfo.defaultValue );
PREF_GetPreferences( ).HiddenPrefs.defaultValue[ PREF_KEY_CELL_NUMBER ] = UTILS.toJSONString( PREF_GetPreferences( ).CellNumber.defaultValue );

PREF_GetPreferences( ).HiddenPrefs.GetPreference = function( key )
{
    var hiddenPreferences = this.get( );

    var serializedPref = hiddenPreferences[ key ];

    if ( ! serializedPref )
    {
        return this.defaultValue[ key ];
    }

    return serializedPref;
};

PREF_GetPreferences( ).HiddenPrefs.SetPreference = function( key, value )
{
    var hiddenPreferences = this.get( );

    hiddenPreferences[ key ] = value;

    this.set( hiddenPreferences );
};

function GetGooglePreference( key )
{
    // tunnel CELL_NUMBER and AUTH_INFO
    // through the HIDDEN_PREFS
    if ( key == PREF_KEY_CELL_NUMBER || key == PREF_KEY_AUTH_INFO )
    {
        return PREF_GetPreferences( ).HiddenPrefs.GetPreference( key );
    }

    return UTILS._oPrefs.getString( key );
}

function SetGooglePreference( key, value )
{
    // tunnel CELL_NUMBER and AUTH_INFO
    // through the HIDDEN_PREFS
    if ( key == PREF_KEY_CELL_NUMBER || key == PREF_KEY_AUTH_INFO )
    {
        PREF_GetPreferences( ).HiddenPrefs.SetPreference( key, value );

        return;
    }

    UTILS._oPrefs.set( key, value );
}

function CompleteSetup( )
{
    UTILS.root.controller.m_callListView.CompleteSetup( );

    UTILS.raise( "Start" );
}

function ShowNotSupportedMessage( )
{
    try
    {
        var messageArea = document.getElementById( "messageArea" );

        var otherWidgetsUrl = VM_URL.WWW + "/v2w/otherWidgets.html" +
                              "?src=VG" +
                              "&ver="   + UTILS.escapeUri( VM_WIDGET_VERSION ) +
                              "&os="    + UTILS.escapeUri( navigator.platform );

        messageArea.innerHTML =
            "We're sorry, but the CallWave Visual Voicemail gadget is not currently supported for the Safari browser.<br><br>" +
            "Please try our " +
            "<a href='" + otherWidgetsUrl + "' target='_blank'>Apple Dashboard Visual Voicemail widget</a>.";

        UTILS.adjustHeight( );
    }
    catch ( e )
    {
        EX_Log( "ShowNotSupportedMessage( ) : " + e );
    }
}

// Register the ondomload function
$( function ( )
{
    try
    {
        //alert( 'Stop to attach debugger.' );
        VM_ApplyIE6CacheFix( );

        // use the direct paths instead of the virtual paths
        // for caching images.
        preloadImages( [ VM_RESOURCE_PHONE_ICON_HOME,
                         VM_RESOURCE_PHONE_ICON_WORK,
                         VM_RESOURCE_PHONE_ICON_CELL,
                         VM_RESOURCE_PHONE_ICON_OTHER,
                         VM_RESOURCE_PHONE_ICON_HOME_W,
                         VM_RESOURCE_PHONE_ICON_WORK_W,
                         VM_RESOURCE_PHONE_ICON_CELL_W,
                         VM_RESOURCE_PLAY_IMAGE,
                         VM_RESOURCE_EDIT_IMAGE,
                         VM_RESOURCE_DELETE_IMAGE,
                         VM_RESOURCE_STOP_IMAGE,
                         VM_RESOURCE_OK_BUTTON_IMAGE ] );

        if ( typeof _IG_Prefs != "undefined" )
        {
            UTILS._oPrefs = new _IG_Prefs( );
            UTILS.setNativePreference = SetGooglePreference;
            UTILS.getNativePreference = GetGooglePreference;
        }

        if ( typeof _IG_AdjustIFrameHeight == "function" )
            UTILS.adjustHeight = _IG_AdjustIFrameHeight;

        UTILS.root.controller = new VM_WidgetViewController( "VG", VM_WIDGET_VERSION );

        setTimeout( CompleteSetup, 10 );
    }
    catch ( e )
    {
        EX_Log( "[startup] - caught:\n" + e.message );
    }
} );
