﻿var contentHandler = "ContentHandler.ashx";
var adoptionCount = 0;
var contentLoading = false;
var animationStates = new Array();
var updateCounter = 0;
var m_measureVisible = false;

var unityCamparams = "";

var unityInited = false;

///======================
/// EVENTS FROM UNITY

function TellHost( message ) {
    alert( message );
}

function InformInited(params)
{
    unityInited = true;
    InitializeApplication();
}

function InformCreated(params)
{
}

function SetScenePrefs(enableQualityManager, enableShadows, enableCameraButtons, enableNaviHelp, enableProductInfo) {
    SendUnityMessage("SetQualityManager", ""+enableQualityManager);
    SendUnityMessage("SetShadows", "" + enableShadows);
    SendUnityMessage("SetCameraButtons", "" + enableCameraButtons);
    SendUnityMessage("SetNaviHelp", "" + enableNaviHelp);
    SendUnityMessage("SetProductInfo", "" + enableProductInfo);
}

function LoadContentDef(message)
{
    SendUnityMessage("LoadDescriptor", message);
}

function ClearUnityScene(message)
{
    SendUnityMessage("ClearScene", "");
}

function SendUnityMessage(func, message) {

    if (!unityInited)
        return;

    uniObj.msg("/SceneManager", func, message);
}

function ShowMeasureSticks(message) {
    if (!m_measureVisible) {
        // only works for SceneManager..
        SendUnityMessage('UpdateMeasureSurface', 'MeasureRetriever.ashx');
        m_measureVisible = true;
    }
}

function HideMeasures() {
    if (m_measureVisible) {
        SendUnityMessage('HideMeasureSurface','');
        m_measureVisible = false;
    }
}

function ExecuteUnityAction(action, param) {
    // window.status = "ExecuteUnityAction(" + action + ", " + param+ ")";
    switch (action) {
        case 'Deselect':
            Deselect();
            break;

        case 'PlacerClicked':
            InstantiatePlacer(param);
            break;

        case 'ElementClicked':
            SelectElement(param);
            break;

        case 'ElementDoubleClicked':
            ToggleConfigState(param);
            break;

        case 'ElementReleased':
            //            var loc = vmp.GetProperty( 'MTSInstance.' + param, 'loc_' );
            //            var rot = vmp.GetProperty( 'MTSInstance.' + param, 'rot_' );

            //            PinElement( param, loc, rot );
            break;

        case 'AnimationTriggered':
            //alert(param);
            break;

        default:
            alert('unknown content action!');
    }
}

/// /EVENTS FROM UNITY
///======================

///======================
/// Content Implementation (from Viewpoint implemetation)


function UpdateContent()
{
    var time = ( new Date() ).getTime();
    var command = contentHandler + "?CMD=update&TIME=" + time;

    contentLoading = true;
    LoadContentDef(command);
	return;
}

function RefreshContent()
{
    var time = ( new Date() ).getTime();
    var command = contentHandler + "?CMD=refresh&TIME=" + time;

    ClearUnityScene();
    contentLoading = true;
    LoadContentDef(command);
	return;
}

function RefreshDone()
{
    contentLoading = false;
}

var sceneReady = false;
function UpdateDone()
{
    if( updateCounter <= 1 ) {
        if( updateCounter == 0 ) {
            sceneReady = true;
            
            DisplayInstruction( bufferedText );
            bufferedText = '';
        }
        updateCounter++;
    }
    contentLoading = false;
}

function InitializeContent()
{
    ClearUnityScene(""); // Keep init scene? / Keep masters ??
	return;
}

function AddBoundingBox( message )
{
    var bbdata = message.split( ':' );
    for( var i = 0; i < bbdata.length; i++ )
    {
        SendUnityMessage( 'AddBoundingBox', bbdata[ i ] );
    }
}

function PinElement(data) {
    SendMessage('setTransform', data);
}

/*
function OnWallSelect( message )
{
    SelectWall( message );
}
*/

function SelectView(view) {
    switch (view) {
        case 'CameraFront':
            SendMessage('selectFrontView');
            break;
            
        case 'CameraTop':
            SendMessage('selectTopView');
            break;
        
        case 'CameraPerspective':
            SendMessage('selectPerspectiveView');
            break;

        default:
            alert( 'Unknown camera view: ' + view );
            break;
    } 
}

