/*******************************************************************************************
 * 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;
}

