function isEmail(address) 
{
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   return reg.test(address)
}

function nEmail(ref) 
{
	val = document.getElementById(ref).value
	var reg = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/;
	return !reg.test(val)
}

function createAjax()
{
	var xt;
	xt = window.XMLHttpRequest ? new XMLHttpRequest() : ( window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : null)

	return xt;
}

var gjax = createAjax()? false : true;

function show(jax)
{
	var wini; wini = window.open('','');wini.document.write("<pre>"+jax.responseText); wini.document.close()
}

function trim(str, chars) {

    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
	
function strip_tags(str)
{
	var re= /<\S[^><]*>/g
	str = str.replace(re, "")
	return str;
}	


function doAjax(query)
{
	var jax = createAjax();if(!jax)return;
	jax.open("GET",query)
	jax.onreadystatechange = function(){if(jax.readyState==4)xResponse(jax)}
	jax.send(null)
}
function xResponse(x)
{
	busy(0)
	if(x.responseText.indexOf('DONiZ') + 1)
		window.location.reload()
	else
		alert(x.responseText)
}



function busy(mode)
{

	var bus = document.getElementById('processing')
	if(bus)
		if(mode)
			bus.style.visibility='visible'
		else
			bus.style.visibility='hidden'
}

function busyx(mode,id)
{

	if(!busyx.prev)prev=null
	if(id) busyx.current = id
	
	if(prev)document.getElementById(prev).style.visibility = 'hidden'

	var bus = document.getElementById(busyx.current)

	if(bus)
		if(mode)
			bus.style.visibility='visible'
		else
			bus.style.visibility='hidden'			
}



function c2d($dt)
{
	var a = $dt.split('-')
	return a[2]+'-'+a[1]+'-'+a[0]
}


function getDays(fromdate,todate)
{
	fromdate = fromdate.split('-')
	todate = todate.split('-')
	var a = new Date(fromdate[0],fromdate[1]-1,fromdate[2]);			
	var d = new Date(todate[0],todate[1]-1,todate[2]);
	return  (d.getTime() - a.getTime())/86400000
}

function jaxResponse(jax)
{
	if(jax.responseText.indexOf('bien') + 1)window.location.reload()
	else
	{
		var resl = strip_tags(jax.responseText)
		if(resl.length)alert(resl)
	}
}

function jsalert(str)
{
	alert(str)
	if(jsalert.arguments.length>1)
	{
		if(document.getElementsByName(jsalert.arguments[1])[0])
			document.getElementsByName(jsalert.arguments[1])[0].focus()
	}
	throw new Error('Stopa');
}

function getjsText(nami)
{
	var os = document.getElementsByName(nami)[0];
	if(os)
	{
		if(os.type!='file')
		if(window.trim)os.value = trim(os.value)
		return os.value
	}
	return null
}

function doProcessing(ref,mode)
{
	if(document.getElementById(ref))
	{
		if(mode)
			document.getElementById(ref).style.visibility='visible'
		else
			document.getElementById(ref).style.visibility='hidden'			
	}
}

function request(script,param)
{
	var jax = createAjax();if(!jax)return;
	jax.open("GET",script+".php?"+param,false)
	jax.send(null)
	return jax
}


function jRequestI(args,param)
{
	var jax = createAjax();if(!jax)return;
	jax.open("POST",args,false)
	jax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	jax.send(param);
	if(jax.responseText.indexOf('bien')+1){busy(0);jsalert('Email already Exists')}
//	else jsalert(jax.responseText);
}

function jRequest(args,param,mode)
{
//	mode = true;
	var jax = createAjax();if(!jax)return;
	jax.open("POST",args,mode)
	jax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	if(mode)jax.onreadystatechange = function() { if(jax.readyState==4)jaxResponse(jax); }
	jax.send(param);
	if(!mode)jaxResponse(jax);
}

function jRequestCall(args,param,mode,callback)
{
	var jax = createAjax();if(!jax)return;
	jax.open("POST",args,mode)
	jax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	if(mode)jax.onreadystatechange = function() { if(jax.readyState==4)jRtr(jax,callback); }
	jax.send(param);
//	alert(jax.responseText)
	if(!mode)jRtr(jax,callback);
}

function jRequestBool(args,param,mode)
{
	var jax = createAjax();if(!jax)return;
	jax.open("POST",args,mode)
	jax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	if(mode)jax.onreadystatechange = function() { if(jax.readyState==4)jResponseBool(jax); }
	jax.send(param);
//	alert(jax.responseText);
	if(!mode)return isbien(jax.responseText)?false:strip_tags(jax.responseText);	
}

function jRtr(jax,callback)
{
//	alert(jax.responseText)
	if( (jax.responseText.indexOf('bien')+1) || (jax.responseText.indexOf('DONiZ')+1) )
		eval(callback+"('Registred successfully. Please check you mail to activate your account')")
	else
		eval(callback+"('Unable to process this request. Please try again later')")
}

function display(ref,mode)
{
	mode = mode ? 'inline' : 'none'
	document.getElementById(ref).style.display = mode
}

function displayd(ref,mode)
{
	mode = mode ? 'block' : 'none'
	document.getElementById(ref).style.display = mode
}


function nullThese(whose)
{
	var str = whose.split(',')
	for(i in str)
		if(document.getElementById(str[i]))
			document.getElementById(str[i]).value=''
}

function setvalue(whose,ofwhat)
{
	document.getElementById(whose).value = ofwhat
}

function setvalueh(whose,ofwhat)
{
	document.getElementById(whose).innerHTML = ofwhat
}

function getvalueh(whose)
{
	return document.getElementById(whose).innerHTML 
}

function setimage(id,src)
{
	document.getElementById(id).src = src
}

function checkset(nami,err)
{
	var os = document.getElementsByName(nami)[0]
	if(!os)jsalert("'"+nami+"'"+' is Undefined');
	
	if(os.type!='file')
		if(window.trim)os.value = trim(os.value);
	
	if(os.value=='')
	{
		alert(err);
		os.focus();
		throw new Error('Stopa')
	}
}

function checkset_tinymce(src,msg)
{
	var content = tinyMCE.get(src).getContent()	
	content = trim(content);
	
	if(content=='')
	{ 
		alert(msg);
		throw new Error('Stopa')		
		return false;		
	}
}

function setTiny(id,val)
{
	tinyMCE.getInstanceById(id).setContent(val); 
}

function getTiny(id)
{
	return tinyMCE.get(id).getContent()	
}

function _checkset(nami,err)
{
	var os = document.getElementsByName(nami)[0]
	if(window.trim)os.value = trim(os.value);
	
	if(os.value=='')
	{
		alert(err);
		os.focus();
		throw new Error('Stopa')
	}
}

function clearall(str)
{
	str = str.split(',')
	for(i in str)
		if(document.getElementById(str[i]))
			document.getElementById(str[i]).value=''
}

function isbien(str)
{
	str = str.replace(/[\x00-\x1f]/,'')
	if( (str.indexOf('bien')+1) || (str.indexOf('DONiZ')+1) ) return true;
	return false;
}

function getjsSelectedText(nami)
{
	var nami = document.getElementsByName(nami)[0];
	if(nami) return nami.options[nami.selectedIndex].value
	else return null
}


function setjsSelectedText(id,ref)
{
	var os = document.getElementById(ref)
	for(var i=0;i<os.options.length;i++)
		if(os.options[i].value==id)os.options.selectedIndex = i; 
}

function findAbsolutePosition(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
//returns an array
}

function makeParam(param)
{
	var str = param.split(',')
	var val='';
	val += str[0] + '=' + str[1];
	for(var i=2;i<str.length;i+=2)
		val += "&" + str[i] + '=' + urlencode((document.getElementById(str[i+1]).value))
	return val;	
}

function recaptcha(ref,url)
{
	document.getElementById(ref).src = url +  Math.floor(Math.random()*9000)+'/'	
}

function setjsDisable(flag,param)
{
	var str = param.split(',')
	for(var i=0;i<str.length;i++)
			document.getElementById(str[i]).disabled = flag
}



function isnFile(filename)
{
	filename = document.getElementsByName(filename)[0].value
	if(filename=='')return true;
	
	if (!/(\.(jpg|jpeg|gif|png))$/i.test(filename))return true
	else return false;
}


function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) + "; path=/";
}

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return null;
}




