﻿// Disables all the controls supplied in the "controls" array
function DisableControls (controls, disable)
    {
        for (i=0; i < controls.length; i++)
        {
            var control = document.getElementById(controls[i]);
            control.enabled = !disable;
            control.disabled = disable;
            if (control.tagName == "INPUT")
            {
                if (control.type == "text")
                {
                    if (disable)
                    {
                        control.className = "inptTxt disabled";
                        control.value = "";
                    }
                    else
                        control.className = "inptTxt norm";
                }
                else if (control.type == "radio")
                {
                    if (disable)
                        control.checked = false;
                }
            }
            // if disable = true, check for inner controls to reset theyr values
            else
            {
                var childControls = control.getElementsByTagName('input');
                if (childControls.length > 0)
                {
                    for (j=0; j < childControls.length; j++)
                    {
                        childControls[j].enabled = !disable;
                        childControls[j].disabled = disable;
            
                        if (disable)
                        {
                            if (childControls[j].tagName == "INPUT" && childControls[j].type == "text")
                                childControls[j].value = "";
                            else if (childControls[j].tagName == "INPUT" && childControls[j].type == "radio")
                                childControls[j].checked = false;
                        }
                    }
                }
            }
        }
    }

// DropDownDatePicker

function DropdownDatePicker(month, day, year, hasLeadingZero){
	var me = this;
	this.month = month;
	this.day = day;
	this.year = year;
	if (hasLeadingZero==null || typeof hasLeadingZero=="undefined") hasLeadingZero=false;
	this.hasLeadingZero = hasLeadingZero;
	this.setWeekend = false;
	
	this.populateDate = function(){
		var dSelYear = me.year.options[me.year.selectedIndex].value;
		var dSelMonth = me.month.options[me.month.selectedIndex].value;
		var timeA = new Date(dSelYear,dSelMonth,1); //get date of first day of next month
		var timeDifference = timeA - 86400000;//subtract 1 day
		var timeB = new Date(timeDifference);
		var daysInMonth = timeB.getDate();
		prevDaysInMonth = me.day.options.length-1;
		if (daysInMonth < prevDaysInMonth){	//current month's days < previous month's
			if (me.day.selectedIndex-1>=daysInMonth-1){
				me.day.selectedIndex = daysInMonth;	//select last day of the current month if previous month's selected day is > current month's
			}
			me.day.options.length = daysInMonth+1;
   		}
   		else if (daysInMonth > prevDaysInMonth){	//current month's days > previous month's
			var sDay;
			for (var i = prevDaysInMonth; i < (daysInMonth); i++) {
				sDay = ((i+1)<10 && me.hasLeadingZero)?"0"+(i+1):i+1;
				me.day.options[i+1] = new Option(sDay,sDay);
			}		
	    }
		if (me.setWeekend){
			me.setWeekendStyleOn(me.callbackOn);
		}
	}

	this.setDisplayMonths = function(mode, isUpperCase, arrMonth){
		switch (mode){
			case 1: //numeric months
				for (var i=0;i<12;i++){
					me.month.options[i] = new Option(((i+1)<10 && me.hasLeadingZero)?"0"+(i+1):i+1, i+1);
				}
				break;
			case 2: //full english month names
				var arrMonth = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
				for (var i=0;i<arrMonth.length;i++){
					me.month.options[i] = new Option((isUpperCase)?arrMonth[i].toUpperCase():arrMonth[i],i+1);
				}
				break;
			case 3: //abbreviated english month names (first 3 letters)
				var arrMonth = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
				for (var i=0;i<arrMonth.length;i++){
					me.month.options[i] = new Option((isUpperCase)?arrMonth[i].toUpperCase():arrMonth[i],i+1);
				}
				break;
			case 4: //customized month names
				if (arrMonth==null || typeof arrMonth=="undefined"){ //default is full english month names if arrMonth is invalid
					var arrMonth = new Array("January","February","March","April","May","June","July","August","September","October","November","December");				
				}
				for (var i=0;i<arrMonth.length;i++){
					me.month.options[i] = new Option((isUpperCase)?arrMonth[i].toUpperCase():arrMonth[i],i+1);
				}
				break;
			default: //numeric months
				for (var i=0;i<12;i++){
					me.month.options[i] = new Option(((i+1)<10 && me.hasLeadingZero)?"0"+(i+1):i+1, i+1);
				}
		}		
	}

	this.setDisplayYears = function(fromYear, toYear){
		me.year.length=0;
		for (var i=fromYear;i<=toYear;i++){
			me.year.options[i-fromYear] = new Option(i,i);
		}
	}

	//set default date
	this.setDefaultDate = function(defaultDate){
		if (defaultDate==null || typeof defaultDate=="undefined" || isNaN(defaultDate)){
			defaultDate = new Date();
		}
		me.month.options[defaultDate.getMonth()].selected = true;		//select default month
		me.day.options[defaultDate.getDate()-1].selected = true;		//select default day
		//select default year
		for (var i=0;i<me.year.options.length;i++){
			if (me.year.options[i].value==defaultDate.getFullYear()){
				me.year.selectedIndex = i;
				break;
			}
		}
	}

	//set day as title (title attribute in select and option tags is currently supported only by Gecko)
	//no problem with other browsers as this will be ignored by them
	this.displayDay = function(arrDay){
		if (arrDay==null || typeof arrDay=="undefined"){
			var arrDay = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
		}
		me.arrDay = arrDay;

		//set month select title
		me.month.onmouseover = function(){
			var selectedDate = new Date(me.year.options[me.year.selectedIndex].value, this.selectedIndex, me.day.options[me.day.selectedIndex].value);
			this.title = me.arrDay[selectedDate.getDay()];
		}
		//set month options title
		for (var i=0;i<me.month.options.length;i++){
			me.month.options[i].onmouseover = function(){
				var selectedDate = new Date(me.year.options[me.year.selectedIndex].value, this.value-1, me.day.options[me.day.selectedIndex].value);
				this.title = me.arrDay[selectedDate.getDay()];
			}
		}

		//set day select title
		me.day.onmouseover = function(){
			var selectedDate = new Date(me.year.options[me.year.selectedIndex].value, me.month.selectedIndex, this.options[this.selectedIndex].value);
			this.title = me.arrDay[selectedDate.getDay()];
		}
		//set day options title
		for (var i=0;i<me.day.options.length;i++){
			me.day.options[i].onmouseover = function(){
				var selectedDate = new Date(me.year.options[me.year.selectedIndex].value, me.month.selectedIndex, this.value);
				this.title = me.arrDay[selectedDate.getDay()];
			}
		}

		//set year select title
		me.year.onmouseover = function(){
			var selectedDate = new Date(me.year.options[me.year.selectedIndex].value, this.selectedIndex, me.day.options[me.day.selectedIndex].value);
			this.title = me.arrDay[selectedDate.getDay()];
		}
		//set year options title
		for (var i=0;i<me.year.options.length;i++){
			me.year.options[i].onmouseover = function(){
				var selectedDate = new Date(this.value, me.month.selectedIndex, me.day.options[me.day.selectedIndex].value);
				this.title = me.arrDay[selectedDate.getDay()];
			}

		}
	}

	this.setWeekendStyleOn = function(callbackFunc){
		me.callbackOn = callbackFunc;
		me.setWeekend = true;
		for (var i=0;i<me.day.options.length;i++){
			var date = new Date(me.year.options[me.year.selectedIndex].value, me.month.selectedIndex, i+1);
			var day = date.getDay();
			if (day==0 || day==6){
				me.callbackOn(me.day.options[i]);
			}
			else{
				me.callbackOff(me.day.options[i]);
			}

		}
	}

	this.setWeekendStyleOff = function(callbackFunc){
		me.callbackOff = callbackFunc;	
	}
		
	
	//set onchange handler
	var monthChange = this.month.onchange;
	if (monthChange){
		this.month.onchange = function(){
			me.populateDate();
			monthChange();
		}
	}
	else{
		this.month.onchange = this.populateDate;
	}
	var yearChange = this.year.onchange;
	if (yearChange){
		this.year.onchange = function(){
			me.populateDate();
			yearChange();
		}
	}
	else{
		this.year.onchange = this.populateDate;	
	}
}


