﻿/**********************************************************
	altn.js

	Javascript for use with the altn.com web site.
	Copyright (c) 2006 Alt-N Technologies

	Created: 9-6-2006, Trint Ladd
	Modifications:
		Initial version 0.1
		9-6-2006, Trint Ladd
		
		Adding isPopUpBlocked()
		1-17-2007, Trint Ladd
**********************************************************/

/**********************************************************
	Utility Functions
**********************************************************/
function isPopUpBlocked()
{
	var test = window.open(null,"","width=10,height=10");
	try
	{
		test.close();
		return false;
	}
	catch(e)
	{
		return true;
	}
}

function toggleFromParent(parent)
{
	var control = parent.nextSibling;
	if ( control.style.display == 'none' || control.style.display == '' )
	{
		control.style.display = 'block';
	}
	else
	{
		control.style.display = 'none';
	}
}

function getSelectedIndex( fld )
{
	return fld.selectedIndex < 0 ? 0 : fld.selectedIndex;
}

function getSelectedValue( fld )
{
	if( fld.type != "select-OnError")
	{
		return fld.value;
	}
	if( fld.options.length == 0 )
	{
		return "";
	}
	return fld.options[ getSelectedIndex( fld ) ].value;
}


/*
	addEvent
	http://www.scottandrew.com/weblog/articles/cbs-events
*/
function addEvent(obj, evType, fn)
{
	if (obj.addEventListener)
	{
		obj.addEventListener(evType, fn, true);
		return true;
	}
	else if (obj.attachEvent)
	{
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	}
	else
	{
		return false;
	}
}

/**********************************************************
	GUI Functions
**********************************************************/

/*
	suckerfish
	http://www.htmldog.com/articles/suckerfish/
	Used to force onload events in IE where some psuedo
	classes are not recognized.
*/
function suckerfish(type, tag, parentId) {
	if ( window.attachEvent ) {
		window.attachEvent( "onload", function()
			{
				var elements = (parentId==null)?document.getElementsByTagName(tag):document.getElementById(parentId).getElementsByTagName(tag);
				type(elements);
			}
		);
	}
}

/* suckerfish drop menus */
sfHoverMenu = function( elements )
{
	for( var i=0; i < elements.length; i++ )
	{
		if( elements[i].className.indexOf("top") > -1 )
		{
			elements[i].onmouseover=function()
			{
				// Set the attributes of an IFrame to go under the menu,
				// covering any select boxes that might show through.
				// DivShim is defined in HeaderFooter.master.
				this.className += " navHover";
				var DivShim = document.getElementById( 'DivShim' );
				var objs = this.getElementsByTagName( "ul" );
				var obj = objs[0];
				var x = parseInt( obj.offsetLeft );
				var y = parseInt( obj.offsetTop );

				DivShim.style.width = obj.offsetWidth;
				DivShim.style.height = obj.offsetHeight;
				obj.style.zIndex = 1;
				DivShim.style.zIndex = 0;

				while( obj.offsetParent != null )
				{
					x += parseInt( obj.offsetParent.offsetLeft );
					y += parseInt( obj.offsetParent.offsetTop );
					obj = obj.offsetParent;
				}
				DivShim.style.left = x;
				DivShim.style.top = y;

				DivShim.style.display = "block";
			}
			elements[i].onmouseout=function()
			{
				var DivShim = document.getElementById('DivShim');
				DivShim.style.display = "none";
				this.className=this.className.replace(new RegExp(" navHover\\b"), "");
			}
		}
	}
}
suckerfish(sfHoverMenu, "LI");

/* suckerfish hover on buttons */
sfHoverButton = function( elements )
{
	for( var i=0; i < elements.length; i++ )
	{
		if( /\bcssbutton\b/.test(elements[i].className) )
		{
			elements[i].onmouseover=function()
			{
				this.className += " buttonHover";
			}
			elements[i].onmouseout=function()
			{
				this.className=this.className.replace(new RegExp(" buttonHover\\b"), "");
			}
			elements[i].onfocus=function()
			{
				this.className += " buttonHover";
			}
			elements[i].onblur=function()
			{
				this.className=this.className.replace(new RegExp(" buttonHover\\b"), "");
			}
		}
		if( /\bcssbuttonsmall\b/.test(elements[i].className) )
		{
			elements[i].onmouseover=function()
			{
				this.className += " buttonsmallHover";
			}
			elements[i].onmouseout=function()
			{
				this.className=this.className.replace(new RegExp(" buttonsmallHover\\b"), "");
			}
			elements[i].onfocus=function()
			{
				this.className += " buttonsmallHover";
			}
			elements[i].onblur=function()
			{
				this.className=this.className.replace(new RegExp(" buttonsmallHover\\b"), "");
			}
		}
	}
}
suckerfish(sfHoverButton, "INPUT");
suckerfish(sfHoverButton, "BUTTON");

