/* Pre-Conditions: 
 *   Parameters: 
 *     (String) rendterTo - the DOM object id for the search panel to render to
 *     (bool)   showCms - the flag to display addition search criteria if it is set
 *     (String) website   - the website code to determine if this is DEN or DGN site
 *     (Array)  agency_types - the list values for building the agency types section
 *     (Array)  category_groups - list of bid category groups
 *     (Array)  categories   - the list of bid categories for the bid cateogries section
 */
function CreateBidSearchPanel(showCms, website, agency_types, category_groups, categories)
{
    var SearchPanelItems = [], qString = GetQueryString(), jurinst = GetjurinstData();
    
    if (website == 'NAVIGATORGOV' || website == 'NAVIGATOREM')
    {
		Er.jurinst_label = 'Jurisdiction/Location';
    }
    else if (website == 'NAVIGATORED')
    {
    	Er.jurinst_label = 'Institution';
    }
    
    /**************************************************************************************
    ****************************       BUTTON HANDLER     *********************************
    **************************************************************************************/
    bidBtnHandler = function(b,e)
    {
        // Check All Checkbox if all options are selected
        checkForAll(Ext.getCmp("bid_type_fs"));
        
        var fs = BidSearchPanel.find("name", "state_fs");
        if (fs.length)
        {
        	checkForAll(fs[0]);
        }
        
        fs = BidSearchPanel.find("name", "agency_type_fs");
        if (fs.length)
        {
        	checkForAll(fs[0]);
        }
        
        fs = Ext.getCmp("bid_category_fs");
        if (fs)
        {
            checkForAll(fs, true);
        }
        
        var form = BidSearchPanel.getForm();
        var values = form.getValues();
        
        var keywords = BidSearchPanel.find("name", "keywords");
        if (values.keywords == keywords[0].emptyText)
        {
        	values.keywords = '';
        }
        
        var url = "/search/bids?";
        
        for (var i in values)
        {
            url += i + "=" + values[i] + "&";
        }

        location.href = url;
    }
    
    bidResetHandler = function(b,e)
    {
    	var checkboxes = BidSearchPanel.findByType(Er.CheckBoxField);
    	var text_fields = BidSearchPanel.findByType(Er.TextField);
    	var radios = BidSearchPanel.findByType(Er.RadioButtonField);
    	
    	for (var i = 0; i < checkboxes.length; i++)
    	{
            checkboxes[i].setValue((checkboxes[i].name != 'jurinst'));
    	}
    	
    	for (var i = 0; i < text_fields.length; i++)
    	{
    		text_fields[i].setValue('');
    	}

    	for (var i = 0; i < radios.length; i++)
    	{
    		if (showCms)
    		{
    			radios[i].setValue((radios[i].inputValue == 'project'));
    		}
    		else
    		{
    			radios[i].setValue((radios[i].inputValue == 'title'));
    		}
    	}
    	
    	Ext.getCmp('search-mod-all-it-cats').fireEvent('check', Ext.getCmp('search-mod-all-it-cats'), false);
    	Ext.getCmp('search-mod-all-non-it-cats').fireEvent('check', Ext.getCmp('search-mod-all-non-it-cats'), false);
    }
    /**************************************************************************************
    ****************************       BIDS TAB        ************************************
    **************************************************************************************/
    var TopSection, BidTypeSection, StatesSection, LevelSection, AgencyTypeSection, CategorySection;
    
    //################### TOP SECTION #######################################################
    var keywordField = GetKeywordField();
    
    keywordField.on("keypress", function(f, e)
    {
    	if (e.keyCode == Ext.EventObject.ENTER)
    	{
    		bidBtnHandler();
    	}
    });
/*  tmp  
    TopSection = new Er.Panel(
    {
        layout:'column',
        bodyStyle: 'margin: 10px 0;',
        items:[
        {
        	style: 'margin-right:10px;',
        	border:false,
            defaults: {border:false,width: 100},
            items: [keywordField]
        },
        {   
        	border:false,
        	style: 'margin-right:5px;',
        	defaults:{border:false},
            items: [GetSearchBtn('bidBtnHandler')]
        },
        {
        	border:false,
            defaults:{border:false},
            items: [GetResetBtn('bidResetHandler')]
        }]
    })
    
    SearchPanelItems.push(TopSection);
*/    
    var statusFields = GetBidStatusField();
    
//    statusFields.unshift(GetjurinstField());
    
    
    
    if (showCms)
    {
       var DateStatus = new Er.Panel(
        {
            layout:'column',
            bodyStyle: 'padding:10px 0 !important;',
            items:[
            {
                width:100,
                layout:'form',
                border:false,
                labelAlign: 'top',
                style: 'margin-right:11px;',
                defaults: {width:83, listWidth:100},
                items: [GetStartDateField()]
            },
            {
            	width:100,
                border:false,
                defaults: {border:false},
                layout:'form',
                labelAlign: 'top',
                defaults: {width:83, listWidth:100},
                items: [GetEndDateField()]
            }]
        })
        
        SearchPanelItems.push(DateStatus);
        
        var download = new Er.CheckBoxField({name:'download', boxLabel:'<b>Download as .CSV file</b>'}) 
   	 	statusFields.unshift(download);
        SearchPanelItems.push(new Er.Panel({items: statusFields}));
             
    }
    else
    {
        var DateStatus = new Er.Panel(
        {
            layout:'column',
            bodyStyle: 'margin-bottom:10px;',
            items:[
            {
            	style: 'margin-right:11px;',
                border:false,
                defaults: {border:false},
                items: statusFields
            },
            {
            	width:100,
            	layout:'form',
                border:false,
                labelAlign: 'top',
                defaults: {width:83, listWidth:100},
                items: [GetDateRangeField()]
            }]
        })
        
        SearchPanelItems.push(DateStatus);
    }
    
    SearchPanelItems.push(GetKeywordTypesField(showCms, keywordField));
    
    SearchPanelItems.push(GetBidTypesField());
    
    //################### STATE FS #####################################################
    var Items = GetStatesField();
    
    Items.push(GetSearchBtn('bidBtnHandler'));
    
    var StateFS = new Er.Panel(
    {
        name: 'state_fs', 
        title: 'States', 
        items:Items,
        collapsible:true,
        collapsed:true,
        border:false,
        defaults:{border:false},
        animCollapse: false,
        titleCollapse:true
    }); 
    
    
    SearchPanelItems.push(StateFS);
    
    //################### LEVEL SECTION ################################################
    var levelItems, fs_title;
    
    if (jurinst.jurinst == 'Institutions')
    {
        fs_title = "Education Level";           
        levelItems = GetEdLevelsField();
    }
    else
    {
        fs_title = "Government Level";
        levelItems = GetGovLevelsField();
    }
    
    levelItems.push(GetSearchBtn('bidBtnHandler'));
    
    LevelSection = new Er.Panel(
    {
        id: 'level_fs', 
        title: fs_title, 
        items: levelItems, 
        collapsible:true, 
        collapsed:true,
        border:false,
        defaults:{border:false},
        animCollapse: false,
        titleCollapse:true
    });
    
    SearchPanelItems.push(LevelSection);
    
    //#################################### AGENCY TYPE FS ###################################
    
    if (location.host.indexOf("navigatorem") === -1)
    {
	    var Items = GetAgencyTypesField(agency_types);
	    
	    Items.push(GetSearchBtn('bidBtnHandler'));
	    
	    var agency_type_fs = new Er.Panel(
	    {
	        name: 'agency_type_fs', 
	        title: "Agency Types", 
	        items: Items, 
	        collapsible:true, 
	        collapsed:true,
	        border:false,
	        defaults:{border:false},
	        animCollapse: false,
	        titleCollapse:true
	    });
	    
	    SearchPanelItems.push(agency_type_fs);
    }
    //################### CATEGORIES SECTION ################################################
    
    SearchPanelItems.push(GetBidCategoriesField2()); 
    
    /**************************************************************************************
    ****************************       Search Panel        ********************************
    **************************************************************************************/
    var BidSearchPanel = new Er.FormPanel(
    {
        id: 'bids',
        labelAlign: 'top',
        autoHeight: true,
        items: SearchPanelItems,
        standardSubmit: true,
        defaults: {border:false},
        method: "GET",
        hidden:true
    });
    
    return BidSearchPanel;
}

