YAHOO.namespace('cs');

YAHOO.cs.toggleVisibility = function(el){
	var display = YAHOO.util.Dom.getStyle(el, 'display');

	if(display && display == 'block') 
		YAHOO.util.Dom.setStyle(el, 'display', 'none');
	else
		YAHOO.util.Dom.setStyle(el, 'display', 'block');
		
	return YAHOO.util.Dom.getStyle(el, 'display');	
};


YAHOO.cs.toggleRelay = function(el,e,classname,tag,rootEl) {
	if (e) YAHOO.util.Event.preventDefault(e);
	
	if (el.innerHTML.indexOf('Show') != -1) {
		el.innerHTML = el.innerHTML.replace("Show","Hide");
	} else if (el.innerHTML.indexOf('Hide') != -1) {
		el.innerHTML = el.innerHTML.replace("Hide","Show");
	}
	
	var lis = YAHOO.util.Dom.getElementsByClassName(classname, tag, rootEl);
	for (var i=0; i < lis.length; i++) {
		YAHOO.cs.toggleVisibility(lis[i]);
	};
};


//calendar widget
YAHOO.cs.DatePicker = function(el,container){
	this.navConfig = {
	            strings : {
	                month: "Choose Month",
	                year: "Enter Year",
	                submit: "OK",
	                cancel: "Cancel",
	                invalidYear: "Please enter a valid year"
	            },
	            monthFormat: YAHOO.widget.Calendar.SHORT,
	            initialFocus: "year"
	};
	
    this.cal = new YAHOO.widget.Calendar(container,{ title:"Choose a date:", iframe:true,close:true, navigator:this.navConfig });
	this.cal.render();
    this.cal.hide();

    function handleSelect(type,args,obj) {
        var dates = args[0];
        var date = dates[0];
        var year = date[0], month = date[1], day = date[2];
        
        el.value = month + "/" + day + "/" + year;
        obj.hide();
    }

    this.cal.selectEvent.subscribe(handleSelect, this.cal, true);


	if (!el.value){
	    var now= new Date();
	    el.value =(now.getMonth()+1) + "/" + now.getDate() + "/" + now.getFullYear();
	}

	var mysqldate = el.value;
	var mysqldatearr = mysqldate.split('-');

	if(mysqldatearr.length == 3) {
		el.value = mysqldatearr[1]+"/"+mysqldatearr[2].split(' ')[0]+"/"+mysqldatearr[0];

	}
	
    //attach listener
    YAHOO.util.Event.on(el, 'click', function(e,obj){	  
	    if (e) YAHOO.util.Event.preventDefault(e);
		obj.show();
		var calcontainer = obj.containerId;
		var xy = YAHOO.util.Dom.getXY(el);    
		xy[1] +=21;                            	
		YAHOO.util.Dom.setXY(calcontainer,xy);
		YAHOO.util.Dom.setStyle(calcontainer, 'z-index', '9');	
		YAHOO.util.Dom.setStyle(calcontainer, 'width', '200px');			
    }, this.cal, true);

};



//swimmers autocomplete
YAHOO.cs.SwimmersAutoComplete = function(){       
        var dataUrl = "/ws/getSwimmers/";
        this.dataSource = new YAHOO.util.XHRDataSource(dataUrl);
  		this.dataSource.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
		this.dataSource.responseSchema = { 
			resultsList : "ResultSet", 
			fields : ["institution__name","name","id"] 
		};

        // Instantiate AutoComplete
        this.oAutoComp = new YAHOO.widget.AutoComplete("nameInput","nameContainer", this.dataSource);            
        this.oAutoComp.forceSelection = true;
		this.oAutoComp.useShadow = false;
		this.oAutoComp.allowBrowserAutocomplete = false; 
        this.oAutoComp.formatResult = function(oResultItem, sQuery) {
            return oResultItem[1] +' - ' + oResultItem[0];
        };

        function fnCallback(e, args) {
            YAHOO.util.Dom.get("nameInput").value = args[2][1] + ' - ' + args[2][0];
            YAHOO.util.Dom.get("nameInput_id").value = args[2][2];     
        }
        this.oAutoComp.itemSelectEvent.subscribe(fnCallback);

        this.oAutoComp.doBeforeExpandContainer = function(oTextbox, oContainer, sQuery, aResults) {
            var pos = YAHOO.util.Dom.getXY(oTextbox);
            pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight + 2;
            YAHOO.util.Dom.setXY(oContainer,pos);
            return true;
        };

        // Stub for form validation
        this.validateForm = function() {
            return true;
        };
		
		return this;
};


