/*******************************************************************************************
 * addLoadEvent
 * Written by Simon Willison (http://simon.incutio.com/)
 * Takes a function as an argument which should be executed once the page has loaded
 * Parameters: function func
 * Example:
 *		addLoadEvent(myFunction);
 *		addLoadEvent(function() {
 *			alert ('a');
 *		});
 *******************************************************************************************/

function addLoadEvent (func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			func();
			oldonload();
		}
	}
}




/*******************************************************************************************
 * cssjs
 * Written by Christian Heilmann (http://icant.co.uk)
 * Eases the dynamic application of CSS classes via DOM
 * Parameters: action a, object o and class names c1 and c2 (c2 optional)
 * Actions: swap exchanges c1 and c2 in object o
 *			add adds class c1 to object o
 *			remove removes class c1 from object o
 *			check tests if class c1 is applied to object o
 * Example:	cssjs('swap',document.getElementById('foo'),'bar','baz');
 *******************************************************************************************/

function cssjs (a, o, c1, c2) {
	switch (a) {
		case 'swap':
			o.className = !cssjs('check', o, c1) ? o.className.replace(c2, c1) : o.className.replace(c1, c2);
			break;
		case 'add':
			if (!o.className)
				o.className = '';
			if (!cssjs('check', o, c1)) {
				o.className += o.className ? ' '+c1 : c1;
			}
			break;
		case 'remove':
			var rep = o.className.match(' '+c1) ? ' '+c1 : c1;
			o.className = o.className.replace(rep, '');
			break;
		case 'check':
			if (!o.className)
				return(false);
			return(new RegExp('\\b'+c1+'\\b').test(o.className));
			break;
	}
	return(true);
}


/*******************************************************************************************
 * addEvent / removeEvent
 *******************************************************************************************/

function addEvent (obj, evType, fn) {
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, false);
		return(true);
	} else if (obj.attachEvent) {
		var r = obj.attachEvent("on"+evType, fn);
		return(r);
	} else {
		return(false);
	}
}

function removeEvent (obj, evType, fn) {
	if (obj.removeEventListener) {
		obj.removeEventListener(evType, fn, false);
		return(true);
	} else if (obj.detachEvent) {
		var r = obj.detachEvent("on"+evType, fn);
		return(r);
	} else {
		return(false);
	}
}


/*******************************************************************************************
 * addLoadEvent
 * Written by Simon Willison (http://simon.incutio.com/)
 * Takes a function as an argument which should be executed once the page has loaded
 * Parameters: function func
 * Example:
 *		addLoadEvent(myFunction);
 *		addLoadEvent(function() {
 *			alert ('a');
 *		});
 *******************************************************************************************/

function addLoadEvent (func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			func();
			oldonload();
		}
	}
}


/*******************************************************************************************
 * Uncomment if you need to stop JS Flicker
 *******************************************************************************************/
/*
if (document.getElementsByTagName) {
	addLoadEvent (function() {
		document.body.style.visibility = 'visible';
	});
	document.write ('<style type="text/css"> body { visibility: hidden; } \</style>');
}
*/

/*******************************************************************************************
 * printMe
 * Try to run the "print" function, otherwise tell the user how to print correctly
 * Example:	printMe();
 *******************************************************************************************/

function printMe () {
	try {
		print();
	} catch(exception) {
		alert("To print this page, click file and\n select 'Print' or 'Print Preview'");
	}
}


/*******************************************************************************************
 * javasciptElement and javascriptAlternativeElement classes
 * Used to better present the information to users bases on the technology they have enabled
 *******************************************************************************************/

document.write('<style type="text/css" media="screen">');
document.write('<!-- ');
document.write('/* \\*/');
document.write('.javascriptElement { display:block; }');
document.write('.javascriptAlternativeElement { display:none; }');
document.write('/* */');	
document.write('-->');
document.write('<\/style>');


/*******************************************************************************************
 * createElement
 * Written by Simon Willison (http://simon.incutio.com/)
 * Create an xhtml element with a nameSpace if possible
 * Example:	createElement('a');
 *******************************************************************************************/

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);
}


/*******************************************************************************************
 * doSearchClear
 * Written by Petr Krojzl (krojzl@gmail.com)
 * Clear field if it contains default value (for onfocus event)
 *******************************************************************************************/

function doSearchClear (field) {
	if (field.value == field.defaultValue)
		field.value = "";
}


/*******************************************************************************************
 * doSearchFill
 * Written by Petr Krojzl (krojzl@gmail.com)
 * Fill field with default value if it is empty (for onblur event)
 *******************************************************************************************/

function doSearchFill (field) {
	if (field.value == "")
		field.value = field.defaultValue;
}

/*******************************************************************************************/
/* MSDN Fix for CSS Hover flicker in IE -												   */
/* http://www.hedgerwow.com/360/bugs/dom-fix-ie6-background-image-flicker.html		       */
/*******************************************************************************************/

 function fixCSSHover() 
{ 	
	/*Use Object Detection to detect IE6*/
	var  m = document.uniqueID /*IE*/
	&& document.compatMode  /*>=IE6*/
	&& !window.XMLHttpRequest /*<=IE6*/
	&& document.execCommand ;
	
	try
	{
		if(!!m)
		{
			m("BackgroundImageCache", false, true) /* = IE6 only */ 
		}
		
	}
	catch(oh)
	{
	};
}