function GetKeywordTypesField(showCms, keywordField)
{
	var qString = GetQueryString();
	var Items = [];
	
//------	
	
	 TopSection = new Er.Panel(
			    {
			        layout:'column',
			        bodyStyle: 'margin: 0 0 0 0 ;'
			        ,items:[
			        {
			        	style: 'margin-right:5px;',
			        	border:false,
			            defaults: {border:false,width: 90},
			            items: [keywordField]
			        } ,
			        {   
			        	border:false,
			        	style: 'margin-right:5px;',
			        	defaults:{border:false},
			            items: [GetSearchBtn('bidBtnHandler')]
			        },
			        {
			        	border:false,
			            defaults:{border:false},
			            items: [GetResetBtn('bidResetHandler')]
			        }
			        ]
			    })
			    
	 Items.push(TopSection);
	
//---	
	
	
	
	
	Items.push(new Er.RadioButtonField(
    {
        name: 'keyword_type', 
        checked: ((! showCms && (!qString  || !qString.keyword_type)) ||isChecked(qString, "keyword_type", 'title')), 
        inputValue:'title', 
        boxLabel: 'Search By Title/Description'
    }));

	Items.push(new Er.RadioButtonField(
		    {
		        name: 'keyword_type', 
		        checked: isChecked(qString, "keyword_type", 'jurisdiction'), 
		        inputValue:'jurisdiction', 
		        boxLabel: 'Search By ' + Er.jurinst_label
	}));
if (showCms)
{
    
    Items.push(new Er.RadioButtonField(
    {
        name: 'keyword_type', 
        checked: (!qString || !qString.keyword_type || isChecked(qString, "keyword_type", 'project')), 
        inputValue: 'project', 
        boxLabel:'Project #'
    }));
    
    Items.push(new Er.RadioButtonField(
    {
        name: 'keyword_type', 
        checked: isChecked(qString, "keyword_type", 'pk'), 
        inputValue: 'pk', 
        boxLabel: 'Pk'
    }));
        
    Items.push(new Er.RadioButtonField(
    {
        name: 'keyword_type', 
        checked: isChecked(qString, "keyword_type", 'user'), 
        inputValue: 'user', 
        boxLabel: 'Users'
    }));
    
    Items.push(new Er.RadioButtonField(
		    {
		        name: 'keyword_type', 
		        checked: isChecked(qString, "keyword_type", 'agency'), 
		        inputValue:'agency', 
		        boxLabel: 'Agency Pk'
	}));
    
}	
 //   Items.push(GetSearchBtn('bidBtnHandler'));
    
    var KeywordTypeFS = new Er.Panel(
    {
        title: 'Keyword Search',
        items: Items, 
        collapsible: true,
        collapsed: false,
        titleCollapse:true,
        border:false,
        defaults:{border:false},
        animCollapse: false
    });
    
    return KeywordTypeFS;
}

