/*


Java script Libariries
*/


function validateNEQ(number)
{
    var regExp = /[0-9]{8}/;
    return number.search(regExp) == -1;

}


function validateSIN(number)
{
    var check = "";
    var digits = new Array(30);
    var counter = 0;
    var doubleAdd = new Array(0, 2, 4, 6, 8 , 1, 3, 5, 7, 9);
    
    // fix it later!

    return false;
    
    for( i = 0 ; i < number.length; i ++ ) {
        var value = parseInt(number.charAt(i));
        if ( value >=0 && value <=9 ) {
            if ( counter < 30 ) {
                if ( counter == 1 || counter == 3 || counter == 5 || counter == 7) {
                    digits[counter] = doubleAdd[value];
                }
                else {
                    digits[counter] = value;
                }
                counter ++;
            }
        }
    }
    if (counter == 9 ) {
        var total = 0;
        for ( var i = 0 ; i < counter ; i ++ ) {
            total += digits[i];
        }
        if ( total == 50 ) {
            return false;
        }
    }
    return true;
}

function checkDuplicateName(form, nameStub)
{
    var regNameFirst = new RegExp(nameStub + "_First");
    var regNameLast = new RegExp(nameStub + "_Last");
    var regNameFull = new RegExp(nameStub + "_Name");
    names = new Array(100);
    var namesLength = 0;
    var first = "";
    for ( var i = 0 ; i < form.elements.length; i ++ ) {
        if ( form.elements[i].name.search(regNameFirst) != -1 ) {
            first = form.elements[i].value;
        }
        if ( form.elements[i].name.search(regNameLast) != -1 ) {
            var name = first + " " + form.elements[i].value;
            names[namesLength++] = name.toUpperCase();
            first = "";
        }
        if ( form.elements[i].name.search(regNameFull) != -1 ) {
            var name = form.elements[i].value;
            names[namesLength++] = name.toUpperCase();
        }
    }
    for ( var i = 0; i < namesLength ; i++ ) {
        var count = 0;
        for ( var j = 0; j < namesLength ; j++ ) {
            if ( names[i] == names[j] ) {
                count ++;
            }
        }
        if ( count > 1 ) {
            return true;
        }
    }
    return false;
}


function onProvinceStateChange(form, item)
{
    var textBoxName = item.name.replace(/_ProvinceStateId/, '_ProvinceState');
    if ( form.elements[textBoxName] ) {
        form.elements[textBoxName].disabled = (item.value != 77);
    }
}


function onLoadProvinceStateChange()
{
    var form = document.forms[0];
    if ( form != null ) {
        for( var i = 0; i < form.elements.length; i++ ) {
            var name = form.elements[i].name;
            if ( name.search(/_ProvinceStateId/) > 0 ) {
                onProvinceStateChange(form, form.elements[name]);
            }
        }
    }
}


function directorCount(form)
{
    var count = 0;
    for ( var i = 0 ; i < form.elements.length; i ++ ) {
        if ( form.elements[i].name.search(/DirectorName_First/) != -1 ) {
            count ++;
        }
    }
    return count;
}

function checkOfficerAppointments(form)
{
    var isPresidentCount = 0;
    var isVicePresidentCount = 0;
    var isSecretaryCount = 0;
    var isTreasurerCount = 0;

    var nameExp = /OfficerType/;
    for ( var i=0 ; i < form.elements.length; i++ ) {
        if ( form.elements[i].name.search(nameExp) != -1 ) {
            var value = "";
            if (form.elements[i].type == "hidden" ) {
                value = form.elements[i].value;
            }
            else {
                if ( !form.elements[i].disabled && form.elements[i].checked ) {
                    value = form.elements[i].value;
                }
            }
            if ( value == "PR" ) {
                isPresidentCount ++;
            }
            if ( value == "VP" ) {
                isVicePresidentCount ++;
            }
            if ( value == "SE" || value == 'ST') {
                isSecretaryCount ++;
            }
            if ( value == "TR" || value == 'ST') {
                isTreasurerCount ++;
            }
        }
    }
    if ( isPresidentCount == 0 ) {
        alert("At least one person must be a president");
        return false;
    }
    if ( isPresidentCount > 1 || isVicePresidentCount > 1 ) {
        alert(isPresidentCount);
        alert("You can only have one President and Vice President");
        return false;
    }

    if ( isSecretaryCount == 0 ) {
        alert("At least one person must be a secretary");
        return false;
    }
    if ( isSecretaryCount  > 1 ) {
        alert("You can only have one Secretary");
        return false;
    }
    if ( isTreasurerCount  > 1 ) {
        alert("You can only have one Treasurer");
        return false;
    }
    return true;
}



