﻿// JScript File

window.onload = function()
{
    setupTabs();
    setupRolls();
    loadMap();
}

window.onunload = function()
{
    if( wbLoc != null )
        GUnload();
}

/**** Roll Overs ****/
function setupRolls()
{
    var imgs = document.getElementsByTagName( "img" );
    for( var i = 0; i < imgs.length; ++i )
    {
        if( imgs[i].className.indexOf( "imgRoll" ) >= 0 )
        {
            var path = imgs[i].src.replace( /\.png/, "_h.png" );
            var ti = new Image(); ti.src = path;
            imgs[i].oImg = imgs[i].src;
            imgs[i].hImg = path;
            imgs[i].onmouseover = function() { rollImage( this, true ); }
            imgs[i].onmouseout = function() { rollImage( this, false ); }
        }
    }
}

function rollImage( img, toHover )
{
    if( toHover )
        img.src = img.hImg;
    else
        img.src = img.oImg;
}


/*** Tabs ***/
function setupTabs()
{
    var tabs = document.getElementById( "menu" ).getElementsByTagName( "a" );
    for( var i = 0; i < tabs.length; ++i )
    {
        if( tabs[i].className.indexOf( "grnTab" ) >= 0 )
        {
            if( tabs[i].className.indexOf( "act" ) >= 0 )
                setupElement( tabs[i], new rgb(0,0,0),new rgb(255,255,255), new rgb(136,156,81), new rgb(136,156,81) );
            else
                setupElement( tabs[i], new rgb(255,255,255),new rgb(0,0,0), new rgb(153,153,153), new rgb(136,156,81) );
        }
        else if( tabs[i].className.indexOf( "yelTab" ) >= 0 )
        {
            if( tabs[i].className.indexOf( "act" ) >= 0 )
                setupElement( tabs[i], new rgb(0,0,0),new rgb(255,255,255), new rgb(243,193,64), new rgb(243,193,64) );
            else
                setupElement( tabs[i], new rgb(255,255,255),new rgb(0,0,0), new rgb(153,153,153), new rgb(243,193,64) );
        }
        else
        {
            if( tabs[i].className.indexOf( "act" ) >= 0 )
                setupElement( tabs[i], new rgb(243,193,64),new rgb(255,255,255), new rgb(47,82,143), new rgb(47,82,143) );
            else
                setupElement( tabs[i], new rgb(255,255,255),new rgb(243,193,64), new rgb(153,153,153), new rgb(47,82,143) );
        }
    }
}

/*** Any Fading Colors ***/
var fadeSteps = 20;
var fadeTime = 20;
var fadeItems = new Array();
function setupElement( elm, fcNorm, fcHover, bcNorm, bcHover )
{   
    if( fcNorm.isEq( fcHover ))
        elm.dofc = false;
    else
    {
        elm.dofc = true;
        elm.fcn = fcNorm;
        elm.fcc = new rgb( fcNorm.red, fcNorm.green, fcNorm.blue );
        elm.fch = fcHover;
        elm.fcs = new rgb( ( fcNorm.red - fcHover.red ) / fadeSteps, ( fcNorm.green - fcHover.green ) / fadeSteps, ( fcNorm.blue - fcHover.blue ) / fadeSteps );
    }
    if( bcNorm.isEq( bcHover ))
        elm.dobc = false;
    else
    {
        elm.dobc = true;
        elm.bcn = bcNorm;
        elm.bcc = new rgb( bcNorm.red, bcNorm.green, bcNorm.blue );
        elm.bch = bcHover;
        elm.bcs =new rgb( ( bcNorm.red - bcHover.red ) / fadeSteps, ( bcNorm.green - bcHover.green ) / fadeSteps, ( bcNorm.blue - bcHover.blue ) / fadeSteps );
    }
    
    if( elm.dofc || elm.dobc )
    {
        elm.idx = fadeItems.length;
        elm.onmouseover = function() { fadeStep( this.idx, true ); }
        elm.onmouseout = function() { fadeStep( this.idx, false ); }
        fadeItems.push( elm );
    }
}

