function isAlien(a) {
   return isObject(a) && typeof a.constructor != 'function';
}

function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isBoolean(a) {
    return typeof a == 'boolean';
}

function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    return true;
}

function isFunction(a) {
    return typeof a == 'function';
}

function isNull(a) {
    return a === null;
}

function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}

function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}

function isString(a) {
    return typeof a == 'string';
}

function isUndefined(a) {
    return typeof a == 'undefined';
}

function getObject(name) {
	var ns4 = (document.layers) ? true : false;
	var w3c = (document.getElementById) ? true : false;
	var ie4 = (document.all) ? true : false;
	if (ns4) return eval('document.' + name);
	if (w3c) return document.getElementById(name);
	if (ie4) return eval('document.all.' + name);
	return false;
}

function validateText(obj,list,valid){
	var Invalid = false;
	var Text = obj.value;
	var Len = Text.length;
	var i;
	var LetterPos;
	if(Len > 0){
		for(i=0;i<Len;i++){
			LetterPos = list.indexOf(Text.charAt(i),0);
			if ((valid == false) && (LetterPos >= 0))
				Invalid = true;
			if ((valid == true) && (LetterPos == -1))
				Invalid = true;
		}
	}
	return Invalid;
}

function checkEmpty(obj){
	if(isNumber(obj.length)){
		return (obj.length > 0);
	}else{
		return (obj.value.length > 0);
	}
}

function hidetoggle (e) {
    document.getElementById(e).style.display = (document.getElementById(e).style.display == 'none') ? 'block' : 'none';
    return false;
}

function hide (e) {
    document.getElementById(e).style.display = 'none';
    return false;
}

function show (e) {
    document.getElementById(e).style.display = 'block';
    return false;
}

function twodp(v){
	return Math.round(v*100)/100;
}

function sendToclipboard(s){
if( window.clipboardData && clipboardData.setData ){
clipboardData.setData("Text", s);
return true;
}else{
//alert("Internet Explorer required");
return false;
}
} 

function copyFields(str){
	// Created by Blake Kus
	// http://www.kustomwebdesigns.com
	var elementArray=str.split(",");
	var element_num=0;
	var element, a, b;
	while (element_num < elementArray.length){
		element = elementArray[element_num].split(":");
		a = getObject(element[0]);
		b = getObject(element[1]);
		if(element.length > 1){
			if(!isNull(a) && !isNull(b)){
				b.value = a.value;
			}
		}
		element_num+=1;
	}
	return false;
}

