﻿function validateEmploymentDate(dateValue) {
	if (isNullOrEmpty(dateValue)) {
		return false;
	} else {
		return validateDate(dateValue);
	}
}

function validateReference(nameId, cityId, stateId, phoneId, extensionId, companyId, relationshipId) {
    var hasMinimum = !isNullOrEmpty($(nameId).value) && !isNullOrEmpty($(cityId).value) && !isNullOrEmpty($(phoneId).value) && $(stateId).selectedIndex > 0 && !isNullOrEmpty($(relationshipId).value);

    return hasMinimum || isBlankReference(nameId, cityId, stateId, phoneId, extensionId, companyId, relationshipId);
}

function isBlankReference(nameId, cityId, stateId, phoneId, extensionId, companyId, relationshipId) {
    return isNullOrEmpty($(nameId).value) && isNullOrEmpty($(cityId).value) && $(stateId).selectedIndex == 0 &&
            isNullOrEmpty($(phoneId).value) && isNullOrEmpty($(extensionId).value) && isNullOrEmpty($(companyId).value) &&
            isNullOrEmpty($(relationshipId).value);
}

function validateEmployer(fromId, toId, employerNameId, cityId, stateId, canContactYesId, canContactNoId, positionId, salaryId, salaryTypeId, supervisorId, phoneId, extensionId, reasonId, requireToDate) {
	var hasMinimum = !isNullOrEmpty($(fromId).value) &&
					(!requireToDate || !isNullOrEmpty($(toId).value)) &&
					!isNullOrEmpty($(employerNameId).value) &&
					!isNullOrEmpty($(cityId).value) &&
					!isNullOrEmpty($(positionId).value) &&
					!isNullOrEmpty($(supervisorId).value) && 
					$(stateId).selectedIndex > 0 &&
					!isNullOrEmpty($(reasonId).value) &&
					specifiedCanContactIfPossible(canContactYesId, canContactNoId);
					
	return hasMinimum || isBlankEmployer(fromId, toId, employerNameId, cityId, stateId, canContactYesId, canContactNoId, positionId, salaryId, salaryTypeId, supervisorId, phoneId, extensionId, reasonId);
}

function specifiedCanContactIfPossible(canContactYesId, canContactNoId) {
	var yesOption = $(canContactYesId);
	var noOption = $(canContactNoId);

	if (yesOption == null || noOption == null) {
		return true;
	} else if (yesOption.disabled || yesOption.checked) {
		return true;
	} else if (noOption.disabled || noOption.checked) {
		return true;
	} else {
		return false;
	}
}

function isBlankEmployer(fromId, toId, employerNameId, cityId, stateId, canContactYesId, canContactNoId, positionId, salaryId, salaryTypeId, supervisorId, phoneId, extensionId, reasonId) {
	return isNullOrEmpty($(fromId).value) && isNullOrEmpty($(toId).value) && isNullOrEmpty($(employerNameId).value) &&  
			isNullOrEmpty($(cityId).value) && $(stateId).selectedIndex == 0 &&  isNullOrEmpty($(positionId).value) &&
            isNullOrEmpty($(salaryId).value) && isNullOrEmpty($(supervisorId).value) && isNullOrEmpty($(phoneId).value) && 
            isNullOrEmpty($(extensionId).value) &&  isNullOrEmpty($(reasonId).value);
}

function validateSchoolInformation(educationTypeId, graduatedYesId, graduatedNoId, nameId, cityId, stateId, subjectsStudiedId) {
	var educationLevel = parseInt($(educationTypeId).value);

	var hasMinimum = $(educationTypeId).selectedIndex > 0 &&
					($(graduatedYesId).checked || $(graduatedNoId).checked) &&
					!isNullOrEmpty($(nameId).value) &&
					!isNullOrEmpty($(cityId).value) &&
					$(stateId).selectedIndex > 0 &&
					(educationLevel == 2 || educationLevel == 3 || !isNullOrEmpty($(subjectsStudiedId).value));

    return hasMinimum; /*|| isBlankSchool(educationTypeId, graduatedYesId, graduatedNoId, nameId, cityId, stateId, subjectsStudiedId);*/
}

function isBlankSchool(educationTypeId, graduatedYesId, graduatedNoId, nameId, cityId, stateId, subjectsStudiedId) {
	return $(educationTypeId).selectedIndex == 0 &&
			!isChecked(graduatedYesId) &&
			!isChecked(graduatedNoId) &&
			isNullOrEmpty($(nameId).value) && 
			isNullOrEmpty($(cityId).value) &&
			isNullOrEmpty($(subjectsStudiedId).value) && 
			$(stateId).selectedIndex == 0;
}

