function Asc(String){return String.charCodeAt(0);}
function Chr(AsciiNum) { return String.fromCharCode(AsciiNum) }
function createXMLHttp() {
    if (typeof XMLHttpRequest != 'undefined')
        return new XMLHttpRequest();
    else if (window.ActiveXObject) {
        var avers = ["Microsoft.XmlHttp", "MSXML2.XmlHttp",
"MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.5.0"];
        for (var i = avers.length - 1; i >= 0; i--) {
            try {
                httpObj = new ActiveXObject(avers[i]);
                return httpObj;
            } catch (e) { }
        }
    }
    throw new Error('XMLHttp (AJAX) not supported');
}
function setCookie(name, value, path, nDays, domain, secure) {
    var today = new Date();
    var expires = new Date(); 
    var curCookie = ""
    //fixDate(today)
    if (nDays==null || nDays==0) nDays=365; // one year
    expires.setTime(today.getTime() + 3600000*24*nDays);
    curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "")
  + ((path) ? "; path=" + path : "") +
  ((domain) ? "; domain=" + domain : "") +
  ((secure) ? "; secure" : "")
    document.cookie = curCookie
   }
  

function getCookie(name) {
    var prefix = name + "="
    var cookieStartIndex = document.cookie.indexOf(prefix)
    if (cookieStartIndex == -1)
        return null
    var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
    if (cookieEndIndex == -1)
        cookieEndIndex = document.cookie.length
    return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
}
function strippunct(target) {
var ttarget=target.toLowerCase()
var result=""
for (var i = 0; i < target.length; i++){if ("abcdefghijklmnopqrstuvwxyz0123456789 ".indexOf(ttarget.substr(i,1),0)>-1){result=result+target.substr(i,1)}else

{result=result+' '}}
return replace(result,"  ", " ", false,false)}
function stripquotes(target){
result=replace(target,"'","")
result=replace(result,'"',"")
return replace(result,"  ", " ") 
}
function contains(target,term){
var result=false
for (var i = 0; i < target.length; i++){if (term.indexOf(target.substr(i,1),0)>-1){result=true}}
return result
}
function stripquotes(target){
result=replace(target,"'","")
result=replace(result,'"',"")
return replace(result,"  ", " ") 
}
function replace(target, oldTerm, newTerm, caseSens, wordOnly){  
var work = target;
var ind = 0;
var next = 0;   
if (!caseSens){
  oldTerm = oldTerm.toLowerCase();
  work = target.toLowerCase();
}   
while ((ind = work.indexOf(oldTerm,next)) >= 0){
 if (wordOnly){
    var before = ind - 1;
    var after = ind + oldTerm.length;
    if (!(space(work.charAt(before)) && space(work.charAt(after)))){
       next = ind + oldTerm.length;
       continue;
   }
}
target = target.substring(0,ind) + newTerm + target.substring(ind+oldTerm.length,target.length);
work = work.substring(0,ind) + newTerm + work.substring(ind+oldTerm.length,work.length);
next = ind + newTerm.length;
if (next >= work.length){ break}
}
return target;
}
function fixDate(date){
  var base = new Date(0)
  var skew = base.getTime()
  if (skew > 0){date.setTime(date.getTime() - skew)}  
}

// this deletes the cookie when called
function deleteCookie( name, path, domain ) {
if ( getCookie( name ) ) {document.cookie = name + "=" +( ( path ) ? ";path=" + path : "") +( ( domain ) ? ";domain=" + domain : "" ) +";expires=Thu, 01-Jan-1970 00:00:01 GMT"}
}

function Right(str, n)
{
if (n <= 0) return "";
else if (n > String(str).length){return str}
else {iLen = String(str).length;return String(str).substring(iLen, iLen - n)}
}

function Left(str, n)
{
if (n <= 0) return "";
else if (n > String(str).length){return str}
else {iLen = String(str).length;return String(str).substring(0,n)}
}

function CheckandRadioValue(form,vars){
	vars=";"+vars.toLowerCase()+";"
	var returnvalue=""
	for (var f = 0; f < form.elements.length; f++) {
       		rbutton=form.elements[f]
       		temp = rbutton.name
       		if (temp != undefined) {
       			temp = ";" + temp.toLowerCase() + ";"
       			if (vars.indexOf(temp) > -1) {
       				if (rbutton.checked == true) {
       					if (returnvalue == "") {
       						returnvalue = rbutton.value
       					} else {
       						returnvalue = returnvalue + ";" + rbutton.value
       					}
       				}
       			}
       		}
	} // for
	return returnvalue
}

