function isDate(sDate)
{
    if (sDate == 'dd/mm/yyyy' || sDate == '')
        return true;
    var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/
    if (re.test(sDate))
    {
        var dArr = sDate.split("/");
        var d = new Date(dArr[2], dArr[1] - 1, dArr[0]);
        return d.getDate() == dArr[0] && d.getMonth() + 1 == dArr[1] && d.getFullYear() == dArr[2];
    }
    else
    {
        return false;
    }
}

function isPastDate(sDate)
{
    var currentDate = new Date();
    var dob = parseDate(sDate);
    if (sDate == 'dd/mm/yyyy' || sDate == '')
        return true;
    if (dob > currentDate)
        return false;
    else
        return true;
}

function ValidDOB()
{
    var txt = document.getElementById('txtDOB');
    if (isDate(txt.value) && isPastDate(txt.value))
    {
        //txt.className = "txtClear";
        hide(true, 'divAnswers');
        hide(true, 'divErrorDOB');
        hide(true, 'divErrorFutureDate');
        return true;        
    }
    else
    {
        if (!isDate(txt.value))
        {
            hideAllAnswers();
            show(true, 'divAnswers');
            show(true, 'divErrorDOB');
            return false;
        }
        if (!isPastDate(txt.value))
        {
            hideAllAnswers();
            show(true, 'divAnswers');
            show(true, 'divErrorFutureDate');
            return false;
        }
    }   
}

function ValidDateRange()
{
    var txtTo = document.getElementById('txtDateTo');
    var txtFrom = document.getElementById('txtDateFrom');
    if (isDate(txtTo.value) && isDate(txtFrom.value))
    {
        hide(true, 'divAnswers');
        hide(true, 'divErrorDateRange');
        if (txtTo.value == 'dd/mm/yyyy' || txtTo.value == '' ||
            txtFrom.value == 'dd/mm/yyyy' || txtFrom.value == '')
            return true;
        if (!isPastDate(txtFrom.value) || !isPastDate(txtTo.value))
        {
            hideAllAnswers();
            show(true, 'divAnswers');
            show(true, 'divErrorFutureDate');
            return false;
        }
        else
        {
            hide(true, 'divErrorFutureDate');
        }
        if (parseDate(txtTo.value) > parseDate(txtFrom.value))
        {                   
            hide(true, 'divErrorRange');
            return true;
        }
        else
        {
            hideAllAnswers();
            show(true, 'divAnswers');
            show(true, 'divErrorRange');
            return false;
        }
    }
    else
    {
        hideAllAnswers();
        show(true, 'divAnswers');
        show(true, 'divErrorDateRange');
        return false;
    }
}
    
function onLHCDateKeyEntered(e, txtCCDateID)
{
    //   var keychar;   
    if (window.event){keynum = e.keyCode; } // IE
    else if (e.which) { keynum = e.which; } // Netscape/Firefox/Opera
    
    txtDate = document.getElementById(txtCCDateID);
    var textLength = txtDate.value.length;
    keychar = convertKeypadChar(keynum);
    //return if keypressed was backspace, tab or any other control key
    if ((keynum > 7 && keynum < 47) || (keynum > 111 && keynum < 124))
    {
        
        var divQ4Display = document.getElementById('divQ4').style.display;
        if (txtCCDateID.match('txtDOB'))
        {
            hideAllAnswers();
            hideAllQuestions();
        }
        return true;
    }

    if(txtDate.value.length == 10)
    {
        var divQ4Display = document.getElementById('divQ4').style.display;
        if (divQ4Display == 'none' || divQ4Display == '')
        {
            if (ValidDOB())
                onQ1Click();
        }
        else
        {
            if (ValidDateRange())
                onQ4Click();
        }        
    }
}




function onQ1Click()
{
    var date = getDate('txtDOB');
    var July1934 = new Date(1934, 7, 1, 0, 0, 0);
    hideAllAnswers();
    if (date <= July1934)
    {
        show(true, 'divAnswers');
        show(true, 'divA1');
    }
    else
    {
        show(true, 'divQ2');
    }
}

function onQ2Click()
{
    var dob = getDate('txtDOB');
    var coverCurrently = getYesNo('rblHospitalCoverCurrently');
    var lbl30Year = document.getElementById('lbl30Year');
    var July1934 = new Date(1934, 7, 1, 0, 0, 0);
    var July1979 = new Date(1979, 7, 1, 0, 0, 0);

    hideAllAnswers();
    clearRadioList('rblHospitalCoverEver');
    clearRadioList('rblHospitalCoverSince');
    document.getElementById('txtDateFrom').value = 'dd/mm/yyyy';
    document.getElementById('txtDateTo').value = 'dd/mm/yyyy';
    if (dob <= July1934)
    {
        show(true, 'divAnswers');
        show(true, 'divA1');
    }
    else
    {
        if (dob >= July1979)
        {
            if (coverCurrently == 'yes')
            {
                show(true, 'divAnswers');
                show(true, 'divA2');
            }
            else
            {
                show(true, 'divAnswers');
                show(true, 'divA3');
            }
        }
        else
        {
            if (coverCurrently == 'yes')
            {
                hide(true, 'divQ3a');
                hide(true, 'divQ4');
                show(true, 'divQ3b');
                lbl30Year.innerHTML = get1JulyYear(dob);
            }
            else
            {
                hide(true, 'divQ3b');
                hide(true, 'divQ4');
                show(true, 'divQ3a');
            }
        }
    }

}



