// JavaScript Document

var PxUtils = {};


function log( info )
{
	if(window.console) {
		window.console.log(info);
	} 
}

PxUtils.browserCheck = function()
{
	log("browser check");
	var goodBrowser = document.getElementById;
	if( ! goodBrowser )
	{
		return false;
	}
	return true;
	
}

PxUtils.addEvent = function(obj, type, fn)
{
	if (obj.addEventListener) {
		obj.addEventListener(type, fn, false);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent("on"+type, obj[type+fn]);
	}
};

PxUtils.createXmlHTTPRequest = function()
{
	var req = null;
	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest ) {
		try {
			req = new XMLHttpRequest();
		} catch(e) {
			req = null;
		}
	// branch for IE/Windows ActiveX version
	} else if(window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				req = null;
			}
		}
	}
	return req;
}

PxUtils.showHideElementById = function( id, isVisible )
{
	var state = isVisible ? "visible" : "hidden";
	var element = document.getElementById(id);
	if( element )
	{
		element.style.visibility = state;
	}
}

/// PX IMAGE LOAD GROUPS //
PxImageLoadGroups = {};

function PxImageLoadGroup( groupId )
{
	this.urls = [];
	this.id = groupId
	this.numLoaded = 0;
	
	this.loadImages = function()
	{
		for( var u in this.urls )
		{
			var img = new Image();
			img.id = "pxImageGroup:" + this.id + ":" + u
			img.onload = PxImageGroupOnLoad;
			img.src = this.urls[u];
		}
	}
	
	this.onImageLoaded = function( imgElement )
	{
		++this.numLoaded;
		if( this.numLoaded == this.urls.length )
		{
			this.onLoadComplete();	
		}
	}
	
	// override this function
	this.onLoadComplete = function()
	{
		windowLog("Image Group " + this.id + " load complete");	
	}
	
	PxImageLoadGroups[ groupId ] = this;
}

function PxImageGroupOnLoad( e )
{
	var target = this;
	/*windowLog( foobar );
	if (!e) var e = window.event;
	
	var target = e.target;
	if( ! target ) target = this;*/
	if( target.id )
	{
		windowLog("Image Load Group: " + target.id );
		var group = GetPxImageGroup( target );
		if( group )
		{
			group.onImageLoaded( target );	
		}
	}
}

function GetPxImageGroup( element )
{
	var parts = element.id.split(":");
	if( parts != null && parts.length == 3 )
	{
		if( parts[0] == "pxImageGroup" )
		{
			var group = PxImageLoadGroups[ parts[1] ];
			return group;
		}
	} else {
		return null;	
	}
}
/// PX IMAGE LOAD GROUPS //

// PX ANIMATE OPACITY

PxAnimateOpactiy = {};

PxAnimateOpactiy.setOpacity = function( id, opacity )
{
		var obj = document.getElementById( id );
		if( obj )
		{
			obj.style.opacity = opacity;
			var ieOpacity = opacity * 100;
			obj.style.filter = 'alpha(opacity=' + ieOpacity + ')';	
		}
}


PxAnimateOpactiy.automateOpacity = function( id, startOpacity, endOpacity, numSteps, delay, lastOpacity )
{
	var obj = document.getElementById(id);
	if( obj )
	{
		var lastOpacity = lastOpacity;
		
		if( ! lastOpacity )
		{
			lastOpacity = startOpacity;	
		}
		
		if( lastOpacity == endOpacity )
		{
			return; // done!	
		}
		
		var stepValue = Math.abs( startOpacity - endOpacity ) / numSteps;
		var newOpacity;
		
		if( endOpacity > startOpacity )
		{
			newOpacity = lastOpacity + stepValue;
		} else {
			newOpacity = lastOpacity - stepValue;
		}
		
		// if were are really close to the end round up
		if( Math.abs(Math.abs(newOpacity) - Math.abs(endOpacity)) < stepValue )
		{
			newOpacity = endOpacity;	
		}
		
		PxAnimateOpactiy.setOpacity( id, newOpacity );
		
		var nextCall = "PxAnimateOpactiy.automateOpacity(\"" + id + "\"," + startOpacity + "," + endOpacity + "," + numSteps + "," + delay + "," + newOpacity + ");"
		setTimeout( nextCall, delay );
		
	}
	
}

PxAnimateOpactiy.FadeInImage = function( id, src, numSteps, delay )
{
	var obj = document.getElementById(id);
	if( obj )
	{
			PxAnimateOpactiy.setOpacity( id, 0.0 );
			obj.src = src;
			PxAnimateOpactiy.automateOpacity( id, 0.0, 1.0, numSteps, delay, 0.0 );
	}
	
	
}

PxAnimateOpactiy.FadeInHTML = function( id, innerHTML, numSteps, delay )
{
	var obj = document.getElementById(id);
	if( obj )
	{
			PxAnimateOpactiy.setOpacity( id, 0.0 );
			obj.innerHTML = innerHTML;
			PxAnimateOpactiy.automateOpacity( id, 0.0, 1.0, numSteps, delay, 0.0 );
	}
	
	
}


if( typeof PxUtilsLoaded == "function" )
{
	PxUtilsLoaded(true);
}