function getFupload(form){
for (var f = 0; f < form.elements.length; f++) {
      if (form.elements[f].type=="file"){
             rbutton=form.elements[f]
             return rbutton.value
    } // if
  } // for
}

function trimSize(size) {
	return size.replace(new RegExp('[^0-9%]', 'gi'), '');
}

function getMin(t1,t2) {
if (t1>t2){return t2}else{return t1}
}
function expose(control){
	if (document.getElementById(control)){
		var exp=document.getElementById(control);
		if (exp.style.display=="none"){exp.style.display="block";}else{exp.style.display="none";}
	}
}
function hide(control){
	if (document.getElementById(control)){
		var exp=document.getElementById(control);
		exp.style.display="none";
	}
}
function alphaonly(target){
var ttarget=target.toLowerCase()
var result=""
for (var i = 0; i < target.length; i++){
if ("abcdefghijklmnopqrstuvwxyz ".indexOf(ttarget.substr(i,1),0)>-1){result=result+target.substr(i,1)}
}
return Trim(result)}
//

function longDate(mydate){
	arday = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
	armonth = new Array("January ","February ","March ","April ","May ","June ","July ","August ","September ", "October ","November ","December ")
	ardate = new Array("0th","1st","2nd","3rd","4th","5th","6th","7th","8th","9th","10th","11th","12th","13th","14th","15th","16th","17th","18th","19th","20th","21st","22nd","23rd","24th","25th","26th","27th","28th","29th","30th","31st");
	myday = mydate.getDay();
	mymonth = mydate.getMonth();
	myweekday= mydate.getDate();
	myyear= mydate.getYear();
	if (myyear < 2000){myyear = myyear + 1900;}
	return arday[myday] +" " + armonth[mymonth] +" "+ardate[myweekday] + " " + myyear
}

function xajaxCall(xmlhttp,tURL,toDiv){

if (xmlhttp==null){xmlhttp=AjaxHandler()};
var akjDisplay = document.getElementById(toDiv);
akjDisplay.innerHTML ="";

 xmlhttp.onreadystatechange=function() {
  	if (xmlhttp.readyState==0) {akjDisplay.innerHTML = 'Information loading please wait ...initializing'};
  	if (xmlhttp.readyState==1) {akjDisplay.innerHTML = 'Information loading please wait ...loading'};
  	if (xmlhttp.readyState==2) {akjDisplay.innerHTML = 'Information loading please wait ...loaded'};
  	if (xmlhttp.readyState==4) {akjDisplay.innerHTML = xmlhttp.responseText};
  }
 xmlhttp.open("GET", tURL,true);
 xmlhttp.send(null)
 }

function AjaxHandler()
{
try
{
// Firefox, Opera 8.0+, Safari
handler=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
handler=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
handler=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
}
}
}
return handler;
}

function allTrim(toTrim){
	toTrim=toTrim.replace(new RegExp("^[ ]+", "g"), "");//ltrim	
	toTrim=toTrim.replace(new RegExp("[ ]+$", "g"), "");//rtrim	
	return toTrim
}

function checkEntered(whatYouTyped,FormElement,count,allowNone) {
    if (isNaN(count)) { count = 1 }
    if (allowNone == undefined) {allowNone = false}else{allowNone = true};
    
  var fieldset = document.getElementById(FormElement);
  if (fieldset == null) { return 0 }
  var txt = whatYouTyped.value;
  
  if (txt.length > count || (allowNone && txt.toLowerCase=="none")){
    fieldset.className = "welldone";
    return 0
  }
  else {
      fieldset.className = "kindagood";
      setError(whatYouTyped.name)
      return 1
  }
}

function checkInteger(fieldName, FormElement, count) {
    if (isNaN(count)) { count = 0 }
    ValidateElement=document.getElementById(fieldName + '_validate')
    intTotal = 0
    lastInt=0
    for (var i = 0; i < FormElement.elements.length; i++) {
        var fieldset = FormElement.elements[i]
        fname = fieldset.name
        if (fname!=undefined){
            if (fname.indexOf(fieldName) > -1) {
                if (fname.indexOf("other") > -1) {
                    if (lastInt > 0) {
                        otherset = fieldset.value
                        if (otherset.length < 3) {  // at least 2 characters
                            ValidateElement.className = "kindagood";
                            setError(fname)
                            return 1
                        }
                    }                    
                } else {
                    var txt = parseInt(fieldset.value);
                    lastInt = txt
                    if (txt == "NaN") {
                        ValidateElement.className = "kindagood";
                        setError(fname)
                        return 1
                    }
                    intTotal = intTotal + txt
                    if ((fname.indexOf("other") > -1) & (txt > 0)) {
                        temp = fname.substring(0, fname.indexOf("_") - 1);
                        var otherset = eval('document.forms[0].' + temp + '_other.value');
                        if (otherset != null) {
                            if (otherset.length < 3) {  // at least 2 characters
                                ValidateElement.className = "kindagood";
                                setError(temp + '_other')
                                return 1
                            }
                        }                        
                    }
                }
            }
        }
    }
    if (intTotal < count) { // something has to be set!
        ValidateElement.className = "kindagood";
        return 1
    }
    ValidateElement.className = "welldone";
    return 0
}

