/*
This javascript file is for all functions specific to the tax calendar
*/

function validateAndConfirmTaxCalendar() {
    var is_valid = validateTaxCalendar();
    if (is_valid == true) {
        return confirm_category();
    } else {
        return false;
    }
}


function validateTaxCalendar() {

    isValid = true;
   
    var errorMessages = new Array();
    // check the radio group
    // check date formats
    
    // check dates are real
    // javascript's Date object rollsover so we need to do our own thing
    var dateTypeRange = document.getElementById('date_type_range');
    var dateTypeInterval = document.getElementById('date_type_interval');

    if (dateTypeRange.checked) {

        var startDate = document.getElementById('start_date').value;
        var endDate = document.getElementById('end_date').value;

        var datePattern=/^\d\d\d\d-\d\d-\d\d$/;

        if (! datePattern.test(startDate)) {
            errorMessages.push("Start date is not in the correct format. Date format should be yyyy-mm-dd");
            isValid = false;
        }

        if (! datePattern.test(endDate)) {
            errorMessages.push("End date is not in the correct format. Date format should be yyyy-mm-dd");
            isValid = false;
        }        
        
        var startDateArray =  startDate.split('-');
        var endDateArray =  endDate.split('-');

        if (! validateDateValues(startDateArray)) {
            errorMessages.push("Start date does not appear to be a valid date.");
            isValid = false;
        }
        if (! validateDateValues(endDateArray)) {
            errorMessages.push("End date does not appear to be a valid date.");
            isValid = false;
        }

        
        var startDateValue = Date.parse(startDateArray.join('/'));        
        var endDateValue = Date.parse(endDateArray.join('/'));

        // check that dates are in the right order if they are otherwise valid 
    
        if (isValid && startDateValue > endDateValue) {
            isValid = false;
            errorMessages.push("End date appears to be before start date.");
        }
    }
    
    if (! isValid) {
        var messageString = "The following errors were spotted\n";
        messageString += errorMessages.join("\n");
        alert(messageString);
    }
    return isValid;
}

function validateDateValues(dateArray){
    
    var isValid = true;
    
    var year = dateArray[0];
    var month = dateArray[1];
    var day = dateArray[2];
    
    var dayCounts = new Array(
        31, //Jan
        daysInFeb(year), //Feb
        31, //Mar
        30,//Apr
        31,//May
        30,//Jun
        31,//Jul
        31,//Aug
        30,//Sep
        31,//Oct
        30,//Nov
        31//Dev        
     );
    
    
    // month is easy
    if (month < 1 || month >12) {
        isValid = false;
    }
    
    var lastDay = dayCounts[month-1];
    if (day < 1 || day >lastDay) {
        isValid = false;
    }
    
    return isValid;
}
    

function daysInFeb(year) {
    // is it a leap year
    var leapDay = 1;

    if( year %4 ) {
            leapDay = 0;
    } else if (year %100) {
            leapDay = 1;
    } else if (year % 400) {
            leapDay = 0; 
    }
    return 28 + leapDay;
}



function confirm_category() {
    var checked = false;
    var categoryList = document.getElementsByName('category_id');
    for (var i=0; i<categoryList.length; i++) {
        var category = categoryList[i];
           if (category.checked == true) {
               checked = true;
               break;
           }
    }
    if (checked == false) {
        return confirm("No categories were selected. If you continue the search will cover all categories\nIs this correct?");
    } else {
        return true;
    }    
}

function CheckAllBox() {
    var categoryList = document.getElementsByName('category_id');
    var checkAll = document.getElementById('checkall_category_id');
    for (var i=0; i<categoryList.length; i++) {
        var category = categoryList[i];
        category.checked = checkAll.checked
    }
}


function toggleDateType() {
    // get the elements
    
    var rangeContainer = document.getElementById('taxCalFormRange').parentNode;
    var intervalContainer = document.getElementById('taxCalFormPeriod').parentNode;
    
    var dateTypeRange = document.getElementById('date_type_range');
    var dateTypeInterval = document.getElementById('date_type_interval');
    

    
    if (dateTypeRange.checked) {
        rangeContainer.style.display = "block";
        intervalContainer.style.display = "none";
        // may need to change class as well
    } else {
        rangeContainer.style.display = "none";
        intervalContainer.style.display = "block";
    }
    
    
    //switch display
    
    
}
