/**
 * @author bplamondon
 */
function validateForm() {
    var isValid = true;

    ProvinceStateArray = new Array(64);
    for (i=0; i<ProvinceStateArray.length; ++i) {
        ProvinceStateArray[i] = new Array(2);
    }
    ProvinceStateArray[0][0] = "Alberta";
    ProvinceStateArray[0][1] = "CAN";
    ProvinceStateArray[1][0] = "Columbie-Britannique";
    ProvinceStateArray[1][1] = "CAN";
    ProvinceStateArray[2][0] = "Ile du Prince-Edouard";
    ProvinceStateArray[2][1] = "CAN";
    ProvinceStateArray[3][0] = "Les Territoires du Nord-Ouest";
    ProvinceStateArray[3][1] = "CAN";
    ProvinceStateArray[4][0] = "Manitoba";
    ProvinceStateArray[4][1] = "CAN";
    ProvinceStateArray[5][0] = "Nouveau Brunswick";
    ProvinceStateArray[5][1] = "CAN";
    ProvinceStateArray[6][0] = "Nouvelle-Ecosse";
    ProvinceStateArray[6][1] = "CAN";
    ProvinceStateArray[7][0] = "Nunavut";
    ProvinceStateArray[7][1] = "CAN";
    ProvinceStateArray[8][0] = "Ontario";
    ProvinceStateArray[8][1] = "CAN";
    ProvinceStateArray[9][0] = "Quebec";
    ProvinceStateArray[9][1] = "CAN";
    ProvinceStateArray[10][0] = "Saskatchewan";
    ProvinceStateArray[10][1] = "CAN";
    ProvinceStateArray[11][0] = "Terre-Neuve";
    ProvinceStateArray[11][1] = "CAN";
    ProvinceStateArray[12][0] = "Yukon";
    ProvinceStateArray[12][1] = "CAN";
    ProvinceStateArray[13][0] = "Alabama";
    ProvinceStateArray[13][1] = "USA";
    ProvinceStateArray[14][0] = "Alaska";
    ProvinceStateArray[14][1] = "USA";
    ProvinceStateArray[15][0] = "Arizona";
    ProvinceStateArray[15][1] = "USA";
    ProvinceStateArray[16][0] = "Arkansas";
    ProvinceStateArray[16][1] = "USA";
    ProvinceStateArray[17][0] = "Californie";
    ProvinceStateArray[17][1] = "USA";
    ProvinceStateArray[18][0] = "Colorado";
    ProvinceStateArray[18][1] = "USA";
    ProvinceStateArray[19][0] = "Connecticut";
    ProvinceStateArray[19][1] = "USA";
    ProvinceStateArray[20][0] = "Delaware";
    ProvinceStateArray[20][1] = "USA";
    ProvinceStateArray[21][0] = "District of Columbia";
    ProvinceStateArray[21][1] = "USA";
    ProvinceStateArray[22][0] = "Floride";
    ProvinceStateArray[22][1] = "USA";
    ProvinceStateArray[23][0] = "G&eacute;orgie";
    ProvinceStateArray[23][1] = "USA";
    ProvinceStateArray[24][0] = "Hawa&iuml;";
    ProvinceStateArray[24][1] = "USA";
    ProvinceStateArray[25][0] = "Idaho";
    ProvinceStateArray[25][1] = "USA";
    ProvinceStateArray[26][0] = "Illinois";
    ProvinceStateArray[26][1] = "USA";
    ProvinceStateArray[27][0] = "Indiana";
    ProvinceStateArray[27][1] = "USA";
    ProvinceStateArray[28][0] = "Iowa";
    ProvinceStateArray[28][1] = "USA";
    ProvinceStateArray[29][0] = "Kansas";
    ProvinceStateArray[29][1] = "USA";
    ProvinceStateArray[30][0] = "Kentucky";
    ProvinceStateArray[30][1] = "USA";
    ProvinceStateArray[31][0] = "Louisiane";
    ProvinceStateArray[31][1] = "USA";
    ProvinceStateArray[32][0] = "Maine";
    ProvinceStateArray[32][1] = "USA";
    ProvinceStateArray[33][0] = "Maryland";
    ProvinceStateArray[33][1] = "USA";
    ProvinceStateArray[34][0] = "Massachusetts";
    ProvinceStateArray[34][1] = "USA";
    ProvinceStateArray[35][0] = "Michigan";
    ProvinceStateArray[35][1] = "USA";
    ProvinceStateArray[36][0] = "Minnesota";
    ProvinceStateArray[36][1] = "USA";
    ProvinceStateArray[37][0] = "Mississippi";
    ProvinceStateArray[37][1] = "USA";
    ProvinceStateArray[38][0] = "Missouri";
    ProvinceStateArray[38][1] = "USA";
    ProvinceStateArray[39][0] = "Montana";
    ProvinceStateArray[39][1] = "USA";
    ProvinceStateArray[40][0] = "Nebraska";
    ProvinceStateArray[40][1] = "USA";
    ProvinceStateArray[41][0] = "Nevada";
    ProvinceStateArray[41][1] = "USA";
    ProvinceStateArray[42][0] = "New Hampshire";
    ProvinceStateArray[42][1] = "USA";
    ProvinceStateArray[43][0] = "New Jersey";
    ProvinceStateArray[43][1] = "USA";
    ProvinceStateArray[44][0] = "Nouveau-Mexique";
    ProvinceStateArray[44][1] = "USA";
    ProvinceStateArray[45][0] = "L'&eacute;tat de New York";
    ProvinceStateArray[45][1] = "USA";
    ProvinceStateArray[46][0] = "Caroline du Nord";
    ProvinceStateArray[46][1] = "USA";
    ProvinceStateArray[47][0] = "Dakota du Nord";
    ProvinceStateArray[47][1] = "USA";
    ProvinceStateArray[48][0] = "Ohio";
    ProvinceStateArray[48][1] = "USA";
    ProvinceStateArray[49][0] = "Oklahoma";
    ProvinceStateArray[49][1] = "USA";
    ProvinceStateArray[50][0] = "Oregon";
    ProvinceStateArray[50][1] = "USA";
    ProvinceStateArray[51][0] = "Pennsylvanie";
    ProvinceStateArray[51][1] = "USA";
    ProvinceStateArray[52][0] = "Rhode Island";
    ProvinceStateArray[52][1] = "USA";
    ProvinceStateArray[53][0] = "Caroline du Sud";
    ProvinceStateArray[53][1] = "USA";
    ProvinceStateArray[54][0] = "Dakota du Sud";
    ProvinceStateArray[54][1] = "USA";
    ProvinceStateArray[55][0] = "Tennessee";
    ProvinceStateArray[55][1] = "USA";
    ProvinceStateArray[56][0] = "Texas";
    ProvinceStateArray[56][1] = "USA";
    ProvinceStateArray[57][0] = "Utah";
    ProvinceStateArray[57][1] = "USA";
    ProvinceStateArray[58][0] = "Vermont";
    ProvinceStateArray[58][1] = "USA";
    ProvinceStateArray[59][0] = "Virginie";
    ProvinceStateArray[59][1] = "USA";
    ProvinceStateArray[60][0] = "L'&eacute;tat de Washington";
    ProvinceStateArray[60][1] = "USA";
    ProvinceStateArray[61][0] = "Virginie-Occidentale";
    ProvinceStateArray[61][1] = "USA";
    ProvinceStateArray[62][0] = "Wisconsin";
    ProvinceStateArray[62][1] = "USA";
    ProvinceStateArray[63][0] = "Wyoming";
    ProvinceStateArray[63][1] = "USA";

    var province = document.getElementById('app_province').selectedIndex;
    // Get the index of the province selected.
    /* var provinceIndex = 0;
    for (j=0; j<ProvinceStateArray.length; ++j) {
        if (ProvinceStateArray[j][0] == document.getElementById('province').value) {
            provinceIndex = j;
        }
    } */
		if (document.getElementById('cvfirstName').value != "") {  
		// Validate Resume Uploader.
		if (document.getElementById('cvfirstName').value == "") {
	    	isValid = false;
            document.getElementById('cvnullFirstNameError').style.display = "block";
        } else {
            document.getElementById('cvnullFirstNameError').style.display = "none";
        }

        // Last name validation.
        if (document.getElementById('cvlastName').value == "") {
            isValid = false;
            document.getElementById('cvnullLastNameError').style.display = "block";
        } else {
            document.getElementById('cvnullLastNameError').style.display = "none";
        }

        // Address validation.
        if (document.getElementById('cvaddress').value == "") {
            isValid = false;
            document.getElementById('cvnullAddressError').style.display = "block";
        } else {
            document.getElementById('cvnullAddressError').style.display = "none";
        }

        // City validation.
        if (document.getElementById('cvcity').value == "") {
            isValid = false;
            document.getElementById('cvnullCityError').style.display = "block";
        } else {
            document.getElementById('cvnullCityError').style.display = "none";
        }

        // Postal code validation.
        if (document.getElementById('cvpostalCode').value == "") {
            isValid = false;
            document.getElementById('cvnullPostalCodeError').style.display = "block";
        } else {
            if (ProvinceStateArray[province][1] == 'CAN') {
                if (isValidPostalCode(document.getElementById('cvpostalCode').value)) {
                    document.getElementById('cvinvalidPostalCodeError').style.display = "none";
                } else {
                    isValid = false;
                    document.getElementById('cvinvalidPostalCodeError').style.display = "block";
                }
            } else if (ProvinceStateArray[province][1] == 'USA') {
                if (isValidZipCode(document.getElementById('cvpostalCode').value)) {
                    document.getElementById('cvinvalidPostalCodeError').style.display = "none";
                } else {
                    isValid = false;
                    document.getElementById('cvinvalidPostalCodeError').style.display = "block";
                }
            }
            document.getElementById('cvnullPostalCodeError').style.display = "none";
        }

        // Email validation.
        if (!document.getElementById('cvemail').value == "") {
            if (!isValidEmail(document.getElementById('cvemail').value)) {
                isValid = false;
                document.getElementById('cvinvalidEmailError').style.display = "block";
            } else {
                document.getElementById('cvinvalidEmailError').style.display = "none";
            }
            document.getElementById('cvnullEmailError').style.display="none";
        }
        else {
            isvalid = false;
            document.getElementById('cvnullEmailError').style.display= "block";
        }

        // Phone validation.
        if (document.getElementById('cvphone').value == "") {
            isValid = false;
            document.getElementById('cvnullPhoneError').style.display = "block";
        } else {
            document.getElementById('cvnullPhoneError').style.display = "none";
            if (!validatePhone(document.getElementById('cvphone'))) {
                isValid = false;
                document.getElementById('cvinvalidPhoneError').style.display = "block";
            } else {
                document.getElementById('cvinvalidPhoneError').style.display = "none";
            }

        }

        // Other Phone validation.
		if(document.getElementById('cvotherPhone').value != ""){
			if (!validatePhone(document.getElementById('cvotherPhone'))) {
				isValid = false;
				document.getElementById('cvinvalidOtherPhoneError').style.display = "block";
			} else {
				document.getElementById('cvinvalidOtherPhoneError').style.display = "none";
			}
		} else {
			document.getElementById('cvinvalidOtherPhoneError').style.display = "none";
		}
	 
	 
		if (!isValidWordOrPdf(document.getElementById('coverUpload').value)) {
            isValid = false;
            document.getElementById('invalidFileTypeError').style.display = "block";
        } else {
            document.getElementById('invalidFileTypeError').style.display = "none";
        }
		
		if (!isValidWordOrPdf(document.getElementById('resumeUpload').value)) {
            isValid = false;
            document.getElementById('invalidFileTypeError1').style.display = "block";
        } else {
            document.getElementById('invalidFileTypeError1').style.display = "none";
        }	 
	/*	if (document.getElementById('resumeLocations').value == '') { 		 
			isValid = false; 		 
			document.getElementById('resumeLocationsError').style.display = "block"; 		 
		} else { 		 
			document.getElementById('resumeLocationsError').style.display = "none"; 		 
		} 		 
		if (document.getElementById('resumePosition').value == "") { 		 
			isValid = false; 		 
			document.getElementById('resumePositionError').style.display = "block"; 		 
		} else { 		 
			document.getElementById('resumePositionError').style.display = "none"; 		 
		}*/
		// Position validation.
        if (document.getElementById('cvposition').value == "") {
            isValid = false;
            document.getElementById('cvnullPositionError').style.display = "block";
        } else {
            document.getElementById('cvnullPositionError').style.display = "none";
        }

        // Locations validation.
        if (document.getElementById('cvlocations').value == "") {
            isValid = false;
            document.getElementById('cvnullLocationError').style.display = "block";
        } else {
            document.getElementById('cvnullLocationError').style.display = "none";
        }

	} 		 
	else {
	
        // First name validation.
        if (document.getElementById('firstName').value == "") {
            isValid = false;
            document.getElementById('nullFirstNameError').style.display = "block";
        } else {
            document.getElementById('nullFirstNameError').style.display = "none";
        }

        // Last name validation.
        if (document.getElementById('lastName').value == "") {
            isValid = false;
            document.getElementById('nullLastNameError').style.display = "block";
        } else {
            document.getElementById('nullLastNameError').style.display = "none";
        }

        // Address validation.
        if (document.getElementById('address').value == "") {
            isValid = false;
            document.getElementById('nullAddressError').style.display = "block";
        } else {
            document.getElementById('nullAddressError').style.display = "none";
        }

        // City validation.
        if (document.getElementById('city').value == "") {
            isValid = false;
            document.getElementById('nullCityError').style.display = "block";
        } else {
            document.getElementById('nullCityError').style.display = "none";
        }

        // Postal code validation.
        if (document.getElementById('postalCode').value == "") {
            isValid = false;
            document.getElementById('nullPostalCodeError').style.display = "block";
        } else {
            if (ProvinceStateArray[province][1] == 'CAN') {
                if (isValidPostalCode(document.getElementById('postalCode').value)) {
                    document.getElementById('invalidPostalCodeError').style.display = "none";
                } else {
                    isValid = false;
                    document.getElementById('invalidPostalCodeError').style.display = "block";
                }
            } else if (ProvinceStateArray[province][1] == 'USA') {
                if (isValidZipCode(document.getElementById('postalCode').value)) {
                    document.getElementById('invalidPostalCodeError').style.display = "none";
                } else {
                    isValid = false;
                    document.getElementById('invalidPostalCodeError').style.display = "block";
                }
            }
            document.getElementById('nullPostalCodeError').style.display = "none";
        }

        // Email validation.
        if (!document.getElementById('email').value == "") {
            if (!isValidEmail(document.getElementById('email').value)) {
                isValid = false;
                document.getElementById('invalidEmailError').style.display = "block";
            } else {
                document.getElementById('invalidEmailError').style.display = "none";
            }
            document.getElementById('nullEmailError').style.display="none";
        }
        else {
            isvalid=false;
            document.getElementById('nullEmailError').style.display= "block";
        }

        // Phone validation.
        if (document.getElementById('phone').value == "") {
            isValid = false;
            document.getElementById('nullPhoneError').style.display = "block";
        } else {
            document.getElementById('nullPhoneError').style.display = "none";
            if (!validatePhone(document.getElementById('phone'))) {
                isValid = false;
                document.getElementById('invalidPhoneError').style.display = "block";
            } else {
                document.getElementById('invalidPhoneError').style.display = "none";
            }

        }

        // Other Phone validation.
		if(document.getElementById('otherPhone').value != ""){
			if (!validatePhone(document.getElementById('otherPhone'))) {
				isValid = false;
				document.getElementById('invalidOtherPhoneError').style.display = "block";
			} else {
				document.getElementById('invalidOtherPhoneError').style.display = "none";
			}
		} else {
			document.getElementById('invalidOtherPhoneError').style.display = "none";
		}

        // Contact Phone validation.
        if (!document.getElementById('prevWorkPara1') && !document.getElementById('noEmploymentHistory').checked) {
            if (!validatePhone(document.getElementById('contactPhone'))){
                isValid = false;
                document.getElementById('phoneError').style.display = "block";
            } else {
				document.getElementById('phoneError').style.display = "none";
            }
        }else  if (!document.getElementById('prevWorkPara1') && document.getElementById('noEmploymentHistory').checked) {
			document.getElementById('phoneError').style.display = "none";
		}


        // Availability validation.
        if (document.getElementById('mondayStart').value == "" ||
            document.getElementById('mondayEnd').value == "" ||
            document.getElementById('tuesdayStart').value == "" ||
            document.getElementById('tuesdayEnd').value == "" ||
            document.getElementById('wednesdayStart').value == "" ||
            document.getElementById('wednesdayEnd').value == "" ||
            document.getElementById('thursdayStart').value == "" ||
            document.getElementById('thursdayEnd').value == "" ||
            document.getElementById('fridayStart').value == "" ||
            document.getElementById('fridayEnd').value == "" ||
            document.getElementById('saturdayStart').value == "" ||
            document.getElementById('saturdayEnd').value == "" ||
            document.getElementById('sundayStart').value == "" ||
            document.getElementById('sundayEnd').value == "") {
            isValid = false;
            document.getElementById('nullAvailabilityError').style.display = "block";
        } else {
            document.getElementById('nullAvailabilityError').style.display = "none";
        }

        // Position validation.
        if (document.getElementById('position').value == "") {
            isValid = false;
            document.getElementById('nullPositionError').style.display = "block";
        } else {
            document.getElementById('nullPositionError').style.display = "none";
        }

        // Locations validation.
        if (document.getElementById('locations').value == "") {
            isValid = false;
            document.getElementById('nullLocationError').style.display = "block";
        } else {
            document.getElementById('nullLocationError').style.display = "none";
        }

        // Cover Letter Upload validation.
/*      if (document.getElementById('coverLetterUpload').value != "") {
            if (!isValidWordOrPdf(document.getElementById('coverLetterUpload').value)) {
                isValid = false;
                document.getElementById('invalidFileTypeError2').style.display = "block";
            } else {
                document.getElementById('invalidFileTypeError2').style.display = "none";
            }
        }*/

        // Locations validation.
        if (document.getElementById('signature').value == "") {
            isValid = false;
            document.getElementById('signatureError').style.display = "block";
        } else {
            document.getElementById('signatureError').style.display = "none";
        }

        // Employment History calidation.
        if (!document.getElementById('prevWorkPara1') && !document.getElementById('noEmploymentHistory').checked){
            isValid = false;
            document.getElementById('prevWorkError').style.display = "block";
        } else {
            document.getElementById('prevWorkError').style.display = "none";
        }
        // Relocate validation.
        if (document.getElementById('willingToMoveYes').checked == false && document.getElementById('willingToMoveNo').checked == false) {
            isValid = false;
            document.getElementById('willingToMoveError').style.display = "block";
        } else {
            document.getElementById('willingToMoveError').style.display = "none";
        }
        // workSundays validation.
        if (document.getElementById('workSundaysYes').checked == false && document.getElementById('workSundaysNo').checked == false) {
            isValid = false;
            document.getElementById('workSundaysError').style.display = "block";
        } else {
            document.getElementById('workSundaysError').style.display = "none";
        }
        // footwear validation.
        if (document.getElementById('footwearYes')) {
            if (document.getElementById('footwearYes').checked == false && document.getElementById('footwearNo').checked == false) {
                isValid = false;
                document.getElementById('footwearError').style.display = "block";
            } else {
                document.getElementById('footwearError').style.display = "none";
            }
        }
        // fortylbs validation.
        if (document.getElementById('fortylbsYes')) {
            if (document.getElementById('fortylbsYes').checked == false && document.getElementById('fortylbsNo').checked == false) {
                isValid = false;
                document.getElementById('fortylbsError').style.display = "block";
            } else {
                document.getElementById('fortylbsError').style.display = "none";
            }
        }
        // workCanada validation.
        if (document.getElementById('workCanadaYes').checked == false && document.getElementById('workCanadaNo').checked == false) {
            isValid = false;
            document.getElementById('workCanadaError').style.display = "block";
        } else {
            document.getElementById('workCanadaError').style.display = "none";
        }
        // pardon validation.
        if (document.getElementById('pardonYes').checked == false && document.getElementById('pardonNo').checked == false) {
            isValid = false;
            document.getElementById('pardonError').style.display = "block";
        } else {
            document.getElementById('pardonError').style.display = "none";
        }
        // refPresentLastEmp validation.
        if (document.getElementById('refPresentLastEmpYes').checked == false && document.getElementById('refPresentLastEmpNo').checked == false) {
            isValid = false;
            document.getElementById('refPresentLastEmpError').style.display = "block";
        } else {
            document.getElementById('refPresentLastEmpError').style.display = "none";
        }
        // refFormerEmps validation.
        if (document.getElementById('refFormerEmpsYes').checked == false && document.getElementById('refFormerEmpsNo').checked == false) {
            isValid = false;
            document.getElementById('refFormerEmpsError').style.display = "block";
        } else {
            document.getElementById('refFormerEmpsError').style.display = "none";
        }
		if(document.getElementById('recaptcha_response_field').value == '') {
			isValid = false;
			document.getElementById('recaptchaError').style.display = "block";
		} else {
			document.getElementById('recaptchaError').style.display = "none";
		}
	}
    return isValid;
}

