function include(script_filename) {

    //DOM style inclusion
   if(document.getElementsByTagName){
	var html_doc = document.getElementsByTagName('head').item(0);
	var js = document.createElement('script');
	js.setAttribute('language', 'javascript');
	js.setAttribute('type', 'text/javascript');
	js.setAttribute('src', script_filename);
	html_doc.appendChild(js);
    }else{
    
	document.write('<' + 'script');
	document.write(' language="javascript"');
	document.write(' type="text/javascript"');
	document.write(' src="' + script_filename + '">');
	document.write('</' + 'script' + '>');
    
    }
    return false;
}

function include_css(css_filename) {
    //DOM style inclusion
	if(document.getElementsByTagName){
		var html_doc = document.getElementsByTagName('head').item(0);
		var js = document.createElement('link');
		js.setAttribute('rel', 'stylesheet');
		js.setAttribute('type', 'text/css');
		js.setAttribute('href', css_filename);
		html_doc.appendChild(js);
	}else{
		document.write('<' + 'link');
		document.write(' rel="stylesheet"');
		document.write(' type="text/css"');
		document.write(' href="' + script_filename + '">');
		document.write('</' + 'script' + '>');
	}
    return false;
}


function paddedDigit(SrcDigit){
	if(SrcDigit<=9)
		return "0"+parseInt(SrcDigit,10)
	else
		return SrcDigit;
}

function isLeap(year){
	return ((year % 400) == 0) ? 1 :
		((year % 100) == 0) ? 0 :
		((year % 4)   == 0) ? 1 :0;
}

Date.prototype.isleap = function(){
	return isLeap(this.getFullYear())
}

Date.prototype.getPaddedMonth = function(){
	var m=this.getMonth()+1;
	if(m<=9)
		return "0"+m;
	else
		return m;
}

Date.prototype.getPaddedDate = function(){
	var d=this.getDate();
	if(d<=9)
		return "0"+d;
	else
		return d;
}

Date.prototype.parseFromIso8601= function(dateString){
	this.setDate(dateString.substr(8));
	this.setFullYear(dateString.substr(0,4));
	this.setMonth(parseInt(dateString.substr(5,2),10)-1);
	this.setHours(0);
	this.setMinutes(0);
	this.setSeconds(0);
}

Date.prototype.toIso8601= function(){
	return this.getFullYear()+"-"+(paddedDigit(this.getMonth()+1))+"-"+paddedDigit(this.getDate());
}

function daysInMonth(month,year) {
	var m = [31,28,31,30,31,30,31,31,30,31,30,31];
	if (month != 2) return m[month - 1];
	if (year%4 != 0) return m[1];
	if (year%100 == 0 && year%400 != 0) return m[1];
	return m[1] + 1;
}

function isValidEmail(s)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(s))
		return true;
	else 
		return false;
}

//http://www.quirksmode.org/js/detect.html

function browser_detect(){

	var detect = navigator.userAgent.toLowerCase();
	var OS,browser,version,total,thestring;
	var brows={};
	
	if (checkIt('konqueror'))
	{
		browser = "Konqueror";
		OS = "Linux";
	}
	else if (checkIt('safari')) browser = "Safari"
	else if (checkIt('omniweb')) browser = "OmniWeb"
	else if (checkIt('opera')) browser = "Opera"
	else if (checkIt('webtv')) browser = "WebTV";
	else if (checkIt('icab')) browser = "iCab"
	else if (checkIt('msie')) browser = "Internet Explorer"
	else if (!checkIt('compatible'))
	{
		browser = "Netscape Navigator"
		version = detect.charAt(8);
	}
	else browser = "An unknown browser";
	
	if (!version) version = detect.charAt(place + thestring.length);
	
	if (!OS)
	{
		if (checkIt('linux')) OS = "Linux";
		else if (checkIt('x11')) OS = "Unix";
		else if (checkIt('mac')) OS = "Mac"
		else if (checkIt('win')) OS = "Windows"
		else OS = "an unknown operating system";
	}
	brows.OS=OS;
	brows.browser=browser;
	brows.version=version;
	brows.total=total;
	brows.thestring=thestring;
	
	function checkIt(string)
	{
		place = detect.indexOf(string) + 1;
		thestring = string;
		return place;
	}
		
	return brows;
}

var UI=new Object; //top-level UI object
UI.browserInfo=browser_detect();