function GetBidStatusField()
{
	var qString = GetQueryString();
	var Items = [];
	Items.push(new Er.CheckBoxField(
    {
        name: 'open_bid', 
        checked: (!qString || isChecked(qString, "open_bid", "1")), 
        inputValue: 1, 
        boxLabel: 'Open Bids', 
        style:'padding:0; margin:0'
    }));
    
    Items.push(new Er.CheckBoxField(
    {
        name: 'close_bid', 
        checked: (!qString || isChecked(qString, "close_bid", "1")), 
        inputValue: 1, 
        boxLabel: 'Closed Bids',
        style:'padding:0; margin:0'
    }));
    
    return Items;
}

function GetBidTypesField()
{
	var bidTypeItems = [], qString = GetQueryString(), jurinst = GetjurinstData(), erateDefault, allDefault;
    
	erateDefault = (!qString || isChecked(qString, "bid_types", "ERATE"));
	allDefault   = (!qString || isChecked(qString, "allTypes", "1"));
	
	if (!qString && jurinst.jurinst == 'Jurisdictions')
    {
		erateDefault = !erateDefault;
        allDefault = !allDefault;
    }
	
    bidTypeItems.push(new Er.CheckBoxField({id: 'allTypes', inputValue: 1, boxLabel: 'All', checked: allDefault, listeners:{check: allCheckboxHandler}}));
    bidTypeItems.push(new Er.CheckBoxField({name: 'bid_types', checked: (!qString || isChecked(qString, "bid_types", "PRE-RFP")), inputValue: 'PRE-RFP', boxLabel: 'Pre-RFP',listeners:{check: singleAllCheckboxHandler}}));
    bidTypeItems.push(new Er.CheckBoxField({name: 'bid_types', checked: (!qString || isChecked(qString, "bid_types", "RFP")), inputValue: 'RFP', boxLabel: 'Bid/RFP',listeners:{check: singleAllCheckboxHandler}}));
    bidTypeItems.push(new Er.CheckBoxField({name: 'bid_types', checked: (!qString || isChecked(qString, "bid_types", "AWARDED")), inputValue: 'AWARDED, SOLE_SOURCE', boxLabel: 'Awards',listeners:{check: singleAllCheckboxHandler}}));
    
    if (location.host.indexOf('navigatorem') === -1)
    {
    	bidTypeItems.push(new Er.CheckBoxField({name: 'bid_types', checked: erateDefault, inputValue: 'ERATE', boxLabel: 'E-Rate',listeners:{check: singleAllCheckboxHandler}}));
    }
    
    bidTypeItems.push(GetSearchBtn('bidBtnHandler'));
    
    BidTypeSection = new Er.Panel(
    {
        id: 'bid_type_fs', 
        title: 'Bid Types',
        items:bidTypeItems, 
        collapsible: true,
        collapsed: true,
        titleCollapse:true,
        border:false,
        defaults:{border:false},
        animCollapse: false
    });
    
    return BidTypeSection;
}