//recruits autocomplete
YAHOO.cs.RecruitsAutoComplete = function(){       
        var dataUrl = "/recruiting/getNames/";
		this.dataSource = new YAHOO.util.XHRDataSource(dataUrl);
  		this.dataSource.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
		this.dataSource.responseSchema = { 
			resultsList : "ResultSet", 
			fields : ["id","name","state"] 
		};
		

        // Instantiate AutoComplete
        this.oAutoComp = new YAHOO.widget.AutoComplete("nameInput","nameContainer", this.dataSource);            
        this.oAutoComp.forceSelection = true;
		this.oAutoComp.useShadow = false;
		this.oAutoComp.allowBrowserAutocomplete = false;
        this.oAutoComp.formatResult = function(oResultItem, sQuery) {
            return oResultItem[2] +' - '+ oResultItem[1];
        };

        var fnCallback = function(e, args) {
            YAHOO.util.Dom.get("nameInput").value = args[2][1];
  			var form = YAHOO.util.Dom.get("acform");
			form.action = '/swimmer/'+args[2][0];
			form.submit();

        }

        this.oAutoComp.itemSelectEvent.subscribe(fnCallback);

        this.oAutoComp.doBeforeExpandContainer = function(oTextbox, oContainer, sQuery, aResults) {
            var pos = YAHOO.util.Dom.getXY(oTextbox);
            pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight + 2;
            YAHOO.util.Dom.setXY(oContainer,pos);
            return true;
        };

        // Stub for form validation
        this.validateForm = function() {
            return true;
        };
};


//AMT: recruit autocomplete with form.action = ?userid=
YAHOO.cs.AMTRecruitsAutoComplete = function(){       
        var dataUrl = "/recruiting/getNames/";
		this.dataSource = new YAHOO.util.XHRDataSource(dataUrl);
  		this.dataSource.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
		this.dataSource.responseSchema = { 
			resultsList : "ResultSet", 
			fields : ["id","name"] 
		};
		

        // Instantiate AutoComplete
        this.oAutoComp = new YAHOO.widget.AutoComplete("nameInput","nameContainer", this.dataSource);            
        this.oAutoComp.forceSelection = true;
		this.oAutoComp.useShadow = false;
		this.oAutoComp.allowBrowserAutocomplete = false;
        this.oAutoComp.formatResult = function(oResultItem, sQuery) {
            return oResultItem[1];
        };

        var fnCallback = function(e, args) {
            YAHOO.util.Dom.get("nameInput").value = args[2][1];
  			YAHOO.util.Dom.get("swimmerid").value = args[2][0]; 
        }

        this.oAutoComp.itemSelectEvent.subscribe(fnCallback);

        this.oAutoComp.doBeforeExpandContainer = function(oTextbox, oContainer, sQuery, aResults) {
            var pos = YAHOO.util.Dom.getXY(oTextbox);
            pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight + 2;
            YAHOO.util.Dom.setXY(oContainer,pos);
            return true;
        };

        // Stub for form validation
        this.validateForm = function() {
            return true;
        };


		var inp = YAHOO.util.Dom.get("nameInput");		
		YAHOO.util.Event.on(inp, 'click', function(){
			inp.value = '';
		});
};



