<!-- hide
///////////////////////////////////////////// Search
var tsearch=function(sss,ttt) {
	clearAllTimeouts();
	timeOuts['search'] = setTimeout("dosearch('"+sss+"','"+ttt+"')",1000)
}
var dosearch=function(sss,ttt) {
	if (sss.length>2)
	{
		var dname='main_content';
		document.getElementById(dname).innerHTML='<img id="ajaxloader" src="../library/ajaxloader.gif" alt="loading..." />';
		var act='search';
		new Ajax.Updater(dname,'ajax.asp',{parameters:{act:act,term:sss,h1:ttt},insertion:Insertion.Top,evalScripts:true});
	}
}
////////////////////////////////////////////////////////////////////////////////////////// Jamies JS Pformatter
var pformat=function(sss) {
	if (sss!="") {
		sss=sss.replace(/ /g,'_');
		sss=sss.replace(/__/g,'_');
		sss=sss.replace(/'/g,"");
		sss=sss.replace(/:/g,"");
		sss=sss.replace(/,/g,"");
		sss=sss.replace(/\//g,"");
		sss=sss.replace(/%/g,"");
		sss=sss.replace(/&/g,"");
		sss=sss.replace(/$/g,"");
		sss=sss.replace(/£/g,"");
		sss=sss.replace(/""/g,"");
		sss=sss.replace(/!/g,"");
		sss=sss.replace(/\?/g,"");
		sss=sss.replace(/#/g,"");
		sss=sss.replace(/@/g,"");
		sss=sss.replace(/~/g,"");
		sss=sss.replace(/</g,"");
		sss=sss.replace(/>/g,"");
		sss=sss.replace(/\*/g,"");
		sss=sss.replace(/^/g,"");
		sss=sss.replace(/__/g,"_");
	}
	sss=sss.toLowerCase();
	return sss;
}
///////////////////////////////////////////// Leftnav Slider
var showleft=function(sss,ttt) {
	if ($(sss).style.display=='none') {
		Effect.Appear(sss,{ queue:{scope:"lefter",overwrite:true} });
	}
	else {
		$(sss).morph('height:'+eval(ttt*40)+'px;',{ queue:{scope:"lefter",overwrite:true} });
	}
}
var hideleft=function(sss) {
	Effect.Queues.get("lefter").cancel(sss)
	Effect.BlindUp(sss,{queue:{scope:"lefter"}, scaleContent:true, scaleMode:'contents' }); 
}
///////////////////////////////////////////// Bottom Slider
var domorph=function(sss) {
	$(sss).morph('height:120px;'); 
	return false;
}
var unmorph=function(sss) {
	$(sss).morph('height:35px;');
	return false;
}
///////////////////////////////////////////// Timeout Array
var timeOuts=new Array(); 
function clearAllTimeouts(){  
	for(key in timeOuts ){  
		clearTimeout(timeOuts[key]);  
	}  
}
////////////////////////////////////////////////////////////////////////////////////////// Editing Functions
var pos=function(table,list) {
	var thelist=Sortable.sequence(list);
	var fullist=''
	for (x in thelist) {
		if (parseInt(thelist[1,x])==thelist[1,x]) {
			fullist=fullist+thelist[1,x]+'-'
		}
	}
	new Ajax.Request('ajax.asp',{method:'post',parameters:{act:'pos',table:table,ids:fullist}});
}
var heat=function(table,id) {
	document.getElementById('heat'+id).innerHTML='';
	new Ajax.Updater('heat'+id,'ajax.asp',{parameters:{act:'heat',id:id,table:table},insertion:Insertion.Top,evalScripts:true});
}
var activate=function(table,id,val1,val2) {
	document.getElementById('activate'+id).innerHTML='';
	new Ajax.Updater('activate'+id,'ajax.asp',{parameters:{act:'activate',id:id,table:table,val1:val1,val2:val2},insertion:Insertion.Top,evalScripts:true});
}
var del=function(table,id,fid,title,fid2,fid3,fid4,fid5) {
	document.getElementById('msg').innerHTML='';
	new Ajax.Updater('msg','ajax.asp',{parameters:{act:'del',id:id,table:table,fid:fid,title:title,fid2:fid2,fid3:fid3,fid4:fid4,fid5:fid5},insertion:Insertion.Top,evalScripts:true, queue:{position:'end',scope:'doqueue'}});
}
var kill=function(table,id,fid,fid2,fid3,fid4,fid5) {
	new Ajax.Updater('dname','ajax.asp',{parameters:{act:'kill',id:id,table:table,fid:fid,fid2:fid2,fid3:fid3,fid4:fid4,fid5:fid5},insertion:Insertion.Top,evalScripts:true, queue:{position:'end',scope:'doqueue'}});
}
var esave=function(table,id,fid,vid,iid,rsc,vtype) {
	clearTimeout(timeOuts['timedsave_'+fid]); 
	timeOuts['timedsave_'+fid] = setTimeout("dosave('"+table+"','"+id+"','"+fid+"','"+vid+"','"+iid+"','"+rsc+"','"+vtype+"')",500);
}
var dosave=function(table,id,fid,vid,iid,rsc,vtype,opt) {
	opt = typeof opt == "object" ? opt : {};
	var onComplete = opt.onComplete || function(){};
	$(vid).innerHTML='';
	if ($(iid).type=='checkbox') {
		var iname=document.getElementsByName($(iid).name);
		var val=''
		if (iname.length>1) {
			var cb=0;
			val='-';
			iid=$(iid).name
			for (cb=0;cb<iname.length;++cb) {
				if (iname[cb].checked) {
					val=val+iname[cb].value+'-'
				}
			}
		} 
		else {
			if ($(iid).checked) {
				val=$(iid).value
			} else {
				val=0	
			}
		}
	} 
	else if ($(iid).type=='radio') {
		var iname=document.getElementsByName($(iid).name);
		var val=''
		if (iname.length>1) {
			var cb=0;
			iid=$(iid).name
			for (cb=0;cb<iname.length;++cb) {
				if (iname[cb].checked) {
					val=iname[cb].value
				}
			}
		} 
		else {
			if ($(iid).checked) {
				val=$(iid).value
			} else {
				val=0	
			}
		}
	} 
	else if ($(iid).type=='select-one') {
		var val=$(iid).options[$(iid).selectedIndex].value;
	} 
	else {
		var val=$(iid).value;
	}
	new Ajax.Updater(vid,'ajax.asp',{
		parameters:{
			act:'editsave',
			table:table,
			id:id,
			fid:fid,
			vid:vid,
			val:val,
			rsc:rsc,
			vtype:vtype
		},
		evalScripts:true,
		queue:{
			position:'end',
			scope:'doqueue'
		},
		onComplete : onComplete
	});
}
var ecursave=function(table,id,fid,vid,iid,rsc,vtype) {
	clearTimeout(timeOuts['timedsave_'+fid]); 
	timeOuts['timedsave_'+fid] = setTimeout("docursave('"+table+"','"+id+"','"+fid+"','"+vid+"','"+vtype+"')",1000);
}
var docursave=function(table,id,fid,vid,iid,rsc,vtype) {
	document.getElementById(vid).innerHTML='';
	var val=cformat(document.getElementById(fid).value);
	new Ajax.Updater(vid,'ajax.asp',{parameters:{act:'editsave',table:table,id:id,fid:fid,vid:vid,val:val,rsc:rsc,vtype:vtype},insertion:Insertion.Top,evalScripts:true, queue:{position:'end',scope:'doqueue'}});
}
var fsave=function(formid,asppage,iid,vid) {
	document.getElementById(formid).target=iid;
	document.getElementById(formid).action=asppage;
	submitform(formid);
	document.getElementById(vid).innerHTML='<img src="/library/ajax-loader.gif" alt="please wait">'
}
////////////////////////////////////////////////////////////////////////////////////////// Interface
var useful=function(act,id) {
	document.getElementById(fid).innerHTML='';
	new Ajax.Updater('use','ajax.asp',{parameters:{act:act,id:id},insertion:Insertion.Top,evalScripts:true, queue:{position:'end',scope:'doqueue'}});
}
var fadeusebox=function() {
	$('useholder').fade();
	new Effect.Opacity('pageholder',{ duration: 0.5, from: 0.3, to: 1 });	
}
var hidemsg=function() {
	$('msgholder').fade();
	if (document.getElementById('useholder').style.display=='none') {
		new Effect.Opacity('pageholder',{ duration: 0.5, from: 0.3, to: 1 });	
	}
}
var fadepage=function() {
	$('pageholder').fade({from: 1, to: 0.3 });
}
var fadetmsg=function() {
	$('tmsg').fade({ duration: 2.0, from: 1, to: 0, delay: 4.0 });
}
var toggleme=function(sss) {
	if ( document.getElementById(sss).style.display != 'none' )	{
		$('msgholder').appear();
	}
	else {
		$('msgholder').fade();
	}
}
var toggleshow=function(sss) {
	Effect.Queues.get("shower").cancel(sss)
	$(sss).appear({queue:{scope:"shower"}});
}
var togglehide=function(sss) {
	Effect.Queues.get("shower").cancel(sss)
	$(sss).fade({queue:{scope:"shower"}});
}
var toggleimg=function(sss,ttt,uuu) {
	if ($(sss).src==ttt) {
		$(sss).src=uuu;
	}
	else {
		$(sss).src=ttt;
	}
}
////////////////////////////////////////////////////////////////////////////////////////// Jump to URL
var jump=function(sss) {
	if (sss != "null") {
		document.location.href = sss;
	}
}
////////////////////////////////////////////////////////////////////////////////////////// Forms
var submitform=function(sss) {
	if (sss!="") {
		document.getElementById(sss).submit();
	}
}
var clearme=function(sss) {
	if (sss.value == sss.defaultValue) {
		sss.value = "";
	}
}
////////////////////////////////////////////////////////////////////////////////////////// Show/Hide Item
var toggleme=function(sss) {
	if ( document.getElementById(sss).style.display != 'none' )	{
		togglehide(sss);
	}
	else {
		toggleshow(sss);
	}
	document.body.style.overflow="auto";
}
////////////////////////////////////////////////////////////////////////////////////////// Bookmark Page
var bookmarksite=function(title,url) {
	/* Bookmark site script- © Dynamic Drive DHTML Code library 
	(www.dynamicdrive.com) This notice MUST stay intact for legal use
	Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code*/
	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);
	}
}
////////////////////////////////////////////////////////////////////////////////////////// Cookies
var setco=function(sss) {
	document.cookie = 'setco='+sss
}
var getcookie=function(sss) {
	var results = document.cookie.match ( '(^|;) ?' + sss + '=([^;]*)(;|$)' );
	if (results) {
		return (unescape(results[2]));
	}
	else {
		return null;
	}
}
////////////////////////////////////////////////////////////////////////////////////////// Currency Formatting
var cformat=function(sss) {
	var i = parseFloat(sss);
	if(isNaN(i)) {
		i = 0.00;
	}
	var minus = '';
	if(i < 0) {
		minus = '-';
	}
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) {
		s += '.00';
	}
	if(s.indexOf('.') == (s.length - 2)) {
		s += '0';
	}
	s = minus + s;
	return s;
}
///////////////////////////////////////////// get elements by class
/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/	
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
}
//
var mdlencheck = function() {
	var mdlen = document.getElementById("metadesc").value.length;
	var mdcont = document.getElementById("metadesc").value;
	document.getElementById("mdlen").innerHTML = mdlen;
	if (mdlen>254)
	{
		var mdconc = mdcont.substr(0,254);
		document.getElementById("metadesc").value = mdconc;
		document.getElementById("mtlen").innerHTML = '255';
	}
}
//
var mtlencheck = function() {
	var mtlen = document.getElementById("mtitle").value.length;
	var mtcont = document.getElementById("mtitle").value;
	document.getElementById("mtlen").innerHTML = mtlen;
	if (mtlen>254)
	{
		var mtconc = mtcont.substr(0,254);
		document.getElementById("mtitle").value = mtconc;
		document.getElementById("mtlen").innerHTML = '255';
	}
}
//
var keylencheck = function() {
	var keylen = document.getElementById("keywords").value.length;
	var keycont = document.getElementById("keywords").value;
	document.getElementById("keylen").innerHTML = keylen;
	if (keylen>254)
	{
		var keyconc = keycont.substr(0,254);
		document.getElementById("keywords").value = keyconc;
		document.getElementById("mtlen").innerHTML = '255';
	}
};