function isCompleteAddress(street1Id, street2Id, cityId, stateId, zipCodeId, isRequired) {
    var hasCompleteAddress = !isNullOrEmpty($(street1Id).value) && !isNullOrEmpty($(cityId).value) && $(stateId).selectedIndex > 0 && !isNullOrEmpty($(zipCodeId).value);
    return hasCompleteAddress || (!isRequired && isBlankAddress(street1Id, street2Id, cityId, stateId, zipCodeId));
}

function isCompletePhoneNumber(phoneNumberId, phoneNumberTypeId, isRequired)
{
    var hasCompletePhoneNumber = !isNullOrEmpty($(phoneNumberId).value) && $(phoneNumberTypeId).selectedIndex > 0;
    return hasCompletePhoneNumber || (!isRequired && isBlankPhoneNumber(phoneNumberId, phoneNumberTypeId));
}

function isBlankPhoneNumber(phoneNumberId, phoneNumberTypeId)
{
    return isNullOrEmpty($(phoneNumberId).value) && $(phoneNumberTypeId).selectedIndex == 0
}

function isBlankAddress(street1Id, street2Id, cityId, stateId, zipCodeId) {
    return isNullOrEmpty($(street1Id).value) &&
		isNullOrEmpty($(street2Id).value) &&
		isNullOrEmpty($(cityId).value) &&
		$(stateId).selectedIndex == 0 &&
		isNullOrEmpty($(zipCodeId).value);
}

function validateDate(dateValue) {
	var month = 0;
	var day = 0;
	var year = 0;

	var regExp = /^(\d{1,2}\/){0,1}\d{1,2}\/\d{4}$/;

	if (regExp.exec(dateValue)) {
		var parts = dateValue.split("/");

		if (parts.length == 3) {
			month = parseInt(removeLeadingZero(parts[0]));
			day = parseInt(removeLeadingZero(parts[1]));
			year = parseInt(removeLeadingZero(parts[2]))
		} else if (parts.length == 2) {
			month = parseInt(removeLeadingZero(parts[0]));
			day = 1
			year = parseInt(removeLeadingZero(parts[1]))
		}
	} else {
		return false;
	}

	if (year == 0) {
		return false;
	} else if ((month < 1) || (month > 12)) {
		return false;
	} else if (day < 1) {
		return false;
	}

	/* Validation leap-year / february / day */
	var leap = ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0));

	if (leap && (month == 2) && (day > 29)) {
		return false;
	} else if ((month == 2) && (day > 28) && !leap) {
		return false;
	} else if ((day > 31) && ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12))) {
		return false;
	} else if ((day > 30) && ((month == 4) || (month == 6) || (month == 9) || (month == 11))) {
		return false;
	}

	if (compareDate(month + "/" + day + "/" + year, minDate()) < 0 || this.compareDate(month + "/" + day + "/" + year, maxDate()) > 0) {
		return false;
	}

	return true;
}

function minDate() {
	var dateYearsBackward = 80;
	var today = new Date();
	return "01/01/" + (today.getFullYear() - dateYearsBackward);
}

function maxDate() {
	var dateYearsForward = 0;
	var today = new Date();
	return "12/31/" + (today.getFullYear() + dateYearsForward);
}

function compareDate(inDate1, inDate2) {
	/* return values: -1 = date1 < date2, 0 = date1 == date2, 1 = date1 > date2	*/
	var returnVal = 0;

	if (!isNullOrEmpty(inDate1) && !isNullOrEmpty(inDate2)) {
		var date1 = parseDate(inDate1);
		var date2 = parseDate(inDate2);

		if (date1 > date2)
			returnVal = 1;
		else if (date1 < date2)
			returnVal = -1;
		else
			returnVal = 0;
	}

	return returnVal;
}

function parseDate(dateValue) {
	var dateParts = null;

	if (dateValue.indexOf("-") > -1) {
		dateParts = dateValue.split("-");
	} else {
		dateParts = dateValue.split("/");
	}

	if (dateParts[2].length == 2) { //take into accout for 2 digit year
		dateParts[2] = "20" + dateParts[2];
	}

	var date = new Date();
	date.setFullYear(dateParts[2], dateParts[0] - 1, dateParts[1]);

	return date;
}

function removeLeadingZero(value) {
	var modifiedValue = value;

	while (modifiedValue.length > 1 && modifiedValue.indexOf("0") == 0) {
		modifiedValue = modifiedValue.substring(1);
	}

	return modifiedValue;
}


function $(elementId) {
    return document.getElementById(elementId);
}

function isChecked(elementId) {
    return $(elementId).checked;
}

function isNullOrEmpty(value) {
    return value == null || value == "";
}


