YAHOO.infinity.tsp.ui.floorplanGrid = new Object();

YAHOO.infinity.tsp.ui.floorplanCriteria = new Object();

YAHOO.infinity.tsp.ui.floorplanCriteria.suspendCheckboxEvents = function()
{
    YAHOO.infinity.tsp.ui.floorplanCriteria.buildingAllCheckbox.suspendEvents();
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingACheckbox.suspendEvents();
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingBCheckbox.suspendEvents();
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingCCheckbox.suspendEvents();
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingDCheckbox.suspendEvents();
}

YAHOO.infinity.tsp.ui.floorplanCriteria.resumeCheckboxEvents = function()
{
    YAHOO.infinity.tsp.ui.floorplanCriteria.buildingAllCheckbox.resumeEvents();
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingACheckbox.resumeEvents();
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingBCheckbox.resumeEvents();
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingCCheckbox.resumeEvents();
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingDCheckbox.resumeEvents();
}

YAHOO.infinity.tsp.ui.floorplanCriteria.clearAll = function() {
    YAHOO.infinity.tsp.ui.floorplanCriteria.bedroomsCombo.clearValue();
    YAHOO.infinity.tsp.ui.floorplanCriteria.minFloorCombo.clearValue();
    YAHOO.infinity.tsp.ui.floorplanCriteria.maxFloorCombo.clearValue();
    YAHOO.infinity.tsp.ui.floorplanCriteria.sqFtCombo.clearValue();
    
    YAHOO.infinity.tsp.ui.floorplanCriteria.suspendCheckboxEvents();
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingAllCheckbox.setValue(false);
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingACheckbox.setValue(false);
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingBCheckbox.setValue(false);
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingCCheckbox.setValue(false);
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingDCheckbox.setValue(false);
	YAHOO.infinity.tsp.ui.floorplanCriteria.resumeCheckboxEvents();
}

YAHOO.infinity.tsp.ui.floorplanCriteria.processQueryForBuildings = function(query) {
  //  query = query.replace(new RegExp('BuildingA\\=(true|false)\\&'), 'BuildingA=' + YAHOO.infinity.tsp.ui.floorplanCriteria.buildingACheckbox.checked + '&');
  //  query = query.replace(new RegExp('BuildingB\\=(true|false)\\&'), 'BuildingB=' + YAHOO.infinity.tsp.ui.floorplanCriteria.buildingBCheckbox.checked + '&');
  //  query = query.replace(new RegExp('BuildingC\\=(true|false)\\&'), 'BuildingC=' + YAHOO.infinity.tsp.ui.floorplanCriteria.buildingCCheckbox.checked + '&');
  //  query = query.replace(new RegExp('BuildingD\\=(true|false)\\&'), 'BuildingD=' + YAHOO.infinity.tsp.ui.floorplanCriteria.buildingDCheckbox.checked + '&');

  query = query.replace(new RegExp('BuildingA\\=(true|false)\\&'), 'BuildingA=false&');
  query = query.replace(new RegExp('BuildingB\\=(true|false)\\&'), 'BuildingB=false&');
  query = query.replace(new RegExp('BuildingC\\=(true|false)\\&'), 'BuildingC=false&');
  query = query.replace(new RegExp('BuildingD\\=(true|false)\\&'), 'BuildingD=false&');
    return query;
}

YAHOO.infinity.tsp.ui.floorplanStore = new Object();

YAHOO.infinity.tsp.ui.floorplanStore.updateStore = function(response, options) {
    if (YAHOO.infinity.tsp.ui.floorplanStore.store != null) {
        YAHOO.infinity.tsp.ui.floorplanStore.store.loadData(response.responseXML, false);
        YAHOO.infinity.tsp.ui.floorplanStore.store.proxy = new Ext.data.PagingMemoryProxy(response.responseXML);
        YAHOO.infinity.tsp.ui.floorplanStore.store.load({params:{start:0, limit:2}});
    }
    else
    {
        YAHOO.infinity.tsp.ui.floorplanStore.loadStore(response, options);
    }
}

