﻿/*****************************
 * UI specific JavaScript    *
 *****************************/

/* Global variables and onLoad event functions
 ------------------------------------------------*/
var reportWin;
var messageTimer = null;
var reportPageUrl = "report.aspx";

var libOptionsVisible = true;
var libOptionsCollapsed = false;

var libOptionsOriginalHeight;

var wasResized = false;
var ie = $.browser.msie ? parseInt($.browser.version.split('.')[0]) : 0;

// Document ready event functions
$(function () {
    setHeight(false);
    libOptionsOriginalHeight = currentLibOptionsHeight();
});

// Window resize event
$(window).resize(function () {
    wasResized = true;
});

setInterval(function () {
    if (wasResized) {
        wasResized = false;
        setHeight(true);
        updateClientProperties();
    }
}, 100);


/* The actual ui functions
------------------------------------------------*/

// Calculates heights of certain elements (mainly  library and the configurator)
// to achieve a cross-platform liquid layout
function setHeight(refresh) {
    var header = $('#header'),
        categories = $('#categories'),
        functions = $('#functions'),
        planner_area = $('#planner-area'),
        frame = $('#frame'),
        planner_frame = $('#planner-frame'),
        planner = $('#ViewpointArea'),
        flash = $('#FlashArea'),
        info = $('#info'),
        library = $('#library'),
        library_contents = $('#library-contents'),
        library_options = $('#library-options');

    if (ie && ie < 8) {
        //$(info, planner_frame, planner_area).css({ 'bottom': 0, 'right': 0 });

        var topHeight = elementOuterDimensions(header).height + elementOuterDimensions(categories).height;
        var bottomHeight = elementOuterDimensions(functions).height;
        var windowHeight = $(window).height();

        planner_area.height(windowHeight - topHeight - parseInt(planner_area.css('bottom')));
        planner_frame.height(planner_area.height() - info.outerHeight());
        $(planner_frame).width(planner_area.width() - elementOuterDimensions(library).width -5);
        $(info).width(planner_area.width() - elementOuterDimensions(library).width - parseInt(info.css('padding-left')) - parseInt(info.css('padding-right')) -5);
        library.height(planner_area.height() - parseInt(library.css('padding-top')) - parseInt(library.css('padding-bottom')));
    }

    /*
    // Please review the need for these!
    if (designNeedsResize || inDesign) {
        $('#FlashArea').width(planner.height());
        $('#FlashArea').height(planner.width());
        designNeedsResize = false;
    }
    else {
        $('#FlashArea').height(1);
        $('#FlashArea').width(1);
    }
    */

    if (libOptionsVisible)
        library_contents.height(library.height() - elementOuterDimensions(library_options).height - parseInt(library_contents.css('padding-top')) - parseInt(library_contents.css('padding-bottom')));
    else
        library_contents.height(library.height() - parseInt(library_contents.css('padding-top')) - parseInt(library_contents.css('padding-bottom')));
}

function elementOuterDimensions(element) {
    var dimensions = { height: 0, width: 0 };
    var bordersWidth = 0, bordersHeight = 0;
    if (parseInt(element.css("border-top-width")) > 0)
        bordersHeight += parseInt(element.css("border-top-width"));
    if (parseInt(element.css("border-bottom-width")) > 0)
        bordersHeight += parseInt(element.css("border-bottom-width"));
    if (parseInt(element.css("border-left-width")) > 0)
        bordersWidth += parseInt(element.css("border-left-width"));
    if (parseInt(element.css("border-right-width")) > 0)
        bordersWidth += parseInt(element.css("border-right-width"));
    dimensions.height = parseInt(element.css('margin-top')) + parseInt(element.css('padding-top')) + element.height() + parseInt(element.css('padding-bottom')) + parseInt(element.css('margin-bottom')) + bordersHeight;
    dimensions.width = parseInt(element.css('margin-left')) + parseInt(element.css('padding-left')) + element.width() + parseInt(element.css('padding-right')) + parseInt(element.css('margin-right')) + bordersWidth;
    return dimensions;
}

function ShowError( message )
{
    alert( message );
}


$('#buttonUpload').live('click', function () { ajaxFileUpload(); return false; });
function ajaxFileUpload() {

    //starting setting some animation when the ajax starts and completes
    $("#lib-options-loader").ajaxStart(function() {
        $(this).show();
        $('.ajaxForm').hide();
    })
    .ajaxComplete(function() {
        $(this).hide();
        $('.ajaxForm').show();
        // update the library view..
        SendMessage('updateLibrary');
    });

    var fileName = $("#fileToUpload").val();
    var handlerUrl = 'ARImageUploader.ashx?file=' + fileName;

    $.ajaxFileUpload
    (
			{
			    url: handlerUrl,
			    secureuri: false,
			    fileElementId: 'fileToUpload',
			    dataType: 'xml',
			    success: function(data, status) {
			        if (typeof (data.error) != 'undefined') {
			            if (data.error != '') {
			                alert(data.error);
			            } else {
			                alert(data.msg);
			            }
			        }

			    },
			    error: function(data, status, e) {
			        alert(e);
			    }
			}
		)

    return false;
}

function CheckLegality( msg ) {
    var fail = true;
    
    var i = msg.indexOf( ":" );
    if ( i != -1 )
    {
        var status = msg.substring( 0, i );
        if ( status == "success" ) {
            // execute capture with callback..
            ExecuteSceneCapture(null, ReportCaptureUploadDone);              
            actualOpenReport();
        }
        else if ( status == "warning" ) {
            // execute capture with callback..
            ExecuteSceneCapture(null, ReportCaptureUploadDone);

            // only warn
            var failmsg = msg.substring( i+1 );
            alert( failmsg );

            actualOpenReport();
        }
        else
        {
            reportWin.close();
            var failmsg = msg.substring( i+1 );
            alert( failmsg );
        }
    }
}