function submitForm() {
    var sendEmail = validateForm();
    if (sendEmail) {
        // Send some email.
        document.getElementById('application').submit();
    }
}

function isValidEmail(str) {
    var isValid = false;
    if ((str.lastIndexOf(".") > str.indexOf("@")) && (str.indexOf("@") > 0)) {
        isValid = true;
    }
    return isValid;
}

function isValidWordOrPdf(value) {
    var ext = getExtension(value);
    //ext = ext.substring(ext.length-3,ext.length);
    ext = ext.toLowerCase();

	if ((ext != 'pdf') && (ext != 'doc') && (ext != 'docx')){
        return false;
    } else {
        return true;
    }

}

function getExtension(filename){
	var ext = /^.+\.([^.]+)$/.exec(filename);
  	return ext == null ? "" : ext[1];
}

function isValidPostalCode(code) {
    var isValid = code.match(/^[a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9]$/);
    return isValid;
}

function isValidZipCode(code) {
    isValid = false;
    var fiveDigit = code.match(/^[0-9]{5}$/);
    var nineDigit = code.match(/^[0-9]{5}-[0-9]{4}$/);
    if (fiveDigit || nineDigit) {
        isValid = true;
    }
    return isValid;
}

function authorizeForm() {
    var authorize = document.getElementById('authorize').checked;
    var consent = document.getElementById('consent').checked;
    var declare = document.getElementById('declare').checked;

    if (authorize && consent && declare) {
        document.getElementById('submitResume').disabled = false;
    }
    else {
        document.getElementById('submitResume').disabled = true;
    }
}

