(function($) {
	var region = '';

$.fn.gsm_stats = function(options) {
  var opts = $.extend({}, $.fn.gsm_stats.defaults, options); 
/*=========== TO INVOKE ==========*/
//	$('#schedules dd.bd table').gsm_stats({type:'scores'});
//    $('#score dd.bd table').gsm_stats({type:'match'});
/*=====================*/
  return this.each(function() {
    var $this = $(this), 
		dataObj = {}, 
		dataObj_events = {},
		_htmlOutput, 
		_DOM_elm;
	region = jQuery('#hiddenlocale').html();	

	//Static AJAX Properties	
		$.ajaxSetup({
			type: 'GET',
			dataType: 'xml',
			async : false
		});
		
				



	//Methods
		var utils = {
			get_match : function(){

				
				var matchxml = '/'+ region +'/xml/'+ 'gsm_match.xml';
				
				var xml_data = utils.fetch(matchxml);
								
				//utils.fetch('http://10.36.140.148/HL.Sports.Service/Service.svc/GSM');
				
				var cnt = 0;
				var items_retrieved = false;
				
				$(xml_data).find('All').each(function(idx){

					dataObj[idx] = {
						'league' : $(this).attr('name'),
						'matches' : {}
					};
					

					$(this).find('match').each(function(iidx){

						dataObj[idx].matches[iidx] = {
							'date' : $(this).attr('date_utc'),
							'time' : $(this).attr('time_utc'),
							'team_A_name' : $(this).attr('team_A_name'),
							'team_A_country': $(this).attr('team_A_country'),
							'team_B_name': $(this).attr('team_B_name'),
							'team_B_country': $(this).attr('team_B_country'),
							'winner' : $(this).attr('winner'),
							'final_A_score' :  $(this).attr('fa_A'),
							'final_B_score' : $(this).attr('fa_B')
						};
						cnt++;
						
						if (cnt > 5)	//retrieve only 6 feeds
						{							
							items_retrieved = true;
							return false;	
						}
					});
					
					if (items_retrieved)
					{						
						return false;	
					}
				});

				utils.template('match');
			},
			get_standings : function(){
				// PRODUCTION CALL ::  utils.fetch(opts.gsm_serv_base+proc_param);
				//utils.fetch('cache_gsm/dev_gsm_standings_all_soccer.xml');
				
				//var params = utils.proc_param();
				//var xml_data = utils.fetch(domain+'GSM'+'?'+params);

				var standingsxml = '/'+ region +'/xml/'+ 'gsm_standings.xml';
				var xml_data = utils.fetch(standingsxml);
				
				var cnt = 0;
				
				$(xml_data).find('ranking').each(function(idx){
					
					dataObj[idx] = {
						'team' : $(this).attr('club_name'),
						'points': $(this).attr('points'), 
						'won': $(this).attr('matches_won'), 
						'lost': $(this).attr('matches_lost'),
						'draw' : $(this).attr('matches_draw') 
					}
					cnt++;
						
					if (cnt > 5)	//retrieve only 6 feeds
					{	
						return false;	
					}
				});
				
				utils.template('standings');
			},
			get_scores : function(){
				// PRODUCTION CALL ::  utils.fetch(opts.gsm_serv_base+proc_param);
				//utils.fetch('cache_gsm/dev_gsm_scores_all_soccer.xml');
				//var params = utils.proc_param();
				var scoresxml = '/'+ region +'/xml/'+ 'gsm_scores.xml';
				var xml_data = utils.fetch(scoresxml);
				
				var cnt = 0;
								
				$(xml_data).find('match').each(function(idx){
					//alert(idx);
					dataObj[idx] = {
						'team_A_name' : $(this).attr('team_A_name'),
						'team_B_name' :$(this).attr('team_B_name'),
						'fs_A' : $(this).attr('fs_A'),
						'fs_B' :$(this).attr('fs_B')
					}
					
					cnt++;
					
						//alert(cnt);
					if (cnt > 5)	//retrieve only 6 feeds
					{	//alert("in if");
						//alert(cnt);
						return false;	
					}
				});
				utils.template('scores');
			},
			get_events : function(){

				var eventsxml = '/'+ region +'/xml/'+ 'Events.xml';

				var xml_data = utils.fetch(eventsxml);				
				//alert(xml_data);			
				//utils.fetch('http://10.36.140.148/HL.Sports.Service/Service.svc/GSM');
				
				var cnt = 0;
				var items_retrieved = false;
				
				$(xml_data).find('item').each(function(idx){

					dataObj_events[idx] = {
						'date' : $(this).find('date').text(),
						'time' : $(this).find('updatedtime').text(),
						'name' : $(this).find('title').text(),
						'event_location': $(this).find('location').text()
					};
					cnt++;
					
					if (cnt > 5)	//retrieve only 6 feeds
					{							
						items_retrieved = true;
						return false;	
					}
					
					if (items_retrieved)
					{						
						return false;	
					}
				});

				utils.template('events');
			},

			// Workers ===================================================

			fetch : function(context_url){ 
			var xml_data_fetched;
			//Make the request	
				$.ajax({ 
					url : context_url, 
					success: function(data){
						//alert("success");
						xml_data_fetched = data;
					}, 
					error : function(){}
				});
				return xml_data_fetched;
			}, // end fetch

			proc_param : function(){
				var params = [];
				for(var i in opts){
					switch(i){
						case 'team' : params.push(i +'='+ opts[i]); break;
						case 'feed' : params.push(i +'='+ opts[i]); break;
						case 'sport' : params.push(i +'='+ opts[i]); break;
						case 'name' : params.push(i +'='+ opts[i]); break;
					}
				}
				return params = params.join('&'); 

			}, //end proc_params
			
			from24 : function(h) {
				var h = h;				
			
				if(h[0] > 12) { h[0] = h[0] - 12; }
				
				if(h[0] == 0){ 
					h[0] = 12;
					if(h[1] == undefined){
						//console.log('found undefined. Pushing 00 ');
						h.push('00');
					}
				}
			  	return h[0] + ':'+ h[1] +' UTC';
			},
			
			fixDate : function(d){
				var d = d;
				d = d.split('-');
				return d[1]+'/'+d[2];
			},
			
			// Render HTML ===============================================
			template : function(t){				
				var _html = '';
			
				switch(t){
					case 'match' : 
						_html += '<table><tr><th class="first">Date &amp; Time</th><th>Home</th><th class="last">Away</th></tr>';
						//alert(dataObj[0]);
						for(var x in dataObj){
							//alert(dataObj[x].league);
							for(var i in dataObj[x]['matches']){
								
								_html += '<tr>';
								_html += '<td><p>'+utils.fixDate(dataObj[x]['matches'][i].date)+' @ '+utils.from24(dataObj[x]['matches'][i].time.split(':').slice(0,2))+'</p></td>';
								_html += '<td>'+dataObj[x]['matches'][i].team_A_name.slice(0,14)+'</td>';
								_html += '<td>'+dataObj[x]['matches'][i].team_B_name.slice(0,14)+'</td>';
								_html += '</tr>';	
							}	
						}
						
						_html += '</table>';
						
							_htmlOutput = _html;
							_DOM_elm = '#schedules dd.bd';
						
						break;
						
					case 'scores' : 
						_html += '<table><tr><th class="first">Team A</th><th>Score</th><th class="last">Team B</th></tr>';
						for(var i in dataObj){
							_html += '<tr><td class="first">' + dataObj[i]['team_A_name'].slice(0,14) + '</td>';
							_html += '<td>' + dataObj[i]['fs_A']+ ' - ' +dataObj[i]['fs_B'] +'</td>';
							_html += '<td class="last">' + dataObj[i]['team_B_name'].slice(0,14)+ '</td></tr>';
							
						}//for
						_html += '</table>';
						
						// set this output
						_htmlOutput = _html;
						
						// what element should get the output
						_DOM_elm = '#scores dd.bd';
						//$('.sidebarModule #module-stats ul.tabs li a').bind('click', function(){alert('caught click')})
						break;
						
					case 'standings' :
/*						'team' : $(this).attr('club_name'),
						'points': $(this).attr('points'), 
						'won': $(this).attr('matches_won'), 
						'lost': $(this).attr('matches_lost'),
						'draw' : $(this).attr('matches_draw') */
						_html += '<table><tr><th class="first">Team</th><th>TP</th><th>W</th><th>L</th><th class="last">D</th></tr>';
						for(var i in dataObj){
							_html += '<tr><td class="first">' + dataObj[i]['team'].slice(0,14) + '</td>';
							_html += '<td>' + dataObj[i]['points']+'</td>';
							_html += '<td>' + dataObj[i]['won']+'</td>';
							_html += '<td>' + dataObj[i]['lost']+'</td>';
							_html += '<td class="last">' + dataObj[i]['draw']+ '</td></tr>';
							
						}//for
						_html += '</table>';
						//alert(_html);
						// set this output
						_htmlOutput = _html;
						
						// what element should get the output
						_DOM_elm = '#standings dd.bd';
						
						break;
						
					case 'events' : 
						_html += '<table><tr><th class="first">Date &amp; Time</th><th>Event</th><th class="last">Location</th></tr>';
						//alert(dataObj[0]);
						for(var x in dataObj_events){
							//alert(dataObj[x].league);
							//for(var i in dataObj[x]['matches']){
								
								_html += '<tr>';
								_html += '<td><p>'+utils.fixDate(dataObj_events[x].date)+' @ '+utils.from24(dataObj_events[x].time.split(':').slice(0,2))+'</p></td>';
								_html += '<td>'+dataObj_events[x].name.slice(0,14)+'</td>';
								_html += '<td>'+dataObj_events[x].event_location.slice(0,14)+'</td>';
								_html += '</tr>';	
							//}	
						}
						
						_html += '</table>';
						
							_htmlOutput = _html; 
							_DOM_elm = '#schedules dd.bd';
						
						break;
					;
					break;
				}
				
				/*=========== Sidebar Modules Events ==========*/
				//-> Sidebar | Module::Stats, Standings, Scores
				var _gsmContainer 	= $('.sidebarModule #module-stats > div');
				var _gsmTabs 		= $('.sidebarModule #module-stats ul.tabs li a');
				
				_gsmContainer.hide();
				_gsmTabs.click(function(e){
					//alert('changing tabs2!!');
					_gsmContainer.hide().filter(this.hash).show();
					_gsmTabs.removeClass('current');
					$(e.target).addClass('current');
					
					e.preventDefault();
				}).filter(':first').click();
				/*=========== Sidebar Modules Events ==========*/
				
				/*=========== HomePage Modules Events ==========*/
				//-> Landing | Module::Stats, Standings, Scores
				var _gsmContainer 	= $('#module-stats > div');
				var _gsmTabs 		= $('#module-stats ul li a');
			
				_gsmContainer.hide();
				_gsmTabs.click(function(e){
					//alert('changing tabs1!!');
					_gsmContainer.hide().filter(this.hash).show();
					_gsmTabs.removeClass('current');
					$(e.target).addClass('current');
			
					e.preventDefault();
				}).filter(':first').click();
				
				/*=========== End HomePage Modules Events ==========*/
				
			}//end template

		};//utils

//DECISIONS, DECISIONS	
		switch(opts.feed){
			case 'match' 		: 	utils.get_match();  	break;
			case 'score' 		: 	utils.get_scores(); 	break;
			case 'standings' 	: 	utils.get_standings();	break;
			case 'events'	 	: 	utils.get_events();		break;
			default : break;
		}
		
		//Send the Output to Frontend
		$(_DOM_elm).html(_htmlOutput);



  });// return this.each

};//gsm_stats function


// default options
$.fn.gsm_stats.defaults = {
  //sport:'soccer',
  gsm_serv_base : 'http://10.36.140.148/HL.Sports.Service/Service.svc/GSM?'
};

$.fn.gsm_stats.select_binder = function(html){
	return $(html).find('th.first').bind('click', function(){alert('Hi')});
}

})(jQuery);

