var InfoArray = new Array();
var ErrorArray = new Array();
var d = document;
var HasError =0;
var LastObj;
var FormIsSending = 0;
var ChkBox = /^checkbox/i;


if(window.attachEvent){
    window.attachEvent("onload",setListeners);
}
if (window.addEventListener){
window.addEventListener("load" , setListeners, false ); 
}

//-----------------------------------------------------------------------------------------------
function FindObj(name){
//-----------------------------------------------------------------------------------------------
var obj;
var matchType = /^(text|hidden|password|checkbox|select-one|textarea)$/i;

	formElements = document.getElementsByTagName("INPUT");
	for(f=0; f<formElements.length;f++){
		if(formElements[f].name == name && matchType.test(formElements[f].type)){
		 	obj = formElements[f];
			return obj;
		} 
	}

        formElements = document.getElementsByTagName("SELECT");
        for(f=0; f<formElements.length;f++){
		if(formElements[f].name == name && matchType.test(formElements[f].type)){
                        obj = formElements[f];
                        return obj;
                }
        }
       
	formElements = document.getElementsByTagName("TEXTAREA");
        for(f=0; f<formElements.length;f++){
                if(formElements[f].name == name && matchType.test(formElements[f].type)){
                        obj = formElements[f];
                        return obj;
                }
        }
return 0;
}
//-----------------------------------------------------------------------------------------------
function setListeners(){
//-----------------------------------------------------------------------------------------------
    inputList = document.getElementsByTagName("INPUT");
    for(i=0;i<inputList.length;i++){
	inputList[i].style.backgroundColor = "";
	if (ie){
      		inputList[i].attachEvent("onpropertychange",restoreStyles);
      	}else{
                inputList[i].addEventListener("DOMAttrModified",restoreStyles,false);
	}

    }

    selectList = document.getElementsByTagName("SELECT");
    for(i=0;i<selectList.length;i++){
	selectList[i].style.backgroundColor = "";
        if (ie){
                inputList[i].attachEvent("onpropertychange",restoreStyles);
        }else{
                inputList[i].addEventListener("DOMAttrModified",restoreStyles,false);
        }
    }
}


//-----------------------------------------------------------------------------------------------
function restoreStyles(e){
//-----------------------------------------------------------------------------------------------

var Tsrc = (e.target)?e.target:e.srcElement;
 	var BGc = (ie)?Tsrc.style.backgroundColor:document.forms[0].elements[Tsrc.name].style.backgroundColor;
	var C = /^skyblue$/i;
	if (C.test(BGc)){return;}
	if(Tsrc.style.backgroundColor != "")
		Tsrc.style.backgroundColor = "";

}

//-----------------------------------------------------------------------------------------------
function MakeError(name,error){
//-----------------------------------------------------------------------------------------------
this.name=name;
this.error=error;
return this;
}

//-----------------------------------------------------------------------------------------------
function MakeItem(name,Fname,text,req,regexp,error){
//-----------------------------------------------------------------------------------------------
this.name=name;
this.Fname=Fname;
this.text=text;
this.req=req;
this.regexp=regexp;
this.error=error
return this;
}

