﻿/**********************************************************
	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;
	}
}

// Prevent multiple button clicks
var alreadyClicked = false;
function oneClick( btn )
{
	if( !alreadyClicked )
	{
		btn.value = "Processing...";
		alreadyClicked = true;
		return true;
	}
	return false;
}

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 pseudo
	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);
			}
		);
	}
}

/*
	stackEvent
	Trint Ladd
	Retains any existing event listener, rather than overwritting it, which is the suckerfish default behavior.
*/
function stackEvent( obj, eventType, func )
{
	var oldEvent = eval( "obj." + eventType );
	var oldInnerSource = "";
	var newInnerSource = func.toString()
	newInnerSource = newInnerSource.substring( newInnerSource.indexOf( "{" ) + 1, newInnerSource.lastIndexOf( "}" ) );

	if( typeof oldEvent == "function" )
	{
		oldInnerSource = oldEvent.toString()
		oldInnerSource = oldInnerSource.substring( oldInnerSource.indexOf( "{" ) + 1, oldInnerSource.lastIndexOf( "}" ) );
	}
	eval( "obj." + eventType + " = function(){ " + oldInnerSource + newInnerSource + " }" );
}

/* 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" );
                
                if( objs[0] )
                {
    				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) )
		{
			stackEvent( elements[i], "onmouseover", function()
				{
					this.className += " buttonHover";
				}
			);
			stackEvent( elements[i], "onmouseout", function()
				{
					this.className=this.className.replace(new RegExp(" buttonHover\\b"), "");
				}
			);
			stackEvent( elements[i], "onfocus", function()
				{
					this.className += " buttonHover";
				}
			);
			stackEvent( elements[i], "onblur", function()
				{
					this.className=this.className.replace(new RegExp(" buttonHover\\b"), "");
				}
			);
		}
		if( /\bcssButtonsmall\b/.test(elements[i].className) )
		{
			stackEvent( elements[i], "onmouseover", function()
				{
					this.className += " buttonSmallHover";
				}
			);
			stackEvent( elements[i], "onmouseout", function()
				{
					this.className=this.className.replace(new RegExp(" buttonSmallHover\\b"), "");
				}
			);
			stackEvent( elements[i], "onfocus", function()
				{
					this.className += " buttonSmallHover";
				}
			);
			stackEvent( 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. */
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;
		}
		stackEvent( elements[i], "onfocus", function()
			{
				this.className += " inputFocus";
			}
		);
		stackEvent( 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;}
			}
		}
	}
}

// scrollTo functions by Trint Ladd
// Used to scroll the view down to the element passed in
function scrollToElement( element )
{
	if( element && element.offsetTop )
	{
		window.scrollTo( 0, element.offsetTop );
	}
}

// Used when the element object can't be passed, but the name is available
function scrollToElementByName( name )
{
	var els = document.getElementsByName( name );
	if( els && els.length > 0 );
	{
		scrollToElement( els[0] );
	}
}

// Used when the element object can't be passed, but the ID is available
function scrollToElementByID( ID )
{
	var el = document.getElementById( ID );
	if( el )
	{
		scrollToElement( el );
	}
}

/*
	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);
	}
}

function add_cart(product_code,license_key)
{
    var form = xGetElementById('cart-form');

    form.action  = xGetElementById('server-path').value + "/Products/ShoppingCart/";
    form.method  = "POST";

    xGetElementById('license-key').value = license_key;
    xGetElementById('product-code').value = product_code;
    xGetElementById('cmd').value = "Add";

    form.submit();
}

function open_click2call()
{
    xPos = xClientWidth()/2 - 250;
    yPos = xClientHeight()/2 - 150;

    window.open("http://click2call2.tnz.co.nz/C2C00030.html","contactUs","width=510,height=310,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos);
}

function div_show_with_radio(div_index,div_number)
{
    var div_height=0;

    for( var i=0; i<div_number; ++i)
    {
        var div = xGetElementById('div-'+i);
        div.style.display = (div_index == i) ? 'block' : 'none';

        if( xGetElementById('radio-'+i) )
        {
            var radio = xGetElementById('radio-'+i);
            if( div_index == i )
            {
                radio.checked = "true";
            }
            else
            {
                radio.checked = "";
            }
        }

        div_height = div_height + xHeight(div) + 20;
    }
    //resize(div_height);
}

if(document.getElementById && document.createTextNode)
{
	addEvent(window, 'load', initRB);
}