/* Adams Queue
Cancel any effect on the specified element 
(this is deprecated, use:
	New Effect.Blah({queue:{scope:'scopeName',overwrite:true}})
*/
Effect.ScopedQueue.prototype.cancel = function(el)
{
	if(typeof(el) != 'object'){
		el = $(el);	
	}
	
	this._each(function(qel){
		if(qel.element == el){
			qel.cancel();
		}
	})
}

// Adam function check if element is hidden (or if it's ancestors are hidden)
var isHidden = function(elem){

	// recurse through parentNodes	
	var parentWalk = function(currNode){
		var $node = $(currNode);
		
		if($node.nodeType == 9){ //at top level of node tree			
			return false;
		}else if($node.nodeType == 1){
			if($node.getStyle('display') == "none"){
				return true;
			}else{
				return parentWalk($node.parentNode);
			}
		}
	}
	
	// Call parentWalk on this element
	return parentWalk(elem);
}
//Element.prototype.isHidden = isHidden;

//Opposite of insertBefore...
var insertAfter = function(elem,node,referenceNode){
	elem.insertBefore(node,referenceNode.nextSibling);
}
//Element.prototype.insertAfter = insertAfter

// Because IE can't handle Element.prototype modification...
var methods = {
	insertAfter : insertAfter,
	isHidden    : isHidden	
}
Element.addMethods(methods);