function setError(FieldName) {
    Terror = eval('Errors["' + FieldName + '"]')
    if (Terror == null) {
        FieldName = FieldName.substring(0, FieldName.length - 1)
        Terror = eval('Errors["' + FieldName + '"]')
    }
    
    if (Terror != null) {
        if (Terror != "") {
            Terror=replace(Terror,"'", "", false,false)
            ErrorMessage = ErrorMessage + "<img src='img/bg-fieldset-kindagood.gif'>" + Terror + "<br>"
        }
    }
}

var MatchEmail =""
function checkEmail(strObject, FormElement, ToMatch) {
	address = strObject.value
	var fieldset = document.getElementById(FormElement);
	if (fieldset == null) { return 0 }
	if (address.toLowerCase() == "none") {
	    fieldset.className = "welldone";
	    MatchEmail = address.toLowerCase()
	    return 0
	}
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		if (reg.test(address) == false) {
		    fieldset.className = "kindagood";
		    setError(strObject.name)
		return 1
	}

	var illegalChars = /[\(\)\<\>\,\;\:\\\"\[\]]/;
	if (illegalChars.test(address)){
	    fieldset.className = "kindagood";
	    setError(strObject.name)
		return 1
	}	
	if (ToMatch != null) {
		if (ToMatch.toLowerCase() != address.toLowerCase()) {
		    fieldset.className = "kindagood";
		    setError(strObject.name)
			return 1
		}
	}
	fieldset.className = "welldone";
	MatchEmail = address
	return 0
}

/*
* Load hint events
*/

function prepareHints() {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        temp = inputs[i].getAttribute("id")
        temp = temp + "_hint"
        onNode = document.getElementById(temp)
        if (onNode != null) {
            inputs[i].onfocus = function() {
                temp = this.getAttribute("id")
                document.getElementById(temp + "_hint").style.display = "inline";
            }
            inputs[i].onblur = function() {
                temp = this.getAttribute("id")
                document.getElementById(temp + "_hint").style.display = "none";
            }
        }
    }
    var inputs = document.getElementsByTagName("select");
    for (var i = 0; i < inputs.length; i++) {
        temp = inputs[i].getAttribute("id")
        temp = temp + "_hint"
        onNode = document.getElementById(temp)
        if (onNode != null) {
            inputs[i].onfocus = function() {
                temp = this.getAttribute("id")
                document.getElementById(temp + "_hint").style.display = "inline";
            }
            inputs[i].onblur = function() {
                temp = this.getAttribute("id")
                document.getElementById(temp + "_hint").style.display = "none";
            }
        }
    }
    var inputs = document.getElementsByTagName("td");
    for (var i = 0; i < inputs.length; i++) {
        temp = inputs[i].getAttribute("id")
        if (temp != null) {
            temp = temp + "_hint"
            onNode = document.getElementById(temp)
            if (onNode != null) {
                inputs[i].onmouseover = function() {
                    temp = this.getAttribute("id")
                    document.getElementById(temp + "_hint").style.display = "inline";
                }
                inputs[i].onmouseout = function() {
                    temp = this.getAttribute("id")
                    document.getElementById(temp + "_hint").style.display = "none";
                }
            }
        }
    }
}
function checkPostCode(whatYouTyped, FormElement) {
		var postCode = whatYouTyped.value.toLowerCase();
		var fieldset = document.getElementById(FormElement);
		if (fieldset == null) { return 0 }
		if (postCode == "none") {
			fieldset.className = "welldone";			
			return 0		
		}
		// Permitted letters depend upon their position in the postcode.
		var alpha1 = "[abcdefghijklmnoprstuwyz]";                       // Character 1
		var alpha2 = "[abcdefghklmnopqrstuvwxy]";                       // Character 2
		var alpha3 = "[abcdefghjkpmnrstuvwxy]";                         // Character 3
		var alpha4 = "[abehmnprvwxy]";                                  // Character 4
		var alpha5 = "[abdefghjlnpqrstuwxyz]";                          // Character 5

		// Array holds the regular expressions for the valid postcodes
		var pcexp = new Array();

		// Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA
		pcexp.push(new RegExp("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1,2})(\\s*)([0-9]{1}" + alpha5 + "{2})$", "i"));

		// Expression for postcodes: ANA NAA
		pcexp.push(new RegExp("^(" + alpha1 + "{1}[0-9]{1}" + alpha3 + "{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$", "i"));

		// Expression for postcodes: AANA  NAA
		pcexp.push(new RegExp("^(" + alpha1 + "{1}" + alpha2 + "{1}" + "?[0-9]{1}" + alpha4 + "{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$", "i"));

		// Exception for the special postcode GIR 0AA
		pcexp.push(/^(GIR)(\s*)(0AA)$/i);

		// Standard BFPO numbers
		pcexp.push(/^(bfpo)(\s*)([0-9]{1,4})$/i);

		// c/o BFPO numbers
		pcexp.push(/^(bfpo)(\s*)(c\/o\s*[0-9]{1,3})$/i);

		// Overseas Territories
		pcexp.push(/^([A-Z]{4})(\s*)(1ZZ)$/i);
            
		// Load up the string to check


		// Assume we're not going to find a valid postcode
		var valid = false;

		// Check the string against the types of post codes
		for (var i = 0; i < pcexp.length; i++) {
			if (pcexp[i].test(postCode)) {

				// The post code is valid - split the post code into component parts
				pcexp[i].exec(postCode);

				// Copy it back into the original string, converting it to uppercase and
				// inserting a space between the inward and outward codes
				postCode = RegExp.$1.toUpperCase() + " " + RegExp.$3.toUpperCase();

				// If it is a BFPO c/o type postcode, tidy up the "c/o" part
				postCode = postCode.replace(/C\/O\s*/, "c/o ");

				// Load new postcode back into the form element
				valid = true;

				// Remember that we have found that the code is valid and break from loop
				break;
			}
		}

		// Return with either the reformatted valid postcode or the original invalid 
		// postcode
		if (valid) {
			fieldset.className = "welldone";
			whatYouTyped.value = postCode;
			return 0
		} else {
		    fieldset.className = "kindagood";
		    setError(whatYouTyped.name)
		    return 1;
		}
	}

	function getFieldSet(rootVar, FormElement) {
		FormElement = FormElement.toUpperCase()
	    while (true) {
	    	rootVar = rootVar.parentNode;	
		    temp=rootVar.tagName
		    if (temp.indexOf("FORM")>-1){return rootVar}
		    if (temp.indexOf(FormElement) > -1) { return rootVar }
    	 }   
	}

	function CheckChecked(whatYouTyped, form, varName, FormElement, count) {
		if (isNaN(count)) { count = 1 }
		var fieldset = document.getElementById(FormElement);
		if (fieldset==null){return 0}
		var returns = CheckandRadioValue(form, varName)
		if (returns == "") {
		    fieldset.className = "kindagood";
		    setError(varName)
		    return 1;
		}
	    temp = returns.split(";")
		if (temp.length< count) {
		    fieldset.className = "kindagood";
		    setError(varName)
		    return 1
		}
        
        if (returns.indexOf("Other") > -1) { 
            if (temp.length > 1) { // more than one ticked
                fieldset.className = "kindagood";
                setError(varName)
                return 1
            }
            var otherset = eval('document.forms[0].' + varName + '_other.value');            
            if (otherset != null) {                
                if (otherset.length < 3) {  // at least 2 characters
                    fieldset.className = "kindagood";
                    fieldset2 = document.getElementById(varName + "_other");
                    setError(varName)
                    if (fieldset2 != null) {
                        fieldset2.className = "red";
                        fieldset2.focus();
                    }
                    
                    
                    return 1
                }
            }
        }

        returns = returns.toLowerCase()
        if (returns.indexOf("othertoo") > -1) {
            var otherset = eval('document.forms[0].' + varName + '_other.value');
            if (otherset != null) {
                if (otherset.length < 3) {  // at least 2 characters
                    fieldset.className = "kindagood";
                    setError(varName)
                    return 1
                }
            }
        }

        if (returns.indexOf("none") > -1) {
            if (temp.length > 1) { // more than one ticked no good.
                fieldset.className = "kindagood";
                setError(varName)
                return 1
            }
        }
                
		fieldset.className = "welldone";
		return 0
}