// DateInterval control
function DateIntervalMessage (msgLabel, dateFrom, dateTill, strings)
{
    var tMsgLabel = document.getElementById(msgLabel);
    var tDateFrom = document.getElementById(dateFrom);
    var tDateTill = document.getElementById(dateTill);
    
    var toolTipText = "";

    if (tDateFrom.value != "" && tDateTill.value != "")
        toolTipText = tDateFrom.value + " - " + tDateTill.value;
    else if (tDateFrom.value != "" && tDateTill.value == "")
        toolTipText = strings[2] + " " + tDateFrom.value;
    else if (tDateFrom.value == "" && tDateTill.value != "")
        toolTipText = strings[3] + " " + tDateTill.value;

    if (toolTipText == "")
    {
        //tMsgLabel.firstChild.data = strings[0];
        tMsgLabel.value = strings[0];
        tMsgLabel.title = "";
    }
    else
    {
        //tMsgLabel.firstChild.data = strings[1];
        tMsgLabel.value = strings[1];
        tMsgLabel.title = toolTipText;
    }
}

function ValidateDDLDateMain (source, arguments)
{
    var ddldatepicker = document.getElementById(source.getAttribute('DDLDatePickerID'));
    
    var ddlYear = document.getElementById(ddldatepicker.id + "_year");
    var ddlMonth = document.getElementById(ddldatepicker.id + "_month");
    var ddlDay = document.getElementById(ddldatepicker.id + "_day");

    if (ddlYear.selectedIndex == 0 || ddlMonth.selectedIndex == 0 || ddlDay.selectedIndex == 0) {
        if (ddlYear.selectedIndex == 0)
            ddlYear.className += " validationError";
        if (ddlMonth.selectedIndex == 0)
            ddlMonth.className += " validationError";
        if (ddlDay.selectedIndex == 0)
            ddlDay.className += " validationError";
        return null;
    }
    else
        return new Date(parseInt(ddlYear.options[ddlYear.selectedIndex].text),
            parseInt(ddlMonth.options[ddlMonth.selectedIndex].text) - 1,
            parseInt(ddlDay.options[ddlDay.selectedIndex].text));
}