//meet list autocomplete
YAHOO.cs.MeetAutoComplete = function(input,container){       
        var dataUrl = "/ws/getMeet/";

        var oDS = new YAHOO.util.XHRDataSource(dataUrl);
		oDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
		oDS.responseSchema = { 
			resultsList : "ResultSet", 
			fields : ["startdate","id","name"] 
		};  

        // Instantiate AutoComplete
        this.oAutoComp = new YAHOO.widget.AutoComplete(input,container, oDS);
        this.oAutoComp.forceSelection = true;            
        this.oAutoComp.useShadow = true;
        this.oAutoComp.formatResult = function(oResultItem, sQuery,sResultMatch) {
			var name = oResultItem[2];
			var first = sQuery.substring(0,1).toUpperCase();
			var search = first+sQuery.substring(1,sQuery.length);
			
			var out = [name.substring(0,name.toLowerCase().indexOf(sQuery)),
						'<span style="font-weight:background;">',
						search,
						'</span>',
						name.substring(name.toLowerCase().indexOf(sQuery)+sQuery.length),
						' - ',
						oResultItem[0]]		
			return out.join('');
        };

        function fnCallback(e, args) {
           	input.value = args[2][2] +' - '+args[2][0];
            input.id = args[2][1];    
        }

        this.oAutoComp.itemSelectEvent.subscribe(fnCallback);

        this.oAutoComp.doBeforeExpandContainer = function(oTextbox, oContainer, sQuery, aResults) {
            var pos = YAHOO.util.Dom.getXY(oTextbox);
            pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight + 2;
            YAHOO.util.Dom.setXY(oContainer,pos);
            return true;
        };


        // Stub for form validation
        this.validateForm = function() {
            // Validation code goes here
            return true;
        };


		//clear input on focus
		YAHOO.util.Event.on(input, 'click', function() {
			input.value = '';
		});
};



YAHOO.cs.AddMeetContainer = function(container_mkp,input){	
	// Define various event handlers for Dialog
	var setValue = function(response) {
		input.value = response.name +' - '+response.date;
		input.id = response.id;
	}
	
	var handleSubmit = function() {
		this.submit();
	};
	
	var handleCancel = function() {
		this.cancel();
	};
	
	var handleSuccess = function(o) {
		var response = YAHOO.lang.JSON.parse(o.responseText);
		setValue(response);
	};
	
	var handleFailure = function(o) {
		alert("Submission failed: " + o.status);
	};
	
	
	container = new YAHOO.widget.Dialog(container_mkp, 
								{ width : "500px",
								  fixedcenter : true,
								  visible : false, 
								  constraintoviewport : true,
								  buttons : [ { text:"Submit", handler:handleSubmit, isDefault:true },
									      { text:"Cancel", handler:handleCancel } ]
								});
	
	container.callback = { success: handleSuccess, failure: handleFailure };
	container.render();
								
	return container;
};


YAHOO.cs.verifySwimmerDialog = function(el){
	var init = function(){
		
			var handleSubmit = function() {          
				this.submit();
			};
            
			var handleCancel = function() {
				this.submit();
			};
            
			var handleSuccess = function(o) {
				window.location = '/my/editprofile';
			};
            
			var handleFailure = function(o) {				
				console.log(o);
			};
			
			// Instantiate the Dialog
			var dialog = new YAHOO.widget.Dialog(el, 
																{ width: "300px",
																fixedcenter: true,
																visible: false,
																modal: true,
																constraintoviewport: true,
																buttons: [ { text:"Yes", handler:handleSubmit, isDefault:true },
																{ text:"No",  handler:handleCancel } ]
															} );
			
			//validate
			dialog.validate = function(){
				var data = this.getData();
				return true;
				if (data.vkey == "") {
					alert("Please,enter your code!");
					return false;
				}
                
                
					return true;
			};
			
			
			//callbacks
			dialog.callback = {success:handleSuccess,failure:handleFailure};
			
			return dialog;
	};
	
	return init();
};






YAHOO.cs.ManageVotesTable = function(datatablediv,initialData){
	this.myColumnDefs = [
		{key:"event__event",label:"Event",sortable:true,resizeable:true},
        {key:"swimmer__name",label:"Winner",sortable:true, resizeable:true},
		{key:'delete', label:' ', className:'delete-button'}
    ];
	
	this.myDataSource = new YAHOO.util.LocalDataSource(initialData);
	this.myDataSource.responseSchema = {
	    fields: ["event__event","swimmer","swimmer__name","event","id"]
	};

	
	this.myDataTable = new YAHOO.widget.DataTable(datatablediv, this.myColumnDefs,this.myDataSource);
	
	this.myDataTable.subscribe("cellClickEvent",function(ev) {
        var target = YAHOO.util.Event.getTarget(ev);
        var column = this.getColumn(target);
        if (column.key == 'delete') {
            if (confirm('Are you sure you want to delete this entry?')) {
                var record = this.getRecord(target);            
                YAHOO.util.Connect.asyncRequest(
                    'GET',
                    '/my/fantasy/deleteVote/' + record.getData('id') + '/',
                    {
                        success: function (o) {
                            if (o.statusText == 'OK') {
                                this.deleteRow(target);
                            } else {
                                alert(o.responseText);
                            }
                        },
                        failure: function (o) {
                            console.log(o.statusText);
                        },
                        scope:this
                    }
                );
            }
        } else {
            this.onEventShowCellEditor(ev);
        }
    });

	return this.myDataTable;
};



