
	/********************************************************************************
	*  Generic Functions - DO NOT EDIT
	*********************************************************************************/
	
	function findObj(n, d) { 
	  var p,i,x;
	  if(!d) d=document;
	  if((p=n.indexOf("?"))>0&&parent.frames.length) {
	    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
	  }
	  if(!(x=d[n])&&d.all) x=d.all[n]; 
	  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
	  if(!x && document.getElementById) x=document.getElementById(n); return x;
	}

	var errors = new Array(); // array of error fields
	var loader = new Object();
	
	var RegEx = new Array();
	RegEx["word-required"] = "^\\w+[\\w\\s]+";
	RegEx["numeric-required"] = "^\\d+[\\d\\s]+";
	RegEx["uk-postcode"] = "[a-zA-Z]\\d\\s?\\d[a-zA-Z]{2}|[a-zA-Z]\\d{2}\\s?\\d[a-zA-Z]{2}|[a-zA-Z]{2}\\d\\s?\\d[a-zA-Z]{2}|[a-zA-Z]{2}\\d{2}\\s?\\d[a-zA-Z]{2}|[a-zA-Z]\\d[a-zA-Z]\\s?\\d[a-zA-Z]{2}|[a-zA-Z]{2}\\d[a-zA-Z]\\s?\\d[a-zA-Z]{2}|[a-zA-Z]{3}\\s?\\d[a-zA-Z]{2}";
	RegEx["dd"] = "^[0-2]?[0-9]$|^3[0-1]$";
	RegEx["mm"] = "^0?[1-9]$|^1[0-2]$";
	RegEx["yy"] = "^[0-9]{4}$";
	RegEx["email"] = "[\\w.'-]+@[\\w-]+\\.([\\w.-]+\\.\\w{2,4}|\\w{2,4})";
	
	// generic 
	function validate(validatorFieldName){
	
		if(findObj(validatorFieldName)){
		   var el = validatorFieldName.replace("_validator","");	
		   var fieldValue = findObj(el).value;
		   var regexName = findObj(validatorFieldName).value;
			re = new RegExp(RegEx[regexName]);
			var match = re.exec(fieldValue);
			
			
			if(match == null){
			// no match = invalid
			 errors.push(el);
			}		
		}
	}
	
	
	function validateForm(){
		loader.resetFields(errors);
		errors = new Array();
		for(var i= 0; i< document.forms[0].length; i++){
		
		var fieldname = document.forms[0][i].name;
		
		reg = new RegExp("_validator");
		var m = reg.exec(fieldname);
		if(m != null){
			
		  validate(fieldname);
		}
		
		}
		 loader.populateErrors(errors);
		
	}
	
	loader.populateErrors = function(errors){
	 	
		for(var i = 0; i< errors.length; i++){
		  this.populateError(errors[i]);		
		}
	}
	
	loader.populateValues = function(field ,fieldvalue){
		
		
		if(findObj(field)){
			
			fieldObject = findObj(field);
			
			// Checkbox
			if(fieldObject.type == "checkbox"){
				if(fieldObject.value != ""){
					fieldObject.checked = "true";
				}
			}	
			// Radio
			else if (fieldObject.length && fieldObject[0].type == "radio") {
				for (var i = 0; i < fieldObject.length; i++)
				{
					if(fieldObject[i].value == fieldvalue) fieldObject[i].checked = "true";
				}
			} 
			
			// Default
			else {
				fieldObject.value = fieldvalue;
			}
		}
	}
  
  
  function IsNull(n) {
    return (typeof(n) == 'undefined' || n == null);
  }
  
  
	function rebuildRedirects() {
    var hostname = location.hostname;
	  var fullUrl = unescape(location);
	  var fullParms = unescape(location.search.substr(0));	  
	  var thisUrl = unescape(findObj("ses_fail_redirect_url").value);
	  var fullDomain = fullUrl.replace(thisUrl,'');
  	fullDomain = fullDomain.replace(fullParms,'');
	  findObj("ses_success_redirect_url").value = fullDomain + findObj("ses_success_redirect_url").value;
	  findObj("ses_fail_redirect_url").value = fullDomain + findObj("ses_fail_redirect_url").value;
    
    // SES Servers
    var ses_servers = new Array();
    ses_servers[1] = "http://nmrs11.lon.mellonbank.com:9082/ses/validator"; //DEV
    ses_servers[2] = "http://mebss.test.mellon.com/ses/validator"; //TEST
    ses_servers[3] = "http://mebss.qa.mellon.com/ses/validator"; //QA
    ses_servers[4] = "http://ebusiness.melloninstitutional.com/ses/validator"; //PROD

    //is this an email form
    formObj = findObj("emailForm");
    // or a request lit form?
    if (IsNull(formObj)) formObj = findObj("requestLiterature");


    //only try and set ses server details if either emailform or requestlit
    if (!IsNull(formObj)) {
      var actionAttribute = formObj.attributes.getNamedItem("action");
      var addressProperty = findObj("address_property_file_url");
      if (!IsNull(addressProperty)) {
        underscore = addressProperty.value.lastIndexOf("_");
        if (underscore > 0) addressPropPath = addressProperty.value.substr(0,underscore);
        else addressPropPath = addressProperty.value;
      }
      
      //dev
      if (hostname.indexOf("snsebd02") > -1 ) {
        actionAttribute.value = ses_servers[1];
        if (!IsNull(addressProperty)) addressProperty.value = addressPropPath + "_DEV";
      }
      //test
      else if (hostname.indexOf("test.mellon") > -1 ) {
        actionAttribute.value = ses_servers[2];
        if (!IsNull(addressProperty)) addressProperty.value = addressPropPath + "_TEST";
      }
      //qa
      else if (hostname.indexOf("sn84") > -1 ) {
        actionAttribute.value = ses_servers[3];
        if (!IsNull(addressProperty)) addressProperty.value = addressPropPath + "_QA";
      }
      else if (hostname.indexOf("qa.mellon") > -1 ) {
        actionAttribute.value = ses_servers[3];
        if (!IsNull(addressProperty)) addressProperty.value = addressPropPath + "_QA";
      }
      //prod
      else if (hostname.indexOf("sn83") > -1 ) {
        actionAttribute.value = ses_servers[4];
        if (!IsNull(addressProperty)) addressProperty.value = addressPropPath + "_PROD";
      }
      else {
        actionAttribute.value = ses_servers[4];
        if (!IsNull(addressProperty)) addressProperty.value = addressPropPath + "_PROD";
      }
    }
	}

	
	function getValidationParms() {
	 var returnVar = null;
	 var searchstr = unescape(location.search.substr(1));
	 var start = 0;
	 var finished = 0;
	 while (finished == 0) {
		 var parmBreak = searchstr.indexOf("&");
		 if (parmBreak > 0) {
		   returnVar = searchstr.substr(start,parmBreak);
		   processParm(returnVar);
		   searchstr = searchstr.substr(parmBreak+1,searchstr.length-parmBreak);
		 } else {
		   // if no more & then finish
		   returnVar = searchstr.substr(start,searchstr.length);
		   processParm(returnVar);
		   finished = 1;
		 }
	 }
	 loader.populateErrors(errors);
	 rebuildRedirects();
	}
	
	function processParm(parm) {
	errorField = parm.indexOf("error_");
	if (errorField >= 0) {
	  field_in_error = parm.substring(parm.indexOf("_")+1,parm.indexOf("="));		
	  field_in_error_value = parm.substring(parm.indexOf("=")+1);
	  if (field_in_error_value == "y") {  
		errors.push(field_in_error);
	  }
	} else {
	  field_name = parm.substring(0,parm.indexOf("="));
	  field_name_value = parm.substring(parm.indexOf("=")+1);
	  loader.populateValues(field_name,field_name_value);  
	}
	}
		
  
  function IsNull(n) {
    return (typeof(n) == 'undefined' || n == null);
}