//*********************************************************************************
// Module Name : jsform.js
// Author      : Budiawan T
// Dated       : 07 OCT 2006
// Revision    : 1.1
// Rev. Date   : 19 Oct 2008 (special for VALOR PROPERTY)
// Purpose     : To validate online submission form.
// Description : Any associated files please refer to your supervisor for the docs.
// Copyright by Netservo Services Sdn Bhd.
//*********************************************************************************
function validateForm(objForm){
	var formname = objForm.name;
	if (formname == "frmRequest") return validateFormRequest(objForm);
	if (formname == "frmRequest2") return validateFormRequest2(objForm);
	if (formname == "frmEmailSubmission") return validateFormEmailSubmission(objForm);
	if (formname == "frmReservation") return validateFormReservation(objForm);
	if (formname == "frmMemberReg") return validateFormMemberRegistration(objForm);
	return false;
}

function validateFormRequest(objForm){
    var fullname = document.getElementById("Fullname").value;
    var email = document.getElementById("Email").value;
    var telpno = document.getElementById("TelpNo").value;
    var message = document.getElementById("Message").value;

    if (fullname.length == 0){
        alert ("Please enter your name.");
        objForm.Fullname.focus();
        return false;
    }
    if (email.length != 0 && !isEmail(email)){
        alert ("Please enter a valid email.");
        objForm.Email.focus();
        return false;
    }
    //if (telpno.length == 0){
    //    alert ("Please enter your telephone number.");
    //    objForm.TelpNo.focus();
    //    return false;
    //}
    if (message.length == 0){
        alert ("Please enter your request.");
        objForm.Message.focus();
        return false;
    }
    if (objForm.Submit1.value == "Sending"){
        return false;
    }
    objForm.Submit1.value = "Sending";
    return true;
}

function validateFormRequest2(objForm){
    var fullname = document.getElementById("Fullname").value;
    var email = document.getElementById("Email").value;
    var telpno = document.getElementById("TelpNo").value;
    var proptype = document.getElementById("PropType").value;
    var message = document.getElementById("Message").value;

    if (fullname.length == 0){
        alert ("Please enter your name.");
        objForm.Fullname.focus();
        return false;
    }
    if (email.length != 0 && !isEmail(email)){
        alert ("Please enter a valid email.");
        objForm.Email.focus();
        return false;
    }
    if (telpno.length == 0){
        alert ("Please enter your telephone number.");
        objForm.TelpNo.focus();
        return false;
    }
    if (proptype.length == 0){
        alert ("Please select the property for sales or rent.");
        objForm.PropType.focus();
        return false;
    }
    if (message.length == 0){
        alert ("Please enter the details of property.");
        objForm.Message.focus();
        return false;
    }
    if (objForm.Submit1.value == "Sending"){
        return false;
    }
    objForm.Submit1.value = "Sending";
    return true;
}

function validateFormEmailSubmission(objForm){
    var email = document.getElementById("EmailSubmission").value;

    if (email.length == 0 || !isEmail(email)){
        alert ("Please enter a valid email.");
        objForm.EmailSubmission.focus();
        return false;
    }
    if (objForm.Submit2.value == "Sending"){
        return false;
    }
    objForm.Submit2.value = "Sending";
    return true;
}

function validateFormReservation(objForm){
    var fullname = document.getElementById("Fullname").value;
    var email = document.getElementById("Email").value;
    var telpno = document.getElementById("TelpNo").value;
    var rsvtdate = document.getElementById("ReservationDate").value;
    var rsvttime = document.getElementById("ReservationTime").value;
    var branchname = document.getElementById("BranchName").value;
    var message = document.getElementById("Message").value;

    if (fullname.length == 0){
        alert ("Please enter your name.");
        objForm.Fullname.focus();
        return false;
    }
    if (email.length != 0 && !isEmail(email)){
        alert ("Please enter a valid email.");
        objForm.Email.focus();
        return false;
    }
    if (telpno.length == 0){
        alert ("Please enter your telephone number.");
        objForm.TelpNo.focus();
        return false;
    }
    if (rsvtdate.length == 0){
        alert ("Please enter your reservation date.");
        objForm.ReservationDate.focus();
        return false;
    }
    if (rsvttime.length == 0){
        alert ("Please enter your reservation time.");
        objForm.ReservationTime.focus();
        return false;
    }
    if (branchname.valueOf() == ""){
        alert ("Please select the branch.");
        objForm.BranchName.focus();
        return false;
    }
    //if (message.length == 0){
    //    alert ("Please enter your request.");
    //    objForm.Message.focus();
    //    return false;
    //}
    if (objForm.Submit3.value == "Sending"){
        return false;
    }
    objForm.Submit3.value = "Sending";
    return true;
}

