var Ajaxs = new Array();
var AjaxStacks = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
var ajaxpostHandle = 0;
var evalscripts = new Array();
var ajaxpostresult = 0;

var ajaxLoadingImage = 'image/loading.gif';

function trim(value) {
	var temp = value;
	var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
	if (obj.test(temp)) {
	   temp = temp.replace(obj, '$2');
	}
	var obj = / +/g;
	temp = temp.replace(obj, " ");
	if (temp == " ") {
		temp = "";
	}
	return temp;
}




function in_array(needle, haystack) {
	if(typeof needle == 'string' || typeof needle == 'number') {
		for(var i in haystack) {
			if(haystack[i] == needle) {
					return true;
			}
		}
	}
	return false;
}

function changedisplay(obj, display) {
	if(display == 'auto') {
		obj.style.display = obj.style.display == '' ? 'none' : '';
	} else {
		obj.style.display = display;
	}
	return false;
}


var ReJax = function(ajaxType, ajaxLoadingElement) {
		
	for(var stackId = 0; stackId < AjaxStacks.length && AjaxStacks[stackId] != 0; stackId++);
	AjaxStacks[stackId] = 1;

	var objReJax = new Object();
		
	objReJax.loading = 'Loading...';
	objReJax.ajaxType = ajaxType ? ajaxType : 'XML';
	objReJax.ajaxLoadingElement = document.getElementById(ajaxLoadingElement);

	
	objReJax.resultHandle = null;
	objReJax.sendString = '';
	objReJax.targetUrl = '';
	objReJax.stackId = stackId;

	objReJax.setLoading = function(loading) {
		if(typeof loading !== 'undefined' && loading !== null) objReJax.loading = loading;
	}

	objReJax.setAjaxType = function(ajaxType) {
		objReJax.ajaxType = ajaxType;
	}

	objReJax.setLoadingId = function(loadId) {
		objReJax.ajaxLoadingElement = typeof loadId == 'object' ? loadId : document.getElementById(waitid);
	}
	
	objReJax.createXMLObj = function() {
		var request = false;
		if(window.XMLHttpRequest) {
			request = new XMLHttpRequest();
			if(request.overrideMimeType) {
				request.overrideMimeType('text/xml');
			}
		} else if(window.ActiveXObject) {
			var versions = ['Microsoft.XMLHTTP', 
			                'MSXML.XMLHTTP', 
			                'Microsoft.XMLHTTP', 
			                'Msxml2.XMLHTTP.7.0', 
			                'Msxml2.XMLHTTP.6.0', 
			                'Msxml2.XMLHTTP.5.0', 
			                'Msxml2.XMLHTTP.4.0', 
			                'MSXML2.XMLHTTP.3.0', 
			                'MSXML2.XMLHTTP'];
			for(var i=0; i<versions.length; i++) {
				try {
					request = new ActiveXObject(versions[i]);
					if(request) {
						return request;
					}
				} catch(e) {}
			}
		}
		return request;
	}
	
	objReJax.XMLHttpRequest = objReJax.createXMLObj(); 

	objReJax.showLoading = function() {
		if(objReJax.ajaxLoadingElement && (objReJax.XMLHttpRequest.readyState != 4 || objReJax.XMLHttpRequest.status != 200)) {						
			changedisplay(objReJax.ajaxLoadingElement, 'block');			
			
			objReJax.ajaxLoadingElement.innerHTML = '<span>' + objReJax.loading + '</span>';
		}
	} 
	
	objReJax.processHandle = function() {		
		
		if(objReJax.XMLHttpRequest.readyState == 4 && 
		   objReJax.XMLHttpRequest.status == 200) {
			for(k in Ajaxs) {
				if(Ajaxs[k] == objReJax.targetUrl) {
					Ajaxs[k] = null;
				}
			}
			
			if(objReJax.ajaxLoadingElement) changedisplay(objReJax.ajaxLoadingElement, 'none');
			
			if(objReJax.ajaxType == 'HTML') {
				objReJax.resultHandle(objReJax.XMLHttpRequest.responseText, objReJax);
			} else if(objReJax.ajaxType == 'XML') {
				try {
					objReJax.resultHandle(objReJax.XMLHttpRequest.responseXML.lastChild.firstChild.nodeValue, objReJax);					
				} catch(e) {					
					objReJax.resultHandle('', objReJax);
				}
			} else if(objReJax.ajaxType == 'JSON') {
								
				objReJax.resultHandle(objReJax.XMLHttpRequest.responseText, objReJax);
			}
			AjaxStacks[objReJax.stackId] = 0;
		}
	}

	objReJax.get = function(targetUrl, resultHandle) {	
		if(targetUrl.indexOf('?') != -1) {
			targetUrl = targetUrl + '&inajax=1';
		} else {
			targetUrl = targetUrl + '?inajax=1';
		}
		
		setTimeout(function(){objReJax.showLoading()}, 500);
		if(in_array(targetUrl, Ajaxs)) {
			return false;
		} else {
			Ajaxs.push(targetUrl);
		}
		
		
		objReJax.targetUrl = targetUrl;
		objReJax.resultHandle = resultHandle;
		objReJax.XMLHttpRequest.onreadystatechange = objReJax.processHandle;		
		
		
			var delay = 100;
			if(window.XMLHttpRequest) {
				setTimeout(function(){
				objReJax.XMLHttpRequest.open('GET', objReJax.targetUrl);
				objReJax.XMLHttpRequest.send(null);}, delay);
			} else {
				setTimeout(function(){
				objReJax.XMLHttpRequest.open("GET", targetUrl, true);
				objReJax.XMLHttpRequest.send();}, delay);
			}
	}

	return objReJax;
}

