/*
   This Object holds current xhr request objects.
*/
XHRObject = ({
	xhrs: false,
	obj:function() {
		this.xhrs = new Array();
	}
});

function saveposition(el) {
	// set page position in cookie.
	var off = $(el).name;
	if(off) {
		Cookie.set('lastposition', off);
	}
	return true;
}

function scrollToPosition() {
	// check for cookie, scroll to position.
	if(Cookie.get('lastposition')) {
		var newpos = Cookie.get('lastposition');		
		if(newpos) {
			window.location.href = "#" + newpos;
		 	Cookie.remove('lastposition');
		}
	}
	return true;
}

window.addEvent('domready',function() {

        // request trcking
        xhr_obj = XHRObject.obj();

	// tips
	var Tips2 = new Tips($$('.Tips2'), {
		initialize:function(){
		this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 500, wait: false}).set(0);
		},
		onShow: function(toolTip) {
		this.fx.start(1);
		},
		onHide: function(toolTip) {
		this.fx.start(0);
		}
	});
    
    var Tips4 = new Tips($$('.Tips4'), {
	    className: 'custom'
    });

    var Tips5 = new Tips($$('.Tips5'), {
	    className: 'largeimage'
    });

}); 




// Popup Window
function popUp(winURL) {
	window.open(winURL,"popup","width=450,height=500,scrollbars,resizable");
}

function popUpFriend(winURL) {
	window.open(winURL,"popup","width=600,height=500,scrollbars,resizable");
}



// Open Pop-Up Window
function openWindow(theURL,winName,features) {
	window.open(theURL,winName,features);
}


// Pop Up Window
var currentImage = "";
var newwindow;

function popuppic(pic) {

	var currentImage = "";
	var newwindow;

	if(currentImage !== '') {
		newwindow = window.open('/cms_media/images/300x600_fitbox-' + currentImage,'name','height=400,width=400, scrollbars=yes, toolbar=no, menubar=no, resizable=yes');
	} else {
		newwindow = window.open('/cms_media/images/300x600_fitbox-' + pic,'name','height=400,width=400, scrollbars=yes, toolbar=no, menubar=no, resizable=yes');
	}

	if (window.focus){
		newwindow.focus();
	}
	return;
}

function updatepic(image,imagelarge){
	currentImage = image;
	var largePhoto = document.getElementById('largePhoto');
	var enlargeLink = document.getElementById('enlarge');
	largePhoto.src = '' + image;
	enlargeLink.href = '/cms_media/images/' + imagelarge;
}



// Show & Hide for comments
function showHide(obj) {
	var newObject = document.getElementById(obj);
	if(newObject.className == "show") {
		newObject.className = "hideitem";
	} else {
		newObject.className = "show";
	}
}


// Pop up window scans for class="popup" then appends popup function to link.
window.onload = function() {

	if (!document.getElementsByTagName) { return false; }

	var lnks = document.getElementsByTagName("a");

	for (var i=0; i<lnks.length; i++) {

		if (lnks[i].className == "popup") {
			lnks[i].onclick = function() {
				popUp(this.getAttribute("href"));
				return false;
			};
		}

		if (lnks[i].className == "popupfriend") {
			lnks[i].onclick = function() {
				popUpFriend(this.getAttribute("href"));
				return false;
			};
		}

	}

};

var sfHover = function() {
	var sfEls = document.getElementById("services").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className += " over";
		};
		sfEls[i].onmouseout=function() {
			this.className = this.className.replace(new RegExp(" over\\b"), "");
		};
	}
};

// Print Page
function printpage() {
	window.print();  
}

// Bookmark Page
function bookmark(url,title){
	if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4)) 
	{
		window.external.AddFavorite(url,title);
	} 
	else if (navigator.appName == "Netscape") 
	{
		window.sidebar.addPanel(title,url,"");
	} 
	else {
		alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark");
	}
}

// Form Validation
var validationErrorMessage = new Object();
validationErrorMessage['required'] = 'This field is required';
validationErrorMessage['numeric'] = 'This field requires a number';
validationErrorMessage['postcode'] = 'This field must hold a UK postal code';
validationErrorMessage['pattern'] = 'Pattern incorrect';
validationErrorMessage['email'] = 'Incorrect email address';

var validationFunctions = new Object();
validationFunctions["required"] = isRequired;
validationFunctions["pattern"] = isPattern;
validationFunctions["postcode"] = isPostCode;
validationFunctions["numeric"] = isnumeric;
validationFunctions["email"] = isEmail;

function isRequired(formField) {
	switch (formField.type) {
		case 'text':
		case 'textarea':
		case 'select-one':
			if (formField.value) {
				return true;
			}
			return false;
		case 'radio':
			var radios = formField.form[formField.name];
			for (var i=0;i<radios.length;i++) {
				if (radios[i].checked) { return true; }
			}
			return false;
		case 'checkbox':
			return formField.checked;
	}	
}

