// JavaScript Document

var g_distribution = false;

var window_width;
var window_height;

/*
 * (ms): Moved get_window_sizes() to easydb/modules/easymagic/easymagic.js,
 * since I need that function there, too.
 */

function g_getPX( iVal )
{
	return iVal+'px';
}

// this function is for overcoming the problem that integer(6e-13) == 6 in javascript :) 
function g_int( v )
{
	v = parseFloat(v); //this is for kicking out 'px' etc.
	return v < 0.0 ? Math.ceil(v) : Math.floor(v);
}

/*
function g_divSetTransparency( div, fTransparency )
{	
	div.style.opacity = fTransparency;
	
	//ie
	//alert(div.style.filter);
	//div.style.filter = "alpha(opacity=50);";
	
}
*/

/*
this can be used for safari to force a repaint 
*/
function g_forceRerendering(element)
{	
	var n = document.createTextNode('s');
	element.appendChild(n); 
	element.removeChild(n);
}

/*
creates an ie compatible image (alpha support)
*/
function g_createDivImage( sSrc,iWidth,iHeight )
{
	var image;
	// if IE5.5+ on Win32, then display PNGs with AlphaImageLoader
	if ((browser.isIE55 || browser.isIE6up) && browser.isWin32) 
	{
		image = document.createElement('div');
		image.style.fontSize = '1px';
	}
	else  
	{
		image = document.createElement('img');
	}
	
	g_updateDivImage( image, sSrc, iWidth, iHeight );
	
	return image;
}

function g_updateDivImage( image, sSrc, iWidth, iHeight )
{
	// if IE5.5+ on Win32, then display PNGs with AlphaImageLoader
	if ((browser.isIE55 || browser.isIE6up) && browser.isWin32) 
	{
		image.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + sSrc + "',sizingMethod='scale')";
		image.style.width = g_getPX(iWidth);
		image.style.height = g_getPX(iHeight);
	}
	else  
	{	
		image.src = sSrc;
		image.width = iWidth;
		image.height = iHeight;
	}
	
	
} 

/*
get a document wide unique runtime id
*/
function g_getId()
{
	if( ! document.iUtilsIdCounter )
		document.iUtilsIdCounter = 0;
		
	return document.iUtilsIdCounter++;
}


function g_getElementsByTagNameAndName( tagName, name )
{
	var aNames = new Array();
	
	var a = document.getElementsByTagName( tagName );

	for( var i=0; i < a.length; i++ )
	{
		if( a[i].getAttribute('name') == name )
			aNames.push(a[i]); 	
	}
	
	return aNames;
}

function assert( condition, sText )
{
	//return;
	if( g_distribution ) 
		return;
	
	if( ! condition )
	{
		
		alert2( "Assert:"+sText,1 );
		ASSERT_lookAtPreviousFunctionInCallStack();
		
	}
	
}

/*
	use this to get an alert that is showing only a defined number of times
*/
var g_firstAlert = 0;
function alert2( sText, iCount )
{
	g_firstAlert++;
	var i = iCount ? iCount : 1;
	
	if( g_firstAlert <= i  )
	{
		if( sText )
			alert(sText);
		else
			alert("AlertOnce");
	}
}

//make a 'debugLog' div on the bottom of your document and use this function to print into it
function g_log(sText)
{	
	if( g_distribution ) 
		return;
	
	d = document.getElementById('debugLog') ;
	
	if( d )
		d.innerHTML += '<div>' + sText + '\n' + '</div>'; 
}

function g_isSafari()
{
	/* 
	this code is from http://www.webreference.com/tools/browser/sniffer2.js
	*/
	var agt = navigator.userAgent.toLowerCase(); 
	var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false;
	
	return is_safari;
}

function g_pointWithinElement( x, y, element ) 
{
	var b; 
	if( typeof element == 'string' )
		b = document.getElementById(id) ;
	else 
		b = element;
	
	
	if ( x < ( g_getLeft(b) ) || y < ( g_getTop(b) ) )
		return 0 ;
	else if ( x >= (g_getLeft(b)+b.offsetWidth+1) || y >= (g_getTop(b)+b.offsetHeight+1) )
		return 0 ;
	return 1 ;
}