function validateForm(checkString){
	// Created by Blake Kus
	// http://www.kustomwebdesigns.com
	// Validate form objects from string
	// field:longname:allowedcharacters:check
	// eg: name:long name:alpha:empty - Check textfield "name", alpha characters (a-z) only, check if empty, display "long name" to user
	// allowedcharacters: text, azAZ, azAZ09, 09, phone, email
	// check: empty
	var elementArray=checkString.split(",");
	var element_num=0;
	var element, field, name, longname, allowedcharacters, check, text, valid, err, f, c, minreq;
	err = "";
	valid = true;
	while (element_num < elementArray.length){
		element = elementArray[element_num].split(":");
		field = getObject(element[0]);
		name = element[0];
		longname = element[1];
		allowedcharacters = element[2];
		check = element[3];
		if(element.length > 1){
			if(isNull(field)){
				switch(name){
					case "minimumrequired":
						minreq = check.split(";");
						present = 0;
						for(i=0; i < minreq.length; i++) {
							if(checkEmpty(getObject(minreq[i]))){
								present++;
							}
						}
						if(present < allowedcharacters){
							err += "You need to fill in atleast "+allowedcharacters+" "+longname+"!\n";
							valid = false;
						}
					break;
					case "equaleachother":
						if(!checkConfirmation(getObject(allowedcharacters).value,getObject(check).value)){
							err += longname+" do not match!\n";
							valid = false;
						}
					break;
					default:
						err += longname+" ("+field+") could not be found! Please contact us.\n";
						valid = false;
					break;
				}
			}else{
				switch(check){
					case "empty":
						if(field.type == "radio"){
							f = field.form;
							c = false;
							for(i=0; i < f.length; i++) {
								if((f[i].type == "radio") && (f[i].name == field.name)) {
									if(f[i].checked){
										c = f[i].value;
									}
								}
							}
							if(c == false){
								valid = false;
								err += longname+" needs to be filled in!\n";
							}
						}else if(!checkEmpty(field)){
							valid = false;
							err += longname+" needs to be filled in!\n";
						}
					break;
				}
				switch(allowedcharacters){
					case "text":
						if(validateText(field,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890`~!@#$%^&*()_+=-/\,.<>;':[]{}| ",true)){
							valid = false;
							err += longname+" is invalid!\n";
						}
					break;
					case "azAZ":
						if(validateText(field,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ",true)){
							valid = false;
							err += longname+" is invalid!\n";
						}
					break;
					case "azAZ09":
						if(validateText(field,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,- ",true)){
							valid = false;
							err += longname+" is invalid!\n";
						}
					break;
					case "09":
						if(validateText(field,"0123456789.,- ",true)){
							valid = false;
							err += longname+" is invalid!\n";
						}
					break;
					case "phone":
						if(validateText(field,"+() 1234567890-.",true)){
							valid = false;
							err += longname+" is invalid!\n";
						}
					break;
					case "email":
						if(!checkEmail(field)){
							valid = false;
							err += longname+" is invalid!\n";
						}
					break;
				}
			}
		}
		element_num+=1;
	}
	if(err.length > 0){
		alert("There was an error processing your form:\n\n"+err);
	}
	return valid;
}

function AuthenticateForm(){
	// Created by Blake Kus
	// http://www.kustomwebdesigns.com
	if(isObject(getObject("validate"))){
		return validateForm(getObject("validate").value);
	}else{
		return true;
	}
}

function checkConfirmation(v1, v2) {
    if (v1 == v2)
        return true;
    return false;
}

function checkEmails(form) {
	var Valid = true;

	if(!checkEmpty(form.email)){
		alert("Your email address is required");
		Valid = false;
	}
	if(!checkEmpty(form.email2)){
		alert("You have to enter you email address in twice");
		Valid = false;
	}
	if(!checkConfirmation(form.email.value,form.email2.value)){
		alert("Your emails do not match!");
		Valid = false;
	}
	return Valid;
}

function validateAlpha(obj){
	var Invalid = false;
	var InvalidLetters ="`~!@#$%^&*()_+=-/\,.<>;':[]{}|1234567890";
	var Text = obj.value;
	var Len = Text.length;
	var i;
	var LetterPos;
	if(Len > 0){
	for(i=0;i<Len;i++){
		LetterPos = InvalidLetters.indexOf(Text.charAt(i),0);
		if (LetterPos >= 0)
			Invalid = true;
		}
		if (Invalid){
			alert("The text entered includes an illegal character");
			obj.focus();
			obj.select();
		}
	}
	return;
}

function validateNumeric(obj){
	var Invalid = false;
	var ValidLetters ="1234567890";
	var Text = obj.value;
	var Len = Text.length;
	var i;
	var LetterPos;
	if(Len > 0){
		for(i=0;i<Len;i++){
			LetterPos = ValidLetters.indexOf(Text.charAt(i),0);
			if (LetterPos == -1)
				Invalid = true;
		}
		if (Invalid){
			alert("You can only enter numeric values only.");
			obj.focus();
			obj.select();
		}
	}
	return;
}

function validateMeasurement(obj){
	var Invalid = false;
	var ValidLetters = '1234567890/.';
	var Text = obj.value;
	var Len = Text.length;
	var i;
	var LetterPos;
	if(Len > 0){
		for(i=0;i<Len;i++){
			LetterPos = ValidLetters.indexOf(Text.charAt(i),0);
			if (LetterPos == -1)
				Invalid = true;
		}
		if (Invalid){
			alert("You can only enter numeric values only.");
			obj.focus();
			obj.select();
		}
	}
	return;
}

function validatePhone(obj){
	var Invalid = false;
	var ValidLetters = "+() 1234567890-.";
	var Text = obj.value;
	var Len = Text.length;
	var i;
	var LetterPos;
	if(Len > 0){
		for(i=0;i<Len;i++){
			LetterPos = ValidLetters.indexOf(Text.charAt(i),0);
			if (LetterPos == -1)
				Invalid = true;
		}
		if (Invalid){
			alert("The text entered includes an illegal character");
			obj.focus();
			obj.select();
		}
	}
	return;
}

function validateEmail(obj){
	var address = obj.value;
	if(address.length > 0){
		if((address == "") || (address.indexOf('@') == -1) || (address.indexOf('.') == -1)){
			alert("Invalid email address.");
			obj.focus();
			obj.select();
		}else if(validateText(obj,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@._-",true)){
			alert("Invalid email address.");
			obj.focus();
			obj.select();
		}
	}
	return;
}

function checkEmail(obj){
	var address = obj.value;
	var valid = true;
	if(address.length > 0){
		if((address == "") || (address.indexOf('@') == -1) || (address.indexOf('.') == -1)){
			valid = false;
		}else if(validateText(obj,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@._-",true)){
			valid = false;
		}
	}
	return valid;
}