function onQ3aClick()
{
    hideAllAnswers();
    var dob = getDate('txtDOB');
    var coverEver = getYesNo('rblHospitalCoverEver');
    var lblA4 = document.getElementById('lblA4');
    var today = new Date();

    if (coverEver == 'yes')
    {
        show(true, 'divQ4');
    }
    else
    {
        show(true, 'divAnswers');
        show(true, 'divA4');
        hide(true, 'divQ4');
        var loading = (diffInYears(today, dob) - 30) * 2
        if (loading > 70)
            loading = 70;
        lblA4.innerHTML = loading;             
    }
}

function onQ3bClick()
{
    hideAllAnswers();
    var dob = getDate('txtDOB')
    var coverSince = getYesNo('rblHospitalCoverSince');

    if (coverSince == 'yes')
    {
        hide(true, 'divQ4');
        show(true, 'divAnswers');
        show(true, 'divA5');
    }
    else
    {
        hide(true, 'divAnswers');
        show(true, 'divQ4');
    }

}

function onQ4Click()
{
    var txt = document.getElementById('txtDOB');
    if (txt.value == 'dd/mm/yyyy' || txt.value == '')
    {
        txt.focus();
        return;
    }
    var txt = document.getElementById('txtDateFrom');
    if (txt.value == 'dd/mm/yyyy' || txt.value == '')
    {
        txt.focus();
        return;
    }
    var txt = document.getElementById('txtDateTo');
    if (txt.value == 'dd/mm/yyyy' || txt.value == '')
    {
        txt.focus();
        return;
    }
    hideAllAnswers();
    var dob = getDate('txtDOB')
    var from = getDate('txtDateFrom');
    var to = getDate('txtDateTo');
    var today = new Date();
    var loading = 0;
    if (ValidDOB() && ValidDateRange())
    {
        var numOfYearOver30 = diffInYears(today, dob) - 30;
        var peroidWithCover = getPeriodWithCover(from, to);
        if (numOfYearOver30 - peroidWithCover > 0)
            loading = (numOfYearOver30 - peroidWithCover) * 2;

        show(true, 'divAnswers');
        show(true, 'divA6');
        if (loading > 70)
            loading = 70;
        document.getElementById('lblA6').innerHTML = loading;
    }

}

function getPeriodWithCover(from, to)
{
    one_day = 1000 * 60 * 60 * 24;
    one_year = 365;
    var result = (to.getTime() - from.getTime()) / one_day;
    result = result + 1094
    result = Math.floor(result / one_year);
    return result;
}


function get1JulyYear(dob)
{
    var month = dob.getMonth();
    var year = dob.dateAdd('yyyy', 30).getFullYear();
    if (month >= 6)
        return year + 1;
    else
        return year;
}

function diffInYears(date1, date2)
{
    one_year = 1000*60*60*24*365;
    var result = Math.floor((date1.getTime() - date2.getTime()) / one_year);
    return result;
}



function clearRadioList(radioList)
{
    var rl = document.getElementById(radioList);
    if (rl != null)
    {
        var radioItems = rl.getElementsByTagName("input");
        radioItems[0].checked = false;
        radioItems[1].checked = false;
    }
}

function getDate(controlId)
{
    var txtDOB = document.getElementById(controlId);
    if (txtDOB.value != 'dd/mm/yyyy' && txtDOB.value != '' )
    {
        strdate = txtDOB.value.split("/");
        var date = new Date(strdate[2], strdate[1] - 1, strdate[0]);
        if (date != 'NaN')
        {
            return date;
        }
        else
        {
            ValidDOB();
            ValidDateRange();
            return null;                
        }
    }
}

function parseDate(sDate)
{
    if (sDate != 'dd/mm/yyyy' && sDate != '' )
    {
        strdate = sDate.split("/");
        var date = new Date(strdate[2], strdate[1] - 1, strdate[0]);
        if (date != 'NaN')
            return date;
        else
            return null;
    }
}

function getYesNo(radioList)
{
    var rl = document.getElementById(radioList);
    if (rl != null)
    {
        var radioItems = rl.getElementsByTagName("input");
        if (radioItems[0].checked)
            return 'yes';
        else
            return 'no';
    }

}

