var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function load(action,o)
{
	var target;
	var load_div;
	if (o)
	{
		target = (o.div) ? $(o.div) : $('content');
		load_div = o.load_div ? $(o.load_div) : target;
	}
	
	var obj = {method:'post',  
    			onSuccess: function(t) {
	    			target.style.display = "block";
        			target.innerHTML = t.responseText;
	    			var s = t.responseText.extractScripts();
					if (s==undefined) s = [];
	    			for (var x=0;x<s.length;x++)
	    			{
	    				var script = document.createElement("script");
	    				script.text = s[x];
	    				target.appendChild(script);
	    			}
    			},
    			onLoading: function(t) {
   					cbLoading(load_div);
        		},
    			onFailure: function(t) {
        			alert(t.responseText);
    			}
			}    		

	if (o)
	{
		if (o.postBody)
			obj.postBody = o.postBody;
	}	


	new Ajax.Request(action,obj);
	
	cbLoading(load_div);
}

function cbLoading(d)
{
	d.style.display = "block";
	d.innerHTML = '<table align="center"><tr><td><img src="/img/loading_small.gif"></td><td class="content">Loading...</td></tr></table>';
}

function post(action,formStr,o)
{
	if (typeof(o) == 'undefined')
		var o = {postBody:formStr};
	else
		o.postBody = formStr;
	load(action,o);
}

function sm(msg)
{
	alert(msg);
//	$('resultDiv').innerHTML = msg;
//	$('resultDiv').style.display = 'inline';
//	new Effect.Highlight('resultDiv',{duration:3,startcolor:'#fff',endcolor:'#CCCFFF'});
//	Effect.Appear('resultDiv',{delay:2,from:0.0,to:1.0,transition:'in'});
//	Effect.Fade('resultDiv',{delay:3});
}

/**
 * currently not in use
 * was funtional when collapse/expand menu
 * @since 2sep07
 */
function togglePanel(id)
{
	var o = $(id);
	var arr = o.getElementsByTagName("tr");
	for (var i=0;i<arr.length;i++)
	{
		if (arr[i].className == "casual")
		{
			if (arr[i].style.display == "none")
				arr[i].style.display = "";
			else
				arr[i].style.display = "none";
		}
	}
}

function getDim(doc)
{
	if (doc == undefined)
		doc = (BrowserDetect.browser.toLowerCase() == 'firefox') ? window : document;
	
	if (BrowserDetect.browser.toLowerCase() == 'firefox')
	{
		h = window.innerHeight;
		w = window.innerWidth;
	}
	else
	{	
		h = document.documentElement.clientHeight;
		w = document.documentElement.clientWidth;
	}
	
	var a = new Array();
	a["width"] = w;
	a["height"] = h;
	return a;
}	

/**
 * for admin
 */
function checkAll(obj,table,name)
{
	var o = $(table).getElementsByTagName('input');
	for (var i=0;i<o.length;i++)
	{
		if (o[i].type.toLowerCase() == "checkbox" && o[i].name == name)
		{
			o[i].checked = obj.checked;
		}
	}	
}

function openWin(url,spec)
{
	if (spec == undefined)
		spec = '';

	var tc = window.open(url,'w',spec);
	if(!tc||!tc.focus)
		alert("A popup blocker may be preventing website from opening the page. If you have a popup blocker, try disabling it to open the window.")
	else
		tc.focus();
}

function makeTag(o_src,o_dest,appendTS)
{
	var appendTS = (typeof(appendTS) == "undefined") ? true : appendTS;
	if (appendTS == true)
	{
		var d = new Date();
		var currentYear = d.getFullYear();
	
		var currentMon = d.getMonth() + 1;
		if (currentMon < 10)
			currentMon = "0"+currentMon;
		
		var currentDay = d.getDate();
		if (currentDay < 10)
			currentDay = "0"+currentDay;
		
		o_dest.value = cleanTag(o_src.value) + "-" + currentYear + currentMon + currentDay;
	}
	else	
	{
		o_dest.value = cleanTag(o_src.value);
	}
}

