<!-- 

// function to check a form for blank entries in required fields - then posts to the sqlUpdater page using Ajax to save / add the information



function emailCloak(username) {
var domain = "loves-restaurant.co.uk";
var atsign = "&#64;";
var addr = username + atsign + domain;
document.write(
  "<" + "a" + " " + "href=" + "mail" + "to:" + addr + ">" +
  addr +
  "<\/a>");
}




function checkBlankFields(fieldsArray) {
	
	var error = false;
	// enter the id's of the inputs you want to check in order of appearence
	if(fieldsArray) {
		var checkInputs = fieldsArray.split(",");
		// var checkInputs = ['field1','field2', ...];
		// reverse the array so that the the focus is always given to the first blank field (not the last)
		checkInputs.reverse();
		
		// for each input in the array, check if a value is present and set class / focus
		checkInputs.each(function(pair) {	
			
			var input_type = pair.split("#");
			var input = input_type[0];
			var type = input_type[1];
			
			if($(input).up("tr")) {
				$(input).up("tr").select("td")[0].removeClassName("oops");
			} else {
				alert(input);	
			}
			
			$(input).removeClassName('oops');
			if($(input+'_msg')) {
				$(input+'_msg').update();
			}
			
			if(!$(input).present()) {
				$(input).addClassName('oops');
				$(input).up("tr").select("td")[0].addClassName("oops");
				$(input).focus();
				error = true;
			} else {
				if(type!="blank") {
					switch(type) {
						case "email":
						 	if(checkEmail(input)) {
								$(input+'_msg').update(checkEmail(input));
								$(input).addClassName('oops');
								$(input).up("tr").select("td")[0].addClassName("oops");
								$(input).focus();
								error = true;
							}
							break;
						case "number":
							break;
						default:
							break;
					}
				}
			}
			
		});
	} 
	
	if(error) {
		return true;	
	} else {
		return false;	
	}
	
}

function checkSubmit(form,action,recordID,checkBlank,loadingMsg,failedMsg,what,arraySortableList,widg) {
	
	var form = $(form);
	
	// check for widgEditors incase we need to update hidden textareas, etc
	if(widg) {
		if(widgEditors) {
			widgEditors.each(function(id) {	
				id.updateWidgInput();
			});
		}
	}
	// scroll to the top of the page so that the user can always see the ajax messages on long forms / short screens
	$('top').scrollTo();
	var error = checkBlankFields(checkBlank);
	var sortableListOutput = "";
	
	// array containing list names and values of sortable list
	if(arraySortableList){
			
		// clean output for qs
		arraySortableList.each(function (value, index) {	
			
			// validate qs
			if(!isEven(index)){
				sortableListOutput += "=";
			}else{					
				sortableListOutput += "&";
			}
					
			sortableListOutput += value;					
				
		});			
	}		
	
	if(error) {
		
		$('ajax_msg').show();
		$('ajax_msg').addClassName('on error');
		$('ajax_msg').update("<h5>Input Error</h5><p>Please ensure that <strong>all fields marked with an (*)</strong> are completed as a minimum...</p>");	
		
		window.setTimeout(function() {
			Effect.Fade('ajax_msg', {from:1.0,to:0.0,duration:1.0});
		}, 2000);
		
		$('content').scrollTo();
		
	} else {
	
		// need to pass through the record ID for updating existing records
		var url = 'inc/ajax.php?what=' + what + '&action=' + action + '&id=' + recordID;
		
		var params = form.serialize();
		
		//add list values
		params += sortableListOutput;	
		
		new Ajax.Request(url, {
			parameters: params,
			evalJSON: 'force',
			onLoading: function(loading) {
				$('ajax_wheel').addClassName('on');
				$('wrapper').addClassName('fade');
				$('top').addClassName('fade');
				$('ajax_wheel').update(loadingMsg);
			},
			onSuccess: function(completed) {
				$('ajax_wheel').removeClassName('on');
				$('wrapper').removeClassName('fade');
				$('top').removeClassName('fade');
				$('ajax_wheel').update('');				
					
				if(completed.responseText) {				
					// is response JSON?
					if(completed.responseText.isJSON()){
						
						var jsonObj = eval(completed.responseJSON);	
					
						if(jsonObj.type == "row"){	
							// append new row
							$(jsonObj.appendix).insert({top: jsonObj.data});	
							// highlight new element
							new Effect.Highlight(jsonObj.element, {duration:5, startcolor:"#FFFFCC"});							
							$('msg').removeClassName('oops');
						}		
						
						if(jsonObj.type == "error"){
							$('ajax_wheel').removeClassName('on');
							$('wrapper').removeClassName('fade');
							$('top').removeClassName('fade');
							$('ajax_msg').show();
							$('ajax_msg').addClassName('on error');
							$('ajax_msg').update("<h5>Input Error</h5><p>"+jsonObj.data+"</p>");	
							window.setTimeout(function() {
								Effect.Fade('ajax_msg', {from:1.0,to:0.0,duration:1.0});
							}, 2000);								
						}
						
					} else {						
						document.location.href = completed.responseText;			
					}
				
				} else {
					$('ajax_wheel').removeClassName('on');
					$('wrapper').removeClassName('fade');
					$('top').removeClassName('fade');
					$('ajax_msg').show();
					$('ajax_msg').addClassName('on error');
					$('ajax_msg').update(failedMsg);	
					
					window.setTimeout(function() {
						Effect.Fade('ajax_msg', {from:1.0,to:0.0,duration:1.0});
					}, 2000);
				}
			},
			onFailure: function(failure) {
				
				$('ajax_wheel').removeClassName('on');
				$('wrapper').removeClassName('fade');
				$('top').removeClassName('fade');
				$('ajax_msg').show();
				$('ajax_msg').addClassName('on error');
				$('ajax_msg').update(failedMsg);	
				
				window.setTimeout(function() {
 					Effect.Fade('ajax_msg', {from:1.0,to:0.0,duration:1.0});
				}, 2000);
			} 
		});	
	
	}
	return false;
}