YAHOO.infinity.tsp.ui.floorplanStore.loadStore = function(response, options) {
	YAHOO.infinity.tsp.ui.floorplanStore.store = new Ext.data.Store({
        // load using HTTP
        proxy: new Ext.data.PagingMemoryProxy(response.responseXML),
		// the return will be XML, so lets set up a reader
        reader: new Ext.data.XmlReader({
               // records will have an "Item" tag
               record: 'unit',
               id: 'unitnum'
			   //,
               //totalRecords: 'count(unit)'
           }, [
               // set up the fields mapping into the xml doc
               // The first needs mapping, the others are very basic
               'image',
               'url',
               {name: 'UnitNum', mapping: '@unitnum'}, 
               {
			   	name: 'weight',
			   	type: 'int'
			   },
			   {
			   	name: 'size',
			   	type: 'int'
			   },
               {name: 'bedrooms',
			   	type: 'int'
			   }, 
			   {name: 'bathrooms',
			   	type: 'int'
			   },
			   'building',
               'floors'
           ]),
               remoteSort: true
    });
    
    var loadHandler = function(records, options) {
        YAHOO.util.Dom.get("floorplanGrid_numMatching").innerHTML = this.totalLength;
        if (YAHOO.infinity.tsp.ui.floorplanStore.store.totalLength > 0)
        {
	        YAHOO.util.Dom.get("rightcontent").className="floorplansGrid";
        }
        else
        {
            YAHOO.util.Dom.get("rightcontent").className="floorplansNoRecords";
        }
    }
    
    YAHOO.infinity.tsp.ui.floorplanStore.store.on('load', loadHandler);
	
	function linkRenderer(val, metadata, record) {
	    var retVal = "<a href=\"#\" onclick=\"YAHOO.infinity.tsp.ui.floorplanOverlay.showDialog(event, '../images/floorplans/large"+record.data.image+"','"+record.data.bedrooms+"','"+record.data.bathrooms+"','"+record.data.size+"*','"+record.data.building.replace(/\n/g, '')+"','../images/floorplans/"+record.data.url+"');\" class=\"floorplan-detail-button\"><img src=\"../images/floorplans/"+val+"\" height=\"100\" border=\"0\" /></a>";
	    retVal += "<div class=\"gridlinks\"><a href=\"#\" onclick=\"YAHOO.infinity.tsp.ui.floorplanOverlay.showDialog(event, '../images/floorplans/large"+record.data.image+"','"+record.data.bedrooms+"','"+record.data.bathrooms+"','"+record.data.size+"*','"+record.data.building.replace(/\n/g, '')+"','../images/floorplans/"+record.data.url+"');\" class=\"floorplan-detail-button\">View Details</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<a href=\"../images/floorplans/"+record.data.url+"\" target=\"_blank\">Download PDF</a></div>";
	    
	    return retVal;
	    
	}

    function asteriskRenderer(val) {
	    return val+" *";
	}
	
	function bedRenderer(val) {
	    if (val > 0) return val;
	    return "Studio";
	}
		
	YAHOO.util.Dom.get("floorplanGrid").innerHTML="";
	
    // create the YAHOO.infinity.tsp.ui.floorplanGrid.grid
    YAHOO.infinity.tsp.ui.floorplanGrid.grid = new Ext.grid.GridPanel({
        store: YAHOO.infinity.tsp.ui.floorplanStore.store,
        columns: [
            {header: "FLOOR PLAN", width: 310, dataIndex: 'image', 
            renderer: linkRenderer,
            sortable: false},
            {header: "SQ FT", width: 75, dataIndex: 'size', sortable: true,
            renderer: asteriskRenderer},
            {header: "BED", width: 55, dataIndex: 'bedrooms', sortable: true,
            renderer: bedRenderer},
            {header: "BATH", width: 55, dataIndex: 'bathrooms', sortable: true},
            {header: "BUILDING", width: 135, dataIndex: 'building', sortable: false}
        ],
        renderTo:'floorplanGrid',
        enableHdMenu: false,
        viewConfig: {
            forceFit: false
        },
        width:647,
        height:353
    ,
        bbar: new Ext.PagingToolbar({
            pageSize: 2,
            store: YAHOO.infinity.tsp.ui.floorplanStore.store,
            displayInfo: true,
            displayMsg: 'Displaying floorplans {0} - {1} of {2}<br />*Approximate',
            emptyMsg: "No floorplans to display"
        })
	});
    YAHOO.infinity.tsp.ui.floorplanStore.store.load({params:{start:0, limit:2}});
    YAHOO.infinity.tsp.ui.floorplanStore.store.sort('size', 'DESC');
         
}