function hideAllAnswers()
{
    hide(true, 'divAnswers');
    hide(true, 'divA1');
    hide(true, 'divA2');
    hide(true, 'divA3');
    hide(true, 'divA4');
    hide(true, 'divA5');
    hide(true, 'divA6');
    hide(true, 'divA7');
    hide(true, 'divErrorDOB');
    hide(true, 'divErrorDateRange');
}

function hideAllQuestions()
{
    clearRadioList('rblHospitalCoverCurrently');
    clearRadioList('rblHospitalCoverEver');
    clearRadioList('rblHospitalCoverSince');
    document.getElementById('txtDateFrom').value = 'dd/mm/yyyy';
    document.getElementById('txtDateTo').value = 'dd/mm/yyyy';
    hide(true, 'divQ2');
    hide(true, 'divQ3a');
    hide(true, 'divQ3b');
    hide(true, 'divQ4');
}

(function($)
{
    $(function()
    {
        addDatePickerDOB();
        addDatePickerDateTo();
        addDatePickerDateFrom();
    });

    function addDatePickerDOB()
    {
        $('#txtDOB').datepicker({ dateFormat: 'dd/mm/yy',
            buttonImage: '/Style Library/Images/calendar-icon.png',
            showOn: 'button',
            buttonImageOnly: true,
            changeYear: true,
            changeMonth: true,
            maxDate: '1/1/2011',
            minDate: '1/1/1910',
            yearRange: '1910:2011',
            onSelect: onDateSelect,
            onChangeMonthYear: onMonthYear
        });
    }

    function addDatePickerDateTo()
    {
        $('#txtDateTo').datepicker({ dateFormat: 'dd/mm/yy',
            buttonImage: '/Style Library/Images/calendar-icon.png',
            showOn: 'button',
            buttonImageOnly: true,
            changeYear: true,
            changeMonth: true,
            maxDate: '1/1/2011',
            minDate: '1/1/1910',
            yearRange: '1910:2011',
            onSelect: onDateSelect,
            onChangeMonthYear: onMonthYear
        });
    }

    function addDatePickerDateFrom()
    {
        $('#txtDateFrom').datepicker({ dateFormat: 'dd/mm/yy',
            buttonImage: '/Style Library/Images/calendar-icon.png',
            showOn: 'button',
            buttonImageOnly: true,
            changeYear: true,
            changeMonth: true,
            maxDate: '1/1/2011',
            minDate: '1/1/1910',
            yearRange: '1910:2011',
            onSelect: onDateSelect,
            onChangeMonthYear: onMonthYear
        });
    }


})(jQuery)


function onMonthYear(year, month, inst)
{
    var month = month;
    var day = inst.currentDay;

    if (day <= 9)
        day = '0' + day;

    if (month <= 9)
        month = '0' + month;
    var dateSelect = day + '/' + month + '/' + year
    this.value = dateSelect;
    if (this.id.match('txtDOB'))
    {
        hideAllQuestions();
    }
    var divQ4Display = document.getElementById('divQ4').style.display;
    if (divQ4Display == 'none' || divQ4Display == '')
    {
        if (ValidDOB())
            onQ1Click();
    }
    else
    {
        if (ValidDateRange())
            onQ4Click();
    }
}

function onDateSelect(dateText, inst)
{
    if (this.id.match('txtDOB'))
    {
        hideAllQuestions();
    }

    var divQ4Display = document.getElementById('divQ4').style.display;
    if (divQ4Display == 'none' || divQ4Display == '')
    {
        if (ValidDOB())
            onQ1Click();
    }
    else
    {
        if (ValidDateRange())
            onQ4Click();
    }

}

function dateAddExtention(p_Interval, p_Number)
{
    var thing = new String();
    p_Interval = p_Interval.toLowerCase();

    if (isNaN(p_Number))
        return false;
    p_Number = new Number(p_Number);
    switch (p_Interval.toLowerCase())
    {
        case "yyyy":
            {// year 
                this.setFullYear(this.getFullYear() + p_Number);
                break;
            }
        case "q":
            {		// quarter 
                this.setMonth(this.getMonth() + (p_Number * 3));
                break;
            }
        case "m":
            {		// month 
                this.setMonth(this.getMonth() + p_Number);
                break;
            }
        case "y": 	// day of year 
        case "d": 	// day 
        case "w":
            {		// weekday 
                this.setDate(this.getDate() + p_Number);
                break;
            }
        case "ww":
            {	// week of year 
                this.setDate(this.getDate() + (p_Number * 7));
                break;
            }
        case "h":
            {		// hour 
                this.setHours(this.getHours() + p_Number);
                break;
            }
        case "n":
            {		// minute 
                this.setMinutes(this.getMinutes() + p_Number);
                break;
            }
        case "s":
            {		// second 
                this.setSeconds(this.getSeconds() + p_Number);
                break;
            }
        case "ms":
            {		// second 
                this.setMilliseconds(this.getMilliseconds() + p_Number);
                break;
            }
        default:
            {
                return false;
            }
    }
    return this;
}
Date.prototype.dateAdd = dateAddExtention;