Ext.applyIf(Ext,{
	toArray: function(obj)
	{
		var arr = [];
		
		for (var i in obj)
		{
			if (obj.hasOwnProperty(i)) arr.push(obj[i]);
		}
		
		return arr;
	}
});

/**
 * HANDLERS
 */
function onCheckHandler(cbox, checked)
{
    var cboxes = cbox.ownerCt.findByType('erCheckBoxField');

    var all_are_checked = checked;

    if (checked)
    {
        for (var i = 1; i < cboxes.length; i++)
        {
            if (!cboxes[i].getValue())
            {
                all_are_checked = false;
                break;
            }
        }
    }

    cboxes[0].suspendEvents();
    cboxes[0].setValue(all_are_checked);
    cboxes[0].resumeEvents();
}

function onAllCheckHandler(cbox, checked)
{
    var cboxes = cbox.ownerCt.findByType('erCheckBoxField');

    for (var i = 0; i < cboxes.length; i++)
    {
        cboxes[i].suspendEvents();
        cboxes[i].setValue(checked);
        cboxes[i].resumeEvents();
    }
}

function onCatCheckHandler(cbox, checked)
{
	onCheckHandler(cbox, checked);
	
	checkAllCats(cbox, checked);
}

function onCatAllCheckHandler(cbox, checked)
{
	onAllCheckHandler(cbox, checked);
	
	checkAllCats(cbox, checked);
}

function checkAllCats(cbox, checked)
{
	var all_are_checked = checked;
	var cboxes = cbox.ownerCt.ownerCt.findByType('erCheckBoxField');
	
	if (checked)
	{
		for (var i = 1; i < cboxes.length; i++)
		{
			if (!cboxes[i].checked)
			{
				all_are_checked = false;
				break;
			}
		}
	}
	
	cboxes[0].suspendEvents();
	cboxes[0].setValue(all_are_checked);
	cboxes[0].resumeEvents();
}

function onBeforeExpand(ct, animate)
{
	var panels = ct.ownerCt.findByType('erPanel');
	
	for (var i = 0; i < panels.length; i++)
	{
		panels[i].collapse();
	}
}

function BuildCategoryPanels(cats)
{
	var catPanels = {};
	var num_of_cols = 3.0;
	
	for (var type in cats)
	{
		if (cats.hasOwnProperty(type))
		{
			if (!catPanels[type])
			{
				var panel_id = type.replace(/_|\/|\ /g, '-') + '-fs';
				
				catPanels[type] = new Er.Panel({
						id: panel_id, 
						title: type, 
						border: false, 
						style:'padding:0; margin:0;',
						collapsible: true,
						collapsed: true,
						layout: 'column',
						animCollapse: false,
						titleCollapse: true,
						listeners: {beforeexpand: onBeforeExpand},
						defaults: {width: 230, border: false}
				});
				
				if (cats[type].length > 1)
				{
					catPanels[type].add(new Er.CheckBoxField({
						name: 'all_' + fword(type).toLowerCase(), 
						boxLabel: 'ALL ' + type.toUpperCase(), 
						fieldClass: 'checkbox', 
						listeners: {check: onCatAllCheckHandler}
					}));
				}
			}
			
			for (var i = 0; i < cats[type].length; i++)
			{
				var category = cats[type][i];
				
				catPanels[type].add(new Er.CheckBoxField({
					name: 'bid_categories', 
					id: category.pk,
					inputValue: category.pk,
					boxLabel: category.title, 
					fieldClass: 'checkbox', 
					listeners: {check: onCatCheckHandler}, 
					checked: category.check
				}));
			}
			
			catPanels[type].add(GetSearchBtn('bidBtnHandler'));
		}
	}
	
	return toArray(catPanels);
}

