Ext.onReady(function(){
Ext.namespace('Settings');					 
Ext.QuickTips.init();

function BlankVar(xx) {	if (!xx) { return "";} return xx; }
function fixnum(xx) {if (xx < 10) { xx = "0" + xx; } return xx; }
function removeSpaces(string) { return string.split(' ').join('');}

var specialreader=new Ext.data.JsonReader({totalProperty: 'Count', root: 'special', id: 's_special'},['date','Special','Comment']);
var specialstore=new Ext.data.Store({reader:specialreader});

var datareader=new Ext.data.JsonReader({totalProperty: 'Count', root: 'data', id: 's_data'},['date','roll','topic','manual','length','description','col','introduction']);
var datastore=new Ext.data.Store({reader:datareader});

var reader=new Ext.data.JsonReader({totalProperty: 'Count', root: 'loads', id: 's_loads'},['title','date1','date2','date3','date4']);
var store=new Ext.data.Store({reader:reader});

var settingsreader=new Ext.data.JsonReader({totalProperty: 'Count', root: 'settings', id: 's_settings'},['modify_days','current_date','lower_date','upper_date','toastmaster_changes']);
var settingsstore=new Ext.data.Store({reader:settingsreader});

var datereader=new Ext.data.JsonReader({totalProperty: 'Count', root: 'dates', id: 's_dates'},['date']);
var datestore=new Ext.data.Store({reader:datereader});

function UpdateStores() {
	Ext.getBody().mask('Loading...', 'x-mask-loading');	
var conn = new Ext.data.Connection();
conn.request({              
	url: 'calendar.inc.php?a=combo&vdate=' + BlankVar(Settings.date) + "&prev=" + BlankVar(Settings.prev),
	success: function (response) {
		var jsonData = Ext.util.JSON.decode(response.responseText);
		specialstore.loadData(jsonData);
		datastore.loadData(jsonData);
		datestore.loadData(jsonData);
		settingsstore.loadData(jsonData);
		store.loadData(jsonData);
		Ext.getBody().unmask();
		
	}
});
}
UpdateStores();

var manualproxy=new Ext.data.HttpProxy({url:'manual.json'}); 
var manualreader=new Ext.data.JsonReader({},[{name: 'mid'}, {name: 'description'}, {name: 'time'}, {name: 'max_time'}, {name: 'objectives'}]);
var manualstore=new Ext.data.Store({proxy:manualproxy,reader:manualreader});
manualstore.load();

var userproxy=new Ext.data.HttpProxy({url:'calendar.inc.php?a=user'}); 
var userreader=new Ext.data.JsonReader({},[{name: 'id'}, {name: 'name'}]);
var userstore=new Ext.data.Store({proxy:userproxy,reader:userreader});
userstore.load();

settingsstore.on("load", function() {								  						  
	var rec = settingsstore.getAt(0);								  
	Settings.modify_days = rec.get('modify_days');
	Settings.current_date = rec.get('current_date');
	Settings.lower_date = rec.get('lower_date');
	Settings.upper_date = rec.get('upper_date');
	Settings.toastmaster_changes = rec.get('toastmaster_changes');
});

function renderHeader(value, metadata){		
	metadata.attr = 'style="color:#000000; background-color:#EFF0F2; border: 1px solid #EFF0F2; border-width:0 1 0 0;font-size: 14px;"';
	return value.replace(/_/g,' ');
}

function renderCell(value, metadata, record, rowIndex, colIndex) {
	var m_roll = record.get('title');	
	var qt = "", att = "";
	var today = new Date();
	var dt = new Date();
	var drow = datestore.getAt(colIndex - 1);
	dt = Date.parse(drow.get('date'));
	if (dt < today) {metadata.css = 'old-date';}
	
	for(i=0;i< datastore.getCount();i++) {
		var rec = datastore.getAt(i);	
		if (rec.get('col') == colIndex && rec.get('roll') == m_roll) {
			if (m_roll.indexOf("Speaker") != -1) { var cont = "<u>Title</u>: "+rec.get('topic')+"<br><u>Manual</u>: "+rec.get('manual');}
			if (m_roll.indexOf("Table") != -1) { var cont = "<u>Table Topic</u>: "+rec.get('topic');}
			metadata.attr =  'ext:qtip="' + cont + '"';
			break;
		}				
	} 
	return value;
}

var grid_cal = new Ext.grid.GridPanel({
loadMask: {msg: 'Loading...'},  	
id: 'gridc',
ds: store,
frame:false,
width: 720,
renderTo: 'calendar_box',
autoHeight: true,
stripeRows: false, 
enableColumnMove: false,
enableColumnResize: false,
trackMouseOver: false,
viewConfig: { enableRowBody:true },
sm: new Ext.grid.CellSelectionModel({
	listeners: {
		beforecellselect: 
			function(sm, row, col) {
				if (col == 0) {return false;} 
				return true;
			}
	}
}),
columns: [
		{header: " ", width: 150, dataIndex: 'title', renderer: renderHeader, sortable: false, menuDisabled: true,enableColumnResize: false},
		{header: "date1", id: "gd1", width: 120, dataIndex: 'date1', sortable: false, menuDisabled: true, renderer: renderCell},
		{header: "date2", id: "gd2", width: 120, dataIndex: 'date2', sortable: false, menuDisabled: true, renderer: renderCell},
		{header: "date3", id: "gd3", width: 120, dataIndex: 'date3', sortable: false, menuDisabled: true, renderer: renderCell},
		{header: "date4", id: "gd4", width: 120, dataIndex: 'date4', sortable: false, menuDisabled: true, renderer: renderCell}					
		]


});

function win_form_reset() {
	win_form.getForm().reset();
	document.getElementById('fldobjectives').innerHTML = "";
	document.getElementById('fldtime').innerHTML = "";	
}

function win_form_delete_function() {
  Ext.MessageBox.confirm('Confirm', 'Are you sure you want remove your participation in this meeting?' , 
  function(btn){ 
	if (btn == 'no') { return 0; }
	var scell = grid_cal.getSelectionModel().getSelectedCell();
	var columnName = grid_cal.getColumnModel().getColumnHeader(scell[1]);
	var roll_record = grid_cal.getStore().getAt(scell[0]);	
	var roll = roll_record.get("title");
	var conn_delete = new Ext.data.Connection();
	conn_delete.request({  			
		url: 'calendar.inc.php?a=delete&vdate=' + columnName + "&roll=" + roll,
		success: function (response) { win.hide(); win_form_reset(); UpdateStores(); },
		failure: function() { Ext.Msg.alert('Status','Error saving changes.'); }
	});	
 });
}

var win_member = new Ext.form.ComboBox({
	name:'win_form_member', id:'win_form_member', fieldLabel:'Member', hiddenName:"member",
	valueField:"id",displayField:'name', 
	mode: 'local',anchor:'95%',store: userstore,
	typeAhead: true,  triggerAction: 'all',selectOnFocus:true
});

var win_manual = new Ext.form.ComboBox({name:'win_form_manual', id:'win_form_manual', fieldLabel:"Manual",valueField:"mid",hiddenName:"manual",mode: 'remote',anchor:'95%',editable: false,triggerAction: 'all',store: manualstore,displayField:'description',allowBlank:false});
var win_length = new Ext.form.NumberField({name:'length', id:'win_form_length', fieldLabel:'Length', allowBlank: false});


var win_form = new Ext.FormPanel({
width:600,
autoHeight: true,
buttonAlign: "right",
frame:true, 
items: [
        win_member,
		{xtype:'textfield', name:'topic', id:'win_form_topic', fieldLabel: 'Title', anchor:'95%'},
		{xtype: 'textarea', name: 'introduction', id:'win_form_introduction', fieldLabel:'Introduction',grow: true,anchor:'95%' },
		win_manual,
		{cls:"manual-list-description", id:"fldobjectives", name:"fldobjectives" },
		{cls:"manual-list-description", id:"fldtime", name:"fldtime" },
		{cls:"win-notice", id:"fldnotice", name:"fldnotice"},
		win_length	
],
buttons: [{
	text     : 'Submit',
	id: "win_form_submit", name:"win_form_submit",
	handler: function() {
		if(win_form.getForm().isValid()) {
			var scell = grid_cal.getSelectionModel().getSelectedCell();
			var columnName = grid_cal.getColumnModel().getColumnHeader(scell[1]);
			var roll_record = grid_cal.getStore().getAt(scell[0]);	
			var roll = roll_record.get("title");
		
			win_form.el.mask('Saving...', 'x-mask-loading');	
			if (Settings.toastmaster_editing) {
				//usrec = userstore.getAt(userstore.find('name',win_form.findById("win_form_member").getValue()));
				//usid = usrec.get('id');
				usid = win_form.findById("win_form_member").getValue();
				tme = "1";
				//userstore.reload();
				usrec = userstore.getAt(userstore.find('id',usid));
				usname = usrec.get('name');
				//Make sure the selected member is not already assigned a roll.
				
		for(i=0;i<=grid_cal.getStore().getCount()-1;i++) {
			if (i == scell[0]) {continue;}
			var rc = grid_cal.getStore().getAt(i);  		
			var dt = rc.get("date"+scell[1]);
			
			if (dt && (dt.toLowerCase() == usname.toLowerCase())) { 
				Ext.Msg.alert('Error',usname + ' has already been assigned a roll for this meeting.');
				win_form.el.unmask();
				return; 
			}
		}
			
			} else {
				usid = 0;
				tme = "0";
			}
			
			var conn = new Ext.data.Connection();
			conn.request({              
				method: 'POST',
				url:'calendar.inc.php?a=save&vdate=' + columnName + "&roll=" + roll,
				params: {
					topic: win_form.findById("win_form_topic").getValue(),
					introduction: win_form.findById("win_form_introduction").getValue(),
					manual: win_form.findById("win_form_manual").getValue(),
					length: win_form.findById("win_form_length").getValue(),
					member: usid,
					tmedited: tme
				},
				success: function () {
					win.hide(); win_form_reset(); UpdateStores();
					win_form.el.unmask();
					
				},
				failure: function() {win_form.el.unmask();Ext.Msg.alert('Status','Error saving changes.');} 
			});
	}} //end handler		
}, {text: 'Close',	handler  : function(){win.hide();win_form_reset();}
}, {text: 'Delete', handler : win_form_delete_function, id: "win_form_delete", name:"win_form_delete"}
]
});

var win = new Ext.Window({
layout: 'fit',
width: 600,
autoHeight: true,
closeAction :'hide',
title: "Registration",
plain: true,
modal: true,
frame: true,
items: [win_form]
});

function field_toggle(field,vis) {
	if (vis === true) {
		field.enable(); 
		field.show();
	} else {
		field.disable();// for validation
		field.hide();
	}	
	if (field.getEl().up('.x-form-item') !== null && field.getEl().up('.x-form-item') !== "undefined") {
		field.getEl().up('.x-form-item').setDisplayed(vis);// toggle label if exists
	}
}

function toggle_win_form_type(tp) {
	/*  1 = speaker
		2 = non speaker
		3 = table topics master
		4 = toastmaster
		5 = master evaluator
	*/
	switch (tp) {
		case 1:
			field_toggle(win_form.findById("fldnotice"), false);
			field_toggle(win_form.findById("fldobjectives"), true);
			field_toggle(win_form.findById("fldtime"), true);
			field_toggle(win_form.findById('win_form_topic'), true);
			field_toggle(win_form.findById('win_form_length'), true);
			field_toggle(win_form.findById('win_form_manual'), true);
			field_toggle(win_form.findById('win_form_length'), true);	
			field_toggle(win_form.findById('win_form_introduction'), true);		
			field_toggle(win_form.findById('win_form_member'), Settings.toastmaster_editing);		
			break;
		case 2:
			field_toggle(win_form.findById("fldnotice"), true);
			field_toggle(win_form.findById("fldobjectives"), false);
			field_toggle(win_form.findById("fldtime"), false);
			field_toggle(win_form.findById('win_form_topic'), false);
			field_toggle(win_form.findById('win_form_length'), false);
			field_toggle(win_form.findById('win_form_manual'), false);
			field_toggle(win_form.findById('win_form_length'), false);	
			field_toggle(win_form.findById('win_form_introduction'), false);	
			field_toggle(win_form.findById('win_form_member'), Settings.toastmaster_editing);
			break;
		case 3:
			field_toggle(win_form.findById("fldnotice"), false);
			field_toggle(win_form.findById("fldobjectives"), false);
			field_toggle(win_form.findById("fldtime"), false);
			field_toggle(win_form.findById('win_form_topic'), true);
			field_toggle(win_form.findById('win_form_length'), false);
			field_toggle(win_form.findById('win_form_manual'), false);
			field_toggle(win_form.findById('win_form_length'), false);	
			field_toggle(win_form.findById('win_form_introduction'), true);				
			field_toggle(win_form.findById('win_form_member'), Settings.toastmaster_editing);
			break;
		case 4:
			field_toggle(win_form.findById("fldnotice"), false);
			field_toggle(win_form.findById("fldobjectives"), false);
			field_toggle(win_form.findById("fldtime"), false);
			field_toggle(win_form.findById('win_form_topic'), false);
			field_toggle(win_form.findById('win_form_length'), false);
			field_toggle(win_form.findById('win_form_manual'), false);
			field_toggle(win_form.findById('win_form_length'), false);	
			field_toggle(win_form.findById('win_form_introduction'), true);			
			field_toggle(win_form.findById('win_form_member'), false);
			break;	
		case 5:
			field_toggle(win_form.findById("fldnotice"), false);
			field_toggle(win_form.findById("fldobjectives"), false);
			field_toggle(win_form.findById("fldtime"), false);
			field_toggle(win_form.findById('win_form_topic'), false);
			field_toggle(win_form.findById('win_form_length'), false);
			field_toggle(win_form.findById('win_form_manual'), false);
			field_toggle(win_form.findById('win_form_length'), false);	
			field_toggle(win_form.findById('win_form_introduction'), true);			
			field_toggle(win_form.findById('win_form_member'), Settings.toastmaster_editing);
			break;				
			
	}
	win.syncSize();		
}

function Set_win_manual(vIndex) {
	var dat = manualstore.getAt(vIndex);	
	document.getElementById('fldobjectives').innerHTML = dat.get('objectives');
	if (dat.get('time') !== null) {
	  field_toggle(win_form.findById('win_form_length'), false);	
	  document.getElementById('fldtime').innerHTML = "Suggested Length: " + dat.get('time') + "<br>"; 
	  win.syncSize();		
	} else { 
	  field_toggle(win_form.findById('win_form_length'), true);	
	  document.getElementById('fldtime').innerHTML = "";
	  win.syncSize();		
	}
}

win_manual.on('select',function(c, r, i) {Set_win_manual(i);});

win.on('show',function(){win.center();});

var footer = new Ext.FormPanel({renderTo: 'calendar_nav',width: 720, bodyStyle: "padding-left:5px;padding-right:5px;",frame:true,items:[{html:''}],buttons: [{text: 'Prev',id: 'footer_prev'},{text:'Next Meeting',id:'footer_this'},{text: 'Next',id: 'footer_next'}]});
Ext.get('footer_prev').on("click", function() {Settings.prev = "1";Settings.date = Settings.upper_date;UpdateStores();});
Ext.get('footer_next').on("click", function() {Settings.prev = "";Settings.date = Settings.lower_date;UpdateStores();});
Ext.get('footer_this').on("click", function() {Settings.prev = "";Settings.date = "";UpdateStores();});

var footerb = new Ext.FormPanel({renderTo: 'calendar_navb',width: 720, bodyStyle: "padding-left:5px;padding-right:5px;",frame:true,items:[{html:''}],buttons: [{text: 'Prev',id: 'footer_prevb'},{text:'Next Meeting',id:'footer_thisb'},{text: 'Next',id: 'footer_nextb'}]});
Ext.get('footer_prevb').on("click", function() {Settings.prev = "1";Settings.date = Settings.upper_date;UpdateStores();});
Ext.get('footer_nextb').on("click", function() {Settings.prev = "";Settings.date = Settings.lower_date;UpdateStores();});
Ext.get('footer_thisb').on("click", function() {Settings.prev = "";Settings.date = "";UpdateStores();});

datestore.on('load', function() {
	var ct = datestore.getCount();
	ct++;
	for (var i = 1; i < ct; i++) {
		var dat = datestore.getAt(i-1);
		var cdt = dat.get('date');
		var cm = grid_cal.getColumnModel();
		cm.setColumnHeader(i, cdt);
		cm.setColumnWidth(i,140);
		cm.setDataIndex(i,'date'+ i);
	}
});

grid_cal.getStore().on('load', function() {$vv = new SpecialHandler().listEvents({grid: grid_cal, ss: specialstore});}, this);

// Show popup window
grid_cal.getSelectionModel().on('cellselect', function(sm, rowI, colI) {
	
	if (!sloggedin == '1') {return;} //Not logged in
	
	Settings.toastmaster_editing = false;
	var today = new Date(), dt = new Date();
	var drow = datestore.getAt(colI - 1);
	dt = Date.parse(drow.get('date'));
	
	var record = grid_cal.getStore().getAt(rowI);  
	var fieldName = grid_cal.getColumnModel().getDataIndex(colI); 
	var columnName = grid_cal.getColumnModel().getColumnHeader(colI);
	var data = record.get(fieldName);
	
	var tmrecord = grid_cal.getStore().getAt(2);
	var tmdata = tmrecord.get(fieldName);
	
	
	if ((tmdata !== null) && (sname.toLowerCase() == tmdata.toLowerCase()) && (rowI !== 2)) {
		// I am the toastmaster and I am not clicking on the toastmaster field
		var Date1 = new Date();
		var Date2 = new Date();
		var diff = new Date();
		colDate = columnName.replace(/-/g,'/');
		Date1.setTime(new Date(Settings.current_date));
		Date2.setTime(new Date(colDate));
		diff.setTime((Date1.getTime() - Date2.getTime()));
		timediff = diff.getTime();
		days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
		if (days > Settings.toastmaster_changes){return;} //We are passed the date limit on toastmaster changes
		Settings.toastmaster_editing = true;
	}
	

	if ((data && data.toLowerCase() !== null) && (sname.toLowerCase() != data.toLowerCase()) && (Settings.toastmaster_editing == false)) { return; } //Not my record
	
	if ((dt < today) && (Settings.toastmaster_editing == false)) {
		return; // Old record	
	}
	
	// Make sure they are not already on the list
	// Start at 1 to allow SAA to have a second roll
	if((data === null) && (Settings.toastmaster_editing == false)) {
		var colName = "date" + colI; 
		for(i=1;i<=grid_cal.getStore().getCount()-1;i++) {
			var rc = grid_cal.getStore().getAt(i);  		
			var dt = rc.get(colName);
			if (dt && dt.toLowerCase() == sname.toLowerCase()) { return; }
		}
	}

	columnName = columnName.replace(/-/g,'/');
	win.setTitle("Registration - " + columnName);	
	//Make sure column is within date limit
	var Date1 = new Date();
	var Date2 = new Date();
	var diff = new Date();
	Date1.setTime(new Date(Settings.current_date));
	Date2.setTime(new Date(columnName));
	diff.setTime(Math.abs(Date1.getTime() - Date2.getTime()));
	timediff = diff.getTime();
	days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
	
		
	var m_roll = record.get('title');	// get roll data
	m_roll = m_roll.replace(/_/g,"");
	win.show(this);
	if ((data) && ((data.toLowerCase() == sname.toLowerCase()) || (Settings.toastmaster_editing == true))) { //load old values 
		if (days < Settings.modify_days) {
			// passed date limit, dont show delete
			Ext.get('win_form_delete').hide();
		} else { 
			Ext.get('win_form_delete').show();
		}
		if (Settings.toastmaster_editing) {
			Ext.get('win_form_delete').show();
			urec = userstore.getAt(userstore.find('name',data));
			win_form.findById('win_form_member').setValue(urec.get('id'));
		}
		
		if (m_roll.indexOf("Speaker") != -1) { //Fill in speaker info
			toggle_win_form_type(1); //set form to speaker
			Ext.get('win_form_submit').show();
			
			for(i=0;i< datastore.getCount();i++) {
				var rec = datastore.getAt(i);
				if (rec.get('col') == colI && rec.get('roll').replace(/_/g,"") == m_roll) {				
					win_form.findById('win_form_topic').setRawValue(rec.get('topic'));	
					win_form.findById('win_form_length').setRawValue(rec.get('length'));	
					win_form.findById('win_form_manual').setValue(rec.get('manual'));
					win_form.findById('win_form_introduction').setValue(rec.get('introduction'));					
					Set_win_manual(manualstore.find('mid',rec.get('manual')));
					break;
				}
			}
		} else if (m_roll.indexOf("Table") != -1) { //table topics master
				toggle_win_form_type(3);							   
				Ext.get('win_form_submit').show();
				for(i=0;i< datastore.getCount();i++) {
					var rec = datastore.getAt(i);
					var recRoll = rec.get('roll').replace(/_/g,"");
					if (rec.get('col') == colI && recRoll == m_roll) {
						win_form.findById('win_form_topic').setRawValue(rec.get('topic')); 	
						win_form.findById('win_form_introduction').setValue(rec.get('introduction'));						
						break;
					}
				}
			} else if (m_roll.indexOf("Toast") != -1) { // toast master
				toggle_win_form_type(4);							   
				Ext.get('win_form_submit').show();
				for(i=0;i< datastore.getCount();i++) {
					var rec = datastore.getAt(i);
					var recRoll = rec.get('roll').replace(/_/g,"");
					if (rec.get('col') == colI && recRoll == m_roll) {
						win_form.findById('win_form_introduction').setValue(rec.get('introduction'));						
						break;
					}
				}			
			} else if (m_roll.indexOf("MasterE") != -1) { // master evaluator
				toggle_win_form_type(5);							   
				Ext.get('win_form_submit').show();
				for(i=0;i< datastore.getCount();i++) {
					var rec = datastore.getAt(i);
					var recRoll = rec.get('roll').replace(/_/g,"");
					if (rec.get('col') == colI && recRoll == m_roll) {
						win_form.findById('win_form_introduction').setValue(rec.get('introduction'));						
						break;
					}
				}						
			} else {
				toggle_win_form_type(2); //set form to non speaker
				document.getElementById('fldnotice').innerHTML = 'Selected ' + m_roll + ' for ' + columnName;
				Ext.get('win_form_submit').hide();
			}
		if (Settings.toastmaster_editing) {Ext.get('win_form_submit').show();}
	} else { 
		// New enrollment
		if (m_roll.indexOf("Speaker") != -1) { //speaker
			toggle_win_form_type(1); //set form to speaker
			field_toggle(win_form.findById('win_form_length'), false); //hide length text box
			win.syncSize();
		} else if (m_roll.indexOf("Table") != -1) { //table topics master
			toggle_win_form_type(3);							   
			Ext.get('win_form_submit').show();
		} else if (m_roll.indexOf("Toast") != -1) { // toast master				
			toggle_win_form_type(4);
			Ext.get('win_form_submit').show();
		} else if (m_roll.indexOf("MasterE") != -1) { // master evaluator			
			toggle_win_form_type(5);
			Ext.get('win_form_submit').show();				
		} else {			
			toggle_win_form_type(2); //set form to non speaker
			document.getElementById('fldnotice').innerHTML = 'Selecting ' + m_roll + ' for ' + columnName;
		}
		
		Ext.get('win_form_delete').hide(); //hide delete button
		Ext.get('win_form_submit').show();
	}

});


/*end ready */});