﻿/*/***************************************************************************************************************************
/// <name>     spin - Common Java Script Library</name>
/// <summary>  This JavaScript provides common functions for the menu and other dynamic navigation functionality.</summary>
/// <history>

/// </history>
/// <notes>
/// </notes>
///***************************************************************************************************************************/


///**********************************************************************************
/// <name>    Initialize </name>
/// <summary> Initialize function that loads immediately when content is downloaded.</summary>
///**********************************************************************************
function Initialize()
{
    PageInit();
    siteBlockPosition = FindPosition(GetElementObjectById("divSiteBlock"));
}

///**********************************************************************************
/// <name>    InitializeOnLoad </name>
/// <summary> Initialize function that loads on PageLoad.</summary>
///**********************************************************************************
function InitializeOnLoad()
{
    PageInitOnLoad();
}

///**********************************************************************************
/// <name>    CalculateSiteBlockPosition </name>
/// <summary> Calculates the position of the siteblock after resize.</summary>
///**********************************************************************************
function CalculateSiteBlockPosition()
{
    if(!siteBlockPositionCalculated)
    {
        siteBlockPosition = FindPosition(GetElementObjectById("divSiteBlock"));
        siteBlockPositionCalculated = true;
    }
}

///**********************************************************************************
/// <name>    ReCalculateSiteBlockPosition </name>
/// <summary> Re-calculates the position of the siteblock after resize.</summary>
///**********************************************************************************
function ReCalculateSiteBlockPosition()
{
    siteBlockPosition = FindPosition(GetElementObjectById("divSiteBlock"));
    siteBlockPositionCalculated = true;
}

function PageInitOnLoad(){} // Virtual Function
function PageInit(){}       // Virtual Function

///**********************************************************************************
/// <name>    FindPosition </name>
/// <summary> Finds the position (returns an [x,y] array) of the given element.</summary>
///**********************************************************************************
function FindPosition(element) 
{
	var curLeft = curTop = 0;
	
	if (element.offsetParent) 
	{
	    do {
		    curLeft += element.offsetLeft;
		    curTop += element.offsetTop;
        } while (element = element.offsetParent);
    }
    return [curLeft, curTop];
}

///**********************************************************************************
/// <name>    ResolveUrl </name>
/// <summary> Resolves the URL based the application path (i.e. ~/Default.aspx).</summary>
///**********************************************************************************
function ResolveUrl(url) 
{
    if (url.indexOf("~/") == 0) {
        url = baseUrl + url.substring(2);
    }
    return url;
}

///**********************************************************************************
/// <name>    UseGoogleAnalytics </name>
/// <summary> Based on the current host, it determines whether to log statistics.
///           This is to ignore staging environments.</summary>
///**********************************************************************************
function UseGoogleAnalytics()
{
    return document.location.hostname.toLowerCase() == 'www.spin.com';
}

///**********************************************************************************
/// <name>    BrowserSupportsModals </name>
/// <summary> Determines whether the broswer can support the imitated modal overlays.
///           if the browser does not support modals, then a regular pop-up will be
///           open.</summary>
///**********************************************************************************
function BrowserSupportsModals()
{
    try
    {
        if(BrowserDetect.browser == "Explorer" && BrowserDetect.majorVersion < 6)
            return false;
        else if(BrowserDetect.browser == "Firefox" && BrowserDetect.majorVersion < 1)
            return false; 
        else if(BrowserDetect.browser == "Netscape" && BrowserDetect.majorVersion < 6)
            return false;
        else if(BrowserDetect.browser == "Mozilla" && BrowserDetect.majorVersion < 2)
            return false;        
        else if(BrowserDetect.browser == "Safari" && BrowserDetect.majorVersion < 3)
            return false;
        else if(BrowserDetect.browser == "Opera" && BrowserDetect.majorVersion < 8)
            return false;                               
        else
        {
            // For anything else, return true by default.
            return true;
        }
    }
    catch(e)
    {
        // return false when error occurs
        return false;
    }
}