// Forms
function goBack(thisform){
	thisform.step.value = thisform.step.value - 1;
	var new_form_action = 'thisform.' + thisform.name + '_action'
	eval(new_form_action).value="back";
	thisform.submit();
}

function fill_postcode(addressinfo,addressfield,townfield,regionfield)  {

	
	var addressinfoobj = addressinfo.value.split('|');
	
	if (addressinfo.length > 1 ) {
		document.getElementById(addressfield).value = addressinfoobj[0];
		document.getElementById(townfield).value = addressinfoobj[1];
		document.getElementById(regionfield).value = addressinfoobj[2];																	
	} else {
		document.getElementById(addressfield).value = "";
		document.getElementById(egionfield).value = "";
		document.getElementById(townfield).value = "";
	}
	

	document.getElementById(addressinfo.id+'_layer').style.display='none';
}

function populate_postcode(result,xmlObject)
{
	eval(result);
	
	var select_object = document.getElementById(xmlObject.select_field);
	var select_layer = document.getElementById(xmlObject.select_field+'_layer');
	
	var postcode = xmlObject.postcode;
	
	select_layer.style.display='block';
	
	
	if (result) {
		
		if (result["postdata"].length>0) {
						
			for (i=0;i<result["postdata"].length;i++)
			{ 
				var addressvalue = result["postdata"][i]["line1"]+"|"+result["postdata"][i]["town"]+"|"+result["postdata"][i]["district"];
				var address = result["postdata"][i]["line1"]+", "+result["postdata"][i]["town"]+", "+result["postdata"][i]["district"];																					
				
				select_object.options[i+1] = new Option(address,addressvalue,false,false);
			}
			
		} else {
			
			alert('No postcode found matching ['+postcode+']');
		}
		
		
	} 
}

function lookup_postcode(appaccount,appkey,objectid)
{
	var doc = document.getElementById(objectid);
	
	var url = url_address+'components/form.cfc?method=find_postcode';
		url+='&postcode='+doc.value;
		url+='&appaccount='+appaccount;
		url+='&appkey='+appkey;
			
		
	var postcode_ajax = ReJax('JSON',objectid+'_loading');
	
	postcode_ajax.postcode = doc.value;
	postcode_ajax.select_field = objectid+'_postcode_select';	
	postcode_ajax.get(url,populate_postcode);
		
	
} 



function RunContent(file,width,height){
	var str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="' + width + '" height="' + height + '"><param name="movie" value="' + file + '" /><param name="wmode" value="transparent" /><param name="quality" value="high" /><embed src="' + file + '" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" width="' + width + '" height="' + height + '"></embed></object>';
// many thanks to gareth livingstone for his transparency testing on firefox.
	document.write(str);
}

function UpdateFrame(page_id,mode){
	if(mode=="preview"){
		parent.frames[0].location.href = url_address + "admin/website_admin/edit_page_tabs.cfm?dsp=preview&web_page_id=" + page_id;
	}else{
		parent.frames[0].location.href = url_address + "admin/website_admin/edit_page_tabs.cfm?dsp=edit_page&web_page_id=" + page_id;
	}
}

function usrfunc(usr,page_id,mode){
	if((mode=="edit" || mode=="preview" || mode=="audit") && (window.name!="edit_page" && window.name!="preview_page" && window.name!="audit" && window.name!="current" && window.name!="preview" && window.name!="mainFrame") && usr!=0){
		window.parent.location.href=url_address + 'index.cfm?page=' + page_id + '&mode=normal';
	}
	if(window.name=="edit_page" && mode!="edit"){
		window.location.href=url_address + 'index.cfm?page=' + page_id + '&mode=edit';
	}
	if(window.name=="edit_page" || window.name=="preview_page"){
		UpdateFrame(page_id,mode);
	}
}


function togglerMouseOut(objectElement){
	if (document.getElementById('nav_'+objectElement.id) &&	document.getElementById(objectElement.id)){
		document.getElementById('nav_'+objectElement.id).className = document.getElementById('nav_'+objectElement.id).className.replace("togglerMouseOver","togglerOff");
	}
}

function togglerMouseOver(objectElement){ 	
	if (document.getElementById('nav_'+objectElement.id) &&	document.getElementById(objectElement.id)){
		document.getElementById('nav_'+objectElement.id).className = document.getElementById('nav_'+objectElement.id).className.replace("togglerOff","togglerMouseOver");
	}
}

 
/* tests to see if string is in correct UK style postcode: AL1 1AB, BM1 5YZ etc. */
function isValidPostcode(p){
	var postcodeRegEx = /[a-zA-Z]{1,2}[0-9]{1,2} ?[0-9][a-zA-Z]{2}/i;
	return postcodeRegEx.test(p);
}

function checkPCform(pcform) {
	if (isValidPostcode(pcform.value) == false){
		alert("Postcode is invalid");
		pcform.focus();
		return false;
	}
	return true;
}