function Set_Cookie( name, value, expires, path, domain, secure ){
		// set time, it's in milliseconds
		var today = new Date();
		today.setTime( today.getTime() );
		
		/*
		if the expires variable is set, make the correct
		expires time, the current script below will set
		it for x number of days, to make it for hours,
		delete * 24, for minutes, delete * 60 * 24
		*/
		if ( expires ){
		expires = expires * 1000 * 60 * 60 * 24;
		}
		var expires_date = new Date( today.getTime() + (expires) );
		
		document.cookie = name + "=" +escape( value ) +
		( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
		( ( path ) ? ";path=" + path : "" ) +
		( ( domain ) ? ";domain=" + domain : "" ) +
		( ( secure ) ? ";secure" : "" );
	}
function Get_Cookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ ){
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name ){
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 ){
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found ){
		return null;
	}
}
/*
	function setEditor(id,form){
		// create an edit div on the page
		ielm=document.createElement('iframe');
		ielm.id='_editor';
		ielm.src="iframe/"+form+"?id="+id;
		ielm.style.width="800px";
		ielm.style.height="600px";
		ielm.style.position='absolute';
		ielm.style.top='30px';
		ielm.style.left = '30px';
		ielm.style.backgroundColor="#FFF";
		ielm.style.zIndex=1000;
		ielm.style.border="1px inset #CCC";
		document.body.appendChild(ielm);
	}
*/
/*
	
	function rload(page){
			param="";
			var req = Spry.Utils.loadURL("POST",
			 	"pages/"+page,
			  	true,
			   	MySuccessCallback, 
			  	{ postData: param,
			    headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" },
				errorCallback: MyErrorCallback });
		
			function MySuccessCallback(req){
				document.getElementById('content').innerHTML =req.xhRequest.responseText;
				document.getElementById('content').style.display='block';
				s=req.xhRequest.responseText.indexOf("<script");
				s=req.xhRequest.responseText.indexOf(">",s)+1;
				e=req.xhRequest.responseText.indexOf("</script>",s);
				scpt=req.xhRequest.responseText.substring(s,e);
				eval(scpt);
			}
			
			function MyErrorCallback(req){
			  alert("ERROR: " + req.userData.msg);
			}
	
	}
*/
	function loadrpt(){
		var elm=document.getElementById('report_list');
		report=elm.options[elm.selectedIndex].value;
		sdate=document.getElementById('startdate').value;
		edate=document.getElementById('enddate').value;
		
		document.getElementById('report').innerHTML="<img src='/reports/"+report+".php?s="+sdate+"&e="+edate+"&r="+Math.random()+"' />";
	
	}
	var cal1;
	var textfld;

	
	function goToToday(){
		var t = new Date();
		cal1.setCalendarDate(t.getUTCFullYear(), t.getUTCMonth());
		//cal1.removeClassName(cal1.getFocusedElement(), cal1.focusedCellClass);
		//cal1.focusedCell = null;
		return false;
	}
	
	function viewSelected(){
		if(cal1.getSelectedDate()){
			cal1.setCalendarDate(cal1.getSelectedDate().getUTCFullYear(),cal1.getSelectedDate().getUTCMonth());
			cal1.removeClassName(cal1.getFocusedElement(), cal1.focusedCellClass);
			cal1.focusedCell = null;
			return false;
		}
	}
/*	
	var cb = function(val){
		v = cal1.calendarMonths[val.getUTCMonth()] + " " + val.getUTCDate() + ", " + val.getUTCFullYear();
		v = val.getUTCFullYear() + "-" + (val.getUTCMonth()+1) + "-" + val.getUTCDate();
		//alert("You clicked on " + v + ".");
		textfld.value=v;
		document.getElementById('cal1').style.display='none';

		cal1.clearSelection()
		return false;
	}
*/
	function showCalendar(id){
		textfld=document.getElementById(id);
		document.getElementById('cal1').style.display='block';
	}
	
function attachNEvent(mObj, type, func, bubble ){
	if (document.addEventListener) {
		mObj.addEventListener(type,func,bubble);
	} else if (document.attachEvent) {
		mObj.attachEvent("on"+type,func,bubble);
	}
}

