function oW(url,name,h,w) {
    var newwin;
        newwin=window.open(url,name,"height="+h+",width="+w+",resizeable=yes,scrollbars=no,menubar=no,toolbar=no,directories=no,location=no,status=no");
    return newwin;
}
function testalert(s) {
    alert(s);
}
function Validator(fieldarray) {
    this.ok=true;
    this.wrongval;
    this.errormsg=null;
    this.RadioArray=null;
    this.validateForm=validateForm;
    this.validateSelect=validateSelect;
    this.validateRadio=validateRadio;
    this.validateEmail=validateEmail;
    this.validateDob=validateDob;
    this.validatePhone=validatePhone;
    this.validateZip=validateZip;
    this.validatePassword=validatePassword;
    this.validateTerms=validateTerms;
    this.validateAlpha=validateAlpha;
    this.validateAlphaFull=validateAlphaFull;
    this.validateNumber=validateNumber;
    this.validateInteger=validateInteger;
    this.validateName=validateName;
    this.isOk = isOk;
    this.validateFields=null;
    if (fieldarray!=null) {
        this.validateFields=fieldarray;
    }
}
function validateForm() {
    if (this.validateFields==null) {
        this.ok=true;
        return true;
    }
    var field;
    this.ok=true;
    for (field in this.validateFields) {
       if (field=="phone") {
            this.ok=validatePhone(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a valid phone number XXX-XXX-XXXX";
        } else if (field=="email") {
            this.ok=validateEmail(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a valid email address";
        } else if (field=="emailconfirm") {
            this.ok=validateEmail(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a matching email address to confirm";
        } else if (field=="zip") {
            this.ok=validateZip(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a valid US zip code";
        } else if (field=="dob") {
            this.ok=validateZip(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a valid date of birth";
        } else if (field=="password") {
            this.ok=validatePassword(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a password between 6 and 15 characters and limit the special characters to those above the numbers on your keyboard";
        } else if (field=="passwordconfirm") {
            this.ok=validatePassword(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a matching password to confirm";
        } else if (field=="terms") {
            this.ok=validateTerms(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please check the box to accept the terms to continue with registration";
        } else if (field=="firstname") {
            this.ok=validateName(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a valid first name";
        } else if (field=="lastname") {
            this.ok=validateName(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a valid last name";
        } else if (field=="fundinggoal") {
            this.ok=validateNumber(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a valid amount for funding goal";
        } else if (field=="fundingcurrent") {
            this.ok=validateNumber (this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a valid level of current funding or 0";
        } else if (field.indexOf("select")>-1) {
            this.ok=validateSelect(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please select a value for "+field;
        } else if (field.indexOf("radio")>-1) {
            this.ok=validateSelect(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please select a value for "+field;
        } else {
            this.ok=validateSomething(this.validateFields[field]);
            if (!this.ok) this.errormsg="Please enter a value for "+field;
        }
        //alert ("val result is:"+this.isOk);
        
        if (!this.ok) {
            break;
        }
    }
    return this.ok;
}
function isOk(){
    return this.ok;
}

function validateEmail(em) { 
    return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(em); 
}

function validatePhone(ph) { 
    return /^[2-9]\d{2}\-*[2-9]\-*\d{6}$/.test(ph); 
}

function validateTerms(s) {
    return s;
}
function validateSelect(obj) {
    if (obj.value=="" || obj.value.indexOf("--")>-1 ) {
        return false;
    } else {return true;}
}
function  validateNumber( n ) {
   if (n==null || n=="" || isNaN(n)) {
        return false;
    } else {
        return true;
    }
}
function  validateAlpha (s) {
    if (s==null) {
      return false;
    } else {
        return /^[A-Za-z0-9]+$/.test(s);
    }
}
function  validateAlphaFull (s) {
    // includes the underscore and space as part of \w
    if (s==null) {return false};

    return /^[A-Za-z0-9_ ]+$/.test(s);
}
function  validateInteger (s) {
    if (s==null) return false;

    return /^[1-9]+[0-9]*$/.test(s);
}
function  validateString (s) {
    if (s==null) return false;
    return  /^[A-Za-z]+$/.test(s);
}
function  validateSomething (s) {
    if (s==null) return false;
    if (s=="") return false;
    return true;
    //return  /^[A-Za-z0-9_\-!'"@#$%^&*\(\)\.\? ]+$/.test(s);
}
function  validateName (s) {
    if (s==null) return false;

    return  /^[A-Za-z']+$/.test(s);
}
function validateDob(d) {
    var ind = d.lastIndexOf("/");
    if (ind<0) {
            this.errormsg="Please Use MM/DD/YYYY format for Date of Birth";
        return false;
    }
    var yearstring=d.substring(ind+1,d.length);
    //alert (yearstring);
    if (yearstring.length!=4) {
            this.errormsg="Please Use MM/DD/YYYY format for Date of Birth";
        return false;
    }
    if (isNaN(yearstring)) {
            this.errormsg="Please Use MM/DD/YYYY format for Date of Birth";
        return false;
    }

    var yearsinmillis=1000 * 3600 * 24 * 365;
    var thisdate = Date.parse(new Date());
    var userdate = Date.parse(d);
    var eighteen = Date.parse("01/01/1988");

    if ((thisdate-userdate)<eighteen) {
        return false;
    } else {
        return true;
    }

}
function validateZip(zip) {
    return /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(zip);
}
function  validatePassword (s) {
    if (s==null) return false;
    if (s.length<6 || s.length>15) return false;

    return /^[A-Za-z0-9_\-!@#$%^&*\(\)\.\?]+$/.test(s);
}

function validateRadio(radioElement) {
    if (!this.RadioArray) {
        this.RadioArray = new Array();
    }
    if (radioElement.checked==true) {
        this.RadioArray[radioElement.name]=true;
    } else if (this.RadioArray[radioElement.name]!=null && this.RadioArray[radioElement.name]==true) {
        // do nothing
    } else {
        this.RadioArray[radioElement.name]=false;
    }
}

