/*
 *   JS used to submit and validate search form
 */

    var initForm = false;
    function initializeForm() {
        vehicleTypeChanged('vehicleType');

        //var makes = getAllSelections('makeList');
        //if ( makes != null && makes[0] != 'ALL' ) {
        //    var preSelectedModels = getCookieValueAsArray('manheim.powersearch.model', '|');
        //    reloadAllModels(makes, preSelectedModels, '');
        //}

        var sellerTypes = getAllSelections('sellerTypeList');
        if ( sellerTypes != null && sellerTypes[0] != 'ALL' ) {
            var preSelectedSellers = getCookieValueAsArray('manheim.powersearch.seller', '|');
            reloadSellers(sellerTypes, preSelectedSellers);
        }

        initForm = true;
    }

    function concatArrays( array1, array2 ) {
        if ( array1 != null ){
            if (array2 != null){
                for ( var i = 0; i < array2.length; i++ ) {
                    array1[array1.length] = array2[i];
                }
            }
            return array1;
        } else if ( array2 != null ) {
            return array2;
        }

         return new Array();
    }

    var executeTrimAjax = true;
    function reloadAllTrims( makes, models, defaults, inventory ) {
        if ( executeTrimAjax ) {
            if ( makes.length == 0 || makes[0] == 'ALL' || models.length == 0 || models[0] == 'ALL' ) {
                var trimList = $('trimList');
                trimList.update('');
                trimList.appendChild(createTrimCheck(allLabel, 'ALL', true));
            } else {
                var ajaxUrlParams = 'inventory=' + inventory;
                for (var i = 0; i < makes.length; i++) {
                    ajaxUrlParams += '&make[]=' + makes[i];
                }
                for (var i = 0; i < models.length; i++) {
                    ajaxUrlParams += '&model[]=' + models[i];
                }

                var preSelectedTrims = concatArrays( defaults, getAllSelections('trimList') );
                new Ajax.Request('manheim/get_data.php?mode=trims',
                {
                    method: 'post',
                    evalJSON: true,
                    parameters: ajaxUrlParams,
                    onSuccess: function(transport) {
                        showTrims( transport.responseJSON.trims, preSelectedTrims );
                    },
                    onFailure: function(){},
                    onException: function(request, ex){}
                });
            }
        }
    }

    function showTrims( trims, preSelectedTrims ) {
        var trimList = $('trimList');
        trimList.update('');

        for ( i = 0; i < trims.length; i++ ) {
            trimList.appendChild(createTrimCheck(trims[i].label, trims[i].value, false));
        }

        setAllChecked('trimList', true, preSelectedTrims);
    }

    function createTrimCheck( label, value, disabled ) {
        var itemElement = document.createElement('li');
        var labelElement = document.createElement('label');
        var checkbox = document.createElement('input');
        checkbox.id = value;
        checkbox.type = 'checkbox';
        checkbox.name = 'series[]';
        checkbox.className = 'checkbox';
        checkbox.value = value;
        checkbox.disabled = disabled;

        checkbox.onclick = function() {
            toggleAllCheckbox(this, 'trimList');
        };

        labelElement.appendChild(checkbox);
        labelElement.appendChild(document.createTextNode(unescape(label)));
        itemElement.appendChild(labelElement);

        return itemElement;
    }

    var executeModelAjax = true;
    function reloadAllModels( makes, defaults, inventory ) {
        if ( executeModelAjax ) {
            if ( makes.length == 0 || makes[0] == 'ALL' ) {
                var modelList = $('modelList');
                modelList.update('');
                modelList.appendChild(createModelCheck(allLabel, 'ALL', true));

                reloadAllTrims( makes, {}, {}, inventory );
            } else {
                var ajaxUrlParams = 'inventory=' + inventory;
                for (var i = 0; i < makes.length; i++) {
                    ajaxUrlParams += '&make=' + makes[i];
                }

                var preSelectedModels = concatArrays( defaults, getAllSelections('modelList') );
                new Ajax.Request('get_data.php?mode=models&',
                {
                    method: 'post',
                    evalJSON: true,
                    parameters: ajaxUrlParams,
                    onSuccess: function(transport) {
                        showModels( transport.responseJSON.models, preSelectedModels );
                    },
                    onFailure: function(){},
                    onException: function(request, ex){}
                });
            }
        }
    }

    var modelData = null;

    function showModels( models, preSelectedModels ) {
        var modelList = $('modelList');
        modelList.update('');

        for ( i = 0; i < models.length; i++ ) {
            modelList.appendChild(createModelCheck(models[i].label, models[i].value, false));
        }

//        setAllChecked('modelList', true, preSelectedModels, false);
//
//        var trimDefaults = null;
//        if ( initForm ) {
//            trimDefaults = getCookieValueAsArray('manheim.powersearch.trim', '|');
//            initForm = false;
//        }

       // reloadAllTrims(getAllSelections('makeList'), getAllSelections('modelList'), trimDefaults, '');
    }

    function createModelCheck( label, value, disabled ) {
    	

	var obj = document.getElementById('modelSelector');
	obj.options[obj.options.length] = new Option(label,value, false);

	return;
	var itemElement = document.createElement('li');
        var labelElement = document.createElement('label');
        var checkbox = document.createElement('input');
        checkbox.id = value;
        checkbox.type = 'checkbox';
        checkbox.name = 'model[]';
        checkbox.className = 'checkbox';
        checkbox.value = value;
        checkbox.disabled = disabled;

        checkbox.onclick = function() {
            if ( this.value == 'ALL' ) {
                executeTrimAjax=false;
            }
            toggleAllCheckbox(this, 'modelList');
            if ( this.value == 'ALL' ) {
                executeTrimAjax=true;
            }
            reloadAllTrims(getAllSelections('makeList'), getAllSelections('modelList'), null, '');
            //toggleModels(this);
        };

        labelElement.appendChild(checkbox);
        labelElement.appendChild(document.createTextNode(unescape(label)));
        itemElement.appendChild(labelElement);

        return itemElement;
    }

    function toggleModels( checkbox ) {
        if ( modelData != null ) {
            for ( i = 0; i < modelData.length; i++ ) {
                if ( modelData[i].value == checkbox.value ) {
                    if ( modelData[i].parentId > 0 ) {
                        var parentCheck = $(modelData[i].parentId);
                        if ( parentCheck != null ) {
                            parentCheck.checked = false;
                        }
                    }
                    if ( modelData[i].childIds != null && modelData[i].childIds.length > 0 ) {
                        for ( var j = 0 ; j < modelData[i].childIds.length; j++ ) {
                            var childCheck = $(modelData[i].childIds[j]);
                            if ( childCheck != null ) {
                                childCheck.checked = checkbox.checked;
                            }
                        }
                    }
                    break;
                }
            }
        }
    }

    function writeMakeCookie() {
        document.cookie = 'manheim.powersearch.make=' + getAllSelections('makeList').join('|') + ';';
    }

    function writeModelCookie() {
        document.cookie = 'manheim.powersearch.model=' + getAllSelections('modelList').join('|') + ';';
    }

    function writeTrimCookie() {
        document.cookie = 'manheim.powersearch.trim=' + getAllSelections('trimList').join('|') + ';';
    }

    function writeSellerTypeCookie() {
        document.cookie = 'manheim.powersearch.seller=' + getAllSelections('sellerList').join('|') + ';';
    }

    function getCookieValue( cookieName ) {
        var cookieValue = '';
        if (document.cookie.length > 0) {
            var startIndex = document.cookie.indexOf(cookieName + '=');
            if (startIndex != -1) {
                startIndex = startIndex + cookieName.length + 1;
                var endIndex = document.cookie.indexOf(';', startIndex);
                if (endIndex == -1) {
                    endIndex = document.cookie.length;
                }
                cookieValue = document.cookie.substring(startIndex, endIndex);
            }
        }

        return cookieValue;
    }

    function getCookieValueAsArray( cookieName, delim ) {
        var valueArray = new Array();
        var cookieValue = getCookieValue( cookieName );
        if ( cookieValue != null && cookieValue.length > 0 ) {
            valueArray = cookieValue.split(delim);
        }

        return valueArray;
    }

    function submitSearch( newSearch ) {
        var formElement = $('searchForm');
        formElement.submittedQstr.value = '';
        if ( validateForm() ) {
            if ( newSearch ) {
                //clearRefinementCookies(document.cookie);
                writeMakeCookie();
                writeModelCookie();
                writeTrimCookie();
                writeSellerTypeCookie();
            }

            formElement.newSort.value = false;
            formElement.searchOperation.value = 'Search';
            formElement.action = 'searchSubmit.do';
            formElement.submit();
        }
    }

    function validateForm() {
        var valid = validateZipCode();
        valid = valid && validateSaleDate();
        return valid;
    }

    function validateZipCode() {
        var distance = $('distanceList');
        var zipField = $('zipcode');
        if ( distance != null && zipField != null ) {
            zipField.value = zipField.value.strip();
            if ( distance.options[0].selected == false ) {
                if ( zipField.value == defaultZipText || isNaN(zipField.value) ) {
                    zipField.select();
                    alert(zipErrMsg);
                    return false;
                }
            }
        }
        return true;
    }

    function validateSaleDate() {
        var saleDateField = $('saleDate');
        if ( saleDateField != null ) {
            saleDateField.value = saleDateField.value.strip();
            if ( saleDateField.value == '' || saleDateField.value == defaultSaleDateText ) {
                saleDateField.value = '';
            } else if ( saleDateField.value.length != 10 || isNaN(saleDateField.value.substring(0, 2)) || isNaN(saleDateField.value.substring(3, 5)) || isNaN(saleDateField.value.substring(6)) ) {
                // Format = MM/DD/YYYY
                saleDateField.select();
                alert(saleDateErrMsg);
                return false;
            } else {
                var oldestDate = new Date();
                oldestDate.setDate(oldestDate.getDate() - 1);

                var day = saleDateField.value.substring(3, 5);
                var month = saleDateField.value.substring(0, 2);
                var year = saleDateField.value.substring(6);

                var selectedDate = new Date();
                selectedDate.setFullYear(year, month - 1, day);

                if ( selectedDate < oldestDate ) {
                    saleDateField.select();
                    alert(saleDateErrMsg);
                    return false;
                }
            }
        }
        return true;
    }

    function validateSaveSearchForm() {
        var valid = validateSearchName();
        valid = valid && validatePhoneNumber();
        valid = valid && validateNotification();
        return valid;
    }

    function validateSearchName() {
        var nameField = $('searchName');
        if ( nameField != null ) {
            nameField.value = nameField.value.strip();
            if (nameField.value == '') {
                nameField.focus();
                alert(nameRequiredMsg);
                return false;
            }
        }
        return true;
    }

    function validateNotification() {
        var format = $('searchForm').emailFormat;
        if ( format != null ) {
           for ( var i = 0; i < format.length; i++ ) {
              if ( format[i].checked ) {
                 if ( format[i].value == 'T' ) {
                     var emailAddress = $('emailAddress');
                     var emailFilter = new RegExp('^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$');
                     if ( emailAddress == null || emailFilter.test(emailAddress.value) == false ) {
                         emailAddress.focus();
                         alert(emailRequiredMsg);
                         return false;
                     }
                 } else if ( format[i].value == 'S' ) {
                     var phoneNumber = $('phone');
                     if ( phoneNumber != null && phoneNumber.value == '' ) {
                         phoneNumber.focus();
                         alert(phoneRequiredMsg);
                         return false;
                     }
                     var provider = $('sms');
                     if ( provider != null && provider.value == '' ) {
                         provider.focus();
                         alert(providerRequiredMsg);
                         return false;
                     }
                 }
              }
           }
        }
        return true;
    }

    function validatePhoneNumber() {
        var phoneField = $('phone');
        if ( phoneField != null ) {
            phoneField.value = phoneField.value.strip();
            if ( phoneField.value == '' || phoneField.value == defaultPhoneText ) {
                phoneField.value = '';
            } else {
                phoneField.value = phoneField.value.replace( /-/g, '' );
                if ( phoneField.value.length != 10 || isNaN(phoneField.value) ) {
                    phoneField.select();
                    alert(phoneErrMsg);
                    return false;
                }
            }
        }
        return true;
    }

    // enable/disable form elements as user selects different
    // notification types on the saved search form
    function changeNotify( notifyType ) {
        // email
        if (notifyType == 'T') {
            $('notificationEnabled').value = 'true';
            $('emailAddress').removeClassName('disabledText').disabled = false;
            $('phone').addClassName('disabledText').disabled = true;
            $('sms').addClassName('disabledText').disabled = true;
            $('emailAddress').select();
        // sms
        } else if (notifyType == 'S') {
            $('notificationEnabled').value = 'true';
            $('emailAddress').addClassName('disabledText').disabled = true;
            $('phone').removeClassName('disabledText').disabled = false;
            $('sms').removeClassName('disabledText').disabled = false;
            $('phone').select();
        // none
        } else {
            $('alertTo').checked = true;
            $('notificationEnabled').value = 'false';
            $('emailAddress').addClassName('disabledText').disabled = true;
            $('phone').addClassName('disabledText').disabled = true;
            $('sms').addClassName('disabledText').disabled = true;
        }
    }

    function clearSearchForm() {
        resetSearchForm(true);

        setChecked('vehicleTypeList', true, vehicleTypeIdCar);
        setChecked('vehicleTypeList', true, vehicleTypeIdTruck);
        setChecked('vehicleTypeList', true, vehicleTypeIdSUV);
        setChecked('vehicleTypeList', true, vehicleTypeIdVan);
    }

    function resetSearchForm( refreshAll ) {
        $('searchForm').reset();

        if ( refreshAll ) {
            var sortElement = $('sort');
            if ( sortElement != null ) {
                sortElement.value = '';
            }

            setOptions('vehicleType', 0);
            setChecks('vehicleTypeList', false);

            reloadToYears( $('searchForm') );
            setOptions('year_begin', defaultFromYearIndex);
            setOptions('year_end', 0);
            setChecks('makeList', false);
            setChecks('modelList', false);
            setChecks('trimList', false);

            setChecks('odometerList', false);

            setChecks('onlyWithPhoto', false);
            setChecks('onlyWithECR', false);

            clearAdvancedOptions();

            // Location section
            setChecks('regionList', false);
            setChecks('stateList', false);
            setChecks('locationList', false);
            setChecks('distanceList', false);
            $('zipcode').value = '';

            setChecks('sellerTypeList', false);
            setChecks('inventoryList', false);
            setChecks('saleTypeCheck', false);
            $('saleDate').value = '';
        }

        vehicleTypeChanged('vehicleType');

        if ( $('makeList') != null ) {
            reloadAllModels(getAllSelections('makeList'), null, '');

            if ( $('modelList') != null ) {
                reloadAllTrims(getAllSelections('makeList'), getAllSelections('modelList'), null, '');
            }
        }

        if ( $('zipcode').value == '' ) {
            if ( defaultZipcode != null && defaultZipcode.length > 0 ) {
                $('zipcode').value = defaultZipcode;
            } else {
                $('zipcode').value = defaultZipText;
            }
        }

        if ( $('saleDate').value == '' ) {
            $('saleDate').value = defaultSaleDateText;
        }
    }

    function clearAdvancedOptions() {
        setChecks('mmrList', false);
        setChecks('conditionList', false);
        setChecks('driveTrainList', false);
        setChecks('transList', false);
        setChecks('engineList', false);
        setChecks('extColorList', false);
        setChecks('intColorList', false);
        setChecks('topList', false);
        setChecks('intTypeList', false);
        setChecks('doorsList', false);
    }

    function toggleAllCheckbox( checkbox, containerId ) {
        if ( checkbox.value == 'ALL' ) {
            // check or uncheck all checkboxes
            setChecks(containerId, checkbox.checked)
        } else if ( !checkbox.checked ) {
            // uncheck 'ALL' option if checked
            setChecked(containerId, false, 'ALL', false);
        }

        return false;
    }

    // ##################################################
    // Begin BY LOCATION functions
    // ##################################################

    function getChildLocations( parentId, relations ) {
        for ( var i = 0; i < relations.length; i++ ) {
            // Find the object with the correct parentId
            if ( parentId == relations[i].id ) {
                return relations[i].children;
            } else {
                var children = getChildLocations( parentId, relations[i].children )
                if ( children != null ) {
                    return children;
                }
            }
        }

        return null;
    }

    // relations is an array of objects that
    // contain a parent ID and an array of child objects
    function toggleChildLocations( parentId, isChecked, relations ) {
        var children = getChildLocations( parentId, relations );

        if ( children != null && children.length > 0 ) {
            for (var i = 0; i < children.length; i++) {
                var childElement = $('location' + '-' + children[i].id);
                if ( childElement != null && isChecked != childElement.checked ) {
                    childElement.click();
                }
            }
        }

        return false;
    }

    function getParentLocationId( childId, relations ) {
        for ( var i = 0; i < relations.length; i++ ) {
            var childList = relations[i].children;
            for (var j = 0; j < childList.length; j++) {
                if ( childId == childList[j].id ) {
                    return relations[i].id;
                } else {
                    var parentId = getParentLocationId( childId, childList );
                    if ( parentId != null ) {
                        return parentId;
                    }
                }
            }
        }

        return null;
    }

    function toggleParentLocation( childId, isChecked, relations ) {
        var parentId = getParentLocationId(childId, relations);

        if ( !isChecked ) {
            while ( parentId != null ){
                var parentElement = $('location' + '-' + parentId);
                if ( parentElement != null ) {
                    parentElement.checked = false;
                }
                parentId = getParentLocationId( parentId, relations );
            }
        } else {
            // if all parent's children are checked, check parent
            var children = getChildLocations(parentId, relations);
            if ( children != null && children.length > 0 ) {
                var allChildrenChecked = true;
                for (var i = 0; i < children.length; i++) {
                    var childElement = $('location' + '-' + children[i].id);
                    if ( childElement != null && !childElement.checked ) {
                        allChildrenChecked = false;
                        break;
                    }
                }

                if ( allChildrenChecked ) {
                    var parentElement = $('location' + '-' + parentId);
                    if ( parentElement != null && !parentElement.checked ) {
                        parentElement.click();
                    }
                }
            }
        }
    }

    function toggleLocations( checkbox, relations ) {
        var locationId = checkbox.value;
        var isChecked = checkbox.checked;

        toggleChildLocations(locationId, isChecked, relations);
        toggleParentLocation(locationId, isChecked, relations);
    }

    // ##################################################
    // End BY LOCATION functions
    // ##################################################

    function setOptions(elementId, optionIndex) {
        var container = $(elementId);
        if ( container != null && optionIndex >= 0 ) {
            if ( container.nodeName.toUpperCase() == 'SELECT' && container.options.length > optionIndex ) {
                container.options[optionIndex].selected = true;
            }

            var elements = container.getElementsByTagName('select');
            for (var i = 0; i < elements.length; i++) {
                if ( elements[i].options.length > optionIndex ) {
                    elements[i].options[optionIndex].selected = true;
                }
            }
        }
    }

    // Finds all SELECT or INPUT tags within the specified element
    // and returns the values of all that are currently selected
    function getAllSelections(elementId) {
        var selectedValues = new Array();

        var container = $(elementId);
        if ( container != null ) {
            if ( container.nodeName.toUpperCase() == 'SELECT' ) {
                for (var i = 0; i < container.options.length; i++) {
                    if ( container.options[i].selected ) {
                        selectedValues[selectedValues.length] = container.options[i].value;
                    }
                }
            }

            if ( container.nodeName.toUpperCase() == 'INPUT' ) {
                if ( container.checked ) {
                    selectedValues[selectedValues.length] = container.value;
                }
            }

            var elements = container.getElementsByTagName('input');
            for (var i = 0; i < elements.length; i++) {
                if ( elements[i].checked ) {
                    selectedValues[selectedValues.length] = elements[i].value;
                }
            }
        }

        return selectedValues;
    }

    // Finds a SELECT or INPUT tag with the specified values
    // and makes sure it is selected or unselected depending
    // on the isChecked parameter
    function setAllChecked(elementId, isChecked, itemValues, executeClick) {
        if ( itemValues != null ) {
            for (var i = 0; i < itemValues.length; i++) {
                setChecked(elementId, isChecked, itemValues[i], executeClick)
            }
        }
    }

    // Finds a SELECT or INPUT tag with the specified value
    // and makes sure it is selected or unselected depending
    // on the isChecked parameter
    function setChecked(elementId, isChecked, itemValue, executeClick) {
        var container = $(elementId);
        if ( container != null ) {
            if ( container.nodeName.toUpperCase() == 'SELECT' ) {
                if ( isChecked ) {
                    for (var i = 0; i < container.options.length; i++) {
                        if ( container.options[i].value == itemValue ) {
                            container.options[i].selected = isChecked;
                        }
                    }
                } else {
                    container.options[0].selected = true;
                }
            }

            if ( container.nodeName.toUpperCase() == 'INPUT' ) {
                if ( container.checked != isChecked && container.value == itemValue ) {
                    if ( typeof executeClick == 'undefined' || executeClick == true ) {
                        container.click();
                    } else {
                        container.checked = isChecked;
                    }
                }
            }

            var elements = container.getElementsByTagName('input');
            for (var i = 0; i < elements.length; i++) {
                if ( elements[i].checked != isChecked && elements[i].value == itemValue ) {
                    if ( typeof executeClick == 'undefined' || executeClick == true ) {
                        elements[i].click();
                    } else {
                        elements[i].checked = isChecked;
                    }
                }
            }
        }
    }

    // Finds all SELECT or INPUT tags within the specified element
    // and makes sure they are selected or unselected depending
    // on the isChecked parameter
    function setChecks(elementId, isChecked) {
        var container = $(elementId);
        if ( container != null ) {
            if ( container.nodeName.toUpperCase() == 'SELECT' && !isChecked ) {
                container.options[0].selected = true;
            }

            if ( container.nodeName.toUpperCase() == 'INPUT' ) {
                if ( container.checked != isChecked ) {
                    container.click();
                }
            }

            var elements = container.getElementsByTagName('input');
            for (var i = 0; i < elements.length; i++) {
                if ( elements[i].checked != isChecked ) {
                    elements[i].click();
                }
            }
        }
    }

    // Was used to enable/disable form elements within a specified element
    function toggleElements(elementId, enabled) {
        var element = $(elementId);

        if (element != null) {
            if (enabled) {
                element.removeClassName('disabledText');
            } else {
                element.addClassName('disabledText');
            }

            // disable input fields
            setTagUsablility(element, 'input', enabled);

            // disable select fields
            setTagUsablility(element, 'select', enabled);

            // disable links
            setTagUsablility(element, 'a', enabled);
        }
    }

    function setTagUsablility( parentElement, tagType, enabled ) {
        var container = $(parentElement);

        var elements = container.getElementsByTagName(tagType);
        for (var i = 0; i < elements.length; i++) {
            elements[i].disabled = !enabled;
        }
    }
    
    
function makeModelsList(model_id){
	var ajaxUrl = '/get_data.php?mode=models&inventory=&make=' + model_id;
  //loadJSON( ajaxUrl, 'buildSelectParams', new Array() );
	new Ajax.Request(ajaxUrl,
                {
                    method: 'post',
                    evalJSON: true,
                    
                    onSuccess: function(transport) {
                        buildSelectParams( transport.responseJSON );
                    },
                    onFailure: function(){},
                    onException: function(request, ex){}
                });
}




function buildSelectParams(a){

	var i;
	var c;
	
	var obj = document.getElementById('modelSelector');
	c  = obj.options.length; 
	for(i=0;i<c;i++){
		obj.options[0] = null;
	}
	c = a['models'].length;
	for(i=0;i<c;i++){
	
		obj.options[obj.options.length] = new Option(a['models'][i]['label'],a['models'][i]['value'], false);
	}
}