var customPeriodSelectTable = document.getElementById('customDateSelection').firstChild;

    function periodChosen(periodSelect)
    {
        var selectedPeriodOption = selectedOptionsFor(periodSelect)[0];
        
        if(selectedPeriodOption.getAttribute('id')== 'customPeriod')
        {
            displayOn(document.getElementById('customDateSelection'));
        }
        else
        {
            displayOff(document.getElementById('customDateSelection'));
        }
    }
//=============================== PERIOD =======================================
function reportCustomDates(recorder)
{
    var wrongOrder = false;
    
    var doReport = highlightRecorder(fromDateRecorder);
    doReport = highlightRecorder(toDateRecorder);
    
    if(doReport)
    {
        var from = new Date(
            fromDateRecorder.year,
            fromDateRecorder.month,
            fromDateRecorder.dayOfMonth,0,0,0,0);
        
            var to = new Date(
            toDateRecorder.year,
            toDateRecorder.month,
            toDateRecorder.dayOfMonth,23,59,59,999);
        
        if(from.getTime() >= to.getTime())
        {
            doReport =false;
            alert("Invalid time period...'To:' must occur before 'From:'.");
            if(recorder == fromDateRecorder)
            {
                highlightRecorder(toDateRecorder,true);
            }
            else
            {
                highlightRecorder(fromDateRecorder,true);
            }
        }
    }

    if(doReport)
    {
        var query = 'query.filterByPeriod=true'
                        + '&query.timePeriod.start.dayOfMonthValue=' + fromDateRecorder.dayOfMonth
                        + '&query.timePeriod.start.calendarMonthValue=' + fromDateRecorder.month
                        + '&query.timePeriod.start.yearValue=' + fromDateRecorder.year
                        + '&query.timePeriod.start.toBeginningOfDay=true'
                        + '&query.timePeriod.finish.dayOfMonthValue=' + toDateRecorder.dayOfMonth
                        + '&query.timePeriod.finish.calendarMonthValue=' + toDateRecorder.month
                        + '&query.timePeriod.finish.yearValue=' + toDateRecorder.year
                        + '&query.timePeriod.finish.toEndOfDay=true';
                        
            var selectedPeriodOption = getSelectedPeriodOption();
            selectedPeriodOption.setAttribute('value', query);
    }

    /*
    http://www.merlyn.demon.co.uk/js-date0.htm#DoY
    */
    function TryDoY() {
        with (new Date()) {
            var Y = getFullYear(), M = getMonth(), D = getDate();
        }
        var K, N, St = "<br>Local day-of-year : ";
        N = (Date.UTC(Y, M, D) - Date.UTC(Y, 0, 0)) / 86400000;
        document.writeln("Local date : &#160; ", Y, "-", LZZ(N));
        M++;
        K = 2 - (Y % 4 == 0);
        N = Math.floor(275 * M / 9) - K * (M > 2) + D - 30;
        document.writeln(St, LZZ(N));
        with (new Date()) {
            K = valueOf();
            setMonth(0);
            setDate(0);
            N = Math.round((K - valueOf()) / 86400000);
        }
        document.write(St, LZZ(N));
    }

}

/**get the period selected (display or value depending upon the boolean provided as the parameter displayWanted).
*/

function getPeriod(displayWanted)
{
    var periodSelect =document.getElementById('periodSelect');
    var text = "";

    if(periodSelect != null)
    {
        //currently only supports a single selection.
        var selectedPeriodOption = getSelectedPeriodOption();
        if(selectedPeriodOption.getAttribute('id') == 'customPeriod' && displayWanted)
        {
            var toDate = document.getElementById('toDate').value;
            var fromDate = document.getElementById('fromDate').value;
             text = fromDate + ' - ' + toDate;   
        }
        else
        {
            if(displayWanted)
            {
                text = selectedPeriodOption.innerHTML;                    
            }
            else
            {
                text = selectedPeriodOption.getAttribute('value');
                if(text == "")
                {
                    text = null;
                }
            }
        }
    }
        return text;
}

function getSelectedPeriodOption()
{
    var periodSelect = document.getElementById('periodSelect');
    return  selectedOptionsFor(periodSelect)[0];
}

//DATEFILTER CLEAR
function df_ResetData(){
	periodselect = document.getElementById('periodSelect');
	periodselect.selectedIndex = 0;
	displayOff(document.getElementById('customDateSelection'));
}//END DATEFILTER CLEAR


//DATEFILTER ADD
function df_AddFilter(){
	setAskToLoadReport(true);
	periodselect = document.getElementById('periodSelect');
	periodChosen(periodselect);
	setAskToLoadReport(true);
	notifyDateFilterAdded(getPeriod(true),getPeriod(false));
	df_ResetData();
}//END DATEFILTER ADD

function displayCalendar(target,inputTarget,recorder)
{
    popUpCalendar(target, inputTarget,  'mm/dd/yyyy', recorder);
}
function showCalendar()
{
    //does nothing, but allows an a href tag to do the javascript work.
}

// ========================= CALENDAR ==========================

function DateRecorderObject(targetElement, highlightElement)
{
    this.targetElement = targetElement;
    this.report = DateRecorderReport;
    this.reported = false;
    this.highlightElement = highlightElement;
}
function DateRecorderReport(dayOfMonth,month,year, display)
{
    this.dayOfMonth= parseInt(dayOfMonth);
    this.month= parseInt(month);
    this.year = parseInt(year);
    this.targetElement.innerHTML = display;
    this.reported = true;
    reportCustomDates(this);
}