/*
function OpenReport() {
    ExecuteSceneCapture();

    actualOpenReport();
}
*/

function ShowMessage( message )
{
    showMessageText( message, false );
}

function ShowErrorMessage( message )
{
    showMessageText( message, true );
}
function HideMessage()
{
	document.getElementById('info').innerHTML = '';
	//document.getElementById('infoImage').style.visibility = 'hidden';
}


var oldmessage = '';
function showMessageText( message, isError, keepold )
{
	if( message == null || message.length == 0 )
	    return;
	
	if( messageTimer != null )
		clearTimeout( messageTimer );

    var infoText = document.getElementById('info');
    if( isError )
        infoText.style[ 'color' ] = '#ff0000';
    else
        infoText.style[ 'color' ] = '#A29B86';
	
	//document.getElementById('infoImage').style.visibility = 'visible';
	if ( keepold )
	    oldmessage = infoText.innerHTML;
	else 
	    oldmessage = '';
	    
    infoText.innerHTML = message;

    if( isError )
	    messageTimer = setTimeout( 'HideMessage();',8000 );
}


function loadSavedConfiguration( webid )
{   
    SendMessage( 'loadSavedConfiguration', 'configid=' + webid );
}

function loadSavedConfigurationPC( webid )
{
    SendMessage('loadSavedConfigurationPC', 'configid=' + webid);
}

function TakeScreenShot() {
    if (pluginInstalled) {

        ExecuteClientCapture(null, ScreenShotUploadDone);
        window.open('ScreenShotHandler.ashx?id=ScreenShotImage', '', 'scrollbars=1;menubar=yes,height=300,width=500,resizable=no,toolbar=no,location=no,status=no');
        this.blur();
    }
    return false;
}

//function TakeScreenShot() {
//    if (pluginInstalled) {
//        // screenShotWin = window.open('VividPlatformWeb/RetrieveImage?storageId=ScreenShotImage&download=1', '', 'scrollbars=1;menubar=yes,height=100,width=100,resizable=no,toolbar=no,location=no,status=no');
//        ExecuteClientCapture(null, ScreenShotUploadDone);
//    }
//    return false;
//}

function ScreenShotUploadDone() {
    //    window.location = 'VividPlatformWeb/DownloadImage?id=ScreenShotImage';
}



function ShowReport() {
    if (pluginInstalled) {
        m_prepareCapture = true;
     
        // open blank report..
        reportWin = window.open('about:blank', 'reportWin_' + sessionId, 'scrollbars=1;menubar=yes,height=750,width=800,resizable=yes,toolbar=no,location=no,status=no');

        if (PrepareReport && PrepareReport.toLowerCase() == 'true') {
            SendMessage("prepareReport");
        }
        else {
            // execute capture with callback..
            ExecuteSceneCapture(null, ReportCaptureUploadDone);

            actualOpenReport();
        }
    }
    return false;
}

// update report image..
function ReportCaptureUploadDone() {
    reportWin.updateReportImage();
    m_prepareCapture = false;
}

function actualOpenReport() {
    if (reportWin != null && !reportWin.closed) {
        reportWin.location = reportPageUrl;
        reportWin.focus();
    }
}

function ShowHelp() {
    window.open(helpUrl, 'Help', 'scrollbars=1;menubar=yes,height=750,width=800,resizable=yes,toolbar=no,location=no,status=no');
}


// moved from resizelayout.js

function currentLibOptionsHeight() {
    var totalLOHeight = $('#library-options').height() + parseInt($('#library-options').css('margin-top')) + parseInt($('#library-options').css('margin-bottom')) + parseInt($('#library-options').css('padding-top')) + parseInt($('#library-options').css('padding-bottom')) + parseInt($('#library-options').css('border-top-width')) + parseInt($('#library-options').css('border-bottom-width'));
    return totalLOHeight;
}

function scriptToggleLibOptions() {
    $('#library-options').toggle(100, function () { libOptionsVisible = !libOptionsVisible; setHeight(true); });
}

function showLibraryOptions() {
    $('#library-options').show(100, function () { libOptionsVisible = true; setHeight(true); });
}

function hideLibraryOptions() {
    $('#library-options').hide(100, function () { libOptionsVisible = false; setHeight(true); });
}

function toggleLibOptions() {
    var hiddenHeight = $('a#lib-options-toggle').height() - (parseInt($('#library-options').css('margin-top')) + parseInt($('#library-options').css('margin-bottom')) + parseInt($('#library-options').css('padding-top')) + parseInt($('#library-options').css('padding-bottom')) + parseInt($('#library-options').css('border-top-width')) + parseInt($('#library-options').css('border-bottom-width')));
    var shownHeight = libOptionsOriginalHeight - (parseInt($('#library-options').css('margin-top')) + parseInt($('#library-options').css('margin-bottom')) + parseInt($('#library-options').css('padding-top')) + parseInt($('#library-options').css('padding-bottom')) + parseInt($('#library-options').css('border-top-width')) + parseInt($('#library-options').css('border-bottom-width')));

    if (!libOptionsCollapsed) {
        $('#library-options').animate({
            height: hiddenHeight
        }, 400, null, function () { setHeight(true); });
    }
    else {
        $('#library-options').animate({
            height: shownHeight
        }, 400, null, function () { setHeight(true); });
    }

    libOptionsCollapsed = !libOptionsCollapsed;
}

