/*
Last Modified: 29/08/06

  javaBase library
    A very small library with DOM and Ajax functions.
  AUTHOR
    kieron
  LICENSE
    Copyright (c) 2006 MBL Solutions. All rights reserved.
  VERSION
    1.2
**/


var JSBASE = {


	//
	// DOM
	//
	
	submitIt: function(Id)
	{
		return document.getElementById(Id).submit();
	},
	
	disableIt: function(Id)
	{
		return (document.getElementById(Id).disabled == 'disabled') ? 'enabled' : 'disabled';
	},
	
	showIt: function(Id)
	{
		return document.getElementById(Id).style.visibility = 'visible';	
	},
	
	hideIt: function(Id)
	{
		return document.getElementById(Id).style.visibility = 'hidden';	
	},
	
	checkIt: function(field)
	{
		return (field.checked) ? field.checked = false : field.checked = true;
	},
	
	checkAll: function(field)
	{
		if(field.length)
		{
			for (i = 0; i < field.length; i++)
			{
				if(field[i].checked)
				{
					field[i].checked = false;
				} else {
					field[i].checked = true;
				}
			}
		}
		else
		{
			if(field.checked)
			{
				field.checked = false;
			} else {
				field.checked = true;
			}
		}
	},
	
	
	//
	// Browser
	//
	
	reFresh: function()
	{
		return window.location.reload( false );
	},
	
	bookmarksite: function(title, url)
	{
		if (document.all)
		{
			window.external.AddFavorite(url, title);
		} 
		else if (window.sidebar)
		{
			window.sidebar.addPanel(title, url, "");
		}
	},
	
	disableStyleSheets: function() 
	{
		if( document.styleSheets ) {
		  //DOM stylesheets are available
			for( i = 0; i < document.styleSheets.length; i++ )
			{
				document.styleSheets[i].disabled = true;
			}
		}
	},
	
	enableStyleSheets: function() 
	{
		if( document.styleSheets ) {
		  //DOM stylesheets are available
			for( i = 0; i < document.styleSheets.length; i++ )
			{
				document.styleSheets[i].disabled = false;
			}
		}
	},
	
	isIe: function() {
		return (navigator.userAgent.toLowerCase().indexOf("msie") != -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1);
	},
	isNetscape7: function() {
		return (navigator.userAgent.toLowerCase().indexOf("netscape") != -1 && navigator.userAgent.toLowerCase().indexOf("7.") != -1);
	},
	isSafari: function() {
		return (navigator.userAgent.toLowerCase().indexOf("khtml") != -1);
	},
	isOpera: function() {
		return (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
	},
	isMozilla: function() {
		return (navigator.userAgent.toLowerCase().indexOf("gecko") != -1 && navigator.productSub >= 20030210);
	},
	
	getBody: function() {
	return this.getElementsByTagAndClassName('body')[0] 
	},

	//
	// Input
	//

	IsNumeric: function(sText) 
	{
		var ValidChars = "0123456789";
		var Char;
		for (i = 0; i < sText.length; i++) {
			Char = sText.charAt(i);
			if (ValidChars.indexOf(Char) == -1) {
				return false;
			}
		}
		return true;
	},
	
	isArray: function(obj) 
	{
		if (obj.constructor.toString().indexOf("Array") == -1)
			return false;
		else
			return true;
	},

	//
	// Ajax
	//
		
	openRequest: function()
	{
		if(window.XMLHttpRequest)
		{
			try 
			{ 
				this.req = new XMLHttpRequest(); 
			} 
			catch(e) 
			{ 
				this.req = false;
			}
		} 
		else if(window.ActiveXObject) 
		{
			try 
			{ 
				this.req = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch(e) 
			{
				try 
				{
					this.req = new ActiveXObject("Microsoft.XMLHTTP");
				} 
				catch(e) 
				{
					this.req = false;
				}
			}
		}
		return this.req;
	},

	//
	// Layer Control
	//

	centreElement: function(Id)
	{
		var el = document.getElementById(Id);
		elHeight = el.top.split('px');
		
		var array_page_size = getWindowSize();
		var st = getScrollTop();
		
		var offSetSize = parseFloat(elHeight[0]) / 2;
		return el.style.top = ( ( ( array_page_size[1] / 2 ) - offSetSize ) + st ) +'px';
	},
	
	fadeIn: function(id, fade)
	{
		var opacs = ["0",".1",".2",".3",".4",".5",".6",".7",".8",".9","1"];
		
		var obj = document.getElementById(id);	
		var fadeSpeed = parseInt(fade);
		
		obj.style.opacity = '0';
		obj.style.MozOpacity = '0';
		obj.style.KhtmlOpacity = '0';
		obj.style.filter = 'alpha(opacity=0)';
		
		obj.style.visibility = 'visible';
		
		
		for ( i = 0; i < opacs.length; i++ )
		{
			var fadeInOpac = setTimeout("document.getElementById('"+id+"').style.opacity = '"+opacs[i]+"';", (i * fadeSpeed) );
			var fadeInMoz = setTimeout("document.getElementById('"+id+"').style.MozOpacity = '"+opacs[i]+"';", (i * fadeSpeed) );
			var fadeInKhtml = setTimeout("document.getElementById('"+id+"').style.KhtmlOpacity = '"+opacs[i]+"';", (i * fadeSpeed) );
			var ieFilter = ( opacs[i].indexOf('.') == -1 ) ? opacs[i] : '0.'+opacs[i]; 
			var fadeInFilter = setTimeout("document.getElementById('"+id+"').style.filter = 'alpha(opacity="+ieFilter+")';", (i * fadeSpeed) );	
		}
	},
	
	fadeOut: function(id, fade)
	{
		var opacs = ["0",".1",".2",".3",".4",".5",".6",".7",".8",".9","1"];
		opacs.reverse();
		
		var obj = document.getElementById(id);	
		var fadeSpeed = parseInt(fade);
		
		for ( i = 0; i < opacs.length; i++ )
		{
			var fadeOutOpac = setTimeout("document.getElementById('"+id+"').style.opacity = '"+opacs[i]+"';", (i * fadeSpeed) );
			var fadeOutMoz = setTimeout("document.getElementById('"+id+"').style.MozOpacity = '"+opacs[i]+"';", (i * fadeSpeed) );
			var fadeOutKhtml = setTimeout("document.getElementById('"+id+"').style.KhtmlOpacity = '"+opacs[i]+"';", (i * fadeSpeed) );
			var ieFilter = ( opacs[i].indexOf('.') == -1 ) ? opacs[i] : '0.'+opacs[i]; 
			var fadeOutFilter = setTimeout("document.getElementById('"+id+"').style.filter = 'alpha(opacity="+ieFilter+")';", (i * fadeSpeed) );	
		}
	},
	
	//
	// Dimensions
	//
	getInnerWidth: function() 
	{
		var x,y;
		if (self.innerHeight) // all except Explorer
		{
			x = self.innerWidth;
			y = self.innerHeight;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
			// Explorer 6 Strict Mode
		{
			x = document.documentElement.clientWidth;
			y = document.documentElement.clientHeight;
		}
		else if (document.body) // other Explorers
		{
			x = document.body.clientWidth;
			y = document.body.clientHeight;
		}
		return[x, y];
	},

	getScrollingOffset: function()
	{
		var x,y;
		if (self.pageYOffset) // all except Explorer
		{
			x = self.pageXOffset;
			y = self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.scrollTop)
			// Explorer 6 Strict
		{
			x = document.documentElement.scrollLeft;
			y = document.documentElement.scrollTop;
		}
		else if (document.body) // all other Explorers
		{
			x = document.body.scrollLeft;
			y = document.body.scrollTop;
		}
		return[x, y];
	},

	getPageHeight: function()
	{
		var x,y;
		var test1 = document.body.scrollHeight;
		var test2 = document.body.offsetHeight
		if (test1 > test2) // all but Explorer Mac
		{
			x = document.body.scrollWidth;
			y = document.body.scrollHeight;
		}
		else // Explorer Mac;
			 //would also work in Explorer 6 Strict, Mozilla and Safari
		{
			x = document.body.offsetWidth;
			y = document.body.offsetHeight;
		}
		return[x, y];
	},

	getScrollTop: function() 
	{
		var t;
		if (document.documentElement && document.documentElement.scrollTop) {
			t = document.documentElement.scrollTop;
		} else if (document.body) {
			t = document.body.scrollTop;
		}
		return t;
	},
	
	getWindowSize: function() 
	{
		var window_width, window_height;
		if (self.innerHeight) {	
			window_width = self.innerWidth;
			window_height = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { 
			window_width = document.documentElement.clientWidth;
			window_height = document.documentElement.clientHeight;
		} else if (document.body) { 
			window_width = document.body.clientWidth;
			window_height = document.body.clientHeight;
		}	
		return [window_width, window_height];
	}
}