//common javascript functionality for unordered lists
YAHOO.cs.AdvancedList = function(el) {
	var getByClass = function(classname) {
		return YAHOO.util.Dom.getElementsByClassName(classname, 'li', el)
	}
	
	var getAll = function() {
		return YAHOO.util.Dom.getElementsByClassName('event_item','li',el);
	}
	
	var hideByClass = function(classname) {
		showAll();
		var lis = getByClass(classname);
		YAHOO.util.Dom.setStyle(lis, 'display', 'none');
	}
	
	var showAll = function() {
		var lis = getAll();
		YAHOO.util.Dom.setStyle(lis, 'display', 'list-item');
	}
	
	return {
		hideByClass: hideByClass,
		showAll: showAll
	}
};


YAHOO.cs.TeamAutoComplete = function(inp,container,orgcode) {		 
        var dataUrl = "/ws/getTeams/"+orgcode+'/';

		var oDS = new YAHOO.util.XHRDataSource(dataUrl);
		oDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
		oDS.responseSchema = { 
			resultsList : "ResultSet", 
			fields : ["id","name","state"] 
		};


        // Instantiate AutoComplete
        this.oAutoComp = new YAHOO.widget.AutoComplete(inp,container, oDS);
        this.oAutoComp.forceSelection = true;            
        this.oAutoComp.useShadow = true;
		this.oAutoComp.minQueryLength = 3;
		this.oAutoComp.queryDelay = 0.2;
        this.oAutoComp.formatResult = function(oResultItem, sQuery) {
            return oResultItem[2] +'-'+  oResultItem[1];
        };


        function fnCallback(e, args) {
			inp.value = args[2][1];
            inp.name = args[2][0];
        }


        this.oAutoComp.itemSelectEvent.subscribe(fnCallback);

        this.oAutoComp.doBeforeExpandContainer = function(oTextbox, oContainer, sQuery, aResults) {
            var pos = YAHOO.util.Dom.getXY(oTextbox);
            pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight + 2;
            YAHOO.util.Dom.setXY(oContainer,pos);
            return true;
        };

        // Stub for form validation
        this.validateForm = function() {
            // Validation code goes here
            return true;
        };

		
		return this.oAutoComp;
}; 



YAHOO.cs.AddTeamContainer = function(container_mkp){	
	// Define various event handlers for Dialog
	var setValue = function(response) {
		select = container.sel_el;
		select.options[select.selectedIndex].value = 'ivan'+ response.id;
		select.options[select.selectedIndex].text = response.name;
	}
	
	var handleSubmit = function() {
		this.submit();
	};
	
	var handleCancel = function() {
		this.cancel();
	};
	
	var handleSuccess = function(o) {
		var response = YAHOO.lang.JSON.parse(o.responseText);
		setValue(response);
	};
	
	var handleFailure = function(o) {
		alert("Submission failed: " + o.status);
	};
	
	
	container = new YAHOO.widget.Dialog(container_mkp, 
								{ width : "500px",
								  fixedcenter : true,
								  visible : false, 
								  constraintoviewport : true,
								  buttons : [ { text:"Add", handler:handleSubmit, isDefault:true },
									      { text:"Cancel", handler:handleCancel } ]
								});
	
	container.callback = { success: handleSuccess, failure: handleFailure };
	container.render();
	
	container.sel_el = false;
								
	return container;
};