function g_getScrollY ( ) 
{
	if ( window.pageYOffset )
		return window.pageYOffset ;
	if ( document.body.scrollTop )
		return document.body.scrollTop ;
	if ( document.documentElement.scrollTop )
		return document.documentElement.scrollTop ;
    return 0 ;
}

function g_getScrollX ( ) 
{
	if ( window.pageXOffset )
		return window.pageXOffset ;
	if ( document.body.scrollLeft )
		return document.body.scrollLeft ;
	if ( document.documentElement.scrollLeft )
		return document.documentElement.scrollLeft ;
    return 0 ;
}

function g_getTop(el) 
{
	if( typeof el == 'string' )
		el = document.getElementById(el);
	
	var y = 0;
	if (el.offsetParent) {
		y = g_getTop(el.offsetParent);
	}
	y = y+el.offsetTop;
	return y;
}


function g_getLeft(el) 
{
	if( typeof el == 'string' )
		el = document.getElementById(el);
	
	var x = 0;	
	if (el.offsetParent) {
		x = g_getLeft(el.offsetParent);
	}
	x = x+el.offsetLeft;
	return x;
}

function ArrayGetIndexOf( array, iItem )
{	
	if( array )
	{
		for( var i = 0; i < array.length; i++ )
		{
			if( array[i] == iItem )
				return i;
		}
	}
	return -1;
}

if( ! document.aValueAnimations )
	document.aValueAnimations = new Array();
var g_aValueAnimations = document.aValueAnimations;

var ValueAnimation = Class.create(  
{
	initialize : function(sName)
	{
		this.sName = sName;
		this.callBack = null;
		this.fTargetValue;
		this.fTick;
		this.fSteps;
		this.bPlaying = false;
		this.fValue = 0;
		this.bHaveXYValue = false;
		
		//TODO we never remove from this array ... we need a hashtable !
		this.iArrayIndex = g_aValueAnimations.length;
		g_aValueAnimations.push( this );
		
		this.timerId = null;
	},
	
	isPlaying : function()
	{
		return this.bPlaying;
	},
	
	play : function( callBack, fValue, fTargetValue, fTime, iSteps )
	{
		assert( iSteps > 0 );
		assert( fValue != NaN );
		assert( fTargetValue != NaN );
		assert( fTime != NaN );
		//assert( ! this.bHaveXYValue );
		//assert( this.callBack == callBack || this.callBack == null );
		
		//return;
		
		this.bWasPlaying = this.bPlaying; 
		this.bPlaying = true;
		this.callBack = callBack;
		
		this.fValue = fValue;
		this.fTargetValue = fTargetValue;
		this.fTick = fTime / iSteps;
		
		this.fSteps = (this.fTargetValue - this.fValue) / iSteps;
		
		//step should have the right direction
		this.fSteps = Math.abs(this.fSteps);
		
		if( ! this.bWasPlaying  )
			this.startTimer();
	},
	
	playXY : function( callBack, fValueX, fTargetValueX, fValueY, fTargetValueY, fTime, iSteps )
	{
		this.fValueX = fValueX;
		this.fTargetValueX = fTargetValueX;
		this.fValueY = fValueY;
		this.fTargetValueY = fTargetValueY;
		
		//alert( fValueX+" "+ fTargetValueX+" "+ fValueY+" "+ fTargetValueY  );
		
		this.bHaveXYValue = true;
		
		this.play( callBack, 0.0, 1.0, fTime, iSteps );
	},
	
	
	step : function()
	{
		if( this.bPlaying )
		{
			if( this.fValue < this.fTargetValue )
			{
				this.fValue += this.fSteps;
				if( this.fValue >= this.fTargetValue )
				{
					this.fValue = this.fTargetValue;
					this.stop();
				}
			}
			else 
			{
				this.fValue -= this.fSteps;
				if( this.fValue <= this.fTargetValue )
				{
					this.fValue = this.fTargetValue;
					this.stop();
				}
			}
	
			if( this.bHaveXYValue )
			{
				var x = ( this.fTargetValueX - this.fValueX ) * this.fValue + this.fValueX;
				var y = ( this.fTargetValueY - this.fValueY ) * this.fValue + this.fValueY;
				this.callBack( x, y );
			}
			else
				this.callBack( this.fValue );
			
			this.startTimer();
		} 
	},
	
	stop : function()
	{
		if( this.timerId )
		{
			window.clearTimeout( this.timerId );
			this.timerId = null;
		}
		this.bPlaying = false;
	},
	
	startTimer : function ()
	{
		if( this.bPlaying )
		{	
			this.timerId = window.setTimeout( 'g_aValueAnimations['+this.iArrayIndex+'].step()',this.fTick );	
		}
	}
});



