﻿// Path to the blank image must point to a valid location on your server
Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';
 

Ext.onReady(function(){		

	// Production
	var urlTrackData = '/SimpleTrackPreparationXml?stationGuid=04B3FAA4-2C75-46A0-BF3A-E8E83F1814E0&tracks=1&trackDetails=1&stations=1';
	var urlSmsSubscription = '/livetracks/subscription';
	
	// Local mocked
	//var urlTrackData = 'test/tracks.xml';
	//var urlSmsSubscription = 'test/subscribe.txt';
	
	
	// Version check based upon the values entered above in "Globals"
	var hasReqestedFlashVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);		

	var trackStore = new Ext.data.GroupingStore({
	url: urlTrackData,
	listeners: {
		load:function() {
			// Update the station comment
			var comments = Ext.DomQuery.select("comment", this.reader.xmlData);			
			var comment = comments[0].textContent;
			if(typeof(comment) == 'undefined')
			{
				comment = '';
			}
			setStationComment(comment);

			// Hide the waiting message box
			Ext.MessageBox.hide();
		},
		loadexception:function() {
			Ext.MessageBox.hide();
			Ext.msg.alert('Uppdatering av spårinfo misslyckades. Försök igen senare.');
		}
	},
	sortInfo: { field: "lastPrepared", direction: "DESC" },
	groupField: 'area',
	reader: new Ext.data.XmlReader({
			messageProperty: "comment", 					   
			record:'track',
			id:'id'
			}, [
			'id',
			'name',		
			{name: 'lastPrepared', type: 'date', dateFormat: 'Y-m-dTH:i:s'},
			'length',
			'area',
			'description',
			'light',
			'snowCannon'])
		});
					 
	function setStation(station, selectedVisualization)
	{
		if(selectedVisualization == 'map')
		{
			Ext.getCmp('visualizationMap').setValue(true);
			Ext.getCmp('visualizationList').setValue(false);
		}
		else
		{
			Ext.getCmp('visualizationMap').setValue(false);
			Ext.getCmp('visualizationList').setValue(true);
		}
		updateRadioForStation(station);
		Ext.getCmp('cbStation').setValue(station.guid);
				
		updateStationView();
	}
					 
	function stationChanged(f, r, i)
	{
		updateRadioForStation(r.data);
		updateUrlForStation(r.data);
		
		updateStationView();
	}
	
	function rendererKm(val)
	{
		var retVal = '';
		if(val != '' && val != '0')
		{
			retVal = (parseInt(val)/1000) + " km";
		}
		return retVal;
	}

	function rendererBool(val)
	{
		var retVal = '';
		if(val == '0')
		{
			retVal = 'Nej';
		}
		else if(val == '1')
		{
			retVal = 'Ja';
		}
		return retVal;
	}

	function rendererLight(val)
	{
		var retVal = '';
		if(val == '1')
		{
			retVal = '<img src="img/lightbulb_on16.png"/>';
		}
		return retVal;
	}

	function rendererSnow(val)
	{
		var retVal = '';
		if(val == '1')
		{
			retVal = '<img src="img/snowflake16.png"/>';
		}
		return retVal;
	}

	function refreshHandler()
	{
		Ext.MessageBox.show({
           msg: 'Hämtar spårinfo...',
           progressText: 'Vänta...',
           width:300,
           wait:true,
           waitConfig: {interval:200},
           icon:'waitIcon'
       });
		
		trackStore.load();
	}
		
	function selectedTracksChanged()
	{
		var btn = Ext.getCmp('smsNotificationBtn');
		if(sm.getCount() > 0)
		{
			btn.enable();
		}
		else
		{
			btn.disable();
		}
	}		
		
	var sm = new Ext.grid.CheckboxSelectionModel({listeners:{
												 	rowselect: selectedTracksChanged,
													rowdeselect: selectedTracksChanged
												 }});	
	
	
	function subscribeHandler()
	{
		var selections = sm.getSelections();
		var selectionStr = '';
		for(var i = 0; i < selections.length; i++)
		{
			selectionStr += (selections[i].data.id)
			if(i != selections.length - 1)
			{
				selectionStr += ',';
			}
		}
		Ext.Ajax.request({
		   url: urlSmsSubscription,
		   success: function(result, request) {
			   // Hide wait dialog
			   Ext.MessageBox.hide();

				var infoMsg = '<p>Skicka ett SMS med texten <b>start track ' + result.responseText + '</b> till nummer <b>72120</b> för att starta bevakningen.</p><br/><p>Varje gång något av dina valda spår har preparerats skickas ett SMS till det telefonnummer du aktiverat bevakningen från. Varje utskickat SMS kostar 3 kr som dras på din telefonräkning.</p><br/><p>Bevakningen kan avslutas när som helst genom att skicka texten<br/><b>stopp track</b> till nummer <b>72120</b>.</p>';
				var title = 'SMS-bevakning';
			    Ext.MessageBox.show({
				   title: title,
				   msg: infoMsg,
				   buttons: Ext.MessageBox.OK,
				   width: 600,
//				   animEl: 'mb9',
//				   fn: showResult,
				   icon: 'phoneIcon'
			   });
			  	},
		   failure: function(result, request) {
			   // Hide wait dialog
			   Ext.MessageBox.hide();
			   Ext.Msg.alert('SMS-bevakning', '<p>SMS-bevakning misslyckades!</p><br/><p>Försök igen senare</p>');
			   },
		   params: { tracks: selectionStr }
		});
		
		Ext.MessageBox.show({
           msg: 'Skapar bevakning...',
           progressText: 'Vänta...',
           width:300,
           wait:true,
           waitConfig: {interval:200},
           icon:'waitIcon'
       });

	}
	
	function setStationComment(comment)
	{
		Ext.get('stationComment').update(comment);
	}
	
	function updateStationView()
	{	
		setStationComment('');
		if(Ext.getCmp('visualizationMap').getValue())
		{
			// Map view
			//Ext.get('stationInfo').load({url:'map.html', scripts:true});
			//Ext.get('stationInfo').update('<iframe width=960 src="map.html">Upgrade your browser</iframe>');
			var mapHtml = '';
			if(hasReqestedFlashVersion)
			{
				mapHtml = '<object width="884" height="760"><param name="movie" value="flash/grovelsjon2.swf"><param name="wmode" value="opaque"><param name="loop" value="false" /><embed src="flash/grovelsjon2.swf" width="884" height="760" wmode="transparent" loop="false" type="application/x-shockwave-flash"></embed></object>'
			}
			else
			{
				mapHtml = '<p>Visning av kartan kr&auml;ver minst version ' + requiredMajorVersion + ' av Adobe flash player. <a href=http://www.adobe.com/go/getflash/>Installera.</a></p>';
			}
			Ext.get('stationInfo').update(mapHtml);
		}
		else
		{
			Ext.MessageBox.show({
			   msg: 'Hämtar spårinfo...',
			   progressText: 'Vänta...',
			   width:300,
			   wait:true,
			   waitConfig: {interval:200},
			   icon:'waitIcon'
		   });

			// List view
			trackStore.load();
			
			sm = new Ext.grid.CheckboxSelectionModel({listeners:{
												 	rowselect: selectedTracksChanged,
													rowdeselect: selectedTracksChanged
												 }});	
			Ext.get('stationInfo').update('');
			var grid = new Ext.grid.GridPanel({
				renderTo: Ext.get('stationInfo'),
				frame:false,
				height:400,
				width:969,
				store: trackStore,
				view: new Ext.grid.GroupingView(),

				selModel: sm,
				columns: [
						  sm,
				{header: "Spår", dataIndex: 'name', width:335, sortable:true},
				{header: "Beskrivning", dataIndex: 'description', width:150, sortable:true},
				{header: "Område", dataIndex: 'area', width:110, sortable:true},
				{header: "Längd", dataIndex: 'length', width:70, sortable:true, renderer:rendererKm},
				{header: "Upplyst", dataIndex: 'light', width:70, sortable:true, renderer:rendererLight},
				{header: "Konstsnö", dataIndex: 'snowCannon', width:70, sortable:true, renderer:rendererSnow},
				{header: "Preparerat", dataIndex: 'lastPrepared', width:120, renderer: Ext.util.Format.dateRenderer('Y-m-d H:i'), sortable:true}],				
				tbar: {
					height:45,
					items: [{
						xtype: 'tbbutton',
						text: 'Uppdatera',
						iconCls: 'refreshIcon',
						iconAlign: 'left',
						scale: 'large',
						height:32,
						handler: refreshHandler						
					},{
						xtype: 'tbbutton',
						id: 'smsNotificationBtn',
						text: 'SMS-bevaka valda spår',
						iconCls: 'phoneIcon',
						iconAlign: 'left',
						scale: 'large',
						height:32,
						handler: subscribeHandler						
					}]
					}
				});
			
			selectedTracksChanged();
		}
	}
	
	function updateRadioForStation(station)
	{
		var rbMap = Ext.getCmp('visualizationMap');
		var rbList = Ext.getCmp('visualizationList');
		
		if(station.hasMap)
		{
			rbMap.enable();
		}
		else
		{
			rbMap.disable();
			if(rbMap.getValue())
			{
				rbList.setValue(true);
			}
		}
		if(station.hasList)
		{
			rbList.enable();
		}
		else
		{
			rbList.disable();
			if(rbList.getValue())
			{
				rbMap.setValue(true);
			}
		}
	}
	
	function updateUrlForStation(station)
	{
		document.location.hash = "#" + station.guid;
	}
					 
	var rbMap = new Ext.form.Radio({
			id: 'visualizationMap',								   
			xtype: 'radio',
			fieldLabel: 'Karta',
			name: 'visualizationType',
			boxLabel: 'Karta',
			width:150,
			renderTo:Ext.get('stationSelectionChoiceMap')
		});	 

	var rbList = new Ext.form.Radio({
			id: 'visualizationList',								   
			xtype: 'radio',
			fieldLabel: 'Spårlista',
			name: 'visualizationType',
			boxLabel: 'Sp&aring;rlista',
			width:150,
			renderTo:Ext.get('stationSelectionChoiceList')
		});	 

	var cbStation = new Ext.form.ComboBox({
		id: 'cbStation',		
		xtype: 'combo',
		name: 'stations',
		allowBlank: false,
		editable: false,
		triggerAction: 'all',
		typeAhead: false,
		mode: 'local',
		width:150,
		listWidth: 150,
		autoSelect: true,
		store: stations,
		displayField:'stationName',
		valueField:'guid',
		
		listeners: {
			select: stationChanged
		},
		renderTo: Ext.get('stationSelectionStation')		
		});		
	
	if (document.location.hash == "#C1F88216-4B37-470A-BFB1-F663B9391AFF") {
		var $tabs = $('#tabs');		
		$tabs.tabs('select', 1); 
		
		setStation({guid:'C1F88216-4B37-470A-BFB1-F663B9391AFF', stationName:'Grövelsjön', hasMap:true, hasList:false}, 'map');
	}
	else if (document.location.hash == "#gtf") {
		var $tabs = $('#tabs');		
		$tabs.tabs('select', 1); 
		
		setStation({guid:'C1F88216-4B37-470A-BFB1-F663B9391AFF', stationName:'Grövelsjön', hasMap:true, hasList:false}, 'map');
	}
	else if (document.location.hash == "#04B3FAA4-2C75-46A0-BF3A-E8E83F1814E0") {
		var $tabs = $('#tabs');		
		$tabs.tabs('select', 1); 
		
		setStation({guid:'04B3FAA4-2C75-46A0-BF3A-E8E83F1814E0', stationName:'Sundsvall', hasMap:false, hasList:true}, 'list');
	}
	else if (document.location.hash == "#sundsvall") {
		var $tabs = $('#tabs');		
		$tabs.tabs('select', 1); 
		
		setStation({guid:'04B3FAA4-2C75-46A0-BF3A-E8E83F1814E0', stationName:'Sundsvall', hasMap:false, hasList:true}, 'list');
	}
	else
	{
		setStation({guid:'C1F88216-4B37-470A-BFB1-F663B9391AFF', stationName:'Grövelsjön', hasMap:true, hasList:false}, 'map');
	}

});