function checkDirectorResidentCount(form)
{
    var isResidentCount = 0;
    var directorCount = 0;
    var nameExp = /IsResident/;
    for ( var i=0 ; i < form.elements.length; i++ ) {
        if ( form.elements[i].name.search(nameExp) != -1 ) {
            if ( form.elements[i].checked ) {
                isResidentCount ++;
            }
            directorCount ++;
        }
    }
    if ( isResidentCount == 0 ) {
        alert("At least one person must be a canadian resident");
        return false;
    }
    if ( directorCount > 4 ) {
        if ( isResidentCount < (directorCount / 3) ) {
            alert("Majority of the directors must be a canadian resident");
            return false;
        }
    }
    return true;
}


function PadToString(number, pad, length)
{
    result = String(number);
    for ( var i = 0 ; i < length; i ++ ) {
        result = pad + result;
    }
    return result.substr(result.length - length, length);
}

function SetDateEditValue(form, obj, toName)
{
    var dateText = form.elements[toName].value;

    var name = obj.name.replace(/_(Year|Month|Day)/, "");


    var yearValue = 0;
    var monthValue = 0;
    var dayValue = 0;

    var datePart = /(\d+)-(\d+)-(\d+)/.exec(dateText);
    if ( datePart != null ) {
        yearValue = parseInt(datePart[1]);
        monthValue = parseInt(datePart[2]);
        dayValue = parseInt(datePart[3]);
    }
    if ( obj.name.search(/_Year$/) >= 0)  {
        yearValue = obj.options[obj.selectedIndex].value;
    }

    if ( obj.name.search(/_Month$/) >= 0)  {
        monthValue = obj.options[obj.selectedIndex].value;
    }

    if ( obj.name.search(/_Day$/) >= 0)  {
        dayValue = obj.options[obj.selectedIndex].value;
    }

    dateText = PadToString(yearValue, "0", 4) + "-" + PadToString(monthValue, "0", 2) + "-" + PadToString(dayValue, "0", 2);
    form.elements[toName].value = dateText;
}


function getRadioValue(form, name)
{
    var result = "";
    for( var i = 0; i < form.elements[name].length; i++ ) {
        if ( form.elements[name][i].checked ) {
            result = form.elements[name][i].value;
            break;
        }
    }
    return result;
}


function checkDirectorAppointments(form)
{
    var isPresidentCount = 0;
    var isVicePresidentCount = 0;
    var isSecretaryCount = 0;
    var isTreasurerCount = 0;

    var nameExp = /OfficerType/;
    for ( var i=0 ; i < form.elements.length; i++ ) {
        if ( form.elements[i].name.search(nameExp) != -1 ) {
            var value = "";
            if (form.elements[i].type == "hidden" ) {
                value = form.elements[i].value;
            }
            else {
                if ( !form.elements[i].disabled && form.elements[i].checked ) {
                    value = form.elements[i].value;
                }
            }
            if ( value == "PR" ) {
                isPresidentCount ++;
            }
            if ( value == "VP" ) {
                isVicePresidentCount ++;
            }
            if ( value == "SE" || value == 'ST') {
                isSecretaryCount ++;
            }
            if ( value == "TR" || value == 'ST') {
                isTreasurerCount ++;
            }
        }
    }
    if ( isPresidentCount > 1 || isVicePresidentCount > 1 ) {
        alert(isPresidentCount);
        alert("You can only have one President and Vice President");
        return false;
    }

    if ( isSecretaryCount  > 1 ) {
        alert("You can only have one Secretary");
        return false;
    }
    if ( isTreasurerCount  > 1 ) {
        alert("You can only have one Treasurer");
        return false;
    }
    return true;
}