function checkEmail(input) {
					
	var error = "";
	var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ;
	var illegalChars = /[\(\)\<\>\,\;\:\\\"\[\]]/ ;
	var email = $F(input).strip();
	
	if(email) {

		if(!emailFilter.test(email)) {
			error = "<br>The email address you entered is <strong>invalid</strong>";
		} else if (email.match(illegalChars)) {
			error = "<br>The email address contains <strong>illegal characters</strong>";
		} 
		
		if(error) {
			return error;
		} else {
			return false;
		}					
	}
}

var xmlHttp

function deleteRecord(what,id) { 
	
	var Agree = confirm("Are you sure you want to delete this record?");
	
	if(Agree) {

		var tr = "tr_"+id;
		var url = "inc/ajax.php?what=" + what + "&action=delete&id=" + id;
		
		new Ajax.Request(url, {
			method: 'get',
			onLoading: function(loading) {
				$('ajax_wheel').addClassName('on');
				$('wrapper').addClassName('fade');
				$('top').addClassName('fade');
				$('ajax_wheel').update('Deleting record...');
			},
			onSuccess: function(completed) {
				if(completed.responseText) {
					$('ajax_wheel').removeClassName('on');
					$('wrapper').removeClassName('fade');
					$('top').removeClassName('fade');
					$('ajax_wheel').update('');
					Effect.Fade(tr, {from:1.0,to:0.0,duration:1.0});
				} else {
					$('ajax_wheel').removeClassName('on');
					$('wrapper').removeClassName('fade');
					$('top').removeClassName('fade');
					$('ajax_wheel').update('');				
				}
			},
			onFailure: function(failed) {
				$('ajax_wheel').removeClassName('on');
				$('wrapper').removeClassName('fade');
				$('top').removeClassName('fade');
				$('ajax_wheel').update('');				
			}
		});		
		
	} else {
		return false;
	}

}

function nSwitch(table,field,id) {
	
	xmlHttp=GetXmlHttpObject();
	
	if (xmlHttp==null) {
	  alert ("Your browser does not support AJAX!");
	  return;
	} 
	
	// find out if its currently on or off;
	if($(field+'_'+id).hasClassName('on')) {
		status = 1;
	} else {
		status = 0;
	}
	
	var url="inc/ajax.php";
	
	url=url+"?action=switch";
	url=url+"&table="+table;
	url=url+"&field="+field;
	url=url+"&id="+id;	
	url=url+"&status="+status;	
	
	
	new Ajax.Request(url, {
		method: 'get',
		onLoading: function(loading) {
			$('ajax_wheel').addClassName('on');
			$('wrapper').addClassName('fade');
			$('top').addClassName('fade');
			
			$('ajax_wheel').update('Updating status...');
		},
		onSuccess: function(completed) {			
			$('ajax_wheel').removeClassName('on');
			$('wrapper').removeClassName('fade');
			$('top').removeClassName('fade');
			$('ajax_wheel').update();				
			toggleFlags(id,status,field);
		},
		onFailure: function(failed) {
			$('ajax_wheel').removeClassName('on');
			$('wrapper').removeClassName('fade');
			$('top').removeClassName('fade');
			$('ajax_wheel').update();					
			alert("Could not update status...");
		}
	});	
}

function toggleFlags(id,status,field) { 
	$(field+'_'+id).removeClassName('on');
	$(field+'_'+id).removeClassName('off');
	if(status==0) {
		$(field+'_'+id).addClassName('on');
	} else {
		$(field+'_'+id).addClassName('off');
	}
}

function fadeOutRemove(id,prefix) { 
	opacity('tr_'+prefix+id, 100, 0, 500);
}

function GetXmlHttpObject(){
	var xmlHttp=null;
	try {
	  // Firefox, Opera 8.0+, Safari
	  xmlHttp=new XMLHttpRequest();
	  }
	catch (e) {
	  // Internet Explorer
	  try {
		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
	  catch (e) {
		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	  }
	return xmlHttp;
}


function createRequestObject() { 

   var req; 

   if(window.XMLHttpRequest){ 
	  // Firefox, Safari, Opera... 
	  req = new XMLHttpRequest(); 
   } else if(window.ActiveXObject) { 
	  // Internet Explorer 5+ 
	  req = new ActiveXObject("Microsoft.XMLHTTP"); 
   } else { 
	  // There is an error creating the object, 
	  // just as an old browser is being used. 
	  alert('Problem creating the XMLHttpRequest object'); 
   } 

   return req; 

} 

function nSuggest(string,table,prefix,search_field,fields,page) { 
	
	xmlHttp=GetXmlHttpObject();
	
	if (xmlHttp==null) {
	  alert ("Your browser does not support AJAX!");
	  return;
	} 
	
	var url="inc/ajax.php";
	
	url=url+"?a=suggest";
	url=url+"&string="+string;
	url=url+"&prefix="+prefix;
	url=url+"&table="+table;
	url=url+"&search_field="+search_field;
	url=url+"&fields="+fields;
	url=url+"&page="+page;

	//xmlHttp.onreadystatechange = toggleSuggest();	
	//xmlHttp.open("GET",url,true);
	//xmlHttp.send(null);
	if(string) {
		xmlHttp.open("GET",url,true);
		xmlHttp.onreadystatechange=function() {
			if (xmlHttp.readyState==4) {
				$('results').show();
				document.getElementById("results").innerHTML = xmlHttp.responseText;
			} else {
				$('results').hide();
			}
		}
		xmlHttp.send(null)
	} else {
		$('results').hide();
	}

}

function initFakeFileInput() {
	var fakeFileUpload = document.createElement('div');
	fakeFileUpload.className = 'fakefile';
	fakeFileUpload.appendChild(document.createElement('input'));
	var image = document.createElement('img');
	image.src='images/buttons/file_select.jpg';
	fakeFileUpload.appendChild(image);
	var x = document.getElementsByTagName('input');
	for (var i=0;i<x.length;i++) {
		if (x[i].type != 'file') continue;
		if (x[i].getAttribute('noscript')) continue;
		if (x[i].parentNode.className != 'fileinputs') continue;
		x[i].className = 'file hidden';
		var clone = fakeFileUpload.cloneNode(true);
		x[i].parentNode.appendChild(clone);
		x[i].relatedElement = clone.getElementsByTagName('input')[0];
		
		x[i].onchange = x[i].onmouseout = function () {
			this.relatedElement.value = this.value;
		}
	}
}

function inputError(id,type,h3,msg){
	
	var id = $(id);
	
	//message templates
	if(type=='size'){
	 	var h3 = '<h3>Incorrect Input</h3>';
	 	var msg = '<p>The width you enter must contain <strong>4 digits</strong> and have no special characters e.g. 1234.</p>';
	}	
	if(type=='range'){
	 	var h3 = '<h3>Incorrect Range</h3>';
		var msg ='<p>The second range value must be <br /><strong>greater</strong> than the first.</p>';	
	}
	
	//update with msg
	$$('div#error-msg div').invoke('update', h3+msg)
	
	//get position		
	var position = id.positionedOffset();	
	$('error-msg').setStyle({			
		'left' : (position[0] + $(id).getWidth() + 2) + 'px',
		'top' : (position[1]) + 'px'
	});	
	
	//show error
	$(id).addClassName('oops');
	$('error-msg').show();
	$('error-msg').observe('click', function(){
		$('error-msg').hide();
		$(id).removeClassName('oops');
	});
	
}

function liveSearch(form,displayDiv,what) {
	
	var form = $(form);

	$(displayDiv).update('');
	$('msg').update('');

	// need to pass through the variables to the ajax page
	var url = 'inc/ajax.php?what=' + what + '&action=search';
	var params = form.serialize();
	
	new Ajax.Request(url, {
		method: 'post',
		parameters: params,
		onLoading: function(loading) {
			$('ajax_msg').addClassName('on');
			$('ajax_msg').update('Searching...');
		},
		onSuccess: function(completed) {
			$('ajax_msg').removeClassName('on');
			$('ajax_msg').update('');

			if(completed.responseText) {
				$(displayDiv).update(completed.responseText);
				$('msg').removeClassName('oops');
				$('msg').update('Your search returned the following orders...');
			} else {
				$('msg').addClassName('oops');
				$('msg').update('Sorry, there were no records found that matched your search criteria.');
			}
			
		},
		onFailure: function(loading) {
			$('ajax_msg').addClassName('off');
			$('ajax_msg').update('');
		} 		
	});	
	
	return false;
}

function checkValidPostCode(toCheck) {
	
	// Permitted letters depend upon their position in the postcode.
	var alpha1 = "[abcdefghijklmnoprstuwyz]";  // Character 1
	var alpha2 = "[abcdefghklmnopqrstuvwxy]";  // Character 2
	var alpha3 = "[abcdefghjkstuw]";           // Character 3
	var alpha4 = "[abehmnprvwxy]";             // Character 4
	var alpha5 = "[abdefghjlnpqrstuwxyz]";     // Character 5
	
	// Array holds the regular expressions for the valid postcodes
	var pcexp = new Array ();
	
	// Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA
	pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1,2})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));
	
	// Expression for postcodes: ANA NAA
	pcexp.push (new RegExp ("^(" + alpha1 + "{1}[0-9]{1}" + alpha3 + "{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));
	
	// Expression for postcodes: AANA  NAA
	pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1}" + alpha4 +"{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));
	
	// Exception for the special postcode GIR 0AA
	pcexp.push (/^(GIR)(\s*)(0AA)$/i);
	
	// Standard BFPO numbers
	pcexp.push (/^(bfpo)(\s*)([0-9]{1,4})$/i);
	
	// c/o BFPO numbers
	pcexp.push (/^(bfpo)(\s*)(c\/o\s*[0-9]{1,3})$/i);
	
	// Overseas Territories
	pcexp.push (/^([A-Z]{4})(\s*)(1ZZ)$/i);
	
	// Load up the string to check
	var postCode = toCheck;
	
	// Assume we're not going to find a valid postcode
	var valid = false;
	
	// Check the string against the types of post codes
	for(var i=0; i<pcexp.length; i++) {
		if (pcexp[i].test(postCode)) {
		
		  // The post code is valid - split the post code into component parts
		  pcexp[i].exec(postCode);
		  
		  // Copy it back into the original string, converting it to uppercase and
		  // inserting a space between the inward and outward codes
		  postCode = RegExp.$1.toUpperCase() + " " + RegExp.$3.toUpperCase();
		  
		  // If it is a BFPO c/o type postcode, tidy up the "c/o" part
		  postCode = postCode.replace (/C\/O\s*/,"c/o ");
		  
		  // Load new postcode back into the form element
		  valid = true;
		  
		  // Remember that we have found that the code is valid and break from loop
		  break;
		}
	}
	
	// Return with either the reformatted valid postcode or the original invalid postcode
	if (valid) {return postCode;} else return false;
	
}