///**********************************************************************************
/// <name>    BrowserSupportsJQuery </name>
/// <summary> Determines whether the broswer can support the JQuery functionality.
///           if the browser does not support JQuery, then features such as animtaion
///           will not be initiated.</summary>
///**********************************************************************************
function BrowserSupportsJQuery()
{
    try
    {
        if(BrowserDetect.browser == "Explorer" && BrowserDetect.majorVersion < 6)
            return false;
        else if(BrowserDetect.browser == "Firefox" && BrowserDetect.majorVersion < 1)
            return false; 
        else if(BrowserDetect.browser == "Netscape" && BrowserDetect.majorVersion < 6)
            return false;
        else if(BrowserDetect.browser == "Mozilla" && BrowserDetect.majorVersion < 2)
            return false;        
        else if(BrowserDetect.browser == "Safari" && BrowserDetect.majorVersion < 3)
            return false;
        else if(BrowserDetect.browser == "Opera" && BrowserDetect.majorVersion < 8)
            return false;                               
        else
        {
            // For anything else, return true by default.
            return true;
        }
    }
    catch(e)
    {
        // return false when error occurs
        return false;
    }
}

///**********************************************************************************
/// <name>    GetElementObject </name>
/// <summary> Gets an element object based on the given ID (depending on the browser).</summary>
///**********************************************************************************
function GetElementObjectById(elementName)
{
    var elementObject;
    
	if (ns4) 
	{
		elementObject = GetObjNN4(document, elementName);
	} 
	else 
	{
		if(document.getElementById) 
		{
			elementObject = document.getElementById(elementName);
		} 
		else if (document.all)
		{
			elementObject = document.all[elementName];
		}
    }
    return elementObject;
}

///**********************************************************************************
/// <name>    GetElementHeight </name>
/// <summary> Gets the given element's height.</summary>
///**********************************************************************************
function GetElementHeight(element) 
{
	if (ns4) 
	{
		return element.clip.height;
	} 
	else 
	{
	    var elementHeight = 0;
	    
		if (op5) 
		{ 
			elementHeight = element.style.pixelHeight;
		} 
		else 
		{
			elementHeight = element.offsetHeight;
		}
		
		return elementHeight;
	} 
}

///**********************************************************************************
/// <name>    GetElementWidth </name>
/// <summary> Gets the given element's width.</summary>
///**********************************************************************************
function GetElementWidth(element) 
{
	if (ns4) 
	{
		return element.clip.width;
	} 
	else 
	{
        var elementWidth = 0;
        
        if (op5) 
        {
	        elementWidth = element.style.pixelWidth;
        } 
        else 
        {
	        elementWidth = element.offsetWidth;
        }

        return elementWidth;
	}
}

///**********************************************************************************
/// <name>    GetObjNN4 </name>
/// <summary> Gets the element for Netscape 4.</summary>
///**********************************************************************************
function GetObjNN4(obj,name)
{
	var x = obj.layers;
	var foundLayer;
	for (var i=0;i<x.length;i++)
	{
		if (x[i].id == name)
		 	foundLayer = x[i];
		else if (x[i].layers.length)
			var tmp = getObjNN4(x[i],name);
		if (tmp) foundLayer = tmp;
	}
	return foundLayer;
}

///**********************************************************************************
/// <name>    Browser Detection </name>
/// <summary> Detects which browser the user is using.</summary>
/// <credit>  http://www.quirksmode.org/js/detect.html</credit>
///**********************************************************************************
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.majorVersion = (this.version.toString()).split(".")[0];
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		
		var extractedVersion = dataString.substring(index+this.versionSearchString.length+1);
		
		try 
		{
		    var cleansedVersion = extractedVersion.match(/^\d*(\.\d+)?/)[0];		    
		    return parseFloat(cleansedVersion);
        }
		catch(e) {return parseFloat(extractedVersion);}
		
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{ 	string: navigator.userAgent,
			subString: "Chrome",
			versionSearch: "Chrome",
			identity: "Chrome"
		},		
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

BrowserDetect.init()

var ie = document.all;
var ns4 = document.layers;
var ns6 = document.getElementById && !document.all;
var op5 = BrowserDetect.browser == "Opera" && BrowserDetect.majorVersion == 5;