/* suckerfish focus on textboxes, selects, etc. */
// TODO: Figure out how to prevent this from overwriting existing onfocus code.
sfFocusInput = function( elements )
{
	for( var i=0; i < elements.length; i++ )
	{
		if( elements[i].tagName == "INPUT" && ( elements[i].type != "text" && elements[i].type != "password" ) )
		{
			// Don't apply this to other input types (buttons, radios, etc.)
			continue;
		}

		elements[i].onfocus=function()
		{
			this.className += " inputFocus";
		}
		elements[i].onblur=function()
		{
			this.className = this.className.replace( new RegExp( " inputFocus\\b" ), "" );
		}
	}
}
suckerfish(sfFocusInput, "INPUT");
suckerfish(sfFocusInput, "TEXTAREA");
// Support of CSS on select boxes is shakey at best. suckerfish(sfFocusInput, "SELECT");

/* Specifically for lightbox links, force links to open in parent window. */
ParentLinks = function()
{
	/*if( window.parent == self )
	{
		return;
	}*/

	var elements = document.getElementsByTagName("A");
	for( var i=0; i < elements.length; i++ )
	{
		if( elements[i].href != null && elements[i].target.toLowerCase() == "_parent")
		{
			elements[i].target = "";
			if( elements[i].addEventListener )
			{
				elements[i].addEventListener( "click", function(){self.parent.location = this.href;return false;}, true);
			}
			else if ( elements[i].attachEvent )
			{
				elements[i].onclick = function(){ self.parent.location = this.href;return false;}
			}
		}
	}
}

/*
	RoundedBox
	Uses DOM to insert mark-up on the client creating rounded corner containers.
	Based on "Transparent Custom Corners and Borders" by Roger Johansson
	http://www.456bereastreet.com/archive/200505/transparent_custom_corners_and_borders/
	createElement function found at http://simon.incutio.com/archive/2003/06/15/javascriptWithXML
*/
function createElement(element)
{
	if (typeof document.createElementNS != 'undefined')
	{
		return document.createElementNS('http://www.w3.org/1999/xhtml', element);
	}
	if (typeof document.createElement != 'undefined')
	{
		return document.createElement(element);
	}
	return false;
}

/* Create the two div elements needed for the top of the box */
function insertTop(outer)
{
	var outerTop = createElement("div");
	outerTop.className = "RBTop"; // The outer div needs a class name
	var innerTop = createElement("div");
	outerTop.appendChild(innerTop);
	outer.insertBefore(outerTop, outer.firstChild);
}

/* Create the two div elements needed for the bottom of the box */
function insertBottom(outer)
{
	var outerBottom = createElement("div");
	outerBottom.className = "RBBottom"; // The outer div needs a class name
	var innerBottom = createElement("div");
	outerBottom.appendChild(innerBottom);
	outer.appendChild(outerBottom);
}

/* Create RoundedBoxes */
function initRB()
{
	// Find all div elements
	var divs = document.getElementsByTagName('div');
	var rbDivs = [];
	for (var i = 0; i < divs.length; i++)
	{
		// Find all div elements with bRoundedBoxDefault in their class attribute while allowing for multiple class names
		if (/\bRoundedBoxDefault\b/.test(divs[i].className))
			rbDivs[rbDivs.length] = divs[i];
	}

	// Loop through the found div elements
	var original, outer, left, right;
	for (var i = 0; i < rbDivs.length; i++)
	{
		// Save the original outer div for later
		original = rbDivs[i];

		// Create a new div, give it the original div's class attribute, and replace default class with DOM/JS class
		outer = createElement('div');
		outer.className = original.className;
		outer.className = original.className.replace('RoundedBoxDefault', 'RoundedBox');

		// Change the original div's class name and replace it with the new div
		original.className = 'RBContent';
		original.parentNode.replaceChild(outer, original);

		// Create two new div elements and insert them into the outermost div
		left = createElement('div');
		left.className = 'RBLeftBorder';
		outer.appendChild(left);
		right = createElement('div');
		right.className = 'RBRightBorder';
		left.appendChild(right);

		// Insert the original div
		right.appendChild(original);

		// Insert the top and bottom divs
		insertTop(outer);
		insertBottom(outer);
	}
}
if(document.getElementById && document.createTextNode)
{
	addEvent(window, 'load', initRB);
}
