Ext.onReady(function() {
	// ==================== Create Player Store ====================
	var players = new Ext.data.Store({
        url: 'playerlist.php',

        reader: new Ext.data.JsonReader({
               root: 'players'
           }, [
               {name: 'name', mapping: 0}, {name: 'mwwlid', mapping: 1}, {name: 'team', mapping: 2}
           ])
    });
	players.on('beforeload', function(){
		var sb = Ext.getCmp('west-status');
		sb.showBusy();
	});
	players.on('load', function(){
		var sb = Ext.getCmp('west-status');
		sb.clearStatus({useDefaults: true});
	});
	
	var mainMask = new Ext.LoadMask(Ext.getBody(), {msg:"Loading Player List...", store: players});
	mainMask.show();
	
    // ==================== Create Tab Panel ====================
    var tabs = new Ext.TabPanel({
        region:'center',
		id: 'center-region',
        activeTab:0,
        margins: '5 5 5 5',
        resizeTabs:true, 
        minTabWidth: 115,
		deferredRender: false,
		enableTabScroll: true,
        items:[{ 
			id: 'player-info-tab',
            title: 'Player Info',
            contentEl: 'player-info',
			autoScroll: true
        }, { 
			id: 'player-batting-tab',
            title: 'Batting Stats',
            contentEl: 'player-batting',
			autoScroll: true
	    }, { 
			id: 'player-pitching-tab',
            title: 'Pitching Stats',
            contentEl: 'player-pitching',
			autoScroll: true
	    }, { 
			id: 'player-fielding-tab',
            title: 'Fielding Stats',
            contentEl: 'player-fielding',
			autoScroll: true
	    }, { 
			id: 'player-drafted-tab',
            title: 'Draft History',
            contentEl: 'player-drafted',
			autoScroll: true
	    }, { 
			id: 'player-traded-tab',
            title: 'Trade History',
            contentEl: 'player-traded',
			autoScroll: true
	    }, { 
			id: 'help-tab',
            title: 'Help',
            help: 'This is the help panel.  I should open a window and never be seen.'
	    }],
		bbar: new Ext.StatusBar({
	        id: 'tabs-status',

	        // defaults to use when the status is cleared:
	        defaultText: 'Ready... Select a player to view their career card.',
	        defaultIconCls: 'ready-icon',
	
			busyText: 'Loading Player Data...',
			busyIconCls: 'x-status-busy' ,
			
			// Initial Values
	        text: 'Ready... Select a player to view their career card.',
	        iconCls: 'ready-icon'
	    })
    });
	tabs.on('beforetabchange', function(tabs, newp, curp){
		if(newp.getId() == 'help-tab'){
			helpwin.show('center-region');
			helptabs.activate('helptabs-playerinfo');
			return false;
		}
		return true;
	});
 
    // ==================== Create Viewport Layout ====================
    var viewport = new Ext.Viewport({
        layout:'border', 
        defaults: {
            collapsible: false,
            split: true
        },
        items: [{
	    	title:'MWWL Player Career Database',
			id: 'north-region',
            region: 'north',
            contentEl: 'north', 
            margins: '5 5 5 5',
            height: 70,
	    	split:false,
			tools: [{
				id: 'help',
				handler: function(){
					helpwin.show('north-region');
					helptabs.activate('helptabs-about');
				},
				hidden: false
			}]
        },{
            title:'Select a Player',
			id: 'west-region',
            region:'west',
            contentEl: 'west', 
            margins: '5 5 5 5',
            cmargins: '5 5 5 5',
            width: 250,
			split: false,
			autoScroll: true,
			bbar: new Ext.StatusBar({
		        id: 'west-status',

		        // defaults to use when the status is cleared:
		        defaultText: 'Ready',
		        defaultIconCls: 'ready-icon',
		
				busyText: 'Loading Player List...',
				busyiconCls: 'x-status-busy',

		        // values to set initially:
		        text: 'Ready',
		        iconCls: 'ready-icon'
		    }),
			tbar: new Ext.form.ComboBox({
		        store: players,
		        displayField:'name',
		        typeAhead: false,
		        mode: 'local',
		        emptyText:'Search',
		        selectOnFocus:true,
				width: 250,
				hideTrigger: true,
				maxHeight: 0,
				listWidth: 0
		    }),
			tools: [{
				id: 'help',
				handler: function(){
					helptabs.activate('helptabs-playerlist');
					helpwin.show('west-region');
				},
				hidden: false
			}]
        },
        tabs 
        ]
    });

	var tabMask = new Ext.LoadMask(Ext.getCmp('center-region').getEl(), {msg:"Loading Player Data..."});

    // ==================== Render Player Grid ====================
    var grid = new Ext.grid.GridPanel({
        store: players,
		enableColumnHide: false,
		enableColumnResize: false,
		enableHdMenu: false,
        columns: [
            {header: "Name", width: 175, dataIndex: 'name', fixed: true, sortable: true},
            {header: "Team", width: 75, dataIndex: 'team', fixed: true, sortable: false}
        ],
		sm: new Ext.grid.RowSelectionModel({singleSelect: true}),
		viewConfig: {
			forceFit: true
		},
		split: false,
		autoHeight: true,
		renderTo: 'west'
    });
	grid.on('rowclick', function(grid, rowIndex, r){
		var bar = Ext.getCmp('tabs-status');
		bar.showBusy();
		tabMask.show();
		var north = Ext.get('north');
		north.update('Loading...');
		var row = grid.store.getAt(rowIndex);
		Ext.Ajax.request({
		   url: 'playerdata.php',
		   success: loadPlayerData,
		   failure: loadPlayerDataFail,
		   params: { mwwlid: row.get('mwwlid'), name: row.get('name'), team: row.get('team') }
		});
	});
	players.load();
	
	// Format the mlb link to actually be a link
	function linkformat(value, meta, record){
		if(record.data.mlb_link_enabled == 1)
			return "<a href='"+value+"' target='_blank'><b>Visit Baseball Reference</b></a>";
		return '';
	}
	// ==================== Initialize Player Info Grid ====================
	infodata = new Ext.data.Store({
	    reader: new Ext.data.JsonReader({
		    //root: segment,
        }, ['name', 'card', 'position', 'bday', 'age', 'd_e', 'lg', 'bats', 'mwbl', 'mlb_link', 'mlb_link_enabled'
		])
	});
	playerinfogrid = new Ext.grid.GridPanel({
	    title: 'Player Info',
		renderTo: 'player-info-grid',
	    store: infodata,
		frame: true,
		hidden: true,
		autoHeight: true,
		viewConfig: {
			forceFit: true
	    },
		columns: [
			{header: "Card", width: 50, sortable: true, dataIndex: 'card'},
			{header: "Team", width: 75, sortable: true, dataIndex: 'mwbl'},
			{header: "League", width: 50, sortable: true, dataIndex: 'lg'},
			{header: "B/T", width: 50, sortable: true, dataIndex: 'bats'},
			{header: "Birthdate", width: 100, sortable: true, dataIndex: 'bday'},
			{header: "Age", width: 50, sortable: true, dataIndex: 'age'},
			{header: "Position", width: 50, sortable: true, dataIndex: 'position'},
			{header: "Retired", width: 50, sortable: true, dataIndex: 'd_e'},
			{header: "Baseball Reference", width: 150, sortable: true, dataIndex: 'mlb_link', renderer: linkformat}
		]
	});
	
	// ==================== Initialize Awards Grid ====================
	awards = new Ext.data.Store({
	    reader: new Ext.data.JsonReader({
		    //root: segment,
        }, [{name:'Year', type: 'int'}, 'TEAM', 'CategoryName', 'League', 'Position'
		])
	});
	awardsgrid = new Ext.grid.GridPanel({
		renderTo: 'player-awards-list',
	    store: awards,
	    columns: [
	        {header: "Year", width: 50, sortable: true, dataIndex: 'Year'},
			{header: "Award", width: 200, sortable: true, dataIndex: 'CategoryName'},
			{header: "League", width: 50, sortable: true, dataIndex: 'League'},
			{header: "Team", width: 50, sortable: true, dataIndex: 'TEAM'},
			{header: "Pos", width: 50, sortable: true, dataIndex: 'Position'}	
		],
	    frame:true,
	    title: 'Awards',
		autoHeight: true,
		stripeRows: true,
		hidden: true
	});
	
	// ==================== Initialize Draft Grid ====================
	function drafttypeformat(type){
		types = Array();
		types['DFT'] = 'Annual';
		types['DIS'] = 'Dispersal';
		types['EXP'] = 'Expansion';
		types['WAV'] = 'Waiver';
		types['ING'] = 'Inaugural';
		if(type in types){
			return types[type];
		} else {
			return type
		}
	}
	drafts = new Ext.data.Store({
	    reader: new Ext.data.JsonReader({
		    //root: segment,
        }, [{name:'Draft_Year', type: 'int'}, 'Draft_Type', {name:'round', type: 'int'}, {name:'Pick', type: 'int'}, 
			'Team', 'tradee', 'Player', 'pos'
		])
	});
	draftgrid = new Ext.grid.GridPanel({
		renderTo: 'player-drafted-grid',
	    store: drafts,
	    columns: [
	        {header: "Year", width: 50, sortable: true, dataIndex: 'Draft_Year'},
			{header: "Type", width: 75, sortable: true, dataIndex: 'Draft_Type', renderer: drafttypeformat},
			{header: "Round", width: 50, sortable: true, dataIndex: 'round'},
			{header: "Pick", width: 50, sortable: true, dataIndex: 'Pick'},
			{header: "Team", width: 150, sortable: true, dataIndex: 'Team'},
			{header: "Traded To/Drafted By", width: 150, sortable: true, dataIndex: 'tradee'},
			{header: "Player", width: 150, sortable: true, dataIndex: 'Player'},	
			{header: "Position", width: 50, sortable: true, dataIndex: 'pos'}
		],
	    frame:true,
	    title: 'Draft History',
		autoHeight: true,
		stripeRows: true,
		hidden: true
	});
	
	// ==================== Renderers for Stat Grid Columns ====================
	// Format Batting Averages to have 3 decimal places
	function avgformat(num){
		num = new Number(num);
		if( num == 1 )
			return num.toFixed(3);
		return num.toFixed(3).toString().substr(1);
	}
	
	// Format Innings Played to have 1 decimal place
	function ipformat(num){
		return num.toFixed(1);
	}
	
	// Format ERA to have 3 decimal places
	function eraformat(num){
		return num.toFixed(2);
	}
	
	// Format Year to show PlyrTot
	function yearformat(num){
		if(num == 0)
			return 'PlyrTot';
		return num;
	}
	
	// Format the total rows so they stand out
	function rowcssclass(record){
		if(record.data.Year == 0)
			return 'totaltd';
		return '';
	}
	
	// ==================== Initialize Stat Sheet Variables ====================
	var segments = new Array(-1, 0, 1, 2, 3);
	var sfx = new Array();
	var titles = new Array();
	sfx[-1] = 'as';
	sfx[0] = 'reg';
	sfx[1] = 'ws';
	sfx[2] = 'lg';
	sfx[3] = 'div';
	
	titles[-1] = 'All-Star Game';
	titles[0] = 'Regular Season';
	titles[1] = 'World Series';
	titles[2] = 'League Playoffs';
	titles[3] = 'Division Series';
	
	// ==================== Initialize Batting Tables ====================
	var batstats = new Array();
	var batgrids = new Array();
	
	for(index in segments){
		if(typeof segments[index] != 'function'){
			segment = segments[index];
			shouldIcollapse = true
			if(segment == 0){ shouldIcollapse = false; }
			batstats[segment] = new Ext.data.Store({
			    reader: new Ext.data.JsonReader({
				    //root: segment,
		        }, [{name:'Year', type: 'int'}, 'Tm', {name:'Avg', type: 'float'}, {name:'G', type: 'int'}, 
					{name:'AB', type: 'int'}, {name:'R', type: 'int'}, {name:'H', type: 'int'}, 
					{name:'RBI', type: 'int'}, {name:'D', type: 'int'}, {name:'T', type: 'int'}, 
					{name:'HR', type: 'int'}, {name:'SO', type: 'int'}, {name:'BB', type: 'int'}, 
					{name:'SB', type: 'int'}, {name:'CS', type: 'int'}, {name:'PA', type: 'int'},
					{name:'Obp', type: 'float'}
				])
			});
			batgrids[segment] = new Ext.grid.GridPanel({
				renderTo: 'player-batting-'+sfx[segment],
			    store: batstats[segment],
			    columns: [
			        {header: "Year", width: 50, sortable: true, dataIndex: 'Year', renderer: yearformat},
					{header: "Team", width: 50, sortable: true, dataIndex: 'Tm'},
					{header: "Avg", width: 50, sortable: true, dataIndex: 'Avg', renderer: avgformat},
					{header: "OB%", width: 50, sortable: true, dataIndex: 'Obp', renderer: avgformat},
					{header: "G", width: 40, sortable: true, dataIndex: 'G'},
					{header: "PA", width: 40, sortable: true, dataIndex: 'PA'},
					{header: "AB", width: 40, sortable: true, dataIndex: 'AB'},
					{header: "R", width: 40, sortable: true, dataIndex: 'R'},
					{header: "H", width: 40, sortable: true, dataIndex: 'H'},
					{header: "RBI", width: 40, sortable: true, dataIndex: 'RBI'},
					{header: "2B", width: 40, sortable: true, dataIndex: 'D'},
					{header: "3B", width: 40, sortable: true, dataIndex: 'T'},
					{header: "HR", width: 40, sortable: true, dataIndex: 'HR'},
					{header: "SO", width: 40, sortable: true, dataIndex: 'SO'},
					{header: "BB", width: 40, sortable: true, dataIndex: 'BB'},
					{header: "SB", width: 40, sortable: true, dataIndex: 'SB'},
					{header: "CS", width: 40, sortable: true, dataIndex: 'CS'}
				],
			    viewConfig: {
					getRowClass: rowcssclass
			    },
			    frame:true,
			    title: titles[segment],
				autoHeight: true,
				collapsible: true,
				stripeRows: true,
				hidden: true,
				titleCollapse: true,
				collapsed: shouldIcollapse,
				tools: [{
					id: 'help',
					handler: function(){
						helptabs.activate('helptabs-playerstats');
						helpwin.show('center-region');
					},
					hidden: false
				}]
			});
		}
	}
	
	// ==================== Initialize Fielding Tables ====================
	var fieldstats = new Array();
	var fieldgrids = new Array();
	
	for(index in segments){
		if(typeof segments[index] != 'function'){
			segment = segments[index];
			shouldIcollapse = true
			if(segment == 0){ shouldIcollapse = false; }
			fieldstats[segment] = new Ext.data.Store({
			    reader: new Ext.data.JsonReader({
				    //root: segment,
		        }, [{name:'Year', type: 'int'}, 'Tm', 'Pos', {name:'G', type: 'int'}, 
					{name:'GS', type: 'int'}, {name:'IP', type: 'float'}, {name:'POuts', type: 'int'}, 
					{name:'Assts', type: 'int'}, {name:'Errs', type: 'int'}, {name:'DP', type: 'int'}, 
					{name:'FldPct', type: 'float'}
				])
			});
			fieldgrids[segment] = new Ext.grid.GridPanel({
				renderTo: 'player-fielding-'+sfx[segment],
			    store: fieldstats[segment],
			    columns: [
			        {header: "Year", width: 50, sortable: true, dataIndex: 'Year', renderer: yearformat},
					{header: "Team", width: 50, sortable: true, dataIndex: 'Tm'},
					{header: "Pos", width: 50, sortable: true, dataIndex: 'Pos'},
					{header: "G", width: 50, sortable: true, dataIndex: 'G'},
					{header: "GS", width: 50, sortable: true, dataIndex: 'GS'},
					{header: "IP", width: 50, sortable: true, dataIndex: 'IP', renderer: ipformat},
					{header: "PO", width: 50, sortable: true, dataIndex: 'POuts'},
					{header: "A", width: 50, sortable: true, dataIndex: 'Assts'},
					{header: "E", width: 50, sortable: true, dataIndex: 'Errs'},
					{header: "DP", width: 50, sortable: true, dataIndex: 'DP'},
					{header: "FldPct", width: 50, sortable: true, dataIndex: 'FldPct', renderer: avgformat}
				],
			    viewConfig: {
					getRowClass: rowcssclass
			    },
			    frame:true,
			    title: titles[segment],
				autoHeight: true,
				collapsible: true,
				stripeRows: true,
				hidden: true,
				titleCollapse: true,
				collapsed: shouldIcollapse,
				tools: [{
					id: 'help',
					handler: function(){
						helptabs.activate('helptabs-playerstats');
						helpwin.show('center-region');
					},
					hidden: false
				}]
			});
		}
	}
	
	// ==================== Initialize Pitching Tables ====================
	var pitchstats = new Array();
	var pitchgrids = new Array();
	
	for(index in segments){
		if(typeof segments[index] != 'function'){
			segment = segments[index];
			shouldIcollapse = true
			if(segment == 0){ shouldIcollapse = false; }
			pitchstats[segment] = new Ext.data.Store({
			    reader: new Ext.data.JsonReader({
				    //root: segment,
		        }, [{name:'Year', type: 'int'}, 'Tm', {name:'G', type: 'int'}, 
					{name:'GS', type: 'int'}, {name:'CG', type: 'int'}, {name:'W', type: 'int'}, 
					{name:'L', type: 'int'}, {name:'IP', type: 'float'}, {name:'ERA', type: 'float'}, 
					{name:'R', type: 'int'}, {name:'ER', type: 'int'}, {name:'H', type: 'int'},
					{name:'SO', type: 'int'}, {name:'BB', type: 'int'}, {name:'HRs', type: 'int'},
					{name:'Sho', type: 'int'}, {name:'Sves', type: 'int'}
				])
			});
			pitchgrids[segment] = new Ext.grid.GridPanel({
				renderTo: 'player-pitching-'+sfx[segment],
			    store: pitchstats[segment],
			    columns: [
			        {header: "Year", width: 50, sortable: true, dataIndex: 'Year', renderer: yearformat},
					{header: "Team", width: 50, sortable: true, dataIndex: 'Tm'},
					{header: "G", width: 40, sortable: true, dataIndex: 'G'},
					{header: "GS", width: 40, sortable: true, dataIndex: 'GS'},
					{header: "CG", width: 40, sortable: true, dataIndex: 'CG'},
					{header: "W", width: 40, sortable: true, dataIndex: 'W'},
					{header: "L", width: 40, sortable: true, dataIndex: 'L'},
					{header: "IP", width: 50, sortable: true, dataIndex: 'IP', renderer: ipformat},
					{header: "ERA", width: 50, sortable: true, dataIndex: 'ERA', renderer: eraformat},
					{header: "R", width: 40, sortable: true, dataIndex: 'R'},
					{header: "ER", width: 40, sortable: true, dataIndex: 'ER'},
					{header: "H", width: 50, sortable: true, dataIndex: 'H'},
					{header: "SO", width: 50, sortable: true, dataIndex: 'SO'},
					{header: "BB", width: 40, sortable: true, dataIndex: 'BB'},
					{header: "HRs", width: 40, sortable: true, dataIndex: 'HRs'},
					{header: "Sho", width: 40, sortable: true, dataIndex: 'Sho'},
					{header: "Saves", width: 40, sortable: true, dataIndex: 'Sves'}
				],
			    viewConfig: {
					getRowClass: rowcssclass
			    },
			    frame:true,
			    title: titles[segment],
				autoHeight: true,
				collapsible: true,
				stripeRows: true,
				hidden: true,
				titleCollapse: true,
				collapsed: shouldIcollapse,
				tools: [{
					id: 'help',
					handler: function(){
						helptabs.activate('helptabs-playerstats');
						helpwin.show('center-region');
					},
					hidden: false
				}]
			});
		}
	}
	
	// ==================== Functions to Update the Player Card ====================
	function updatePlayerInfo(Player){
		infodata.loadData(Player);
		if(infodata.getCount() > 0){
			Ext.get('player-info-message').hide({duration: .5, scope: this});
			Ext.get('player-info-message').setHeight(0,{duration: .5, scope: this});
			playerinfogrid.show();
			playerinfogrid.setTitle(Player[0].name);
		} else {
			playerinfogrid.hide();
			Ext.get('player-info-message').show({duration: .5, scope: this});
			Ext.get('player-info-message').setHeight(30,{duration: .5, scope: this});
		}
	}
	
	function updateAwards(Player){
		awards.loadData(Player);
		if(awards.getCount() > 0){
			Ext.get('player-awards-message').hide({duration: .5, scope: this});
			Ext.get('player-awards-message').setHeight(0,{duration: .5, scope: this});
			awardsgrid.show();
		} else {
			awardsgrid.hide();
			Ext.get('player-awards-message').show({duration: .5, scope: this});
			Ext.get('player-awards-message').setHeight(30,{duration: .5, scope: this});
		}
	}
	
	function updateDrafts(Player){
		drafts.loadData(Player);
		if(drafts.getCount() > 0){
			Ext.get('player-drafted-message').hide({duration: .5, scope: this});
			Ext.get('player-drafted-message').setHeight(0,{duration: .5, scope: this});
			draftgrid.show();
		} else {
			draftgrid.hide();
			Ext.get('player-drafted-message').show({duration: .5, scope: this});
			Ext.get('player-drafted-message').setHeight(30,{duration: .5, scope: this});
		}
	}
	
	var tradegrids = new Array();
	
	function updateTrades(Player){
		var trades = new Array();
		
		for(x in tradegrids){
			if(typeof tradegrids[x] == 'object')
				tradegrids[x].destroy();
		}
		Ext.get('player-traded-grid').update('');
		Ext.get('player-traded-message').show({duration: .5, scope: this});
		Ext.get('player-traded-message').setHeight(30,{duration: .5, scope: this});
		num = 0;
		for(trans in Player){
			shouldIcollapse = true;
			if(num == 0){ shouldIcollapse = false; }
			num++;
			if(typeof Player[trans].metaData != 'undefined'){
				if(Ext.get('player-traded-message').isVisible()){
					Ext.get('player-traded-message').hide({duration: .5, scope: this});
					Ext.get('player-traded-message').setHeight(0,{duration: .5, scope: this});
				}
				trades[trans] = new Ext.data.Store({
				    reader: new Ext.data.JsonReader()
				});
				trades[trans].loadData(Player[trans]);
				tradegrids[trans] = new Ext.grid.GridPanel({
					renderTo: 'player-traded-grid',
				    store: trades[trans],
				    columns: [
				        {header: "", width: 200, dataIndex: 'Team0'},
						{header: "", width: 200, dataIndex: 'Team1'},
						{header: "", width: 200, dataIndex: 'Team2'}
					],
				    frame:true,
				    title: "Transaction #" + trans + " : " + Player[trans].Date,
					autoHeight: true,
					stripeRows: true,
					collapsible: true,
					titleCollapse: true,
					collapsed: shouldIcollapse,
					tools: [{
						id: 'help',
						handler: function(){
							helptabs.activate('helptabs-player-draft-trades');
							helpwin.show('center-region');
						},
						hidden: false
					}]
				});
				cm = tradegrids[trans].getColumnModel()
				for(x in Player[trans].Teams){
					cm.setColumnHeader(x, Player[trans].Teams[x]+" Received");
				}
				cols = cm.getColumnsBy(function(col, index){
					if(cm.getColumnHeader(index) == ""){
						cm.setHidden(index, true);
						return true;
					}
					return false;
				});
				tradegrids[trans].on('celldblclick', function(grid, row, col){
					var record = grid.getStore().getAt(row);
			        var fieldName = grid.getColumnModel().getDataIndex(col);
			        var data = record.get(fieldName);
					Ext.MessageBox.confirm('Confirm', 'You have selected to go view the career page for '+data+'.  Are you sure you want to continue?', 
					function(btn){
						if(btn == 'yes'){
							var bar = Ext.getCmp('tabs-status');
							bar.showBusy();
							tabMask.show();
							Ext.Ajax.request({
							   url: 'playerdata.php',
							   success: loadPlayerData,
							   failure: loadPlayerDataFail,
							   params: { loadname: data }
							});
						}
					});
					
				});
				Ext.get('player-traded-grid').insertHtml('beforeend','<div class="spacer"></div>');
			}
		}
	}
	
	function updateBatting(Player){
		var num = 0;
		for(index in segments){
			segment = segments[index];
			if(typeof Player[segment] == 'object'){
				Ext.get('player-batting-message').hide({duration: .5, scope: this});
				Ext.get('player-batting-message').setHeight(0,{duration: .5, scope: this});
				num++;
				batstats[segment].loadData(Player[segment]);
				batgrids[segment].show();
				if(segment == 0){ batgrids[segment].expand(); }
				else { batgrids[segment].collapse(); }
			} else if(typeof batgrids[segment] == 'object'){
				batgrids[segment].hide();
			}
		}
		if(num == 0){
			Ext.get('player-batting-message').show({duration: .5, scope: this});
			Ext.get('player-batting-message').setHeight(30,{duration: .5, scope: this});
		}
	}
	
	function updateFielding(Player){
		var num = 0;
		for(index in segments){
			segment = segments[index];
			if(typeof Player[segment] == 'object'){
				Ext.get('player-fielding-message').hide({duration: .5, scope: this});
				Ext.get('player-fielding-message').setHeight(0,{duration: .5, scope: this});
				num++;
				fieldstats[segment].loadData(Player[segment]);
				fieldgrids[segment].show();
				if(segment == 0){ fieldgrids[segment].expand(); }
				else { fieldgrids[segment].collapse(); }
			} else if(typeof batgrids[segment] == 'object'){
				fieldgrids[segment].hide();
			}
		}
		if(num == 0){
			Ext.get('player-fielding-message').show({duration: .5, scope: this});
			Ext.get('player-fielding-message').setHeight(30,{duration: .5, scope: this});
		}
	}
	
	function updatePitching(Player){
		var num = 0;
		for(index in segments){
			segment = segments[index];
			if(typeof Player[segment] == 'object'){
				Ext.get('player-pitching-message').hide({duration: .5, scope: this});
				Ext.get('player-pitching-message').setHeight(0,{duration: .5, scope: this});
				num++;
				pitchstats[segment].loadData(Player[segment]);
				pitchgrids[segment].show();
				if(segment == 0){ pitchgrids[segment].expand(); }
				else { pitchgrids[segment].collapse(); }
			} else if(typeof batgrids[segment] == 'object'){
				pitchgrids[segment].hide();
			}
		}
		if(num == 0){
			Ext.get('player-pitching-message').show({duration: .5, scope: this});
			Ext.get('player-pitching-message').setHeight(30,{duration: .5, scope: this});
		}
	}
	
	// ==================== Load New Player Data ====================
	function loadPlayerData(res){
		var north = Ext.get('north');
		var Player = Ext.decode(res.responseText);
		
		// ========== Update Player Name ==========
		north.update(Player.name+"'s MWWL Career Card");
		
		// ========== Update Player Info ==========
		updatePlayerInfo(Player.info);
		
		// ========== Update Draft History ==========
		updateDrafts(Player.draft);
		
		// ========== Update Trade History ==========
		updateTrades(Player.trade);
		
		// ========== Update Player Awards ==========
		updateAwards(Player.awards);
		
		// ========== Update Batting Stats ==========
		updateBatting(Player.bat);
		
		// ========== Update Fielding Stats ==========
		updateFielding(Player.field);
		
		// ========== Update Pitching Stats ==========
		updatePitching(Player.pitch);
		
		var bar = Ext.getCmp('tabs-status');
		bar.clearStatus({useDefaults: true});
		tabMask.hide()
	}
	
	function loadPlayerDataFail(){
		var north = Ext.get('north');
		north.update('Select a Player to view Their Career Card');
		Ext.MessageBox.alert('Warning', 'Connection to server failed.  Unable to load player data');
	}
	
	
	// ==================== Create Help Information ====================
	var helptabs = new Ext.TabPanel({
		region: 'center',
		margins: '5 5 5 5',
		bodyStyle: 'padding: 5px;', 
		activeTab: 0,
		autoShow: true,
		autoScroll: true,
		defaults: {
			autoScroll: true
		},
		items: [{
			id: 'helptabs-playerlist',
			title: 'The Player List',
			contentEl: 'help-player-list'
    	},{
			id: 'helptabs-playerinfo',
			title: 'Player Information',
			contentEl: 'help-player-information'
    	},{
			id: 'helptabs-playerstats',
			title: 'Statistics Grids',
			contentEl: 'help-player-stats'
    	},{ 
			id: 'helptabs-player-draft-trades',
			title: 'Draft/Trades',
			contentEl: 'help-player-draft-trades'
   		},{ 
			id: 'helptabs-about',
			title: 'About',
			contentEl: 'help-about'
   		}]
	});

	var helpwin = new Ext.Window({
		title: 'MWWL Player Career Database Help',
		closable: true,
		closeAction: 'hide',
		width: 600,
		height: 350,
		plain: true,
		layout: 'border',
		modal: true,
		items: [helptabs]
	});
	
	// ==================== Get Player Data on Page Load for Remote Linking ====================
	if(Ext.get('getplayer')){
		var bar = Ext.getCmp('tabs-status');
		bar.showBusy();
		tabMask.show();
		Ext.Ajax.request({
		   url: 'playerdata.php',
		   success: loadPlayerData,
		   failure: loadPlayerDataFail,
		   params: { getname: Ext.get('getplayer').getValue() }
		});
	}
});
