//dependencies:
// /dwr/interfaces/FycSearchFormUtils.js
// /dwr/engine.js
// /dwr/util.js
// /inc/js/select_util.js

/* Repopulates the to and from years based on browser-cached selected indicies for intuitive back-button behavior. */
function resetYearDropDownIndiciesDWSI() {
    var startYearField  = document.getElementById('start-year');
    var endYearField    = document.getElementById('end-year');

    if (startYearField.selectedIndex > 0) {
        endYearField.options[startYearField.selectedIndex + endYearField.selectedIndex].selected = true;
    }
    if (startYearField.selectedIndex > 0 || endYearField.selectedIndex < endYearField.size) {
        populateToYearDWSI();
        populateFromYearDWSI();
    }
}

/* Populates the from year */
function populateFromYear(reset) {
    var startYearField  = document.getElementById('start-year');
    var endYearField    = document.getElementById('end-year');
    
    var sel             = dwr.util.getValue(startYearField);

    FycSearchForm.getFromYears(
        getSearchType(),
        dwr.util.getValue(endYearField),
        reset,
            {
                callback:function(list) {
                populateSelectCallback(list, startYearField, sel);

                if (reset) {
                    startYearField.options[0].selected = true;
                }
            }
        }
    );
   
}

/* Populates the from year on Search Inventory page of DDA, CDA. */
function populateFromYearDWSI(reset) {
    var startYearField  = document.getElementById('start-year');
    var endYearField    = document.getElementById('end-year');

    var sel             = dwr.util.getValue(startYearField);

    FycSearchForm.getFromYears(
        SEARCH_TYPE_ALL,
        ( reset ? null : dwr.util.getValue( endYearField ) ),
        reset,
            {
                callback:function(list) {
                populateSelectCallback(list, startYearField, sel);
                if (reset) {
                    startYearField.options[0].selected = true;
                }
            }
        }
    );
}

function populateFromYearMI() {
    var startYearField = document.getElementById('start-year');
    var endYearField = document.getElementById('end-year');

    var startYear = dwr.util.getValue(startYearField);
    var endYear = dwr.util.getValue(endYearField);
    var newYears = new Array();

    for (var i = startYearField.options[0].value; i <= endYear; i++) {
        var yearItem = new Object();
        yearItem.optionValue = i;
        yearItem.optionLabel = i;
        newYears[newYears.length] = yearItem;
    }
    populateSelectCallback(newYears, startYearField, startYear);
}

/* Called when from year changes */
function fromYearChanged() {
    if (getSearchType() == SEARCH_TYPE_CERTIFIED) {
        populateToYearCertified(false, null, null);
        populateFromYearCertified(null, null);
    } else {
        populateToYear();
        populateFromYear();
    }
}

/* Called when from year changes */
function fromYearChangedDWSI() {
    populateToYearDWSI();
    populateFromYearDWSI();
}

function fromYearChangedMI() {
    populateToYearMI();
    populateFromYearMI();
}

function resetYears() {
    populateFromYear(true);
    populateToYear(true, true);
}

/* Populates the to year */
function populateToYear(searchTypeChange, reset) {
    var startYearField = document.getElementById('start-year');
    var endYearField = document.getElementById('end-year');

    var sel = dwr.util.getValue(endYearField);
    
    FycSearchForm.getToYears(
            getSearchType(),
            dwr.util.getValue(startYearField),
            reset,
            {
                callback:function(list) {
                    populateSelectCallback(list, endYearField, sel);
                    if (searchTypeChange) {
                        populateFromYear(reset);
                    }
                    if (reset) {
                        endYearField.options[endYearField.options.length-1].selected = true;
                    }
                }
            });
}

/* Populates the to year Search Inventory page of DDA, CDA. */
function populateToYearDWSI(searchTypeChange, reset) {
    var startYearField = document.getElementById('start-year');
    var endYearField = document.getElementById('end-year');
    var sel = dwr.util.getValue(endYearField);

    FycSearchForm.getToYears(
            SEARCH_TYPE_ALL,
            dwr.util.getValue(startYearField),
            reset,
            {
                callback:function(list) {
                    populateSelectCallback(list, endYearField, sel);
                    if (searchTypeChange) {
                        populateFromYearDWSI(reset);
                    }
                    if (reset) {
                        endYearField.options[endYearField.options.length-1].selected = true;
                    }
                }
            });
}

function populateToYearMI() {
    var startYearField = document.getElementById('start-year');
    var endYearField = document.getElementById('end-year');

    var startYear = dwr.util.getValue(startYearField);
    var endYear = dwr.util.getValue(endYearField);
    var newYears = new Array();

    for (var i = startYear; i <= endYearField.options[endYearField.options.length-1].value; i++) {
        var yearItem = new Object();
        yearItem.optionValue = i;
        yearItem.optionLabel = i;
        newYears[newYears.length] = yearItem;
    }
    populateSelectCallback(newYears, endYearField, endYear);
}