function detachNEvent(mObj, type, func, bubble){
	if (document.removeEventListener) {
		mObj.removeEventListener(type,func,bubble);
	} else if (document.detachEvent) {
		mObj.detachEvent("on"+type,func,bubble);
	}
}

function Evt(evt) {
	this.evt = evt ? evt : window.event; 
	this.source = this.evt.target ? this.evt.target : this.evt.srcElement;
	this.keyCode = this.evt.which ? this.evt.which : this.evt.keyCode;
	this.x = this.evt.pageX ? this.evt.pageX : this.evt.clientX;
	this.y = this.evt.pageY ? this.evt.pageY : this.evt.clientY;
	this.button = this.evt.button;
	this.ctrlKey=this.evt.ctrlKey
	this.type=this.evt.type
	this.value=this.evt.value
	//writeDebug(this.type+this.keyCode)
}


function setSelected(selbox,stext){ // sets a HTML select box "selected" to a specific text value in the list
	if(typeof(selbox)=='string') selbox = document.getElementById(selbox);
	if(!selbox || stext=='') return;
	selbox.selectedIndex=-1;
	for (var c=0; c<selbox.options.length; c++){
		if (selbox.options[c].text == stext || selbox.options[c].value == stext ) selbox.selectedIndex=c;
	}
}

function getAbTop(mObj){
	if (!mObj) return false;
	var abTop=0;
	while (mObj && mObj.tagName != "BODY" && mObj.offsetParent){
		abTop += mObj.offsetTop-mObj.scrollTop;
		mObj = mObj.offsetParent;
	}
	return abTop;	
}



function getAbLeft(mObj){
	if (!mObj) return false;
	var abLeft=0;
	while (mObj && mObj.tagName != "BODY" && mObj.offsetParent){
		abLeft += mObj.offsetLeft;
		mObj = mObj.offsetParent;
	}
	return abLeft;	
}

function popup(e, num)
{
	if(!e)
	e = window.event;
	var el = document.getElementById('popup'+num);
	if(el)
	{
		if (e.pageX || e.pageY)
		{
			var posx = e.pageX;
			var posy = e.pageY;
		}
		else if (e.clientX || e.clientY)
		{
			var posx = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
			var posy = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
		}
		posx = posx - getAbLeft(el.parentNode) - 200;
		posx = (posx < 0)? 0 : posx;
		posy = posy-getAbTop(el.parentNode)+20;
		el.style.left = posx + 'px';
		el.style.top = posy + 'px';
		el.style.display = 'block';
		el.onclick = function()
		{
			this.style.display = 'none';
		}
	}
}

function addClass(el, klass)
{
	var classes = el.className.split(' ');
	if(!hasClass(el, klass))
	{
		classes.push(klass);
		el.className = classes.join(' ');
	}
}
function removeClass(el, klass)
{
	var classes = el.className.split(' ');
	for(var i = 0; i < classes.length; i++)
	{
		if(classes[i] == klass)
		{
			classes.splice(i, 1);
			break;
		}
	}
	el.className = classes.join(' ');
}
function hasClass(el, klass)
{
	var classes = el.className.split(' ');
	for(var i = 0; i < classes.length; i++)
	{
		if(classes[i] == klass)
		{
			return true;
		}
	}
	return false;
}
function setVars(variable, val){
	$.get("/ajax/actions/setVars.php?"+variable+"="+val,{});
}
function setBackofficeVars(user_id, company_id, staff_id)
{
	$.get("/ajax/actions/setVars.php?buser_id="+user_id+"&bcompany_id="+company_id+"&bstaff_id="+staff_id, {}, updateBKO);
}
function updateBKO()
{
	$(".bkoChange").each(function(){
		$("#"+this.id+"_s").load(this.getAttribute('rel'));
	});
}
function updateOneBKO(id)
{
	$("#"+id+"_s").load($('#'+id).attr('rel'));
}

function Observable(){
	this.observers = [];
	this.addObserver = function(ob)
	{
		this.observers[this.observers.length] = ob;
	}
	this.removeObserver = function(ob)
	{
		for(var i = 0; i < this.observers.length; i++)
		{
			if(this.observers[i] == ob)
			{
				this.observers.splic(i, 1);
				break;
			}
		}
	}
	this.notify = function(change)
	{
		for(var i = 0; i < this.observers.length; i++)
		{
			this.observers[i].update(this, change);
		}
	}
}