jQuery(document).ready(function () {
    // Send search to matrix search page
    // the user selected checkboxes are added to corresponding textfield and that textfield is matched aginst the search keywords
    if (jQuery('#search_page_19785').length) {

        //If keyword Logic exsits in the form move it under Keyowrd input
        if(jQuery('#keyword_query_logic').length) {
            jQuery('#keyword_query_logic').appendTo('#searchForm .keyword');
        }//end If keyword Logic exsists

        var searchForm = jQuery('#search_page_19785');
        jQuery('#search_page_19785 :submit').click(function (e) {
            e.preventDefault();
            searchForm.unbind('submit');
            jQuery('.questions_container .search_section').each(function () {
                var $currentQuestion = $(this);
                var selectedValues = [];
                $currentQuestion.find('input[type="checkbox"]:checked').each(function () {
                    var $checkbox = $(this);
                    var checkedVal = $checkbox.val();
                    selectedValues.push(checkedVal);
                });
                $currentQuestion.find('.checkedOptions').val(selectedValues.join(' '));
            });
            // submit date range for search            
            var minYear = jQuery('#year_query_min option:selected').val();
            var maxYear = jQuery('#year_query_max option:selected').val();
            var minYearText = jQuery('#year_query_min option:selected').text();
            var maxYearText = jQuery('#year_query_max option:selected').text();
            var yearsArray = [];
            var yearRange = jQuery('.yearSelectOptions input.yearquery');
            var tempMinYear = minYear;
            
            var SubmitSearch = function() {
                while (tempMinYear <= maxYear) {
                    yearsArray.push(tempMinYear);
                    tempMinYear++;
                } //end While
                yearRange.val(yearsArray.join(' ')); 
                jQuery(searchForm).submit();
            };//Seach submit function
            
            //Search on date by filtering mulitple possibilties 
            if(minYearText === 'Any' && maxYearText === 'Any') {  
                jQuery(searchForm).submit();
            } else if(minYear !== '' && maxYearText === 'Any') {
                maxYear = '2011';
                SubmitSearch();
            } else if(minYearText === 'Any' && maxYear !== '') {                
                tempMinYear = '1994';
                SubmitSearch();
            } else if(minYear !== '' && maxYear !== '') {
                if(minYear === maxYear ) { 
                    SubmitSearch();
                } else if(minYear < maxYear) {  
                    SubmitSearch();
                } else if(minYear > maxYear) {                
                    alert('Please select higher year in maximum year select field.');
                }
            
            }
            
        }); // submit form function

        //remove hidden textfields by the search form
        for (var count = 1; count <= 12; count++) {
            jQuery('#queries_question' + count + '_query').remove();
        }
        //remove hidden rootnode field used for states
        var countArray = 0;
        do {
            jQuery('#root_node\\[' + countArray + '\\]').remove();
            countArray++;
        } while (jQuery('#root_node\\[' + countArray + '\\]').length);

        //remove hidden fields for date range
        jQuery('input#year_min').remove(jQuery(this).hasClass('sq-form-field'));
        jQuery('input#year_max').remove(jQuery(this).hasClass('sq-form-field'));
        jQuery('input#queries_year_query').remove(jQuery(this).hasClass('sq-form-field'));

        //Check and uncheck all checkboxes in question option list if check all is clicked
        jQuery('.questions_container .search_section input.checkAll').click(function () {
            var currentCheckBox = jQuery(this);
            if (currentCheckBox.is(':checked')) {
                currentCheckBox.parent().find('input[type="checkbox"]:not(.checkAll)').attr('checked', true).attr('disabled', true);
            } else {
                currentCheckBox.parent().find('input[type="checkbox"]:not(.checkAll)').attr('checked', false).attr('disabled', false);
            }
        });

        //Check all states if australia is clicked and vise versa
        jQuery('input#allStates').click(function () {
            var allStates = jQuery(this);
            if (allStates.is(':checked')) {
                allStates.parent().find('input[type="checkbox"]:not(#allStates)').attr('checked', true).attr('disabled', true);
            } else {
                allStates.parent().find('input[type="checkbox"]:not(#allStates)').attr('checked', false).attr('disabled', false);
            }
        });

    } //end if
    //Getting URL parameters and checking the relavent boxs
    if (jQuery('#advancedSearchResults').length) {
        //If results exsists resize the search form
        if(jQuery('#noResults').length === 0) {
            jQuery('#formShowHide').show();
            jQuery('#searchForm').height(15);
        }
        jQuery('#formShowHide').click(function (e) {
            e.preventDefault();
            var showFormButton = jQuery(this);
            if (showFormButton.hasClass('show')) {
                jQuery('#searchForm').height('auto');
                showFormButton.removeClass().addClass('hide').text('Hide Form');
            } else if (showFormButton.hasClass('hide')) {
                jQuery('#searchForm').height(15);
                showFormButton.removeClass().addClass('show').text('Expand Form');
            }
        });

        // enable pagination
        jQuery('ul#resultsPagination').easyPaginate({
		step:10
	});

        //function to get the URL search parameters 
        var urlParams = {};
        (function () {
            var e, a = /\+/g,
                // Regex for replacing addition symbol with a space
                regexp = /([^&=]+)=?([^&]*)/g,
                d = function (s) {
                    return decodeURIComponent(s.replace(a, " "));
                },
                url = window.location;

            while (e = regexp.exec(url))
            if (d(e[1]).indexOf('[]') !== -1) {
                var name = d(e[1]).replace('[]', '');
                if (!urlParams.hasOwnProperty(name)) {
                    urlParams[name] = [];
                } // End if
                urlParams[name].push(d(e[2]));
            } else {
                urlParams[d(e[1])] = d(e[2]);
            }
        })();

        //Run a loop for each parameter in search to check
        for (var name in urlParams) {
            var paramVal = urlParams[name];

            if (name === 'root_node') {
                for (var item in paramVal) {
                    var urlRootNodeVal = urlParams[name][item];
                    jQuery('.states').find('input[type="checkbox"]').each(function () {
                        var currentStateVal = jQuery(this).val();
                        if (urlRootNodeVal === currentStateVal) {
                            jQuery(this).attr('checked', true);
                        } else {
                            //nothing
                        }

                    });
                }
            } else if (name === 'year_min') {
                jQuery('select#year_query_min').attr('value', urlParams[name]);
            } else if (name === 'year_max') {
                jQuery('select#year_query_max').attr('value', urlParams[name]);
            } else if (name === 'queries_search_only_query') {
                if(urlParams[name] === ' ')
                    jQuery('#searchFields li.both input[type="radio"]').attr('checked', true);
            } else {
                var questionName = jQuery('.search_section').find('input[name="' + name + '"]');
                questionName.parent().find('input[type="checkbox"]:not(.checkAll)').each(function () {
                    var checkboxVal = jQuery(this).val();
                    // if the checkbox is matching with current urlParam then check the checkbox
                    var regExp = ((checkboxVal === "No") ? /No\b/g : new RegExp(checkboxVal, 'g'));
                    var match = regExp.exec(paramVal);
                    if (match !== null) {
                        jQuery(this).attr('checked', true);
                    }
                });
            }
        } //end for loop
    } //end if if the advance search results container exsists

    // if Comapre results exists then submit a search and bring the details of those areas
    jQuery('#compareSubmit').click(function (e) {
        e.preventDefault();
        var $checkedForCompare = jQuery('#advancedSearchResults input[type="checkbox"]:checked');
        var compareResultsArray = [];
        $checkedForCompare.each(function () {
            var checkBoxId = jQuery(this).val();
            compareResultsArray.push(checkBoxId);
        });
        if (compareResultsArray.length > 4) {
            alert('Please select only up to 4 areas to compare!');
        } else if (compareResultsArray.length === 0 ||compareResultsArray.length === 1) {
            alert('Please select at least two areas to compare!');
        } else {
            var comapareResultsId = compareResultsArray.join(' ');
            jQuery('input#compareQuery').val(comapareResultsId);
            jQuery('#compareForm').submit();
        }
    });

    // if Comapre results exists and user clicks uncheckAll button all check boxes will be unchecked
    jQuery('#uncheckAll').click(function() {
        jQuery('#resultsPagination input[type="checkbox"]:checked').each(function() {
            jQuery(this).attr('checked', false);
        });
    });

    //Creating table from compared results tables
    if (jQuery('#compareResults').length) {
        //Re-size the design to accomodate table
        jQuery('#sidebar').hide();
        jQuery('#content').css('width', '100%');
        jQuery('#content_main').attr('style', 'width:960px !important; padding-left:17px; margin:0;');
        jQuery('#navigation_breadcrumb').attr('style', 'width:960px !important;');


        $('#mergedResults').remove();
        var $table = $('<table id="mergedResults" />');

        function createRow(cells, header) {
            var $row = $('<tr />'),
                type = (header) ? 'th' : 'td';
            $.each(cells, function (index, val) {
                $row.append('<' + type + '>' + val + '</' + type + '>');
            });
            return $row;
        }

        // Store a header row
        var header = [];
        header.push('Criteria');

        // Store individual rows by index
        var rows = {};

        // Store the criteria names
        var criteria = {};

        // The original result set
        var $results = $('#content_main .resultContainer');

        function getCriteriaName($row) {
            return '<span>' + $('td:eq(0)', $row).text() + '</span> ' + '<span>' + $('td:eq(1)', $row).text() + '</span>'
        }

        function getCriteriaContent($row) {
            var finding = '<div class="finding">' + $('td:eq(2)', $row).text() + '</div>',
                comment = '<div class="comment">' + $('td:eq(3)', $row).text() + '</div>';

            return finding + comment;
        }

        // Get existing tables
        $results.each(function (tableIndex, div) {
            var $rows = $(div).find('tr');
            header.push($(div).find('h2').text());
            $rows.each(function (rowIndex, row) {
                if (rowIndex !== 0) {
                    criteria[rowIndex] = getCriteriaName(row);
                    rows[rowIndex] = (typeof (rows[rowIndex]) === "undefined") ? {} : rows[rowIndex];
                    rows[rowIndex][tableIndex] = getCriteriaContent(row);
                }
            });
        });

        // Create header row
        $('#content_main .resultContainer:first').before($table.append(createRow(header, true)));

        // Output each row to a table
        $.each(rows, function (index, row) {
            var rowData = [];
            rowData.push(criteria[index]);
            $.each(row, function (cellIndex, cell) {
                rowData.push(cell);
            });
            $table.append(createRow(rowData));
        });

        // Hide the original results
        $results.hide();
       jQuery('#mergedResults  tr td:first-child').addClass('question');
    } //end if the compare results exists
});
