﻿// CameraFeed.js

if(typeof(ePlanIt_Camera_Host) == 'undefined')
    ePlanIt_Camera_Host = 'nvrservice.eplanit.com';

var serviceUrl = 'http://' + ePlanIt_Camera_Host + '/';

function preloadImages()
{
    if(document.images)
    {
        var imgs = Array(serviceUrl + 'Images/blank-message.gif', 
            serviceUrl + 'Images/MVT-splash.jpg',
            serviceUrl + 'Images/error-please-standby.gif',
            serviceUrl + 'Images/no-cameras-are-available.gif',
            serviceUrl + 'Images/please-select-a-camera.gif',
            serviceUrl + 'Images/starting-camera-feed.gif'),
            preloads = new Array(imgs.length);
            
        for(var i = 0; i < imgs.length; i++)
        {
            preloads[i] = new Image();
            preloads[i].src = imgs[i];
        }
    }
}

function PublicCameraFeed()
{
    var theFeed, feedTimer, loadStarted, preload = new Image(), instance = this;
    
    this.generateGuid = function()
    {
        var result = '';
    
        for(var i = 0; i < 32; i++)
        {   
            if(i == 8 || i == 12 || i == 16 || i == 20)
                result += '-';

            result += Math.floor(Math.random() * 16).toString(16).toUpperCase();
        }
    
        return result;
    }

    this.feedError = function()
    {
        theFeed.src = serviceUrl + 'Images/error-please-standby.gif';
    }
    
    this.initFeed = function()
    {
        theFeed = document.getElementById('theFeed_' + instance.guid);
        
        //theFeed.src = serviceUrl + 'Images/starting-camera-feed.gif';
        
        preload.onload = instance.frameLoaded;

        clearTimeout(feedTimer);
              
        setTimeout(instance.doFeed, 1500);
    }
    
    this.doFeed = function()
    {
        loadStarted = new Date();

        preload.src = serviceUrl + 'ImageService.asmx/GetLiveImage?auth=public&camera=' 
            + instance.camera + '&rnd=' + Math.floor(Math.random() * 256 + 1);
//alert(preload.src);
    }
    
    this.frameLoaded = function()
    {
        theFeed.src = preload.src;

//        var nextLoad = loadStarted.getTime() + (ePlanIt_Camera_Delay >= 2000 ? ePlanIt_Camera_Delay : 2000);
var nextLoad = loadStarted.getTime() + ePlanIt_Camera_Delay;
        var diff = nextLoad - new Date().getTime();
    
        if(diff > 0)
            feedTimer = setTimeout(instance.doFeed, diff);
        else
            feedTimer = setTimeout(instance.doFeed, 0);
    }
    
    this.camera = ePlanIt_Camera_Guid;
    this.guid = this.generateGuid();
}

preloadImages();    

aFeed = new PublicCameraFeed();

document.write('<a href="http://www.eplanit.com" onclick="window.open(this.href);return false;">'
    + '<img id="theFeed_' + aFeed.guid + '" border="0" src="' + serviceUrl 
    + 'Images/MVT-splash.jpg" alt="Live Video Feed Provided by ePlanIt, Inc."'
    + ((typeof(ePlanIt_Camera_Width) != 'undefined') ? ' width="' + ePlanIt_Camera_Width : '')
    + ((typeof(ePlanIt_Camera_Height) != 'undefined') ? ' height="' + ePlanIt_Camera_Height : '')
    + '" /></a>');

if(window.addEventListener)
{
    window.addEventListener('error', aFeed.feedError, false);
    window.addEventListener('load', aFeed.initFeed, false);
}
else
{
    window.attachEvent('onerror', aFeed.feedError);
    window.attachEvent('onload', aFeed.initFeed);
}