function bookmarkthis()
{
//	return;
var title = 'Boondoggles Pub';
var url = baseurl

if(window.sidebar) // firefox
    window.sidebar.addPanel(title, url, "");
else if(window.opera && window.print){ // opera
    var elem = document.createElement('a');
    elem.setAttribute('href',url);
    elem.setAttribute('title',title);
    elem.setAttribute('rel','sidebar');
    elem.click();
}
else if(document.all)// ie
    window.external.AddFavorite(url, title);
else alert('Please use CTRL + D to bookmark this site')

} 


function jsonRequest(args,param,mode)
{
	var jax = jPreset(args,param,mode)
	jax.send(param)
	try{ return eval('('+jax.responseText+')') }
	catch(e) {
		if(arguments.length>3)jsalert(trim(strip_tags(jax.responseText)))
		else jsalert("Unable to process the response code");
	}
}

function jaxPreset_no()
{
	var jax = createAjax();if(!jax)return false;
	if(arguments.length)ajaxpath = arguments[0]	
	jax.open("POST",ajaxpath,false)
	jax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	return jax;
}

function urlencode (str) {

    str = (str+'').toString();
    
  return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
                                                                    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}


function prefixHttp(ref)
{
	if(!(ref = document.getElementById(ref)))return;
	if( (ref.value.indexOf('http://')+1 !=1) && (ref.value.indexOf('https://')+1 !=1) )
	{
//		if(confirm('No http:// prefix in url\n\nClick OK to add or Cancel to continue'))
		ref.value = 'https://'+ref.value
	}
}