Ext.onReady(function(){
	
	var floorArray = [[-1,'-']];
	for(var i=1;i<=42;i++) {
		floorArray[i] = [
			i,
			i
		];
	}
	
	var sqFtArray = [
	    [-1,-1,'-'],
	    [500,999,'500 to 999'],
	    [1000,1500,'1,000 to 1,499'],
	    [1500,3400,'1,500 to 3,400']
    ];

	var bedroomsArray = [
	    [-1,'-'],
	    // [0,'Studio'],
	    [1,1],
	    [2,2],
	    [3,3]
    ];
	
	var filterStringInit = "Floor=-1&MinFloor=-1&MaxFloor=-1&MinSqFt=-1&MaxSqFt=-1&Bedrooms=-1&BuildingA=true&BuildingB=true&BuildingC=true&BuildingD=true&";
	var filterString = filterStringInit;
	function buildFilter(param, data) {
	    if (param == 'Floor' || param == 'MinFloor' || param == 'MaxFloor'
	         || param == 'Bedrooms') {
	        filterString = filterString.replace(new RegExp(param + '\\=\\-{0,1}\\d+\\&'), param + '=' + data.val + '&');
	        Ext.Ajax.request({
	           url: '../GetFloorplans.asmx/Filter',
	           success: YAHOO.infinity.tsp.ui.floorplanStore.updateStore,
	           method:'POST',
	           params:filterString,
	           failure: failure
	        });
	    }
	    else if (param == 'BuildingAll' || param == 'BuildingA' || param == 'BuildingB' || param == 'BuildingC' || param == 'BuildingD') {
	        filterString = YAHOO.infinity.tsp.ui.floorplanCriteria.processQueryForBuildings(filterString);
	        Ext.Ajax.request({
	           url: '../GetFloorplans.asmx/Filter',
	           success: YAHOO.infinity.tsp.ui.floorplanStore.updateStore,
	           method:'POST',
	           params:filterString,
	           failure: failure
	        });	    
	    }
	    else if (param == 'SqFt') {
	        filterString = filterString.replace(new RegExp('MinSqFt\\=\\-{0,1}\\d+\\&'), 'MinSqFt=' + data.minsqft + '&');
	        filterString = filterString.replace(new RegExp('MaxSqFt\\=\\-{0,1}\\d+\\&'), 'MaxSqFt=' + data.maxsqft + '&');
	        Ext.Ajax.request({
	           url: '../GetFloorplans.asmx/Filter',
	           success: YAHOO.infinity.tsp.ui.floorplanStore.updateStore,
	           method:'POST',
	           params:filterString,
	           failure: failure
	        });	    
	    }
	}

    YAHOO.infinity.tsp.ui.floorplanCriteria.bedroomsCombo = new Ext.form.ComboBox({
        store: new Ext.data.SimpleStore({
            fields: ['val', 'bedname'],
            data : bedroomsArray
        }),
        style: 'font-size:10px;text-align:center',
        width:55,
        displayField:'bedname',
        editable: false,
        mode: 'local',
        triggerAction: 'all',
        emptyText:'-',
        selectOnFocus:true,
        applyTo: 'filterBedrooms'
    });

    YAHOO.infinity.tsp.ui.floorplanCriteria.bedroomsCombo.on('select', function(scope, record, index) {
	        buildFilter('Bedrooms', record.data); 
	    });
	    

    YAHOO.infinity.tsp.ui.floorplanCriteria.sqFtCombo = new Ext.form.ComboBox({
        store: new Ext.data.SimpleStore({
            fields: ['minsqft', 'maxsqft', 'text'],
            data : sqFtArray
        }),
        style: 'font-size:10px;text-align:center',
        width: 86,
        listWidth: 100,
        displayField:'text',
        editable: false,
        mode: 'local',
        triggerAction: 'all',
        emptyText:'-',
        selectOnFocus:true,
        applyTo: 'filterSqFt'
    });
    
    YAHOO.infinity.tsp.ui.floorplanCriteria.sqFtCombo.on('select', function(scope, record, index) {
	        buildFilter('SqFt', record.data); 
	    });	
	
    YAHOO.infinity.tsp.ui.floorplanCriteria.minFloorCombo = new Ext.form.ComboBox({
        store: new Ext.data.SimpleStore({
            fields: ['val', 'floorname'],
            data : floorArray
        }),
        width:40,
        style: 'font-size: 10px;text-align:center',
        displayField:'floorname',
        editable: false,
        mode: 'local',
        triggerAction: 'all',
        emptyText:'-',
        selectOnFocus:true,
        applyTo: 'filterMinFloor'
    });
    YAHOO.infinity.tsp.ui.floorplanCriteria.maxFloorCombo = new Ext.form.ComboBox({
        store: new Ext.data.SimpleStore({
            fields: ['val', 'floorname'],
            data : floorArray
        }),
        width:40,
        style: 'font-size: 10px;text-align:center',
        displayField:'floorname',
        editable: false,
        mode: 'local',
        triggerAction: 'all',
        emptyText:'-',
        selectOnFocus:true,
        applyTo: 'filterMaxFloor'
    });
        
    YAHOO.infinity.tsp.ui.floorplanCriteria.minFloorCombo.on('select', function(scope, record, index) {
	        buildFilter('MinFloor', record.data); 
	    });
    YAHOO.infinity.tsp.ui.floorplanCriteria.maxFloorCombo.on('select', function(scope, record, index) {
	        buildFilter('MaxFloor', record.data); 
	    });
	    
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingAllCheckbox = new Ext.form.Checkbox({
        autoCreate: true,
        renderTo: 'filterBuildingAll',
        checked: false
        });

	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingACheckbox = new Ext.form.Checkbox({
        autoCreate: true,
        renderTo: 'filterBuildingA',
        checked: false
        });
        
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingBCheckbox = new Ext.form.Checkbox({
        autoCreate: true,
        renderTo: 'filterBuildingB',
        checked: false
        });


	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingCCheckbox = new Ext.form.Checkbox({
        autoCreate: true,
        renderTo: 'filterBuildingC',
        checked: false
        });
        
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingDCheckbox = new Ext.form.Checkbox({
        autoCreate: true,
        renderTo: 'filterBuildingD',
        checked: false
        });

    YAHOO.infinity.tsp.ui.floorplanCriteria.buildingAllCheckbox.on('check', function(scope, val) {
	        if (val)
	        {
	            YAHOO.infinity.tsp.ui.floorplanCriteria.suspendCheckboxEvents();
	            YAHOO.infinity.tsp.ui.floorplanCriteria.buildingACheckbox.setValue(false);
	            YAHOO.infinity.tsp.ui.floorplanCriteria.buildingBCheckbox.setValue(false);
	            YAHOO.infinity.tsp.ui.floorplanCriteria.buildingCCheckbox.setValue(false);
	            YAHOO.infinity.tsp.ui.floorplanCriteria.buildingDCheckbox.setValue(false);
	            YAHOO.infinity.tsp.ui.floorplanCriteria.resumeCheckboxEvents();
	        }
	        var data = new Object();
	        data.val = val;
	        buildFilter('BuildingAll', data); 
	    });
	    
	var checkHandler = function(scope, val) {
	    var filterParam = "";
	    if (!val)
	    {
	        YAHOO.infinity.tsp.ui.floorplanCriteria.suspendCheckboxEvents();
	        YAHOO.infinity.tsp.ui.floorplanCriteria.buildingAllCheckbox.setValue(false);
	        YAHOO.infinity.tsp.ui.floorplanCriteria.resumeCheckboxEvents();
	    }
	    switch (scope.container.id)
	    {
	        case 'filterBuildingA':
	            filterParam = 'BuildingA';
	            break;
	        case 'filterBuildingB':
	            filterParam = 'BuildingB';
	            break;
	        case 'filterBuildingC':
	            filterParam = 'BuildingC';
	            break;
	        case 'filterBuildingD':
	            filterParam = 'BuildingD';
	            break;
	    }
	    var data = new Object();
        data.val = val;
        buildFilter(filterParam, data); 
	}
	
	YAHOO.infinity.tsp.ui.floorplanCriteria.buildingACheckbox.on('check', checkHandler);
    YAHOO.infinity.tsp.ui.floorplanCriteria.buildingBCheckbox.on('check', checkHandler);
    YAHOO.infinity.tsp.ui.floorplanCriteria.buildingCCheckbox.on('check', checkHandler);
    YAHOO.infinity.tsp.ui.floorplanCriteria.buildingDCheckbox.on('check', checkHandler);

    YAHOO.infinity.tsp.ui.floorplanGrid.gotAll = function(response, options) {
        YAHOO.infinity.tsp.ui.floorplanStore.loadStore(response, options);
        filterString = filterStringInit;
	    YAHOO.infinity.tsp.ui.floorplanCriteria.clearAll();
    }
    
	YAHOO.infinity.tsp.ui.floorplanGrid.getAll = function(e) {
	YAHOO.util.Event.preventDefault(e);
	Ext.Ajax.request({
	   url: '../GetFloorplans.asmx/All',
	   success: YAHOO.infinity.tsp.ui.floorplanGrid.gotAll,
	   method:'GET',
	   failure: failure
	});
} 
	    
    YAHOO.util.Event.addListener("floorplans_getAllLink", "click", YAHOO.infinity.tsp.ui.floorplanGrid.getAll, YAHOO.infinity.tsp.ui.floorplanGrid, true);

});

function failure(thing) {
 document.write(thing.responseText);
}