YAHOO.cs.RecruitsTable = function(tablediv) {
	var dataUrl = '/recruiting/ws/';
	var controls = YAHOO.util.Dom.getElementsByClassName('toptimes_control'); 
	//return req url
	var getReqString = function(){
		//build req object
		var req = {};
		for (var i=0; i < controls.length; i++) {
			var key = controls[i].name;
			req[key] = controls[i].value;
		};

		return YAHOO.lang.JSON.stringify(req);
	};


	YAHOO.widget.DataTable.formatSwimmerLink = function(el, oRecord, oColumn, oData) {
           var id = oRecord.getData("id");
           el.innerHTML = '<a href="/swimmer/' + id + '">' + oData + '</a>';
     };


	 YAHOO.widget.DataTable.formatTeamLink = function(el, oRecord, oColumn, oData) {
           var id = oRecord.getData("team_id");  
		   var name = oRecord.getData("team_name");
           el.innerHTML = (id == null)?'n/a':'<a href="/team/' + id + '">' + name + '</a>';
     };

	// Only display 2 Columns
	var myColumnDefs = [
	    {key:"pos", label:"Position", sortable:true},
	    {key:"name", label:"Name", sortable:true, resizeable:true,formatter:YAHOO.widget.DataTable.formatSwimmerLink}, 
		{key:"team_name", label:"Team", sortable:true, resizeable:true,formatter:YAHOO.widget.DataTable.formatTeamLink}, 
		{key:"recvalue", label:"Ranking", sortable:true, resizeable:true}
	];


	myDataSource = new YAHOO.util.DataSource(dataUrl);
    myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
	myDataSource.connMethodPost = true; 
    myDataSource.connXhrMode = "queueRequests";
	myDataSource.responseSchema = {
		resultsList:"ResultSet",
	    fields: ["id","name","pos","recvalue","team_id","team_name"]
	};

	var myConfigs = {
         paginator : new YAHOO.widget.Paginator({
		        rowsPerPage    : 50
		    }),
		initialRequest : getReqString()
    };

	var myDataTable = new YAHOO.widget.DataTable(tablediv, myColumnDefs, myDataSource,myConfigs);	
	
	var callback = { 
	    success : myDataTable.onDataReturnReplaceRows, 
	    failure : myDataTable.onDataReturnReplaceRows, 
	    scope : myDataTable 
	};
	
	YAHOO.util.Event.on(controls, 'change', function(){
		myDataTable.showTableMessage('Loading...',"yui-dt-loading");
		var reqString = getReqString();		
		myDataSource.sendRequest(reqString,callback);
	},this,true);
};



YAHOO.cs.AddNoteContainer = function(container_mkp){		

								
	return container;
};



YAHOO.cs.ManageNotes = function(note_container,add_container) {
	
	var formatDate = function(mysqldate) {
		var months = Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
		var date = mysqldate.replace(/\-/g, '/');
		var d = new Date(date);
		var month = months[d.getMonth()];
		var day = d.getDate();
		
		return month+' '+day;
	};
	
	var buildEntry = function(response) {
		var date = formatDate(response['date']);
		return '<div class="note"><div class="note-head">'+response['date']+' - '+response['note_type']+'<span><a id="note'+response['id']+'" class="delete-note remove-lnk" href="#"></a></span></div><p>'+response['note']+'</p></div>';
	};
	
	var removeRow = function(delete_link){
		var note = delete_link.parentNode.parentNode.parentNode;	
		note.parentNode.removeChild(note);
	};
	
	var handleDelete = function(el){
		YAHOO.util.Event.on(el, 'click', function(e){
			if(e) YAHOO.util.Event.preventDefault(e);
		
			var delete_link = this;			
			var note_id = delete_link.id.substr(4);
			var req = {
				'id':note_id
			}
			
			YAHOO.util.Connect.asyncRequest(
				'POST',
				'/swimmer/removenote/',
				 { 
					success: function (o) {
	                    if (o.statusText == 'OK') {							
							removeRow(delete_link);
							
	                    } else {
	                        alert(o.responseText);
	                    }
	                },
	                failure: function (o) {
	                    console.log(o.statusText);
	                },
	                scope:this
	            },
				YAHOO.lang.JSON.stringify(req)
			);
		});
	};

	var handleSubmit = function() {
		this.submit();
	};
	
	var handleCancel = function() {
		this.cancel();
	};
	
	var handleSuccess = function(o) {
		var response = YAHOO.lang.JSON.parse(o.responseText);
		var note = buildEntry(response);
		note_container.innerHTML += note;
		//attach a delete handler
		YAHOO.util.Event.purgeElement(note_container,true);
		var delete_links = YAHOO.util.Dom.getElementsByClassName('delete-note', 'a',note_container);
		handleDelete(delete_links);
	};
	
	var handleFailure = function(o) {
		console.log(o);
		alert("Submission failed: " + o.status);
	};
	
	
	container = new YAHOO.widget.Dialog(add_container, 
								{ width : "500px",
								  fixedcenter : true,
								  visible : false, 
								  modal : true,
								  constraintoviewport : true,
								  buttons : [ { text:"Add", handler:handleSubmit, isDefault:true },
									      { text:"Cancel", handler:handleCancel } ]
								});
	
	container.callback = { success: handleSuccess, failure: handleFailure };
	container.render();
	
	var calendarel = YAHOO.util.Dom.get('date');
	var calendarcontainer = YAHOO.util.Dom.get('dateContainer');
	YAHOO.cs.DatePicker(calendarel,calendarcontainer);
	
	
	//attach add listener
	YAHOO.util.Event.on('add-note', 'click',function(){
		container.show();
	});
	
	//attach delete listener
	var delete_links = YAHOO.util.Dom.getElementsByClassName('delete-note','a',note_container);
	handleDelete(delete_links);
	
};