var sc, maxscroll, minscroll=0;
var uptime, downtime
var pixelsteps=2;
var delay = 10
function inscroll(src)
{
	if(arguments.length>1)pixelsteps = arguments[1]	
	if(arguments.length>2)delay = arguments[2]		
	
	sc = document.getElementById(src);
	maxscroll = sc.scrollHeight - sc.offsetHeight
	minscroll = 0		
}

function scrollup()
{
	uptime = window.setInterval('scrollUp()',delay)
}
function scrolldown()
{
	downtime = window.setInterval('scrollDown()',delay)
}

function scrollUp()
{
	if(sc.scrollTop>0)
		sc.scrollTop = sc.scrollTop - pixelsteps
}
function scrollDown()
{
	if(sc.scrollTop<maxscroll)
		sc.scrollTop = sc.scrollTop +  pixelsteps
}

function clearscroll()
{
	if(uptime)window.clearInterval(uptime)
	if(downtime)window.clearInterval(downtime)	
}


function base64_encode (data) {
        
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = [];

    if (!data) {
        return data;
    }

    data = this.utf8_encode(data+'');
    
    do { // pack three octets into four hexets
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);

        bits = o1<<16 | o2<<8 | o3;

        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;

        // use hexets to index into b64, and append result to encoded string
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
    
    enc = tmp_arr.join('');
    
    switch (data.length % 3) {
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }

    return enc;
}

function utf8_encode ( argString ) {

    var string = (argString+''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n");

    var utftext = "";
    var start, end;
    var stringl = 0;

    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;

        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }

    if (end > start) {
        utftext += string.substring(start, string.length);
    }

    return utftext;
}

function getSourceElement(e)
{
	return getEventSource(e);
}

function getEventSource(e) {
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
	return targ;
}

function isDoubleClicked(e,id)
{
	var src = getSourceElement(e);
	if(src.tagName.toLowerCase()=='option' && src.parentNode.id==id)return true
	return false;
}

function selectAllMultiple(src,mode)
{
	var so = document.getElementById(src)
	if(!so){ alert(src + ' Undefined'); return; }
	for(var i=0;i<so.options.length;i++)so.options[i].selected = mode;
}

function deleteCollection(ref,command)
{
	var str;	
	str = ref		
	if(isNaN(ref))
	{	
		if(!isSelected(ref))
		{
			alert("Please select item(s) to delete");
			return;
		}	
		str = getSelected(ref)
		str = rtrim(str,',')		
	}
	if(!confirm("Are you sure you want to delete?"))return		
	jRequest(baseurl+"admin/ajax","command="+command+"&eye="+str,true)
}

function jprefix(param,func)
{
	var jax = createAjax();
	jax.open("POST",baseurl+'admin/ajax/',true)
	jax.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
	jax.send(param)
	jax.onreadystatechange = func // the contents are real functions to this...
/*	function() { if(jax.readyState==4) { 
		eval( func+'("'+jax.responseText+'")'); 
	} }
*/
}

function jpreset(param)
{
	var jax = createAjax();
	var path = arguments.length>1 ?arguments[1]:baseurl+'admin/ajax/';
	jax.open("POST",path,true)
	jax.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
	jax.send(param)
	return jax;
}

function jnRequest(param)
{
	var jax = jpreset(param)
	jax.onreadystatechange = function() { if(jax.readyState==4) {
		if(isbien(jax.responseText))alert("Weekly Specials updated");
		else alert(strip_tags(jax.responseText));
		busy(0);
	}}
}

function isOldDate(fa)
{
	if(typeof(fa)=='string')
		fa = document.getElementById(fa).value
	else fa = fa.value

	var fa = fa.split('-')

	var today = new Date(_thisYear,_thisMonth,_thisDay)	
	
	var a = new Date(fa[0],fa[1]-1,fa[2]);			

	if(a<today)
	{
		alert('Please select a future date');
		return true;
	}	
	return false;
}

function isLessDate(fa,ta)
{
	if(typeof(fa)=='string')
	{
		fa = document.getElementById(fa).value
		ta = document.getElementById(ta).value		
	}
	else
	{
		fa = fa.value
		ta = ta.value
	}

	var fa = fa.split('-')
	var ta = ta.split('-')

	var today = new Date(_thisYear,_thisMonth,_thisDay)	
	
	var a = new Date(fa[0],fa[1]-1,fa[2]);			
	var d = new Date(ta[0],ta[1]-1,ta[2]);

	if(a>d)
	{
		alert("From Date cannot be greater than To Date'");
		return true;
	}
	return false;
}

function whereIsMouse(e) {
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	
	return {'x': posx, 'y':posy};
	// posx and posy contain the mouse position relative to the document
	// Do something with this information
}