// Array Def
//-----------------------------------------------------------------------------------------------
InfoArray[0]   = new MakeItem("title","Title","Please select from the drop down list",1,/^(Miss|Mr|Mrs|Ms|Dr|Prof)$/i,"your choice of title appears to be incorrect. Please check and try again");
InfoArray[1]   = new MakeItem("Fn","First Name","Please enter your first name only",1,/^\b[a-z]+\b$/i,"Sorry, the name you have entered is not allowed. Only letters allowed - no numbers or punctuation");
InfoArray[2]   = new MakeItem("On","Other Names","Please enter any other names separated by a space. No punctuation",0,/^\b[a-z- ]+\b$/i,"Sorry, the name(s) you have entered is not allowed. Only Letters and spaces allowed - no numbers or punctuation");
InfoArray[3]   = new MakeItem("Ln","Last Name","Please enter your last name - no punctuation",1,/^\b[a-z-]+\b$/i,"Sorry, the name you have entered is not allowed. Only letters allowed - no punctuation ");
InfoArray[4]   = new MakeItem("CA","Contact address","Please enter your address<br /><br /><b>Note:<br />Only Manxnet customers with an Isle of Man address will be permitted to sign up</b>",1,/^([0-9a-zA-Z.,\s]{1,255})$/,"Your address appears to be invalid");
InfoArray[5]   = new MakeItem("pcode","Postcode","Pleasse enter your Postcode<br /><br /><b>Note:<br />Only Manxnet customers with an Isle of Man address \& post code will be allowed to sign up</b>",1,/^im[0-9]{1,2} ?[a-z0-9]{3,4}/i,"Sorry, Post code must be registered in the Isle of Man");
InfoArray[6]   = new MakeItem("Em","Email Address","Please enter your email address",1,/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/,"Sorry, That email address does not appear to be a valid address");
InfoArray[7]   = new MakeItem("CNH","Contact Number Home","Please enter your contact phone number",1,/^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?|(8\d|6\d|[34]\d)\d{4}$/,"Phone number does not appear to be either a local Isle of man or UK Mobile/Fixed number");
InfoArray[8]   = new MakeItem("CNM","Contact Number Mobile","Please enter your Mobile phone number",0,/^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?|(8\d|6\d|[34]\d)\d{4}$/,"Phone number does not appear to be either a local Isle of man or UK Mobile/Fixed number");
InfoArray[9]   = new MakeItem("Un","Username","Please enter a username<br /><b>Note:</b><br /> This will form your web site address<br /><br />e.g. username = <i>fredbloggs</i><br />Your homepages website would be: http://homepages.manx.net/<i>fredbloggs</i>",1,/^([a-z0-9][a-z0-9_\-]{1,25}[a-z0-9])$/,"Sorry, your choice of username is invalid, please select another. Maximum length is 28 letters, maybe you are using too many");
InfoArray[10]   = new MakeItem("Passwd","Password","Please enter a password.<br /><br /><b>Note:<br />To improve security, complex passwords <u>must be used</u>. <br /><br />This means your password must contain at least one UPPER case character, at least 1 lower case character, a number and a non-alphanumeric character. <br /><br />This must be between 6 and 25 characters.</b>",1,/(?=^.{6,255}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*/,"Password does not meet password complexity rules <br />or <br />Password \& Password Confirm do not match");
InfoArray[11]  = new MakeItem("PasswdConf","Confirm Password","Please enter a password.<br /><br /><b>Note:<br />To improve security, complex passwords <u>must be used</u>. <br /><br />This means your password must contain at least one UPPER case character, at least 1 lower case character, a number and a non-alphanumeric character. <br /><br />This must be between 6 and 25 characters.</b>",1,/(?=^.{6,255}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*/,"Password does not meet password complexity rules <br />or <br />Password \& Password Confirm do not match");
InfoArray[12]  = new MakeItem("PasswdReminder","Password Reminder","Should you forget your password, please enter a security reminder that we can ask you in the event that you forget your password. If you cannot satisfy security questioning, you will not be provided with a password",1,/^([0-9a-zA-Z.,\s]{1,255})$/,"");
InfoArray[13]  = new MakeItem("Agree","Terms \&amp; Conditions","By Ticking this box you are in agreement with our terms and conditions. <br /><br />Details of which can be found <a href=\"#\">Here</a>",1,/^true$/i,"You must indicate by placing a tick in the box that you agree to the terms and conditions")

//-----------------------------------------------------------------------------------------------
function dothis(){
//-----------------------------------------------------------------------------------------------	
	dim();
	var SupportedBrowsers = new Array();
	SupportedBrowsers["Firefox"] = new Array ('1','2');
	SupportedBrowsers["Netscape"] = new Array ('4','5','6');
	SupportedBrowsers["Microsoft Internet Explorer"] = new Array ('6','7');

	thisBrowser = (brow)?brow:moz_brow;
	thisBrowserVersions_supported = SupportedBrowsers[thisBrowser];
	if (!thisBrowserVersions_supported){ 
		alert ("Sorry, it appears that the browser you are using is not supported\n");
		document.getElementById('main').innerHTML="";
	}
	thisBrowserIsSupported = 0;
	for (b=0; b<thisBrowserVersions_supported.length;b++){
		if (Math.ceil(nu) == thisBrowserVersions_supported[b]){thisBrowserIsSupported=1;}
	}
	if (!thisBrowserIsSupported){
		alert ("Sorry, it appears that the browser you are using is not supported\n");
		document.getElementById('main').innerHTML="";
	}

	for (i=0; i<InfoArray.length; i++){ErrorArray[i] = new MakeError(InfoArray[i].name, 0);}
}

//-----------------------------------------------------------------------------------------------
function checkAll(){
//-----------------------------------------------------------------------------------------------
var chk = '';
for(g=0;g<InfoArray.length;g++){
	FormIsSending = 1;
	var obj = FindObj(InfoArray[g].name);
	if (!obj){continue;}
	if (ChkBox.test(obj.type)){
		obj.value = document.forms[0].elements[InfoArray[g].name].checked;
	}
	chk = checkMe(obj,1);
	if (chk){break;}else {FormIsSending = 0;}
}
if (!chk){
	document.forms[0].submit();
}
}

//-----------------------------------------------------------------------------------------------
function checkMe(obj,final){
//-----------------------------------------------------------------------------------------------
if (!obj.value){
	for (i=0; i<ErrorArray.length; i++){
		if (obj.name == ErrorArray[i].name && ErrorArray[i].error){
			ErrorArray[i].error = 0;
			if (!FormIsSending) document.forms[0].elements[obj.name].style.backgroundColor = "";
		} 
	}
	if(!final){return;}
}

var passwdCHK = /^(Passwd|PasswdConf)$/;
for (t=0; t<InfoArray.length; t++){
	if (InfoArray[t]){
		if (ChkBox.test(obj.type)){
			obj.value = document.forms[0].elements[obj.name].checked;
		}
		if (obj.name == InfoArray[t].name){
			var FormVal = obj.value;
			var r = InfoArray[t].regexp;
			if (!r && !final){return;}
			var skip =(!FormVal && !InfoArray[t].req && final)?1:0;
			if(!r.test(FormVal) ){
				if(!skip){	
					ErrorArray[t].error = obj;
					ErrorForm(obj); 
					document.forms[0].elements[obj.name].focus();
		 			document.forms[0].elements[obj.name].style.backgroundColor = "skyblue";
					if (final){return "Failed:"+ obj.name;}
				}
			}else {
				ErrorArray[t].error = 0;
				document.forms[0].elements[obj.name].style.backgroundColor = "";
			}
                       	if (passwdCHK.test(obj.name)){
				testPasswd(obj,i);
                       	}
		}
	}
}
return 0;
}

//-----------------------------------------------------------------------------------------------
function testPasswd(obj,i){
//-----------------------------------------------------------------------------------------------
var Other = (obj.name == "PasswdConf")?"Passwd":obj.name;

if (!ErrorArray[i]){
	for(x=0; x<ErrorArray.length; x++){
		if (obj.name == ErrorArray[x].name){
			i = x;
		}
	}

}

if (document.forms[0].elements['Passwd'].value && document.forms[0].elements['PasswdConf'].value){
	if (document.forms[0].elements['Passwd'].value != document.forms[0].elements['PasswdConf'].value){
		ErrorArray[i].error = obj;
		ErrorForm(obj);
		document.forms[0].elements[obj.name].style.backgroundColor = "skyblue";
		document.forms[0].elements[Other].style.backgroundColor = "skyblue";
		return;
	}else {

		var FormVal = obj.value;
		var r = InfoArray[i].regexp;

		if(!r.test(FormVal)){
			ErrorArray[i].error = obj;
			ErrorForm(obj);
			document.forms[0].elements[obj.name].style.backgroundColor = "skyblue";
		}else {
			ErrorArray[i].error = 0;
			document.forms[0].elements[obj.name].style.backgroundColor = "";
			document.forms[0].elements[Other].style.backgroundColor = "";		
		}
	}
}
}



//-----------------------------------------------------------------------------------------------
function getDim(obj){
//-----------------------------------------------------------------------------------------------
var curtop = 0;
if (obj.offsetParent)
{
	while (obj.offsetParent)
	{
		curtop += obj.offsetTop
		obj = obj.offsetParent;
	}
}
else if (obj.y)
	curtop += obj.y;
return curtop;
}

//-----------------------------------------------------------------------------------------------
function Tellme(n){
//-----------------------------------------------------------------------------------------------
checkMe(n);
LastObj=n;
for(i=0; i<ErrorArray.length; i++){
        if (ErrorArray[i].error){ dimY( getDim(ErrorArray[i].error) ); return;}
}

for (i=0; i<InfoArray.length;i++){
	dimY( getDim(n));
	if (InfoArray[i]){
		if (InfoArray[i].name==n.name){
			var NewText = (InfoArray[i].req)?"<b>REQUIRED FIELD</b>":"<b>OPTIONAL FIELD</b>";
			var table = 	"<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#111111\" width=\"100%\">";
			table += 	"<tr>";
			table +=	"<td class=\"mainmenuactive\" width=\"5\"><img alt=\"Menu Folder Spacer\" src=\"../images/folder_edge_trans_spacer.gif\" border=\"0\" width=\"11\" height=\"21\"></td>";
			table +=	"<td bgcolor=\"#660066\" width=\"100%\"><span style=\"margin-left: 5; color: white; font-size: 10\">" + NewText +" \"" + InfoArray[i].Fname +"\"</td>";
			table +=	"<td align=\"right\" width=\"34\"><img alt=\"Menu Folder Spacer\" border=\"0\" src=\"../images/tab_end.gif\" width=\"34\" height=\"21\"></td>";
			table +=	"</tr>";
			table +=	"<tr><td colspan=\"3\" bgcolor=\"#c59edd\"><table cellpadding=\"1\" cellspacing=\"4\" border=\"0\" width=\"100%\"><tr><td><span style=\"font-size: 10\">" + InfoArray[i].text + "</span></td></tr></table></td></tr>";
			table +=	"</table>";
			
			document.getElementById('info').innerHTML = table;
		}
	}
}

}

//-----------------------------------------------------------------------------------------------
function ErrorForm(n){
//-----------------------------------------------------------------------------------------------

dimY( getDim(n));
for (i=0; i<InfoArray.length;i++){
        if (InfoArray[i]){
                if (InfoArray[i].name==n.name){
                        var table =     "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#111111\" width=\"100%\">";
                        table +=        "<tr>";
                        table +=        "<td class=\"mainmenuactive\" width=\"5\"><img alt=\"Menu Folder Spacer\" src=\"../images/folder_edge_trans_spacer.gif\" border=\"0\" width=\"11\" height=\"21\"></td>";
                        table +=        "<td bgcolor=\"#660066\" width=\"100%\"><span style=\"margin-left: 5; color: white; font-size: 10\"><b>INVALID "+ InfoArray[i].Fname +"</td>";
                        table +=        "<td align=\"right\" width=\"34\"><img alt=\"Menu Folder Spacer\" border=\"0\" src=\"../images/tab_end.gif\" width=\"34\" height=\"21\"></td>";
                        table +=        "</tr>";
                        table +=        "<tr><td colspan=\"3\" bgcolor=\"#c59edd\"><table cellpadding=\"1\" cellspacing=\"4\" border=\"0\" width=\"100%\"><tr><td><span style=\"font-size: 10\">" + InfoArray[i].error + "</span></td></tr></table></td></tr>";
                        table +=        "</table>";

                        document.getElementById('info').innerHTML = table;
                }
        }
}

}

//-----------------------------------------------------------------------------------------------
function show(object) {
//-----------------------------------------------------------------------------------------------
	if (!pageOK){return;}
    if (document.getElementById && document.getElementById(object) != null) {
         document.getElementById(object).style.visibility='visible';
         document.getElementById(object).style.display='block';
    }
    else if (document.layers && document.layers[object] != null)
        document.layers[object].visibility = 'visible';
    else if (document.all) {
        document.all[object].style.zIndex = 100;
        document.all[object].style.visibility = 'visible';
    }
}
//-----------------------------------------------------------------------------------------------
function hide(object) {
//-----------------------------------------------------------------------------------------------
	if (!pageOK){return;}
	if (document.getElementById && document.getElementById(object) != null) {
         document.getElementById(object).style.visibility='hidden';
         document.getElementById(object).style.display='none';
    }
    else if (document.layers && document.layers[object] != null)
        document.layers[object].visibility = 'hidden';
    else if (document.all)
         document.all[object].style.visibility = 'hidden';
}

//-->