var isnum=function(el,isfloat,nozero) {
	// TRY A PREVENT DEFAULT
	
	var el = (typeof el != "object") ? $(el) : el;
	
	var val = el.value;
	var thisno = '';
	
	if(val.length > 0){
		for(var i=0; i < val.length; i++){
			if((val.charAt(i) == "." && isfloat == true) || !isNaN(val.charAt(i)))
				thisno += val.charAt(i);
		}
	}else{
		thisno = '0';	
	}
	
	if(isfloat == true){
		//thisno = parseFloat(thisno);
	}else
		thisno = parseInt(thisno,10);

	el.value=thisno;
	if(nozero == true && thisno == 0)
		el.value = '';
	return thisno;
}

// Call this to observe all inputs on a page with the class 'number' and call isnum on all of them.
// If they have class 'float' then will pass float = true to isnum
var numput = function(){

	// Observe input class = number with isnum 
	$$('input.number').each(function(e){
		e.observe('keydown',function(evt){
									 
			var allowedKeyCode = function(){
				return  (evt.keyCode > 47   && evt.keyCode < 58)  
						|| evt.keyCode == 190 
						|| evt.keyCode == 8   
						|| evt.keyCode == 9
			}
			
			if (!allowedKeyCode())
				evt.stop();
				
		});
	});
}
	