function isPattern(formField,pattern) {
	var pattern = pattern || formField.getAttribute('pattern');
	var regExp = new RegExp("^"+pattern+"$","");
	var correct = regExp.test(formField.value);
	if (!correct && formField.getAttribute('patternDesc')) {
		correct = formField.getAttribute('patternDesc');
	}
	return correct;
}

function isPostCode(formField) {
	return isPattern(formField,"\\d{4}\\s*\\D{2}");
}

function isnumeric(formField) {
	return isPattern(formField,"\\d+");
}

function isEmail(formField) {
	return isPattern(formField,"\\w*@\\w*\.\\w{2,4}")
}

function emptyFunction() {
	return true;
}

/*********************************/

var W3CDOM = document.createElement && document.getElementsByTagName;

function validateForms() {
	if (!W3CDOM) return;
	var forms = document.forms;
	for (var i=0;i<forms.length;i++) {
		forms[i].onsubmit = validate;
	}
}

function validate() {
	var els = this.elements;
	var validForm = true;
	var firstError = null;
	for (var i=0;i<els.length;i++) {
		if (els[i].removeError) {
			els[i].removeError();
		}
		var req = els[i].getAttribute('rel');
		if (!req) { continue; }
		var reqs = req.split(' ');
		if (els[i].getAttribute('pattern')) {
			reqs[reqs.length] = 'pattern';
		}
		for (var j=0;j<reqs.length;j++) {
			if (!validationFunctions[reqs[j]]) {
				validationFunctions[reqs[j]] = emptyFunction;
			}

			var OK = validationFunctions[reqs[j]](els[i]);

			if (OK != true) {

				var errorMessage = OK || validationErrorMessage[reqs[j]];
				writeError(els[i],errorMessage);
				validForm = false;

				if (!firstError) {
					firstError = els[i];
				}

				break;
			}
		}
	}

	if (!validForm) {
		alert("Errors have been found");
		location.hash = '#editform';
	}
	return validForm;

}

function writeError(obj,message) {
	obj.className += ' errorMessage';
	obj.onchange = removeError;
	if (obj.errorMessage || obj.parentNode.errorMessage) { return; }
	var errorMessage = document.createElement('span');
	errorMessage.className = 'errorMessage';
	errorMessage.appendChild(document.createTextNode(message));
	obj.parentNode.appendChild(errorMessage);
	obj.errorMessage = errorMessage;
	obj.parentNode.errorMessage = errorMessage;
}

function removeError() {
	this.className = this.className.replace(/errorMessage/,'');
	if (this.errorMessage) {
		this.parentNode.removeChild(this.errorMessage);
		this.errorMessage = null;
		this.parentNode.errorMessage = null;
	}
	this.onchange = null;
}
// Form Validation ENDS


/** ULTRA-SIMPLE EVENT ADDING **/
	function addEventSimple(obj,evt,fn) {
		if (obj.addEventListener)
			obj.addEventListener(evt,fn,false);
		else if (obj.attachEvent)
			obj.attachEvent('on'+evt,fn);
	}

	function removeEventSimple(obj,evt,fn) {
		if (obj.removeEventListener)
			obj.removeEventListener(evt,fn,false);
		else if (obj.detachEvent)
			obj.detachEvent('on'+evt,fn);
	}
addEventSimple(window,'load',validateForms);




/*function do_onload(){
	collecttablinks();
	// This gets the first element
	// in the subnavcontainer
	var content=document.getElementById("tabcontainer");
	if(content) {
		cdiv=content.getElementsByTagName("div");

		var cookievalue = readCookie(cookiename);
		var tablink = document.getElementById(cookievalue+'-link');
		if(cookievalue && tablink) {
			var tablink = document.getElementById(cookievalue+'-link');
			expandcontent(cookievalue, tablink);
		} else {
			expandcontent(cdiv[0].id, tabobjlinks[initialtab[0]-1]);
		}
	}
}*/



// Validate.js

	// FORM VALIDATION
	var validationErrorMessage = new Object();
	validationErrorMessage['required'] = 'This information is required';
	validationErrorMessage['numeric'] = 'This field requires a number';
	validationErrorMessage['postcode'] = 'This field must hold a UK postal code';
	validationErrorMessage['pattern'] = 'Pattern incorrect';
	validationErrorMessage['email'] = 'Incorrect email address';

	// CARD VALIDATION
	validationErrorMessage['cardtype'] = 'Choose a card type';
	validationErrorMessage['cardholdername'] = 'Enter the cardholder name';
	validationErrorMessage['cardnumber'] = 'Enter a valid 16 digit card number without spaces or dashes';
	validationErrorMessage['expirymonth'] = 'Select the expiry month';
	validationErrorMessage['expiryyear'] = 'Select the expiry year';

	var validationFunctions = new Object();
	validationFunctions["required"] = isRequired;
	validationFunctions["pattern"] = isPattern;
	validationFunctions["postcode"] = isPostCode;
	validationFunctions["numeric"] = isnumeric;
	validationFunctions["email"] = isEmail;

	// CARD VALIDATION
	validationFunctions["cardtype"] = isRequired;
	validationFunctions["cardholdername"] = isRequired;
	validationFunctions["cardnumber"] = isCardNumber;
	validationFunctions["expirymonth"] = isRequired;
	validationFunctions["expiryyear"] = isRequired;



	function isRequired(formField) {
		switch (formField.type) {
			case 'text':
			case 'password':
			case 'textarea':
			case 'select-one':
				if (formField.value)
					return true;
				return false;
			case 'radio':
				var radios = formField.form[formField.name];
				for (var i=0;i<radios.length;i++) {
					if (radios[i].checked) return true;
				}
				return false;
			case 'checkbox':
				return formField.checked;
		}	
	}

