UpdateHash(GetURLHash());

var last_page_called = "";

var url_last_hash = '';
var is_player_loaded = false;

var IntervalPhoneContacts;
var IntervalPhonePhotos;
var IntervalPCPhotos;
var IntervalPCDirectories;
var IntervalPCFiles;

var LastUserActivity = new Date().getTime();

window.onload = function() 
{
    setInterval("InitialiseStateFromURL()", 500);
    setInterval("UserIdleCheck()", 60000); 
}

function GetURLHash() {
    
 var url_current_hash = window.location.href;
 var pos = url_current_hash.indexOf('#') + 1; 
    
 if  (url_current_hash != null && url_current_hash != "")
 {
    url_current_hash = (pos) ? url_current_hash.substr(pos) : '';     
 }	
 
  return url_current_hash;    
}

function InitialiseStateFromURL() {
    var url_current_hash = GetURLHash();
    
    if (url_last_hash != url_current_hash) 
    {
        AjaxPOST(url_current_hash, '', 'right_column_content');
        
        url_last_hash = url_current_hash;
    }
}

function UpdateHash(HashValue) {
    parent.location.hash = HashValue; 
    url_last_hash = GetURLHash();
}

function evalScript(scripts) {
    try {
        if (scripts != '') {
            var script = "";
            scripts = scripts.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function() {
                if (scripts !== null) script += arguments[1] + '\n';
                return '';
            });
            if (script) (window.execScript) ? window.execScript(script) : window.setTimeout(script, 0);
        }
        return false;
    }
    catch (e) {
        alert(e)
    }
}

function SetElementContent(ElementToPopulate, Content, ReplaceExistingContent) {
    var FormElement = document.getElementById(ElementToPopulate);
    
    if (FormElement != null) {
        if (ReplaceExistingContent == true) {
            $('#' + ElementToPopulate).html(Content);
        }
        else 
        {
            $('#' + ElementToPopulate).append(Content);
        }

        //var js_code = FormElement.getElementsByTagName("script");
        //for (var i = 0; i < js_code.length; i++) { eval(js_code[i].text); }
        evalScript(Content);
    }

    return false;
}

function SetContent(ElementToPopulate, Content, ReplaceExistingContent) {
    var FormElement = document.getElementById(ElementToPopulate);
    if (FormElement != null) {
        if (ReplaceExistingContent == true) 
        {
            $('#' + ElementToPopulate).html(Content);
        }
        else
        {
            $('#' + ElementToPopulate).append(Content);
        }

        // Hide the loading animation before evaluating the script tags because they might have error and the animation will never hide.
        DivSetVisibility("ajax_loading_animation", false);
        
        //var js_code = FormElement.getElementsByTagName("script");
        //for (var i = 0; i < js_code.length; i++) { eval(js_code[i].text); }
        evalScript(Content);
    }
    else
    {
        DivSetVisibility("ajax_loading_animation", false);
    }

    return false;
}

function AjaxReturnHttpRequest() {
    var http_request = false;

    if (window.XMLHttpRequest) // Mozilla, Safari,...
    {   http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) { http_request.overrideMimeType('text/html'); } }
    else if (window.ActiveXObject) // IE
    {   try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); }
        catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } } }

    return http_request;
}