function togglePop(id) {
	
	var a = $('apop_'+id);
	var div = $('pop_'+id);
	
	if(div.hasClassName('hide')) {
		var position = a.positionedOffset();
		div.setStyle({
			'left' : (position[0] + 15) + 'px',
			'top' : (position[1] - 15) + 'px'
		});
		div.removeClassName('hide');
	} else {
		div.addClassName('hide');	
	}
}

function isEven(number){
	return number % 2 == 0;
}

Effect.FadeIn = function(element) {
    element = $(element);
    new Effect.Appear(element, arguments[1] || {});
}

Effect.FadeOut = function(element) {
    element = $(element);
    new Effect.Fade(element, arguments[1] || {});
}

Effect.Fader = function(element) {
    element = $(element);
    if(element.style.display == 'none') {
    new Effect.FadeIn(element, arguments[1] || {}); }
    else { new Effect.FadeOut(element, arguments[1] || {}); }
}

function ToolTip(obj,con,x,y){
	Obj=document.getElementById('pop');
	Obj.innerHTML=con;
	Obj.style.left=(zxcPos(obj)[0]+x)+'px';
	Obj.style.top=(zxcPos(obj)[1]+y)+'px';
	Obj.style.visibility='visible';
}
function Hide(){
	Obj=document.getElementById('pop');
	Obj.style.visibility='hidden';
}
function zxcPos(zxcobj){
	zxclft=zxcobj.offsetLeft;
	zxctop=zxcobj.offsetTop;
	while(zxcobj.offsetParent!=null){
	zxcpar=zxcobj.offsetParent;
	zxclft+=zxcpar.offsetLeft;
	zxctop+=zxcpar.offsetTop;
	zxcobj=zxcpar;
	}
	return [zxclft,zxctop];
}