/* js module to add/remove teams associated with a swimmer
 *
 */

YAHOO.cs.ManageTeams = function(orgcode,addurl,removeurl) {
	var tbl = YAHOO.util.Dom.get('swimmer-teams-table');
	var addbtn = YAHOO.util.Dom.get('add-team');
	var inp = YAHOO.util.Dom.get('teamInput');
	var container = YAHOO.util.Dom.get('teamContainer');
	
	//handleAddTeam
	var handleAddTeam = function(team) {
		var req = {
			team:team
		};
		
		var handleEvent = {
			success: function(e,o){	
				o = o[0];						
	          	if (o.statusText == 'OK') {		
				    var response = YAHOO.lang.JSON.parse(o.responseText);
					appendRow(response);
				}
			},
			
			failure:function(e,o){
            	console.log(o[0].statusText);
			},
			
			start:function(e){
			},
			
			complete:function(e){
			}
		};
		
		var callback = {
			customevents:{
				onStart:handleEvent.start,
				onComplete:handleEvent.complete,
				onSuccess:handleEvent.success,
				onFailure:handleEvent.failure
			},
			scope: handleEvent
		};

		// Start the transaction.
		YAHOO.util.Connect.asyncRequest('POST',addurl,callback,YAHOO.lang.JSON.stringify(req));			
	};
	
	
	//attach a delete listener
	var handleDelete = function(el){
		YAHOO.util.Event.on(el, 'click', function(e){
			if(e) YAHOO.util.Event.preventDefault(e);
		
			var delete_link = this;		
			var team_id = delete_link.id.substr(4);
			var req = {};
			req.team_id = team_id;

			YAHOO.util.Connect.asyncRequest('POST',removeurl,
				 { 
					success: function (o) {
	                    if (o.statusText == 'OK') {
	                        var response = YAHOO.lang.JSON.parse(o.responseText);							
							removeRow(delete_link);		
	                    } else {
	                        alert(o.responseText);
	                    }
	                },
	                failure: function (o) {
	                    console.log(o.statusText);
	                },
	                scope:this
	            },
				YAHOO.lang.JSON.stringify(req)
			);
		});
	};
	
	
	
	
	//removes row from the team table
	var removeRow = function(delete_link){
		var tr = delete_link.parentNode.parentNode;	
		tr.parentNode.removeChild(tr);
	};
	
	
	
	//appends row to the team table
	var appendRow = function(response) {
		//add newly inserted row to table		
		var row = tbl.insertRow(-1);

		// left cell
		var cellLeft = row.insertCell(0);					
		cellLeft.innerHTML = response['team']['name'];

		// right cell
		var cellRight = row.insertCell(1);
		cellRight.innerHTML = '<a id="team'+response['team']['id']+'" class="remove-lnk" href="#">remove</a>';

		//attach listeners to the newly added row
		var delete_link = YAHOO.util.Dom.getElementsByClassName('remove-lnk', 'a',row);
		handleDelete(delete_link);		

		//clear input
		inp.value = '';
		inp.name = '';
	};
	
	
	//init autocomplete
	YAHOO.cs.TeamAutoComplete(inp,container,orgcode);
	
	//handle delete
	var delete_links = YAHOO.util.Dom.getElementsByClassName('remove-lnk','a','swimmer-teams-table');
	handleDelete(delete_links);
	
	//handle add btn
	YAHOO.util.Event.on(addbtn, 'click', function(e){
		if(e) YAHOO.util.Event.preventDefault(e);
		if (!inp.value) {
			return false;
		};
		var team = {};
		team.id = inp.name;
		team.name = inp.value;
		handleAddTeam(team);
	});
	
};


