YAHOO.namespace('cs');

YAHOO.cs.convertTime = function(time){
    if(time.indexOf(':') != -1){
        var min = time.substring(0,time.indexOf(':'));
        var time = time.substring(time.indexOf(':')+1);
        min = min * 60;
        time = parseInt(min) + time*1;
        time = parseFloat(time *1);
        return time;
    }
    
    return time;
};


YAHOO.cs.decimalToSwim = function(time) {
	var _min = parseInt(time / 60);
	if (_min == 0) return time;
	
	var _sec = (time % 60);
	_sec = Number(_sec).toFixed(2);
		
	if(_sec < 10) {
		_sec = "0"+(_sec);
	}
	
	return _min+":"+_sec;
}



YAHOO.cs.ValidateSwimTime = function(classname){
	var inputs = YAHOO.util.Dom.getElementsByClassName(classname, 'input');
	for (var i = inputs.length - 1; i >= 0; i--){
		if (!inputs[i].value.match(/\d?\d?:?\d\d\.\d\d/)) {
			YAHOO.util.Dom.setStyle(inputs[i], 'border', '1px solid red');
			inputs[i].value = inputs[i].value+' - invalid';
			return false;
		};
		
	};
	
	return true;
};


YAHOO.cs.ValidateEventList = function(classname){
	var selected_events = YAHOO.util.Dom.getElementsByClassName(classname, 'select');
	var i,j,n,retval;
	n = selected_events.length;
	retval = true;

	for (i=0; i<n; i++) {                       
		for (j=i+1; j<n; j++) {              
			if (selected_events[i].value == selected_events[j].value) {
				var errdiv = YAHOO.util.Dom.get('error_msg');
				errdiv.innerHTML = 'Please, remove duplicate events before submitting!';
				YAHOO.util.Dom.setStyle(errdiv,'display','inline'); 
				return false;
			}
		}	
	}
	
	return retval;
};