/* Called when to year changes */
function toYearChanged() {
    if (getSearchType() == SEARCH_TYPE_CERTIFIED) {
        populateFromYearCertified(null, null);
        populateToYearCertified(false, null, null);
    } else {
        populateFromYear();
        populateToYear();
    }
}

/* Called when to year changes */
function toYearChangedDWSI() {
    populateFromYearDWSI();
    populateToYearDWSI();
}

/* Called when to year changes */
function toYearChangedMI() {
    populateFromYearMI();
    populateToYearMI();
}


function resetYearsDWSI() {
    populateFromYearDWSI(true);
    populateToYearDWSI(true, true);
}

/* Populates the to year when makes and models change for Certified search, */
/* or when the user selects a certified search, or when a user changes */
/* 'to' or 'from' years while doing certified search */
function populateToYearCertified(searchTypeChange, startYearValue, endYearValue) {
    var startYearField = document.getElementById('start-year');
    var endYearField = document.getElementById('end-year');

    if (endYearValue == null) endYearValue = dwr.util.getValue(endYearField);
    if (startYearValue == null) startYearValue = dwr.util.getValue(startYearField);

    var makeField   = document.getElementById('make');
    var modelField  = document.getElementById('model');
    var make2Field  = document.getElementById('make2');
    var model2Field = document.getElementById('model2');
    var make3Field  = document.getElementById('make3');
    var model3Field = document.getElementById('model3');

    var makeValue   = makeField.value;
    var modelValue  = modelField.value;
    var make2Value  = make2Field.value;
    var model2Value = model2Field.value;
    var make3Value  = make3Field.value;
    var model3Value = model3Field.value;

    FycSearchForm.getToYearsWithMakesModels(
            getSearchType(),
            startYearValue,
            makeValue,
            make2Value,
            make3Value,
            modelValue,
            model2Value,
            model3Value,
            false,
            {
                callback:function(list) {
                    populateSelectCallback(list, endYearField, endYearValue);
                    if (searchTypeChange) {
                        populateFromYearCertified(startYearValue, endYearValue);
                    }
                }
            });
}

/* Populates the from year when makes and models change for Certified search, */
/* or when the user selects a certified search, or when a user changes */
/* 'to' or 'from' years while doing certified search */
function populateFromYearCertified(startYearValue, endYearValue) {
    var startYearField = document.getElementById('start-year');
    var endYearField = document.getElementById('end-year');

    if (endYearValue == null) endYearValue = dwr.util.getValue(endYearField);
    if (startYearValue == null) startYearValue = dwr.util.getValue(startYearField);

    var makeField   = document.getElementById('make');
    var modelField  = document.getElementById('model');
    var make2Field  = document.getElementById('make2');
    var model2Field = document.getElementById('model2');
    var make3Field  = document.getElementById('make3');
    var model3Field = document.getElementById('model3');

    var makeValue   = makeField.value;
    var modelValue  = modelField.value;
    var make2Value  = make2Field.value;
    var model2Value = model2Field.value;
    var make3Value  = make3Field.value;
    var model3Value = model3Field.value;

    FycSearchForm.getFromYearsWithMakesModels(
            getSearchType(),
            endYearValue,
            makeValue,
            make2Value,
            make3Value,
            modelValue,
            model2Value,
            model3Value,
            false,
            {
                callback:function(list) {
                    populateSelectCallback(list, startYearField, startYearValue);
                }
            });
}

/* Populates the to year and from year when makes and models change for Certified search, */
/* or when the user selects a certified search */
function populateYearsCertified() {

    var endYearField = document.getElementById('end-year');
    var endYearValue = parseInt(endYearField.value);

    var startYearField = document.getElementById('start-year');
    var startYearValue = dwr.util.getValue(startYearField);

    var makeField   = document.getElementById('make');
    var modelField  = document.getElementById('model');
    var make2Field  = document.getElementById('make2');
    var model2Field = document.getElementById('model2');
    var make3Field  = document.getElementById('make3');
    var model3Field = document.getElementById('model3');

    var makeValue   = makeField.value;
    var modelValue  = modelField.value;
    var make2Value  = make2Field.value;
    var model2Value = model2Field.value;
    var make3Value  = make3Field.value;
    var model3Value = model3Field.value;

    //Defects 7762, 7845, 7881, 7885. When we switch to a Certified search, or we change a model/make while
    //doing Certified search, the To and From years lists will get re-populated. The 'From' drop-down
    //needs to show the oldest year, the 'To' drop-down - the newest.

    FycSearchForm.getValidCertifiedYears(
        makeValue,
        make2Value,
        make3Value,
        modelValue,
        model2Value,
        model3Value,
        {
        callback:function(validYearList) {

            //the years that get returned from FycSearchFormUtils.getValidCertifiedYears
            //are sorted in the Descending order
            endYearValue = validYearList[0];
            startYearValue = validYearList[validYearList.length - 1];

            //Now we can populate To and From lists.
            //Note that we really need the function call to be synchronous, so
            //only AFTER callback is done, we call populateToYearCertified
            populateToYearCertified(true, startYearValue, endYearValue);
            }
        });
}