function isPattern(formField,pattern) {
	var pattern = pattern || formField.getAttribute('pattern');
	var regExp = new RegExp("^"+pattern+"$","");
	var correct = regExp.test(formField.value);
	if (!correct && formField.getAttribute('patternDesc'))
		correct = formField.getAttribute('patternDesc');
	return correct;
}

function isPostCode(formField) {
	return isPattern(formField,"\\d{4}\\s*\\D{2}");
}

function isCardNumber(formField) {
	return isPattern(formField,"\\d{16}");
}

function isnumeric(formField) {
	return isPattern(formField,"\\d+");
}

function isEmail(formField) {
	return isPattern(formField,"\\w(\\.?[\\w-])*@\\w(\\.?[\\w-])*\\.[a-z]{2,6}")
}

function emptyFunction() {
	return true;
}

/*********************************/

var W3CDOM = document.createElement && document.getElementsByTagName;

function validateForms() {
	if (!W3CDOM) return;
	var forms = document.forms;
	for (var i=0;i<forms.length;i++) {
		forms[i].onsubmit = validate;
	}
}



function validate() {
	var els = this.elements;
	var validForm = true;
	var firstError = null;
	for (var i=0;i<els.length;i++) {
		if (els[i].removeError)
			els[i].removeError();
		var req = els[i].getAttribute('rel');
		if (!req) continue;
		var reqs = req.split(' ');
		if (els[i].getAttribute('pattern'))
			reqs[reqs.length] = 'pattern';
		for (var j=0;j<reqs.length;j++) {
			if (!validationFunctions[reqs[j]])
				validationFunctions[reqs[j]] = emptyFunction;
			var OK = validationFunctions[reqs[j]](els[i]);
			if (OK != true) {
				var errorMessage = OK || validationErrorMessage[reqs[j]];
				writeError(els[i],errorMessage)
					validForm = false;
				if (!firstError)
					firstError = els[i];
				break;
			}
		}
	}

	if (!validForm) {
		//alert("Sorry, there was a problem submitting this information \nPlease ensure all fields marked * have been completed");
		location.hash = '#startOfForm';
	}
	return validForm;
	document.getElementById("process").disabled = true;
}

function writeError(obj,message) {
	if(obj.parentNode.className.match('errorMessage') == null){
		obj.parentNode.className += ' errorMessage';
	}
	obj.onchange = removeError;
	if (obj.errorMessage || obj.parentNode.errorMessage) return;
	var errorMessage = document.createElement('span');
	errorMessage.className = 'errorMessage';
	//errorMessage.setAttribute('for',obj.id);
	//errorMessage.setAttribute('htmlFor',obj.id);
	errorMessage.appendChild(document.createTextNode(message));
	obj.parentNode.appendChild(errorMessage);
	obj.errorMessage = errorMessage;
	obj.parentNode.errorMessage = errorMessage;
}

function removeError() {
	//this.className = this.className.replace(/errorMessage/,'');
	this.parentNode.className = this.parentNode.className.replace(/errorMessage/,'');
	if (this.errorMessage) {
		this.parentNode.className = this.parentNode.className.replace(/errorMessage/,'');
		this.parentNode.removeChild(this.errorMessage);
		this.errorMessage = null;
		this.parentNode.errorMessage = null;
	}
	this.onchange = null;
}

/** ULTRA-SIMPLE EVENT ADDING **/
	function addEventSimple(obj,evt,fn) {
		if (obj.addEventListener)
			obj.addEventListener(evt,fn,false);
		else if (obj.attachEvent)
			obj.attachEvent('on'+evt,fn);
	}

	function removeEventSimple(obj,evt,fn) {
		if (obj.removeEventListener)
			obj.removeEventListener(evt,fn,false);
		else if (obj.detachEvent)
			obj.detachEvent('on'+evt,fn);
	}

//addEventSimple(window,'load',help);
//addEventSimple(window,'load',startList);
addEventSimple(window,'load',validateForms);



// End validate.js