function validateFormMemberRegistration(objForm){
    var fullname = document.getElementById("Fullname").value;
    var dobDD = document.getElementById("dobDD").value;
    var dobMM = document.getElementById("dobMM").value;
    var dobYYYY = document.getElementById("dobYYYY").value;
    var gender = document.getElementById("Gender").value;
    var icno = document.getElementById("ICNo").value;
    var postaladdr = document.getElementById("PostalAddress").value;
    var postcode = document.getElementById("Postcode").value;
    var cityname = document.getElementById("CityName").value;
    var countryname = document.getElementById("CountryName").value;
    var telpnohome = document.getElementById("TelpNoHome").value;
    var telnooffice = document.getElementById("TelpNoOffice").value;
    var telpnohp = document.getElementById("TelpNoHP").value;
    var email = document.getElementById("Email").value;
    var introducer = document.getElementById("IntroducerNo").value;

    if (fullname.length == 0){
        alert ("Please enter your name.");
        objForm.Fullname.focus();
        return false;
    }
	if (!isValidDate(dobYYYY,dobMM-1,dobDD)){	//month is JS always -1. cuz start from 0.
        alert ("Please enter a valid date of birth.");
        objForm.dobDD.focus();
		return false;
	}
    if (gender.valueOf() == ""){
        alert ("Please select the gender.");
        objForm.Gender.focus();
        return false;
    }
    if (icno.length == 0){
        alert ("Please enter your valid IC No.");
        objForm.ICNo.focus();
        return false;
    }
    if (postaladdr.length == 0){
        alert ("Please enter your postal address.");
        objForm.PostalAddress.focus();
        return false;
    }
    //if (postcode.length == 0){
    //    alert ("Please enter your post code.");
    //    objForm.Postcode.focus();
    //    return false;
    //}
    if (cityname.length == 0){
        alert ("Please enter your city name.");
        objForm.CityName.focus();
        return false;
    }
    if (countryname.length == 0){
        alert ("Please enter your country name.");
        objForm.CountryName.focus();
        return false;
    }
    //if (telpnohome.length == 0){
    //    alert ("Please enter your home telp no.");
    //    objForm.TelpNoHome.focus();
    //    return false;
    //}
    //if (telpnooffice.length == 0){
    //    alert ("Please enter your office telp no.");
    //    objForm.TelpNoOffice.focus();
    //    return false;
    //}
    //if (telpnohp.length == 0){
    //    alert ("Please enter your mobile no.");
    //    objForm.TelpNoHP.focus();
    //    return false;
    //}
    if (email.length != 0 && !isEmail(email)){
        alert ("Please enter a valid email.");
        objForm.Email.focus();
        return false;
    }
	if (objForm.AgreedTermsConds.checked == false){
        alert ("You MUST agreed with the terms & conditions before submit this form.");
        return false;
	}
    if (objForm.Submit4.value == "Sending"){
        return false;
    }
    objForm.Submit4.value = "Sending";
    return true;
}

function isEmail(pEmail) {
    var INVALIDCHARS = " #$%^&*(){}[];:'<>/\|?~`,";
    var ch, iAtPos, iPeriodPos, iRet, tempstr;

    pEmail.toLowerCase();   //** Convert all chars into small case.

    //**Before @ sign at least got 3 chars.
    ch = "@";
    iRet = pEmail.indexOf(ch)
    if (iRet <= 0) return false;
    iAtPos = iRet;

    //** Make sure there is one @ sign only.
    iRet = pEmail.indexOf(ch, iRet + 1)
    if (iRet != -1) return false;   //found more than one @ sign char.

    //** Make sure minimal have a dot (.) after @ sign.
    ch = ".";
    iRet = pEmail.indexOf(ch, iAtPos + 1)
    if (iRet <= 0) return false;
    iPeriodPos = iRet;

    //** Also make sure got 2 chars after @ sign.
    if ((iPeriodPos - iAtPos) <= 2) return false;

    //** Make sure after every period (.) got minimal 2 chars after @ sign.
    do {
        iRet = pEmail.indexOf(ch, iRet + 1 );
        if (iRet == -1) break;
        if ((iRet - iPeriodPos) <= 1) return false;
        iPeriodPos = iRet;
    } while (iRet == -1);


    //* also remember after last period (.) must have at least 2 chars go to.
    if ((pEmail.length - iPeriodPos) <= 2)  return false;

    //** NO INVALID CHARS ALLOWED.
    for (var i=0; i < INVALIDCHARS.length; i++) {
        ch = INVALIDCHARS.charAt(i);
        iRet = pEmail.indexOf(ch, iRet);
        if (iRet != -1) return false;
    }

    return true;
}

function isValidDate(yyyy,mm,dd) {
	var dt = new Date();
	dt.setFullYear(yyyy,mm,dd);

	if (dt.getDate() != dd) return false;
	if (dt.getMonth() != mm) return false;
	if (dt.getFullYear() != yyyy) return false;

	return true;
}