YAHOO.cs.TopTimesTable = function(tablediv){     
	var required = ['eventgender','eventdistance','eventstroke','startdate','enddate','orgcode'];
	var dataUrl = "/times/ws/";
	var controls = YAHOO.util.Dom.getElementsByClassName('toptimes_control');      
	
	//return req url
	this.getReqString = function(){                
		//build req object
		var requestObj = {};
		for (var i=0; i < controls.length; i++) {
			var key = controls[i].id.substr(8);
			requestObj[key] = controls[i].value;      
		};                                           
		
		//check for somre required values and set initial ones
		for (i=0; i < required.length; i++) {             
			if (requestObj[required[i]] == '') {
				switch(required[i]) {
					case 'eventdistance':  
					requestObj[required[i]] = requestObj['_event'].substr(1);
					break;     
					               
					case 'eventstroke':
					requestObj[required[i]] = requestObj['_event'].substr(0,1);
					break;         
					
					case 'startdate':                                             
					var year = requestObj['_season'].split('-')[0];
					requestObj[required[i]] = year+'-07-01';
					break;          
					
					case 'enddate':           
					var year = requestObj['_season'].split('-')[1];
					requestObj[required[i]] = year+'-06-31';
					break;
				}

			};
		};
		
		
		return YAHOO.lang.JSON.stringify(requestObj);
	};
	
		
     
	// Override the built-in formatter
	YAHOO.widget.DataTable.formatSwimmerLink = function(el, oRecord, oColumn, oData) {
        var swimmer_id = oRecord.getData("swimmer_id");
		var swimmer_name = oRecord.getData("swimmer_name");
		var team_id = oRecord.getData("team_id");
		var team_name = oRecord.getData("team_name");
		
		if (swimmer_id && swimmer_name) {
			el.innerHTML = '<a href="/swimmer/' + swimmer_id + '/">' + swimmer_name + '</a>';
		} else {
			el.innerHTML = '<a href="/team/' + team_id + '/">' + team_name + '</a>';
		}
    };

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

	YAHOO.widget.DataTable.formatTime = function(el, oRecord, oColumn, oData) {  
        var time = oRecord.getData("time");
		var meet_id = oRecord.getData("meet_id");
		var eventnum = oRecord.getData("eventnumber");
		var flag = (oRecord.getData('flag'))? oRecord.getData("flag") : false;      
		var timemkp = (meet_id && eventnum) ? '<a href="/results/'+meet_id+'/event/'+eventnum+'">'+YAHOO.cs.decimalToSwim(time)+'</a>' : YAHOO.cs.decimalToSwim(time);         
		if (flag) {   
			timemkp = timemkp+' '+flag;
		}
		
		el.innerHTML = timemkp;
    };
	
	this.myConfigs = {
	    paginator : new YAHOO.widget.Paginator({
	        rowsPerPage    : 50
	    }),
		initialRequest : this.getReqString()
	};
	
	this.myColumnDefs = [
		{key:"pos",label:"Pos",sortable:true,resizeable:true},
        {key:"swimmer_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:"time",label:"Time", sortable:true, resizeable:true,formatter:YAHOO.widget.DataTable.formatTime}
    ];
	
	this.myDataSource = new YAHOO.util.DataSource(dataUrl);
    this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
	this.myDataSource.connMethodPost = true; 
    this.myDataSource.connXhrMode = "queueRequests";
    this.myDataSource.responseSchema = {     
        resultsList:"ResultSet",
        fields: ["pos","eventnumber","id","swimmer_id","swimmer_name","team_id","team_name","meet_id","meet_name","time","flag"]
    };

	
	this.myDataTable = new YAHOO.widget.DataTable(tablediv, this.myColumnDefs,this.myDataSource,this.myConfigs);
	
	
	this.myDataTable.doBeforeLoadData
	
	var callback = { 
	    success : this.myDataTable.onDataReturnReplaceRows, 
	    failure : this.myDataTable.onDataReturnReplaceRows, 
	    scope : this.myDataTable 
	};

	
	YAHOO.util.Event.on(controls, 'change', function(){
		this.myDataTable.showTableMessage('Loading...',"yui-dt-loading");       
		var reqString = this.getReqString();		
		this.myDataSource.sendRequest(reqString,callback);
	},this,true);
	
};


YAHOO.cs.TopTimesModule = function(tablediv){  
	var required = ['eventgender','eventdistance','eventstroke','startdate','enddate','orgcode'];
	var dataUrl = "/times/ws/";
	var controls = YAHOO.util.Dom.getElementsByClassName('toptimes_control');
	
	//return req url
	this.getReqString = function(){                
		//build req object
		var requestObj = {};
		for (var i=0; i < controls.length; i++) {
			var key = controls[i].id.substr(8);
			requestObj[key] = controls[i].value;      
		};                                           
		
		//check for somre required values and set initial ones
		for (i=0; i < required.length; i++) {             
			if (requestObj[required[i]] == '') {
				switch(required[i]) {
					case 'eventdistance':  
					requestObj[required[i]] = requestObj['_event'].substr(1);
					break;     
					               
					case 'eventstroke':
					requestObj[required[i]] = requestObj['_event'].substr(0,1);
					break;         
					
					case 'startdate':                                             
					var year = requestObj['_season'].split('-')[0];
					requestObj[required[i]] = year+'-07-01';
					break;          
					
					case 'enddate':           
					var year = requestObj['_season'].split('-')[1];
					requestObj[required[i]] = year+'-06-31';
					break;
				}

			};
		};
		
		
		return YAHOO.lang.JSON.stringify(requestObj);
	};
	
		
     
	// Override the built-in formatter
	YAHOO.widget.DataTable.formatSwimmerLink = function(el, oRecord, oColumn, oData) {
        var swimmer_id = oRecord.getData("swimmer_id");
		var swimmer_name = oRecord.getData("swimmer_name");
		var team_id = oRecord.getData("team_id");
		var team_name = oRecord.getData("team_name");
		
		if (swimmer_id && swimmer_name) {
			el.innerHTML = '<a href="/swimmer/' + swimmer_id + '/">' + swimmer_name + '</a>';
		} else {
			el.innerHTML = '<a href="/team/' + team_id + '/">' + team_name + '</a>';
		}
    };

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

	YAHOO.widget.DataTable.formatTime = function(el, oRecord, oColumn, oData) {
        var time = oRecord.getData("time");
		var meet_id = oRecord.getData("meet_id");
		var eventnum = oRecord.getData("eventnumber");
		if (meet_id && eventnum) {
			el.innerHTML = '<a href="/results/'+meet_id+'/event/'+eventnum+'">'+YAHOO.cs.decimalToSwim(time)+'</a>';
		} else {
			el.innerHTML = YAHOO.cs.decimalToSwim(time);
		}
        
    };
	
	this.myConfigs = {
		initialRequest : this.getReqString()
	};
	
	this.myColumnDefs = [
		{key:"pos",label:"Pos",sortable:true,resizeable:true},
        {key:"swimmer_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:"time",label:"Time", sortable:true, resizeable:true,formatter:YAHOO.widget.DataTable.formatTime}
    ];
	
	this.myDataSource = new YAHOO.util.DataSource(dataUrl);
    this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
	this.myDataSource.connMethodPost = true; 
    this.myDataSource.connXhrMode = "queueRequests";
    this.myDataSource.responseSchema = {     
        resultsList:"ResultSet",
        fields: ["pos","eventnumber","id","swimmer_id","swimmer_name","team_id","team_name","meet_id","meet_name","time"]
    };

	
	this.myDataTable = new YAHOO.widget.DataTable(tablediv, this.myColumnDefs,this.myDataSource,this.myConfigs);
	
	
	this.myDataTable.doBeforeLoadData
	
	var callback = { 
	    success : this.myDataTable.onDataReturnReplaceRows, 
	    failure : this.myDataTable.onDataReturnReplaceRows, 
	    scope : this.myDataTable 
	};

	
	YAHOO.util.Event.on(controls, 'change', function(){
		this.myDataTable.showTableMessage('Loading...',"yui-dt-loading");
		var reqString = this.getReqString();		
		this.myDataSource.sendRequest(reqString,callback);
	},this,true);
	
};



YAHOO.cs.ManageTimesTable = function(datatablediv,initialData){
	YAHOO.widget.DataTable.formatEvent = function(el, oRecord, oColumn, oData) {
        var distance = oRecord.getData("eventdistance");
		var stroke = oRecord.getData("eventstroke");
        el.innerHTML = distance+' '+stroke;
    };

	this.myColumnDefs = [
		{key:"event",label:"Event",sortable:true,resizeable:true,formatter:YAHOO.widget.DataTable.formatEvent},
        {key:"finalstime",label:"Time",sortable:true, resizeable:true},
        {key:"dateofswim",label:"Date",sortable:true, resizeable:true},
        {key:"finalscourse",label:"Course",sortable:true, resizeable:true},
		{key:'delete', label:' ', className:'delete-button'}
    ];
	
	this.myDataSource = new YAHOO.util.LocalDataSource(initialData);
	this.myDataSource.responseSchema = {
	    fields: ["id","eventstroke","eventdistance","finalscourse","finalstime","dateofswim"]

	};
	
	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') {  
	        //animate row
	        var record = this.getRecord(target);   
			var tr = dataTable.getTrEl(record.getCount());
			YAHOO.util.Dom.addClass(tr, 'yui-dt-highlighted');
			setTimeout(function() {
				YAHOO.util.Dom.removeClass(tr, 'yui-dt-highlighted');
			}, 2000);
			         
	        YAHOO.util.Connect.asyncRequest(
	            'GET',
	            '/swimmer/toptimes/delete/' + 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;
};