function ShowMeasure( measureText ) {
    if (measureText.length > 0) {
        SendUnityMessage( 'ShowProductInfo', measureText );
    }
}

function ShowRoomInfo( message )
{
    SendUnityMessage( 'ShowRoomInfo', message );  
}

function SetConfigType( message )
{
    SendUnityMessage( 'SetConfigType', message );
}

function ShowConfigInfo( message )
{
    SendUnityMessage( 'ShowConfigInfo', message );
}

function HideConfigInfo()
{
    SendUnityMessage( 'HideConfigInfo', '' );
}

function RemoveBoundingBox()
{
    SendUnityMessage( 'RemoveBoundingBox', message );
}

function GetCameraParameters() {
	return unityCamparams;
}

function setCameraParameters(params) {
	unityCamparams = params; 
}


function ActivateCapture(active) {
    if (active)
        SendUnityMessage('ActivateCapture', 'true');
    else 
    {
        if( !m_prepareCapture )
            SendUnityMessage('ActivateCapture', 'false');
    }
}

var callbackCaptureDone = null;
function CaptureDone() {
	if (callbackCaptureDone != null) {
		callbackCaptureDone();
		callbackCaptureDone = null;
	}
}

var callbackCaptureUploadDone = null;
function CaptureUploadDone() {
	if (callbackCaptureUploadDone != null) {
		callbackCaptureUploadDone();
		callbackCaptureUploadDone = null;
	}
}

function ExecuteOffScreenCapture(captureParams,captureDone,captureUploadDone) {
	callbackCaptureDone = captureDone;
	callbackCaptureUploadDone = captureUploadDone;

	SendUnityMessage('DoOffScreenCapture', captureParams);
}

function ExecuteSceneCapture() {
    var captureParameters = 'CaptureHandler.ashx';
    captureParameters += '?width=600';
    captureParameters += '&height=400';

    SendUnityMessage('DoCapture', captureParameters);
}

function ExecuteClientCapture() {
    if (!flashVisible) {
        var captureParameters = 'CaptureHandler.ashx?storageId=ScreenShotImage';
        SendUnityMessage('DoCapture', captureParameters);
    } else {
        alert("Poistu huoneen muokkaustilasta ottaaksesi kuvan");
    }
}

function DebugValue( val )
{
    window.status = val;
}


var bufferedText = '';
function DisplayInstruction( text )
{
    if( sceneReady )
        SendUnityMessage('ShowInfoBubble', text);
    else
        bufferedText = text;
}

function ShowConfirmDialog( message )
{
}

function switchToRoomState()
{
	SendUnityMessage('switchToRoomState', '');
}

function switchToArrangeState()
{
	SendUnityMessage('switchToArrangeState', '');
}

function switchToColorState()
{
	SendUnityMessage('switchToColorState', '');
}

function switchToBuildState()
{
	SendUnityMessage('switchToBuildState', '');

}

function EnableGrid( enabled )
{
//    if( enabled )
//        vmp.SetProperty('MTSInstance.InitialScene_0','clps','0');
//    else
//        vmp.SetProperty('MTSInstance.InitialScene_0','clps','1');
}



function UpdateActiveContentGroups(itemNames)
{
    SendUnityMessage('SetControllableGroups', itemNames);
}

//AUGMENTED REALITY
function ShowArBackground(imageName, matrix, projection, fov, cameraParams) {
    //alert("unity_context.js::ShowArBackground():  " + fov);
    SendUnityMessage('setARImage', imageName + '*' + matrix + '*' + projection + '*' + fov + '*' + cameraParams);
}

function HideArBackground() {
    //    alert("unity_context.js::HideArBackground()");
    SendUnityMessage('hideARImage');
}

function EnableArBackground() {
    //    alert("unity_context.js::EnableArBackground  ()");
    SendUnityMessage('enableARImage');
}

function DisableArBackground() {
    //    alert("unity_context.js::DisableArBackground  ()");
    SendUnityMessage('disableARImage');
}

function UpdateARCamera() {
    SendMessage('UpdateARCamera');
}

/// Content Implementation (from Viewpoint implemetation)
///======================