// Validate before submission
var validator=function(form_id,opt) 
{
	var opt = (typeof(opt) == 'object') ? opt : {};
	
	// Options
	var NOVALI_CLS		= opt.novaliClass   || ''; // this takes precedence over vali_cls.
	var VALI_CLS		= opt.validateClass || 'req';		 // Setting one of these specifies whether we specify to validate or to not validate
	var ERROR_CLASS		= opt.errorClass    || 'form_error';
	var ERROR_MSG_CLASS = opt.errorMsgClass || 'form_error_msg';
	var ERROR_MSG_EL    = opt.errorElement  || 'div';
	var FORM_ID			= form_id;
	
	// Check if we should validate this element
	var checkVali = function(elem){
		if(typeof(NOVALI_CLS) == "string" &&
					NOVALI_CLS.length > 0 &&
					elem.hasClassName(NOVALI_CLS)){
						return false;	
		}else if(typeof(VALI_CLS) == "string" && VALI_CLS.length > 0){
					if(elem.hasClassName(VALI_CLS)){
						return true;
					}else{
						return false;	
					}
		}else
			return true;
	}
	
	// Remove current errors
	$$('.' + ERROR_CLASS).each(function(e){
		e.removeClassName(ERROR_CLASS);	
	});
	$$('.' + ERROR_MSG_CLASS).each(function(e){
		e.remove();	
	});
	
	// Error Handling
	var errors = new Array();	
	var err = function(el,text){
		this.el = el;
		this.text = text;
		errors.push(this);	
	}
	
	// Make sure that numbers are numbers
	$$('input.number').each(function(e){
		if (!e.hasClassName('novali')){
			isnum(e);	
		}
	});
	
	// Loop through text inputs
	$$('#' + FORM_ID + ' input[type="text"],#' + FORM_ID + ' textarea').each(function(e){
		// Ignore any with classname 'novali' and inputs which aren't displayed
		if (checkVali(e) == true && e.isHidden() == false) {
			// Get textarea / input value
			var val = e.value;
			if(val === ""){
				new err(e,'please enter a value');
			}
		}
	});
	
	// Loop through select boxes
	$$('#' + FORM_ID + ' select').each(function(e){
		if(checkVali(e) && e.isHidden() == false){
			if(e.options[e.options.selectedIndex].value == 0){
				new err(e,'please select an option');
			}
		}
	});
	
	// Check if at least one radio button is checked in each set of them 
	var lastChecked = 1;
	var lastEl = null;
	var lastName = "";
	// Loop through radio buttons
	$$('#' + FORM_ID + ' input[type="radio"]').each(function(e){
		if(checkVali(e) && e.isHidden() == false){
			if(lastName == e.name && lastChecked == 0){
				// If we're still on a set of options and we haven't found a checked one yet
				if(e.checked == true){
					lastChecked = 1;
				}else{
					lastChecked = 0;	
				}
				
				// Set lastEl to this element so we don't put the error between checkboxes
				lastEl = e;
				
			}else if(lastName != e.name){
				if(lastChecked == 0){
					new err(lastEl.parentNode,'please select an option');	
				}
				lastChecked = 0;
				lastName = e.name;
				
				if(e.checked == true){
					lastChecked = 1;
				}
			}
		}
	});	
	if(lastChecked==0) new err(lastEl,'please select an option');
	
	
	// Clear up function and return stuff
	// If we have errors...
	if(errors.length > 0){
		/*var error_explain_thing = new Element('div',{'class':ERROR_MSG_CLASS}).update(
			'You have not filled in some required fields.'
		);
		$(FORM_ID).insertBefore(error_explain_thing,$(FORM_ID).firstChild);*/
		
		// Loop through errors
		errors.each(function(e){
			var el = e.el;
			// Give it an error class
			el.addClassName(ERROR_CLASS);
			// Show error message
			var new_er_msg = new Element('div',{'class':ERROR_MSG_CLASS}).update(e.text);
			el.parentNode.insertAfter(new_er_msg,el);
		});
		
		// Scroll to top
		new Effect.ScrollTo(FORM_ID);
		
		return false;
	}
	
	return true;
}