//BROWSERDETECTLITE
// Browser Detect Lite  v2.1
// http://www.dithered.com/javascript/browser_detect/index.html
// modified by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)
//
// modified by Michael Lovitt to include OmniWeb and Dreamcast

function BrowserDetectLite() {
	var ua = navigator.userAgent.toLowerCase(); 
	this.ua = ua;

	// browser name
	this.isGecko     = (ua.indexOf('gecko') != -1);
	this.isMozilla   = (this.isGecko && ua.indexOf("gecko/") + 14 == ua.length);
	this.isNS        = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
	this.isIE        = ( (ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1) ); 
	this.isOpera     = (ua.indexOf("opera") != -1); 
	this.isKonqueror = (ua.indexOf("konqueror") != -1); 
	this.isIcab      = (ua.indexOf("icab") != -1); 
	this.isAol       = (ua.indexOf("aol") != -1); 
	this.isWebtv     = (ua.indexOf("webtv") != -1); 
	this.isOmniweb   = (ua.indexOf("omniweb") != -1);
	this.isDreamcast   = (ua.indexOf("dreamcast") != -1);
	
	// spoofing and compatible browsers
	this.isIECompatible = ( (ua.indexOf("msie") != -1) && !this.isIE);
	this.isNSCompatible = ( (ua.indexOf("mozilla") != -1) && !this.isNS && !this.isMozilla);
	
	// browser version
	this.versionMinor = parseFloat(navigator.appVersion); 
	
	// correct version number for NS6+ 
	if (this.isNS && this.isGecko) {
		this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
	}
	
	// correct version number for IE4+ 
	else if (this.isIE && this.versionMinor >= 4) {
		this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
	}
	
	// correct version number for Opera 
	else if (this.isOpera) {
		if (ua.indexOf('opera/') != -1) {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera/') + 6 ) );
		}
		else {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera ') + 6 ) );
		}
	}
	
	// correct version number for Konqueror
	else if (this.isKonqueror) {
		this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
	}
	
	// correct version number for iCab 
	else if (this.isIcab) {
		if (ua.indexOf('icab/') != -1) {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab/') + 6 ) );
		}
		else {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab ') + 6 ) );
		}
	}
	
	// correct version number for WebTV
	else if (this.isWebtv) {
		this.versionMinor = parseFloat( ua.substring( ua.indexOf('webtv/') + 6 ) );
	}
	
	this.versionMajor = parseInt(this.versionMinor); 
	this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
	
	// platform
	this.isWin   = (ua.indexOf('win') != -1);
	this.isWin32 = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1) );
	this.isMac   = (ua.indexOf('mac') != -1);
	this.isUnix  = (ua.indexOf('unix') != -1 || ua.indexOf('linux') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
	
	// specific browser shortcuts
	this.isNS4x = (this.isNS && this.versionMajor == 4);
	this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
	this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
	this.isNS4up = (this.isNS && this.versionMinor >= 4);
	this.isNS6x = (this.isNS && this.versionMajor == 6);
	this.isNS6up = (this.isNS && this.versionMajor >= 6);
	
	this.isIE4x = (this.isIE && this.versionMajor == 4);
	this.isIE4up = (this.isIE && this.versionMajor >= 4);
	this.isIE5x = (this.isIE && this.versionMajor == 5);
	this.isIE55 = (this.isIE && this.versionMinor == 5.5);
	this.isIE5up = (this.isIE && this.versionMajor >= 5);
	this.isIE6x = (this.isIE && this.versionMajor == 6);
	this.isIE6up = (this.isIE && this.versionMajor >= 6);
	
	this.isIE4xMac = (this.isIE4x && this.isMac);
}


var browser = new BrowserDetectLite();



// END BROWSERDETECTLITE 