function AjaxElementPOST(PageToCall, QueryToSend, ElementToPopulate)
{
    if (PageToCall == undefined || PageToCall == null || PageToCall == '')
    { 
        return false; 
    }
    
    var http_request = AjaxReturnHttpRequest();
    if (!http_request) { return false; }

    http_request.onreadystatechange = function() 
    {    
        if (http_request.readyState == 4 && http_request.status == 200)
        {         
            SetElementContent(ElementToPopulate, http_request.responseText, true); 
        }
    }
    
    http_request.open('POST', PageToCall, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", QueryToSend.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(QueryToSend);
}
        
function AjaxPOST(PageToCall, QueryToSend, ElementToPopulate, LeftColumnIsVisible, SkipWriteHash) 
{
    // If we add  || PageToCall == '' to this condition the default page will not load when we use the back browser button.
    if (PageToCall == undefined || PageToCall == null || PageToCall == "") 
    { 
        return false; 
    }

    UpdateUserLastActivityTime();
    
    last_page_called = PageToCall; 
    
    //////////////////////////////////////////////
    // SET VALUES
    //////////////////////////////////////////////
    
    // ElementToPopulate
    switch(PageToCall)
    {
        case 'my_music_music_page.aspx':
            ElementToPopulate = 'my_music_players'; 
            break;
            
        case '': // default.aspx
            ElementToPopulate = 'default_content'; 
            break;
            
        default:
            if (ElementToPopulate == undefined) 
            { 
                ElementToPopulate = 'right_column_content'; 
            }
    }

    // LeftColumnIsVisible
    if (LeftColumnIsVisible == undefined) 
    { 
        
        switch(PageToCall.toString())
        {
            case '': // default.aspx
            case 'my_music_landing.aspx':
            case 'my_computer_landing.aspx':
            case 'my_phone_landing.aspx':
                LeftColumnIsVisible = false; 
                break;
                
            default:
                LeftColumnIsVisible = true; 
        }
    }

    // SkipWriteHash
    if (SkipWriteHash == undefined) 
    { 
        // Most frequently used value
        SkipWriteHash = false; 
    }
    
    // DefaultContentIsVisible
    var DefaultContentIsVisible = PageToCall == "";

    // MusicPlayerIsVisible
    var MusicPlayerIsVisible = PageToCall == "my_music_music_page.aspx";

    var DisplaySmallPlayer = MusicPlayerIsVisible;

    // per request, show the my music promo everywhere except in the my music page
    DisplaySmallPlayer = true;

    // RightColumnContentIsVisible
    var RightColumnContentIsVisible = true;
    
    switch(PageToCall)
    {
        case '': // default.aspx
        case 'my_music_music_page.aspx':
            RightColumnContentIsVisible = false; 
            break;
    }
    
    DisplayStorageIndicator = true;
    
    // LoadStorageIndicator
    /*switch(PageToCall)
    {
        case 'my_computer.aspx':
        case 'my_phone.aspx':
        case 'my_home_return.aspx':
        case 'my_phone.aspx':
        case 'my_phone_phone_page.aspx':
        case 'my_music.aspx':
        case 'my_music_music_page.aspx':
            LoadStorageIndicator = true; 
            break;
            
        default:
            LoadStorageIndicator = false;
    }*/

    //////////////////////////////////////////////
    // EXECUTE 
    //////////////////////////////////////////////
    
    /*alert('ElementToPopulate: ' + ElementToPopulate + ', LeftColumnIsVisible: ' + LeftColumnIsVisible + ', SkipWriteHash: ' + SkipWriteHash + 
        ', DefaultContentIsVisible: ' + DefaultContentIsVisible + ', MusicPlayerIsVisible: ' + MusicPlayerIsVisible + ', RightColumnContentIsVisible: '  + 
        RightColumnContentIsVisible + ', LoadStorageIndicator: ' + LoadStorageIndicator + 'DisplayStorageIndicator: ' + DisplayStorageIndicator);*/

    if (DisplaySmallPlayer && !is_player_loaded) 
    {
        // per request, always disable the loading of the small player
        //AjaxElementPOST('my_music_player_small.aspx', '', 'ctl00_ContentPlaceHolderContent_left_column_promo_music');
    }
    
    if( DisplayStorageIndicator )
    {
        // We load the storage indicator each time to refresh it
        AjaxElementPOST('storage_indicator.aspx', '', 'left_column_used_storage');
    }
    
    // Mark the active tab
    if( PageToCall.indexOf('my_music') == 0 )
    {
        SetActiveTab('ctl00_main_top_navigation_main_tab_link_music');
    }
    else if( PageToCall.indexOf('my_phone') == 0 ) 
    {
        SetActiveTab('ctl00_main_top_navigation_main_tab_link_phone');
    }
    else if( PageToCall.indexOf('my_computer') == 0 ) 
    {
        SetActiveTab('ctl00_main_top_navigation_main_tab_link_pc');
    }
    else if( PageToCall.indexOf('my_account') == 0 ) 
    {
        SetActiveTab('');
    }
    else
    {
        switch(PageToCall)
        {
            /*case '':
                SetActiveTab('ctl00_main_top_navigation_main_tab_link_music');
                break;*/
                
            /*case '':
                SetActiveTab('ctl00_main_top_navigation_main_tab_link_phone');
                break;*/
                
            /*case '':
                SetActiveTab('ctl00_main_top_navigation_main_tab_link_pc');
                break;*/
                
            case 'default.aspx':
            case 'my_home_return.aspx':
                SetActiveTab('ctl00_main_top_navigation_main_tab_link_home');
                break;
                
            default:
                SetActiveTab('');
        }
    }
    
    ManageDefaultContentVisibility( DefaultContentIsVisible );
    
    ManageRightColumnContentVisibility( RightColumnContentIsVisible );
    
    if( window.ManagePlayerVisibility )
    {
        ManagePlayerVisibility( MusicPlayerIsVisible );
    }
    
    // Special case for my_music_music_page.aspx
    if (MusicPlayerIsVisible) 
    {
        ClearRefreshTimers();
        
        if (is_player_loaded == true) 
        {
            ManageLeftColumnVisibility(LeftColumnIsVisible);
            
            ManageLeftColumnBoxesVisibility(PageToCall, DisplayStorageIndicator, DisplaySmallPlayer);
            
            return;
        }
        else
        {
            is_player_loaded = true;
        }
    }

    //////////////////////////////////////////////////
    // Do and process the request
    //////////////////////////////////////////////////
    
    var http_request = AjaxReturnHttpRequest();
    if (!http_request) { return false; }

    http_request.onreadystatechange = function() {
        if (http_request.readyState == 4 && http_request.status == 200) {
            // If we already requested another page don't load this one.
            if (PageToCall != last_page_called) {
                return;
            }

            ManageLeftColumnVisibility(LeftColumnIsVisible);

            ManageLeftColumnBoxesVisibility(PageToCall, DisplayStorageIndicator, DisplaySmallPlayer);

            SetContent(ElementToPopulate, http_request.responseText, true);

            if (SkipWriteHash != true) {
                UpdateHash(PageToCall);
            }

            ClearRefreshTimers();
        }
    }
    
    http_request.open('POST', PageToCall, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", QueryToSend.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(QueryToSend);

    DivSetVisibility("ajax_loading_animation", true);
}

function ManageLeftColumnBoxesVisibility(PageToCall, DisplayStorageIndicator, DisplaySmallPlayer) {
    var displayPhoneBox = false;
    var displayComputerBox = false;
    var displayMusicBox = false;
    
    if (PageToCall.indexOf("my_phone") == 0 || PageToCall.indexOf("landing") != -1 || PageToCall == "") 
    {
        displayPhoneBox = false;
    }
    else 
    {
        displayPhoneBox = true;
    }

    if (PageToCall.indexOf("my_computer") == 0 || PageToCall.indexOf("landing") != -1 || PageToCall == "") 
    {
        displayComputerBox = false;
    }
    else 
    {
        displayComputerBox = true;
    }

    if ((PageToCall.indexOf("my_music") == 0) || PageToCall.indexOf("landing") != -1 || PageToCall == "") 
    {
        displayMusicBox = false;
    }
    else 
    {
        displayMusicBox = true;
    }
    
    FormElement = document.getElementById('left_column_used_storage');

    if (FormElement != null) 
    {
        if ( ! DisplayStorageIndicator ) 
        {
            FormElement.style.display = "none";
        }
        else 
        {
            FormElement.style.display = "block";
        }
    }

    FormElement = document.getElementById("ctl00_ContentPlaceHolderContent_left_column_promo_phone");

    if (FormElement != null) 
    {
        if ( ! displayPhoneBox ) 
        {
            FormElement.style.display = "none";
        }
        else 
        {
            FormElement.style.display = "block";
        }
    }

    FormElement = document.getElementById("ctl00_ContentPlaceHolderContent_left_column_promo_pc");

    if (FormElement != null) 
    {
        if ( ! displayComputerBox ) 
        {
            FormElement.style.display = "none";
        }
        else 
        {
            FormElement.style.display = "block";
        }
    }
       
    FormElement = document.getElementById("ctl00_ContentPlaceHolderContent_left_column_promo_music");

    if (FormElement != null) 
    {
        if ( ! displayMusicBox ) {
            //FormElement.style.visibility = "hidden";
            FormElement.style.display = "none";
        }
        else {
            //FormElement.style.visibility = "visible";
            FormElement.style.display = "block";
        }
    }

}

function ClearRefreshTimers() {
    clearInterval(IntervalPhoneContacts);
    clearInterval(IntervalPhonePhotos);
    clearInterval(IntervalPCPhotos);
    clearInterval(IntervalPCDirectories);
    clearInterval(IntervalPCFiles);
}


function ManageLeftColumnVisibility(visible)
{
    var left_column_inner_content = document.getElementById("left_column_inner_content");
    
	if (left_column_inner_content != null) 
	{
        FormElement = document.getElementById('left_column_used_storage');
        
	    if( visible )
	    {
	        left_column_inner_content.style.width = "163px";
	        left_column_inner_content.style.height = "auto";
	        left_column_inner_content.style.visibility = "visible";
	        
            if (FormElement != null) 
            { 
                //FormElement.style.visibility = "visible";      
            }
	    }
	    else
	    {
	        left_column_inner_content.style.width = "0px";
	        left_column_inner_content.style.height = "0px";
	        left_column_inner_content.style.visibility = "hidden";
	        
            if (FormElement != null) 
            { 
                //FormElement.style.visibility = "hidden";      
            }
	    }
	}
}

function ManageRightColumnContentVisibility( visible )
{
    var right_column_content = document.getElementById("right_column_content");

    if (right_column_content != null) {
        if (visible) 
        {
            //right_column_content.style.visibility = "visible";
            right_column_content.style.display = "block";
        }
        else 
        {
            right_column_content.innerHTML = "";
            //right_column_content.style.visibility = "hidden";
            right_column_content.style.display = "none";
        }
    }
}

function ManageDefaultContentVisibility(is_visible) {
    var FormElement = document.getElementById('default_content');
    if (FormElement != null) {
        if (is_visible == true) {
            FormElement.style.display = "block";
            
            //FormElement.style.visibility = "visible";
            //FormElement.style.height = "800px";
            //FormElement.style.width = "726px";
            
            SetActiveTab('');
        }
        else {
            FormElement.style.display = "none";
            
            //FormElement.style.visibility = "hidden";
            //FormElement.style.height = "0px";
            //FormElement.style.width = "0px";
        }
    }
}


function UserIdleCheck() {
    var TimeTicksNow = new Date().getTime();
    var UserUdleTime = TimeTicksNow - LastUserActivity;

    // check if we are in the logged in section
    if (document.location.href.indexOf("pages") > -1) {
        // redirect if the user is inactive for over 15 minutes
        if (UserUdleTime > (15 * 60 * 1000)) {
            window.location.href = "logout.aspx?expired=true";
        }
    }
}

function UpdateUserLastActivityTime() {
    LastUserActivity = new Date().getTime();
}