function openDir(form) { 
	var newIndex = form.jump.selectedIndex; 
	cururl = form.jump.options[newIndex].value; 
	window.location.assign(cururl); 
} 

var winx = null;
function newWindow(mypage,myname,w,h,features) {
  var winl = (screen.width-w)/2;
  var wint = (screen.height-h)/2;
  if (winl < 0) winl = 0;
  if (wint < 0) wint = 0;
  var settings = 'height=' + h + ',';
  settings += 'width=' + w + ',';
  settings += 'top=' + wint + ',';
  settings += 'left=' + winl + ',';
  settings += features;
  winx = window.open(mypage,myname,settings);
  winx.window.focus();
}

function charCounter(id, maxlimit, limited){
	if (!$('counter-'+id)){
		$(id).insert({after: '<div id="counter-'+id+'"></div>'});
	}
	if($F(id).length >= maxlimit){
		if(limited){	$(id).value = $F(id).substring(0, maxlimit); }
		$('counter-'+id).addClassName('oops');
	} else {	
		$('counter-'+id).removeClassName('oops');
	}
	$('counter-'+id).update("You have <strong>"+ (maxlimit-$F(id).length)+"</strong> character(s) left...");	
		
}
	
function makeItCount(id, maxsize, limited){
	if(limited == null) limited = true;
	if ($(id)){
		Event.observe($(id), 'keyup', function(){charCounter(id, maxsize, limited);}, false);
		Event.observe($(id), 'keydown', function(){charCounter(id, maxsize, limited);}, false);
		charCounter(id,maxsize,limited);
	}
}




//-->