function fadeStep( elmidx, toHover )
{
    var elm = fadeItems[elmidx];

    if( elm.timer )
        clearTimeout( elm.timer );
    
    
    var fcFin = false;
    if( elm.dofc )
    {
        if( toHover )
        {
            elm.fcc.sub( elm.fcs );
            if( finishFade( elm.fcn, elm.fch, elm.fcc ))
            {
                elm.fcc.eq( elm.fch )
                fcFin = true;
            }
        }
        else
        {
            elm.fcc.add( elm.fcs );
            if( finishFade( elm.fch, elm.fcn, elm.fcc ))
            {
                elm.fcc.eq( elm.fcn )
                fcFin = true;
            }
        }
        elm.style.color = elm.fcc.str();
    }
    else
        fcFin = true;
    
    var bcFin = false;
    if( elm.dobc )
    {
        if( toHover )
        {
            elm.bcc.sub( elm.bcs );
            if( finishFade( elm.bcn, elm.bch, elm.bcc ))
            {
                elm.bcc.eq( elm.bch )
                bcFin = true;
            }
        }
        else
        {
            elm.bcc.add( elm.bcs );
            if( finishFade( elm.bch, elm.bcn, elm.bcc ))
            {
                elm.bcc.eq( elm.bcn )
                bcFin = true;
            }
        }
        elm.style.backgroundColor = elm.bcc.str();
    }
    else
        bcFin = true;
    
    if( !fcFin || !bcFin )
        elm.timer = setTimeout( "fadeStep(" + elmidx + ", " + toHover + " );", fadeTime );
}

function finishFade( fromCol, toCol, curCol )
{
    if( fromCol.red > toCol.red )
    {
        if( curCol.red > toCol.red )
            return false;
    }
    else
    {
        if( curCol.red < toCol.red )
            return false;
    }       
    
    if( fromCol.green > toCol.green )
    {
        if( curCol.green > toCol.green )
            return false;
    }
    else
    {
        if( curCol.green < toCol.green )
            return false;
    }
    
    if( fromCol.blue > toCol.blue )
    {
        if( curCol.blue > toCol.blue )
            return false;
    }
    else
    {
        if( curCol.blue < toCol.blue )
            return false;
    }
    
    return true;
}

function rgb( red, green, blue )
{
    this.red = red;
    this.green = green;
    this.blue = blue;
}
rgb.prototype.add = function( col )
{
    this.red += col.red;
    this.green += col.green;
    this.blue += col.blue;
}

rgb.prototype.sub = function( col )
{
    this.red -= col.red;
    this.green -= col.green;
    this.blue -= col.blue;
}

rgb.prototype.eq = function( col )
{
    this.red = col.red;
    this.green = col.green;
    this.blue = col.blue;
}
rgb.prototype.isEq = function( col )
{
    if( this.red == col.red && this.green == col.green && this.blue == col.blue )
        return true;
    else
        return false;
}
rgb.prototype.str = function()
{
    var rst = "rgb(" + parseInt(this.red) + "," + parseInt(this.green) + "," + parseInt(this.blue) + ")";
    return rst;
}

/**** Google Maps ****/
var wbLoc = null;
var gDirs = null;
var gLclSearch = null;
function loadMap() {
    var dmap = document.getElementById( "gMap" );
    if( dmap != null )
    {
        gLclSearch = new GlocalSearch();
        if (GBrowserIsCompatible()) 
        {
            var gMapObj = new GMap2(document.getElementById("gMap"));
            
            wbLoc = new GLatLng( 53.4678,-2.304 );
            gMapObj.setCenter(wbLoc, 12);
            var mark = new GMarker( wbLoc );
            gMapObj.addOverlay( mark );
            mark.bindInfoWindowHtml( "<h4>Warren Bruce Court</h4><img src='gfxs/extern_gMap.png' alt='Artists Impression' style='width:200px;height:97px' />" );
            gMapObj.removeMapType(G_SATELLITE_MAP);
            gMapObj.addControl( new GMapTypeControl());
            gMapObj.addControl( new GLargeMapControl());
            gMapObj.addControl( new GOverviewMapControl());       
    
            var dirResult = document.getElementById( "gMapDirResults" );
            if( dirResult != null )        
                gDirs = new GDirections( gMapObj, dirResult );
                
            var gMapBtn = document.getElementById( "gMapDirections" );
            if( gMapBtn != null )
            {
                gMapBtn.onclick = function() { setDirections(); }
            }
            
            var dirStart = document.getElementById( "gMapStart" );
            if( dirStart != null )
            {
                dirStart.onkeypress = function( e ) { return checkDirReturn( e ); }
            }
        }
    }
}

function checkDirReturn( e )
{
    var charCode;
    if( e && e.which )
        charCode = e.which
    else
        charCode = event.keyCode
        
    if( charCode == 13 )
    {
        setDirections();
        return false;
    }
    else
        return true;
}

function setDirections()
{
    gLclSearch.setSearchCompleteCallback(null,
        function()
        {
            if( gLclSearch.results[0])
            {
                var lat = gLclSearch.results[0].lat;
                var lng = gLclSearch.results[0].lng;
                
                var start = new GLatLng( lat, lng );
                var dirResult = document.getElementById( "gMapDirResults" );
                dirResult.style.display = "block";
                var sStr = "from: " + start.toUrlValue() + " to: " + wbLoc.toUrlValue();
                gDirs.load( sStr );
            }
        });
        
    var dirStart = document.getElementById( "gMapStart" );
    gLclSearch.execute( dirStart.value + ", UK" );
}