function GetBidCategoriesField2()
{
	var panel_opts = {height: '1%',
	    autoHeight: true,
	    collapsible: true,
	    collapsed: true,
	    titleCollapse: true,
	    animCollapse: false};
	
	var cats = Ext.decode(Ext.get('search-bid-categories').getValue());
	var ITPanels = [{xtype: 'erCheckBoxField', boxLabel: 'ALL IT CATEGORIES', id: 'search-mod-all-it-cats', name: 'all_it_cats', listeners: {check: onAllCheckHandler}}].concat(BuildCategoryPanels(cats['IT']));
	
	items = [];
	items.push({xtype:'label', html: '<h3>IT Categories</h3>'});
	items.push({
		xtype: 'erPanel',
		defaults: panel_opts,
		height: '1%',
	    autoHeight: true,
		items: ITPanels
	});
	
	if (location.host.indexOf("navigatorem") !== -1)
	{
		var NonITPanels = [{xtype: 'erCheckBoxField', boxLabel: 'ALL Non-IT CATEGORIES', id: 'search-mod-all-non-it-cats', name: 'all_non_it_cats', listeners: {check: onAllCheckHandler}}].concat(BuildCategoryPanels(cats['Non-IT']));

		items.push({xtype:'label', html: '<h3>Non-IT Categories</h3>'});
		items.push({
			xtype: 'erPanel',
			height: '1%',
		    autoHeight: true,
			defaults: panel_opts,
			items: NonITPanels
		});
	}
	
	items.push(GetSearchBtn('bidBtnHandler'));
	
	return {
	    xtype: 'panel',
	    title: 'Bid Categories',
	    id: 'bid_category_fs',
	    items: items,
	    height: '1%',
	    autoHeight: true,
	    collapsible: true,
	    collapsed: true,
	    titleCollapse: true,
	    animCollapse: false
	}	
}

function GetBidCategoriesField(category_groups, categories)
{
	var qString = GetQueryString();
    var categoryItems = [], category, categoryTypes = [], it_cats, em_cats;
    
    var categoriesHandler = function(b,checked)
    {
        var allCheckbox = b;
        var fieldSets = b.ownerCt.findByType(Er.Panel);
        
        for (var i = 0; i < fieldSets.length; i++)
        {
            fieldSets[i].items.each(function(item, index, length)
            {
                if (item.xtype == 'checkbox')
                {
                    item.setValue(checked);
                }
            }, this);
        }
    }
    
    var categoryHandler = function(b, checked)
    {
        if (!checked)
        {
            var allCheckbox = b.ownerCt.ownerCt.items.first();
            allCheckbox.removeListener("check", categoriesHandler);
            allCheckbox.setValue(checked); // set false
            allCheckbox.addListener("check", categoriesHandler);
        }
    }
    
    var onBeforeExpand = function(fs, animate)
	{
		fs.ownerCt.items.each(function(item, index, length){
			
			if (item.getXType() == 'erPanel')
			{
				item.suspendEvents();
				
				item.collapse();
				
				item.resumeEvents();
			}
		});
	}
    
    categoryTypes.push(new Er.CheckBoxField({id: 'allCategories', inputValue: 1, boxLabel: 'All Categories', checked: (!qString || isChecked(qString, "allCategories", "1")), listeners:{check: categoriesHandler}}));
    
    categoryTypes.push(GetSearchBtn('bidBtnHandler'));
    
    for (var i in categories)
    {
        categoryItems = [];
        
        if (categories[i].length > 1)
        {
            categoryItems.push();
        }
        
        for (var j = 0; j < categories[i].length; j++)
        {
            category = categories[i][j];
            categoryItems.push(new Er.CheckBoxField(
            {
                name: 'bid_categories', 
                checked: (!qString || isChecked(qString, "bid_categories", category.pk)), 
                inputValue: category.pk, 
                boxLabel: category.title,
                listeners:{check: categoryHandler}
            }));
        }
        
        categoryItems.push(GetSearchBtn('bidBtnHandler'));

        categoryTypes.push(new Er.Panel(
        {
            title: category_groups[i], 
            items: categoryItems, 
            collapsible:true, 
            collapsed:true, 
            titleCollapse:true, 
            border:false,
            defaults:{border:false},
            animCollapse: false,
            listeners: {beforeexpand: onBeforeExpand}
        }));
    }
    
    var CategorySection = new Er.Panel(
    {
        id: 'bid_category_fs', 
        title: "Bid Categories", 
        items: categoryTypes,
        collapsible:true, 
        collapsed:true,
        titleCollapse:true,
        border:false,
        defaults:{border:false},
        animCollapse: false
    });
    
    return CategorySection;
}