var makepos = function(val){
	if(val < 0)
		return val * -1;
	return val;	
}

var finance_calc = function(){
	var price = parseFloat($F('calc_price'));
	var down = parseFloat($F('calc_down'));
	var rate = parseFloat($F('calc_int'));
	var months = parseFloat($F('calc_month'));
	var resultBox = $('calc_result');
	
	var mrate = rate/1200;
	
	if(down>price){
		alert('The price must be higher than the deposit.');
		return false;
	}
	
	var loan = price - down;
	var payment;
	
	if(rate === 0){
		payment = (loan / months);
	}else{
		var factor = Math.pow(1 + mrate, months); 
		payment = loan * ( mrate / (1-1 / factor) );
	}
	
	var interest = makepos(((payment * months) + down) - price);
	var total = loan + interest;
	
	resultBox.update('\
		<label>Loan Amount:</label> &pound;' + cformat(loan) + '<br />\
		<label>Monthly Payment:</label> &pound;' + cformat(payment) + '<br />\
		<label>Total Interest:</label> &pound;' + cformat(interest) + '<br />\
		<label>Total Payment:</label> &pound;' + cformat(total) + '\
		<div class="error" style="height:auto;">Please note, these values are for guide purposes only.</div> \
	');
}

var linkjax = function(){
	var LINK_CLASS = 'ajax';
	$$('.' + LINK_CLASS).each(function(e){
		e.observe('click',function(evt){
			evt.preventDefault();
			var el = e;
			var loc = el.href || 'ajax' + (document.URL.substr(document.URL.lastIndexOf('/'))).replace('#null','').replace('#','');
			// specify a query string in an attribute if you want to use the automatic location
			if (el.hasAttribute('data-qs'))
				loc = loc + '?' + el.getAttribute('data-qs');
			var cont = el.getAttribute('data-cont') || el.getAttribute('rel') || qbd.cont;
			var params = (el.hasAttribute('data-params')) ? JSON.parse(el.getAttribute('data-params')) : {};
			
			// give it a container of none to do a request rather than update
			if (cont == 'none'){
				new Ajax.Request(loc,{parameters:params});	
			}else
				//if (cont == 'this')
				//	cont = el;
				// checks if the container = this, if so uses el, if it has extra parameters then tries that parameter
				//such as parentNode etc.
				if (cont.indexOf('this') > -1){
					cont = cont.replace('this.','');
					cont = $(el[cont]) || $(el);
				}
				new Ajax.Updater(cont,loc,{parameters:params});	
		});								   
	});
}
// end hide -->