function ValidateDDLDate (source, arguments)
{
//    var ddldatepicker = document.getElementById(source.getAttribute('DDLDatePickerID'));
//    
//    var ddlYear = document.getElementById(ddldatepicker.id + "_year");
//    var ddlMonth = document.getElementById(ddldatepicker.id + "_month");
//    var ddlDay = document.getElementById(ddldatepicker.id + "_day");
//    
//    if (ddlYear.selectedIndex == 0 || ddlMonth.selectedIndex == 0 || ddlDay.selectedIndex == 0)
//        arguments.IsValid = false;
//    else
//        arguments.IsValid = true;
    if (ValidateDDLDateMain(source, arguments) == null)
        arguments.IsValid = false;
    else
        arguments.IsValid = true;
}

function ValidateDDLDateLessThanToday (source, arguments)
{
    var selectedDate = ValidateDDLDateMain(source, arguments);
    if (selectedDate != null)
    {
        var now = new Date();
        var diff = now.getTime() - selectedDate.getTime();
        
        if (diff >= 0)
            arguments.IsValid = true;
        else
            arguments.IsValid = false;
    }
    else
        arguments.IsValid = false;
}

function ValidateDDLDateMoreThanToday(source, arguments) {
    var selectedDate = ValidateDDLDateMain(source, arguments);
    if (selectedDate != null) {
        var now = new Date();
        var diff = selectedDate.getTime() - now.getTime();

        if (diff >= 0)
            arguments.IsValid = true;
        else
            arguments.IsValid = false;
    }
    else
        arguments.IsValid = false;
}

function StringToInt(stringNumber)
{
    if (stringNumber.substring(0,1) == "0")
        stringNumber = stringNumber.substring(1,2);
    
    return parseInt(stringNumber);
}

function ValidatePID(code)
{
    var rx = new RegExp("^[3-6]\\d{2}[0|1]\\d[0-3]\\d{5}$");
    if (!code.match(rx))
        return false;
    
    var i,a,b,c,d,e;
    var s = new String(code);
    d=0;
    e=0;
    b=1;
    c=3;
    
    for (i=0;i<10;i++)
    {
        a=s.charAt(i);
        d=d+(b*a);
        e=e+(c*a);
        b=b+1;
        
        if (b==10)
            b=1;
            
        c=c+1;
        
        if (c==10)
            c=1;
    }
    
    d=d % 11;
    e=e % 11;
    
    if (d==10)
    {
        if (e==10)
            i=0;
        else
            i=e;
    }
    else
        i=d;
        
    if (s.charAt(10)==i)
        return true;
    else
        return false;
}

function ValidatePIDEvent(source, arguments) {
    if (ValidatePID(arguments.Value)) {
        var s = arguments.Value;
        var year = StringToInt(s.substring(1, 3));
        var month = StringToInt(s.substring(3, 5));
        var day = StringToInt(s.substring(5, 7));

        switch (s.charAt(0)) {
            case "3":
                year = 1900 + year;
                break;
            case "4":
                year = 1900 + year;
                break;
            case "5":
                year = 2000 + year;
                break;
            case "6":
                year = 2000 + year;
                break;
        }

        var now = new Date();
        var birth = new Date(year, month - 1, day);
        var tYear = 1000 * 60 * 60 * 24 * 365.25;

        var age = (now.getTime() - birth.getTime()) / tYear;
        age = Math.round(age * 100) / 100;

        if (age < 14)
            arguments.IsValid = false;
        else
            arguments.IsValid = true;
    }
    else
        arguments.IsValid = false;
}