function cleanTag(v)
{
	return v.toLowerCase().replace(/[\'\"\\\/,.`~!@#$%^&*()_+=\{\}\[\]:;<>\? ]/g,"-").replace(/[\-]+/g,"-").replace(/[\-]$/,"");
}

function createBookmarkLink(url,title) 
{
	title = title || ""; 
  // Blogger - Replace with <$BlogItemTitle$> 
  // MovableType - Replace with <$MTEntryTitle$>
	url = url || "";
  // Blogger - Replace with <$BlogItemPermalinkURL$> 
  // MovableType - Replace with <$MTEntryPermalink$>
  // WordPress - <?php bloginfo('url'); ?>
	if (window.sidebar) { // Mozilla Firefox Bookmark
		window.sidebar.addPanel(title, url,"");
	} else if( window.external ) { // IE Favorite
		window.external.AddFavorite( url, title); }
	else if(window.opera && window.print) { // Opera Hotlist
		return true; }
}

function getCookie(name) { 
   var start = document.cookie.indexOf(name+"="); 
   var len = start+name.length+1; 
   if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
   if (start == -1) return null; 
   var end = document.cookie.indexOf(";",len); 
   if (end == -1) end = document.cookie.length; 
   return unescape(document.cookie.substring(len,end)); 
} 
// This function has been slightly modified --- expires => days
function setCookie(name,value,expires,path,domain,secure) { 
	expires = expires * 60*60*24*1000;
	var today = new Date();
	var expires_date = new Date( today.getTime() + (expires) );
    var cookieString = name + "=" +escape(value) + 
       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
       ( (path) ? ";path=" + path : "") + 
       ( (domain) ? ";domain=" + domain : "") + 
       ( (secure) ? ";secure" : ""); 
    document.cookie = cookieString; 
}

function deleteCookie( name, path, domain ) 
{
	if (getCookie(name)) 
		document.cookie = name + "=" + ( ( path ) ? ";path=" + path : "") + ( ( domain ) ? ";domain=" + domain : "" ) + ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function jsTrack(url)
{
	if (typeof(pageTracker)!="undefined" && typeof(pageTracker._trackPageview)!='undefined')
	{
		pageTracker._trackPageview(url);
	}
}

Event.observe(window,'load',function(){new Image().src="/img/loading_small.gif";});

/**
 * Modify CSS programatically
 * modifyRule(".content","fontSize","15px");
 * modifyRule('.pageimage','height',pageHeight+'px');
 */
function modifyRule( selector, property, value )
{
	//alert(selector +', '+property+', '+ value);
	if( document.styleSheets )
	{
//		for (var x=0;x<document.styleSheets.length;x++)
		for (var x=0;x<3;x++)
		{
			var mysheet=document.styleSheets[x]
			var myrules=mysheet.cssRules? mysheet.cssRules: mysheet.rules
			//alert(myrules.length);
			for (i=0; i<myrules.length; i++)
			{
				if(myrules[i].selectorText && myrules[i].selectorText.toLowerCase()==selector)
				{ //find "a:hover" rule
					targetrule=myrules[i];
					//alert('e:'+targetrule.style[property]);				
					targetrule.style[property] = value;
					break;
				}
			}
		}
	}
	return false;
} 

/**
 * Read CSS programatically
 * getRule(".content","fontSize");
 */
function getRule( selector, property )
{
	//alert(selector +', '+property);
	if( document.styleSheets )
	{
//		for (var x=0;x<document.styleSheets.length;x++)
		for (var x=0;x<3;x++)
		{
			var mysheet=document.styleSheets[x]
			var myrules=mysheet.cssRules? mysheet.cssRules: mysheet.rules
			//alert(myrules.length);
			for (i=0; i<myrules.length; i++)
			{
				//alert(myrules[i].selectorText.toLowerCase());
				if(myrules[i].selectorText && myrules[i].selectorText.toLowerCase()==selector)
				{ //find "a:hover" rule
					targetrule=myrules[i];
					//alert('e:'+property+'+'+targetrule.style[property]);				
					return targetrule.style[property];
				}
			}
		}
	}
	return false;
}

function bookmark(url,title)
{
  if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4)) {
	window.external.AddFavorite(url,title);
  } else if (navigator.appName == "Netscape") {
    window.sidebar.addPanel(title,url,"");
  } else {
    alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark");
  }
}


// callback function for mp3 player states - moved in common as many players exist on some pages
function getUpdate(type,p1,p2,jsId)
{				
	// detect loading state (clicked on play)
	if (type == 'state' && p1 == 1 && jsId!='null')
	{
		jsTrack('/event/audios/play/'+jsId);
	}
}

/*
 * Not working fine now and not used, buggy need to update from online
function getParentOf(obj,tag)
{
	var c=0;
	alert(obj.parent);
	while(obj.parent && obj.parent.toUpperCase() != "BODY")
	{
		if (c++ == 10)
			break;
		alert(obj.parent);
		if ( obj.parent.toUpperCase() == tag.toUpperCase() )
			return obj.parent;
		else
			obj = obj.parent;
	}
	return null;
}
*/