function validateAddressStreetName(form, objName)
{
	if ( form.elements[objName].value == "" && !form.elements[objName].disabled) {
		alert("Street name is not completed.");
		form.elements[objName].focus();
		return false;
	}
	var poBoxExp = /p\.?o\.? ?box/i;
	if ( form.elements[objName].value.search(poBoxExp) >= 0 ) {
		alert("You cannot provide a P.O. Box address.");
		form.elements[objName].focus();
		return false;
	}
	return true;
}


function validateAddressPostCodeLetter(provinceId, postCode)
{
    var lead = postCode.substr(0, 1);
    var postCodeCheckIds = new Array(14);
    postCodeCheckIds[0] = "";
    postCodeCheckIds[1] = "T";
    postCodeCheckIds[2] = "V";
    postCodeCheckIds[3] = "R";
    postCodeCheckIds[4] = "E";
    postCodeCheckIds[5] = "A";
    postCodeCheckIds[6] = "B";
    postCodeCheckIds[7] = "X";
    postCodeCheckIds[8] = "X";
    postCodeCheckIds[9] = "KLMNP";
    postCodeCheckIds[10] = "C";
    postCodeCheckIds[11] = "GHJ";
    postCodeCheckIds[12] = "S";
    postCodeCheckIds[13] = "Y";

    if ( provinceId == "" || isNaN(provinceId) ) {
        return false;
    }
    var check = postCodeCheckIds[provinceId];
    if ( check != "" ) {
        var re = new RegExp(lead, "i");
        return (check.search(re) != -1 );
    }
    return false;
}


function validateAddressPostZipCode(form, objName, usId, caId)
{

    var countryName = objName.replace(/_PostZipCode/, '_CountryId');
    var provinceStateName = objName.replace(/_PostZipCode/, '_ProvinceStateId');


	if ( form.elements[objName].value == "" ) {
		alert("PostCode/ZipCode is not completed.");
		form.elements[objName].focus();
		return false;
	}
	var countryId = 0;
	if ( form.elements[countryName].type == "hidden" ) {
	   countryId = form.elements[countryName].value;
	}
	else {
    	var countryIndex = form.elements[countryName].selectedIndex;
    	if ( countryIndex > 0 ) {
    		countryId = form.elements[countryName].options[countryIndex].value;
    	}
    }
	if ( countryId == usId ) {
		var zipCodeExp = /\d{5}(-\d{4})?/i;
		if (  form.elements[objName].value.search(zipCodeExp) == -1 ) {
			alert("Invalid zipcode format");
    		form.elements[objName].focus();
			return false;
		}
	}
	else if ( countryId == caId ) {
		var postCodeExp = /[ABCEGHJKLMNPRSTVXY]\d[A-Z] ?\d[A-Z]\d/i;
		var postCode = form.elements[objName].value;
		if (  postCode.search(postCodeExp) == -1 ) {
			alert("Invalid postcode format");
			form.elements[objName].focus();
			return false;
		}
        var provId = form.elements[provinceStateName];
        var provValue = 0;
        if ( provId.type == "hidden" ) {
            provValue = provId.value;
        }
        else {
            if ( provId.selectedIndex >= 0 ) {
                provValue = parseInt(provId.options[provId.selectedIndex].value);
            }
        }
        if ( !validateAddressPostCodeLetter(provValue, postCode) ) {
	      	alert("Invalid postcode");
	       	form.elements[objName].focus();
    		return false;
        }
    }
    return true;
}

function htmlEntities(text)
{
    text = text.replace(/&egrave;/g, "\u00E8");
    text = text.replace(/&eacute;/g, "\u00E9");
    text = text.replace(/&ecirc;/g,  "\u00EA");
    text = text.replace(/&ccedil;/g, "\u00E7");
    text = text.replace(/&ocirc;/g, "\u00F4");
    text = text.replace(/&ugrave;/g, "\u00F9");
    text = text.replace(/&nbsp;/g,  " ");
    return text;
}