YAHOO.cs.ToggleFave = function(el,swimmer_id){
	var is_fave = (YAHOO.util.Dom.hasClass(el,'fave-lnk')) ? true : false ;
	
	var updateEl = function() {
		el.href = is_fave ? '/swimmer/'+swimmer_id+'/removefave/' : '/swimmer/'+swimmer_id+'/addfave/' ;
		el.innerHTML = is_fave ? 'Remove from favorites' : 'Add to favorites' ;
		var activeclass = is_fave ? 'fave-lnk' : 'favegrey-lnk' ;
		var inactiveclass = is_fave ? 'favegrey-lnk' : 'fave-lnk' ;
		YAHOO.util.Dom.replaceClass(el,inactiveclass,activeclass);
	};
	
	updateEl();
	
	var handleEvent = {
		success: function(e,o){	
			is_fave = (is_fave) ? false : true;
			updateEl();
		},
		
		failure:function(e,o){
        	console.log(o[0].statusText);
		},
		
		start:function(e){
			el.innerHTML = is_fave ? 'Removing...' : 'Adding...';
		},
		
		complete:function(e){
		}
	};
	
	var callback = {
		customevents:{
			onStart:handleEvent.start,
			onComplete:handleEvent.complete,
			onSuccess:handleEvent.success,
			onFailure:handleEvent.failure
		},
		scope: handleEvent
	};
	
	YAHOO.util.Event.on(el,'click',function(e){
		if(e) YAHOO.util.Event.preventDefault(e);
		YAHOO.util.Connect.asyncRequest('POST',el.href,callback);
	});
}; 



YAHOO.cs.CommitmentsTable = function(tablediv) {
	var dataUrl = '/recruiting/commitments/';
	var controls = YAHOO.util.Dom.getElementsByClassName('toptimes_control'); 
	//return req url
	var getReqString = function(){
		//build req object
		var req = {};
		for (var i=0; i < controls.length; i++) {
			var key = controls[i].name;
			req[key] = controls[i].value;
		};

		return YAHOO.lang.JSON.stringify(req);
	};


	 YAHOO.widget.DataTable.formatCommitment = function(el, oRecord, oColumn, oData) {
		var team_id = oRecord.getData("team_id");  
		var team_name = oRecord.getData("team__name");      
		var swimmer_id = oRecord.getData("swimmer_id");
		var swimmer_name = oRecord.getData("swimmer__name");
		var swimmer_city = oRecord.getData("swimmer__city");
		var swimmer_state = oRecord.getData("swimmer__state");
		var reason = oRecord.getData("reason");   
		                                          
		el.innerHTML = '<strong><a href="/swimmer/'+swimmer_id+'">'+swimmer_name+'</a></strong> - <small>'+swimmer_city+', '+swimmer_state+'</small><br>\
						<em>School:</em> <a href="/team/'+team_id+'">'+team_name+'</a><br>';

	    if (reason) {
		 el.innerHTML += '<em>Reason:</em> '+reason;
		}
	                                                                                      
     };

	// Only display 2 Columns
	var myColumnDefs = [
	    {key:"swimmer_id", label:"Recent Commitments", sortable:false,formatter:YAHOO.widget.DataTable.formatCommitment}
	];


	myDataSource = new YAHOO.util.DataSource(dataUrl);
    myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
	myDataSource.connMethodPost = true; 
    myDataSource.connXhrMode = "queueRequests";
	myDataSource.responseSchema = {
		resultsList:"ResultSet",
	    fields: ["swimmer_id","swimmer__name","swimmer__city","swimmer__state","team_id","team__name","reason"]
	};

	var myConfigs = {
         paginator : new YAHOO.widget.Paginator({
		        rowsPerPage    : 50
		    }),
		initialRequest : getReqString()
    };

	var myDataTable = new YAHOO.widget.DataTable(tablediv, myColumnDefs, myDataSource,myConfigs);	
	
	var callback = { 
	    success : myDataTable.onDataReturnReplaceRows, 
	    failure : myDataTable.onDataReturnReplaceRows, 
	    scope : myDataTable 
	};
	
	YAHOO.util.Event.on(controls, 'change', function(){
		myDataTable.showTableMessage('Loading...',"yui-dt-loading");
		var reqString = getReqString();		
		myDataSource.sendRequest(reqString,callback);
	},this,true);
};