/**
*
* System.js contains the primary methods and functions
*
*/


(function(){

// create library namespace if not done
window['ROADMATE'] = window.ROADMATE || {};
ROADMATE['Form'] = window.ROADMATE.Form || {};

	function init(){
		
		// Manual config
		ROADMATE['debugOn'] = $('body').hasClass('pre-landing') ? false : false;
		
		ROADMATE.InitDev();
		ROADMATE.SetupAjax();
		ROADMATE.InitCommon();
		ROADMATE.InitCufon();							
		ROADMATE.HandleTabs();
		ROADMATE.InitHashHighlighting();
		
		// Auto config
		if( ROADMATE.cfg.page.hasWidget ) ROADMATE.HandleWidgets();
		if( ROADMATE.cfg.page.hasMap ) ROADMATE.InitMap();
		if( ROADMATE.cfg.page.hasComments ) ROADMATE.InitComments();
		if( ROADMATE.cfg.page.hasSearchResults ) ROADMATE.initSearchResults();
		//if( ROADMATE.cfg.page.hasDialog ) ROADMATE.InitDialog();
		if( ROADMATE.cfg.page.hasForm ) ROADMATE.Form.AugmentForms();		
		if( ROADMATE.cfg.page.hasAdvSearch ) ROADMATE.Form.InitAdvSearch();
		if( ROADMATE.cfg.page.hasClimateCompForm ) ROADMATE.Form.InitClimateCompForm();
		
	};
	ROADMATE['init'] = init;
	
	 /**
	 * 
	 * Setup small components amd bindings
	 * 	
	 */	 
	 function InitCommon()
	 {
	 	 $('#task-fb a, .share-fb') /* Facebook share btn */
		 .click(function(){
			var uri = this.href || 'http://www.facebook.com/sharer.php?u=' + window.location.href;
			if( $(this).hasClass('share-this') ) uri = 'http://www.facebook.com/sharer.php?u=' + window.location.href;
			window.open(uri, "fbshare", "location=1,status=1,scrollbars=1,width=540,height=436");
			
			return false;
		 });
		 
		 
		ROADMATE.InitFeedback();
		 
	 };
	 ROADMATE['InitCommon'] = InitCommon;
	 
	 /**
	 * 
	 * Set up global defaults for Ajax calls
	 * 	
	 */	 
	 function SetupAjax()
	 {
		 $.ajaxSetup({
		   url: $('#form1').attr('action'),		  
		   type: "GET", 
		   timeout: 5000
		 });	
	 };
	 ROADMATE['SetupAjax'] = SetupAjax;	
	 
	 /**
	 * 
	 * Handle all Ajax Errors
	 * 	
	 */	 
	 function HandleAjaxError()
	 {
		
	 	alert('Ajax error');
	 };
	 ROADMATE['HandleAjaxError'] = HandleAjaxError;	
	
	 
	 /**
	 * 
	 * Function that Hijax a form and handles special events (notification)
	 * 	
	 */	 
	 function Hijax(form)
	 {
	 	
	 };
	 ROADMATE['Hijax'] = Hijax;
	
	 /**
	 * 
	 * Find flash elements and insert flash through 2 methods: an simple image swap or full setup through definition list
	 * 	
	 */	 
	function InsertFlash(e){
		
		
	};
	ROADMATE['InsertFlash'] = InsertFlash;
	
	
	/**
	 * 
	 * Find flash elements and insert flash through 2 methods: an simple image swap or full setup through definition list
	 * 	
	 */	 
	function InitHashHighlighting(){
		
		var hash = window.location.href.split('#')[1] || false;
		
		if( $('body#page-faq').length && hash )
		{
			$('#' + hash + ', #' + hash + ' + p')	
			.addClass('extra-focus')
			.effect('highlight');
		}
		
	};
	ROADMATE['InitHashHighlighting'] = InitHashHighlighting;

	
	/**
	 * 
	 * Setup Feedback page nav
	 * 	
	 */	 
	 function InitFeedback()
	 {
		 /* Feedback Nav */
		 $('#feedback-nav a') 
		 .click(function(event){
			event.preventDefault();			
			
			$('#feedback fieldset, #feedback-nav a')
			.removeClass('active');
			
			$(this).addClass('active');
			$( $(this).attr('href') ).addClass('active');
		 });
	 };
	 ROADMATE['InitFeedback'] = InitFeedback;
	
	 /**
	 * 
	 * Initiates the Dialog system
	 * 	
	 */	 
	function InitDialog(){
		
		$('.ui-custom-dialog')
		.click(function(event){
			
			if( $(this).attr('href') ) event.preventDefault();
			
			if( !$('#ui-custom-dialog').length ) $('body').append('<div id="ui-custom-dialog"></div>');	
			
			var cfg_dialog = { 
				dialogClass: $(this).attr('class'),
				resizable: false,
				bgiframe: true,
				modal: true,
				draggable: false,
				closeText: "Stäng",
				maxHeight: 300,
				width: 360,
				autoOpen: false
			};
			
			var cfg_hijax = {
				url: $(this).attr('href').split('#')[0],
				dataType: 'HTML',
				selector: '#' + $(this).attr('href').split('#')[1] + ($(this).hasClass('dialog-inner') ? ' *' : '')
			}
			
			alert(cfg_hijax.url + ' ' + cfg_hijax.selector);
			
			var dialog_link = $(this);
			
			/*$.ajax({
				   url: 'http://test.roadmate.se/anmal_resa/',
				   beforeSend: function(){
				   	
					alert('sending!');
				   },
				   error: function(XMLHttpRequest, textStatus, errorThrown){ 
				   
					alert(XMLHttpRequest + ' ' + textStatus + ' ' + errorThrown);
					}, 
				   success: function(responseText, textStatus, XMLHttpRequest){
					   		alert('success!');
							
				   },
				   complete: function(){ alert('complete!') }
			});	*/
						
			$.ajax({
				   url: cfg_hijax.url,
				   beforeSend: function(){
				   	//$(dialog_link).append(ROADMATE.res.AjaxLoader);
					alert('sending!');
				   },
				   error: function(XMLHttpRequest, textStatus, errorThrown){ 
				   		//ROADMATE.HandleAjaxError('Dialog'); 
						alert('error!');
					}, 
				   success: function(responseText, textStatus, XMLHttpRequest){
					   		
							alert(responseText.length + ' ' + $(responseText).find(cfg_hijax.selector).length );	
							
							
							//alert( $(responseText).find(cfg_hijax.selector).length );
							$('#ui-custom-dialog')
							.html( $(responseText).find(cfg_hijax.selector) )							
							.dialog(cfg_dialog)					   
							
												
							$(dialog_link).find('.ajax-loader').remove();
							
							ROADMATE.HandleDialog( $(dialog_link) );
				   },
				   complete: function(){ alert('complete!'); }
			});	
			ROADMATE.HandleDialog( $(dialog_link) );
			
		});
	};
	ROADMATE['InitDialog'] = InitDialog;
	
	/**
	 * 
	 * Determine special config of dialog
	 * 	
	 */		
	function HandleDialog(e){
		
		if( $(e).hasClass('dialog-rate-user') )
		{
			/*ROADMATE.Form.AugmentForms();
			$('#ui-custom-dialog')							 
			.dialog('option', 'buttons', {
				'Ge omdöme': function() {
					$.post('/omdome/?', function(data) {
					  $('.result').html(data);
					  $(this).dialog('close');
					});
					
				},
				'Avbryt': function() {
					$(this).dialog('close');
				}
			})
			.dialog('open');
			Cufon.replace('h1');*/
		}
		else if( $(e).hasClass('dialog-report_trip') )
		{
			$('#ui-custom-dialog')							 
			.dialog('option', 'buttons', {
				'Skicka anmälan': function() {
					$.post('/omdome/?', function(data) {
					  $('.result').html(data);
					  $(this).dialog('close');
					});
					
				},
				'Avbryt': function() {
					$(this).dialog('close');
				}
			})
			.dialog('open');
			Cufon.replace('h1');
		}
		else if( $(e).hasClass('dialog-tip_friend') )
		{
			$('#ui-custom-dialog')							 
			.dialog('option', 'buttons', {
				'Skicka tipset': function() {
					$.post('/omdome/?', function(data) {
					  $('.result').html(data);
					  $(this).dialog('close');
					});
					
				},
				'Avbryt': function() {
					$(this).dialog('close');
				}
			})
			.dialog('open');
			Cufon.replace('h1');
		}
		else
		{
			$('#ui-custom-dialog')
			.dialog('open');
			
			Cufon.replace('h1');
		}
		
		
	};
	ROADMATE['HandleDialog'] = HandleDialog;
	
	
	/**
	 * 
	 * Handle (add elements and classes etc) all custom widgets (.ui-custom-widget)
	 * 	
	 */	 
	function HandleWidgets(){
		
		$('.ui-custom-fold-menu .fold-btn')
		.each(function(){				   
					   
			  $(this)
			  .click(function(){ 							   
					   
					   $(this)
					   .parent('.ui-custom-fold-menu')
					   .toggleClass('expanded')							   
					   .siblings('.ui-custom-fold-menu')
					   .removeClass('expanded');
			  });					   
					  
		});
		
		$('select.ui-custom-widget')
		.each(function(){				   
			
			var parent = $(this).parents('li');
			
			$(parent)
			.append('<div class="ui-custom-select"></div>');
			
			$(this)
			.find('option')
			.each(function(){						   
				$(parent)
				.find('.ui-custom-select')
				.append('<span class="ui-select-option">' + $(this).text() + '</span>')	
				
				if( $(this).attr('selected') ) $('.ui-select-option:last').addClass('selected');
			});
			
			$(parent)
			.find('.ui-custom-select .ui-select-option:odd')
			.addClass('odd');
			
			
			$('.ui-select-option.selected')
			.click(function(){
				  //$(this).toggleClass('selected');
				  $('.ui-custom-select').toggleClass('expanded'); 
			});
						
			$(parent)
			.find('.ui-custom-select .ui-select-option')
			.click(function(){
					
					var widgetOpt = $(this);
					
					$(parent)
					.find("option")
					.each(function(){
						if( $(this).text() == $(widgetOpt).text() ) $(this).attr('selected', 'selected');				
					});	
					
					if( !$(this).hasClass('selected') )
					{
						$('.ui-custom-select').removeClass('expanded');											
					}
					else
					{
						$('.ui-custom-select').addClass('expanded');
					}
					
					$('.ui-select-option').removeClass('selected');	
					$(this).toggleClass('selected');
					
					
					ROADMATE.debug({prefix: 'option:selected ', val: $(parent).find("option:selected").text() });
			});
			
					  
		});
		
		if( $('.ui-custom-datepicker').length )
		{
			/* Swedish initialisation for the jQuery UI date picker plugin. */
			/* Written by Anders Ekdahl ( anders@nomadiz.se). */
				
				
				
				// Locale
				$.datepicker.regional['sv'] = {
					closeText: 'Stäng',
					prevText: '&laquo;Förra',
					nextText: 'Nästa&raquo;',
					currentText: 'Idag',
					monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
					'Juli','Augusti','September','Oktober','November','December'],
					monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
					'Jul','Aug','Sep','Okt','Nov','Dec'],
					dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
					dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
					dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
					weekHeader: 'Ve',
					dateFormat: 'yy-mm-dd',
					firstDay: 1,
					isRTL: false,
					showMonthAfterYear: false,
					yearSuffix: ''};
				$.datepicker.setDefaults($.datepicker.regional['sv']);
				
				// Other defaults
				$.datepicker.setDefaults({
						changeMonth: true,
						changeYear: true,												
						gotoCurrent: false,
						showButtonPanel: false
				});
		}
		
		
	};
	ROADMATE['HandleWidgets'] = HandleWidgets;
	
	function HandleTabs(){
		
		$('.ui-custom-tabs')
		.each(function() {
			
			switch( $(this).attr('id') )
			{
				case 'related':
				case 'secondary':
				case 'results':
				case 'comments':
					
					//var prependItem = $(this).find('.ui-custom-tabs-title').length ? $(this).find('.ui-custom-tabs-title') : this;
					
					$(this)
					.find('.ui-custom-tab')
					.prependTo(this)
					.wrapAll('<ul></ul>')
					.wrap('<li></li>');
					
					$(this)
					.find('.ui-custom-tabs-title')
					.prependTo(this);
					
					$(this).tabs();
					
					break;
				default:
					$(this).tabs();
					break;
			}			
		});
			
			
	};
	ROADMATE['HandleTabs'] = HandleTabs;
	
	 /**
	 * 
	 * Function enables the toggle-map function
	 * 	
	 */	 
	 function InitMap()
	 {	
	 	/*if (GBrowserIsCompatible()) {
			
			$('#map')		
			.append('<a href="#mapservice" class="ui-custom-toggle-btn">Visa på karta</a>');	
			
			var mapServiceCSS = {
				 'height': '300px',
				 'width': '460px'
			};		
			$('#map #map-service')
			.css(mapServiceCSS);

			var map = new google.maps.Map2($('#map #map-service').get(0));	
			var directionsPanel = $('#map #route').get(0);
			map.setCenter(new google.maps.LatLng(60.15943, 14.69326), 7);
			map.setUIToDefault();
			var directions = new GDirections(map, directionsPanel);
			//directions.load("from: 500 Memorial Drive, Cambridge, MA to: 4 Yawkey Way, Boston, MA 02215 (Fenway Park)");
			directions.load("from: 33 Surbrunnsgatan, Stockhom to: 2 Skärmarbrinksvägen, Stockholm");
		}	*/
			
			var linkText = $('.ui-custom-toggle-btn').text();
			$('.ui-custom-toggle-btn')
			.click(function(){
						
						$('#map-service')
						.slideToggle(500);					 
						
						return false;
			})
			.toggle(function(){ 
							 $(this).text('Dölj karta')
							 },
					function(){
						$(this).text(linkText) 
			});		
		
	 };
	 ROADMATE['InitMap'] = InitMap;
	 
	 /**
	 * 
	 * Replaces content with Cufon text
	 * 	
	 */	 
	 function InitCufon()
	 {
		var replaced = ['#user-note h3',
						'.trip-full .accepted h3',
						'#comments h3.ui-custom-tabs-title',
						'#form-add-comment h3',
						'#supplementary .block h4',
						'.form .help h4',
						'#page-start #supplementary h4',
						'h2#query',
						'#login h2',
						'#dashboard h2',
						'#primary h1'];
		
		// Setup shadows		
		var shadows = ['#page-start #primary h2'];
		
		Cufon.replace(shadows.join(','), {
				textShadow: '1px 1px rgba(0, 0, 0, 0.22)'
		});
		
		/*replaced.push('.cufon-fx-shadow');	
		
		$('.cufon-fx-shadow')
		.each(function(){						   
			var txt = $(this).text();	
			
			$(this).wrapInner('<span class="cufon-text"></span>')
			.append('<span class="cufon-shadow">' + txt + '</span>');						   
		});*/
		
		Cufon.replace(replaced.join(','));
	 };
	 ROADMATE['InitCufon'] = InitCufon;
	 
	 /**
	 * 
	 * Crops the comments collection and adds a show all link
	 * 	
	 */	 
	 function InitComments()
	 {
		var btn = ROADMATE.GenerateWidget({ type: 'toggleBtn', href: '?showComments=all', text: 'Visa fler' });		
		if( btn )
		{
			$('#comments .pages')			
			.prepend(btn)			
			.find('.ui-custom-toggle-btn')			
			.click(function(){ 
							
						$('#comments .comments-extra')							
						.slideDown(500);
						
						$('#comments .pages .posts-shown').text( $('#comments .pages .posts-total').text() );
						
						$(this).remove();							
						
						return false; 
			});
		}
	 };
	 ROADMATE['InitComments'] = InitComments;
	 
	 /**
	 * 
	 * Gives the advanced search options show/hide functionality
	 * 	
	 */	 
	 function InitAdvSearch()
	 {
		var txtExp = 'Visa fler sökalternativ'; 
		var txtCol = 'Dölj sökalternativ'; 
		var stateInput = $('#advanced_search input[name=adv_search_is_exp]');
		var isExp = ( $(stateInput).val() == 'true' ? true : false );
		var btn = ROADMATE.GenerateWidget({ type: 'toggleBtn', href: '#', text: ( isExp ? txtCol : txtExp ), mode: ( isExp ? 'col' : 'exp' ) });
		if( isExp ) $('#advanced_search').addClass('expanded');
		
		if( btn )
		{		
			$('#simple-search')			
			.append(btn)			
			.find('.ui-custom-toggle-btn')
			.click(function(event){ 
						event.preventDefault();	 	
						
						stateIsExp = $(stateInput).val() == 'true' ? true : false;
										
						$('#advanced_search').slideToggle(300);
						
						$(this)
						.find('.ui-icon')
						.toggleClass('ui-icon-carat-1-s')
						.toggleClass('ui-icon-carat-1-n')
						
						var txt = stateIsExp ? txtExp : txtCol;						
						$(this)
						.find('.ui-txt')
						.text(txt);						
						
						// set hidden input
						var setTo = stateIsExp ? 'false' : 'true' ;
						$(stateInput).val( setTo );
			});			
		}
		
		if( !$('#watch:selected').length ) $('#adv-watch').hide();		
		$('#watch')
		.click(function(){ 
				$('#adv-watch').toggle(); 
		});
		
	 };
	 ROADMATE['Form']['InitAdvSearch'] = InitAdvSearch;
	 
	  /**
	 * 
	 * Handle the climate compensation form
	 * 	
	 */	 
	 function InitClimateCompForm()
	 {
		var formula = {};
		
		formula.literCost = 1;
		formula.fuelCost = {
				diesel: '',
				petrol: '',
				e85: '',
				biogas: '',
				fossilgas: ''
		};
		formula.kmCost = 1;
		
		var result = {};
		
		result.distance = 0;
		result.consumption = 0;
		result.emission = 0;
		result.cost = 0;
		
		$('#comp_calculate')
		.click(function(event){
						
				event.preventDefault();		
				
				var values = {};
				values.fuel_emission = $('#fuel_emission').val();
				values.fuel_type = $('#comp_fuel_type input:checked').attr('id');
				values.mileage = $('#km').val();
				
				for( var i in values ) $('#comp_result').prepend(i + ': ' + values[i] + '<br />' );						
		});
		
		/*
		* Mätvärden *

		L/100 km: 10
		Mileage: 1000 km / m3
		
		* Result *
		
		E = Emission  (ton)
		C = Cost (Euro)
		
		Diesel: 		E 0.30 C 64.51 (0.06451)
		Bensin			E 0.27 C 57.63 
		E85 (etanol):	E 0.07 C 14.41
		Biogas: 		E 0.04 C 8.64
		Fordonsgas: 	E 0.12 C 25.16
		
		L/100 km: 5
		
		Diesel: 		E 0.15 C 32.25
		Bensin			E 0.13 C 28.81
		E85 (etanol):	E 0.03 C 7.20
		Biogas: 		E 0.02 C 4.32
		Fordonsgas: 	E 0.06 C 12.58
		*/
		
	 };
	 ROADMATE['Form']['InitClimateCompForm'] = InitClimateCompForm;
	
	
	 /**
	 * 
	 * Generate Custom UI Widget
	 * 	
	 */	 
	 function GenerateWidget(cfg)
	 {
		 if( !cfg.type ) return;
		 
		 switch( cfg.type )
		 {
			case 'toggleBtn':
				
				var href = cfg.href || '#';
				var attrClass = cfg.attrClass || '';
				var attrID = cfg.attrID ? 'id="' + cfg.text + '"' : '';
				var text = cfg.text || '';
				var ico = cfg.mode == 'col' ? 'n' : 's';
				
				return '<a ' + attrID + ' class="ui-custom-toggle-btn ' + attrClass + '" href="' + href + '"><span class="ui-state-default ui-corner-all ui-btn"><span class="ui-icon ui-icon-carat-1-' + ico + '"></span></span><span class="ui-txt">' + text + '</span></a>';				
				
				break;
			default:
				return false;
				break;
		 }
		
	 };
	 ROADMATE['GenerateWidget'] = GenerateWidget;
	
	/**
	 * 
	 * Generate Custom UI Widget
	 * 	
	 */	 
	 function initSearchResults()
	 {
		 /* Make it a little more clickable */
		 $('.search-results li')
		 .click(function(){ 
				var l = $(this).find('h5 a').attr('href');
				window.location.href = l;
		 });
		 
		 /* Handle acronym hints for shortened names */
		 $('.search-results h5 acronym')
		 .each(function(){
						
			var full = $(this).attr('title');
			var acr = $(this).text();
			
			 $(this).hover(function(){  
						
						$(this)
						.addClass('ui-state-hover ui-corner-all')
						.text( full )
						.attr('title', '')
						.parents('h5')
						.addClass('hint-active');	
						
					  },
					  function() {
						 
						$(this)
						.removeAttr('class')
						.text( acr )
						.attr('title', full)
						.parents('h5')
						.removeClass('hint-active');
			  });
		});
		
	 };
	 ROADMATE['initSearchResults'] = initSearchResults;
	
	
	
	 /**
	 * 
	 * Handle all effects and enhancements for forms
	 * 	
	 */	 
	function AugmentForms(){		
		
		$('.form .ui-custom-hint')
		.each(function(){
			
			if( $(this).val() == '' || $(this).val() == $(this).attr('title') + '...')
			{
				$(this)
				.val( $(this).attr('title') + '...' )
				.addClass('hint-active')
				.focus(function(){ 
					if( $(this).val() == '' || $(this).val() == $(this).attr('title') + '...')
					{
						$(this)
						.val('')
						.addClass('hint-active');
					}
					$(this).removeClass('hint-active');
				})
				.blur(function(){ 
						if( $(this).val() == '' || $(this).val() == $(this).attr('title') + '...' )
						{
							$(this)
							.val( $(this).attr('title') + '...' )
							.addClass('hint-active');
						}						
				});
				
				
			}
	    });
		
		/* User rating */
		if( $('#rate-user #mates .rating-opts').length )
		{
			$('#rate-user #mates .rating-opts')
			.each(function(){ 
				var optsWrap = $(this);
				
				// Highlight label of checked radio
				if( $(this).find('input[type=radio]:checked').length ) $(this).find('label[for=' + $(this).find('input[type=radio]:checked').attr('id') + ']').addClass('checked');
				
				$(this)
				.find('label')
				.click(function(){
					$(optsWrap)
					.find('label')
					.removeClass('checked');
					
					$(this).addClass('checked');				
				})
			});
		}
		
		if( $('#settings').length )
		{
			
			/* Word count support on profile info */
			if( $('textarea#free_info').length && $('p.word-count').length )
			{
				$('textarea#free_info')
				.keyup(function(){
					var maxlength = 200;
					var len = $(this).val().length;
					
					if( len <= maxlength )
					{							
						$(this).next('p.word-count').text( len + '/' + maxlength);
					}
					else
					{
						var capped = $(this).val().substr(0,maxlength);
						$(this).val( capped )
						$(this).next('p.word-count').html('<strong class="tolong" title="Texten är för lång, max 200 tecken.">' +  maxlength + '</strong>/' + maxlength);
					}
				})
			}
			
			/* remove account extra security */
			if( $('#user-delete-account label[for=user_delete_account]').length )
			{
				var label = $('#user-delete-account label[for=user_delete_account]');
				var btn = $(label).parent('li').next();
				//if( !$(label).find('input[type=radio]:checked').length ) $(btn).hide();
				$(label).find('input[type=radio]:checked').removeAttr('checked');
				$(btn).hide();
				$(label)
				.click(function(){ $(btn).show() })
			}
		}
		
		/* Start: Create Trip */
		if( $('#create-trip').length )
		{
			
			/* Add help block focus */
			$('#create-trip')
			.find('input, textarea, select')
			.focus(function(){ 

					$('#create-trip .help').removeClass('focus');
							
					$(this)
					.parents('fieldset')
					.find('div.help')
					.addClass('focus')
			})
			.blur(function(){ 
					$('#create-trip .help').removeClass('focus');
			});	
			
			/* config disable-toggler */
			$('#create-trip label.ui-custom-toggler')
			.each(function(){
						   
				var cbox = $(this).find( '#' + $(this).attr('for') );
				var cboxEl = $(this).parent().find('.ui-custom-toggler-input');

				if( $(cbox).attr('checked') == false && $(cboxEl).val().length == 0 )
				{		
					ROADMATE.debug({ prefix: $(cbox).attr('name') + ':checked', val: $(cbox).attr('checked') });
					$(cboxEl)
					.addClass('disabled')
					.attr('disabled', 'disabled');
				};
				
				$(cbox)
				.click(function(){									 
							 if( $(cboxEl).hasClass('disabled') ) 
							 {
								$(cbox).attr('checked', 'checked');
								$(cboxEl)
								.removeClass('disabled')
								.removeAttr('disabled') 
							 }
							 else
							 {								
								$(cbox).removeAttr('checked');
								$(cboxEl)
								.addClass('disabled')
								.attr('disabled', 'disabled')
							 }
				});
				
		   });
			
			// custom validation
			$('.ui-custom-validate')
			.each(function(){
				
				switch( $(this).attr('id') )
				{
					case 'depart-time':
						/* format time to digital digits */
						$(this)
						.change(function(){
								var usertime = $.trim( $(this).val() );
								var usertime = usertime.replace(/[^0-9]/g, "");
								
								var digitime = usertime.substring(0,2) + ':' + usertime.substring(2,4);
								
								$(this).val(digitime);
								
								ROADMATE.Form.Validate($(this));
						})
						.focus(function(){ if( $(this).val() == ':' ) $(this).val('') });					
						break;
						
					default:
						ROADMATE.Form.Validate($(this));
						break;					
				}  
						   
			});
			
		
			// trip type select auto-submit
			if( $('#trip-type').length )
			{
				// get default state
				var defaultTripTypeState = $('#trip-type input[name=tt]:checked').attr('id');		
				// Hide non default submits
				$('#finalize .btn-submit')
				.not('.' + defaultTripTypeState)
				.parent('li')
				.hide();
				
				$('#create-trip #trip-type input[name=tt]')
				.change(function(event){						
						$('#finalize .btn-submit').parent('li').hide();
						$('#finalize .' + $(this).attr('id')).parent('li').show();					
				});
			}
			
		} /* End: #create-trip */
		
		// keyword handler
		$('input#add_keyword')
		.click(function(event){
				event.preventDefault();
				
				if( $('input#keyword').val() != "" )
				{
					ROADMATE.Form.AddKeyword();
				}
				
		});
		$('.form .tags a')
		.each(function(){
			$(this)
			.click(function(event){
				
				event.preventDefault();
				
				var tag = $(this).parent('li');
				
				ROADMATE.Form.RemoveKeyword(tag);
								
			});			   
		});
		
		
		if( $('.ui-custom-datepicker').length )
			{	
				$('.ui-custom-datepicker')
				.each(function(index) {
					   
					switch( $(this).attr('id') )
					{
						case 'depart_date':
							
								var inputId = $(this).attr('id');
							
								$(this).addClass('offscreen');					
								$(this).next('p.hint').addClass('offscreen');
								
								// Set default date
								var date = $('.ui-custom-datepicker').val().split('-');
								var y = date[0];
								var m = date[1];
								var d = date[2];	
								
								$(this).after('<input type="text" class="ui-custom-datepicker-alt" id="depart_date_alt" value="' + $.datepicker.formatDate('D d MM, yy', new Date(y, m - 1, d)) + '" />')
								
								$('label[for'+ inputId +']')
								.attr('for', inputId + '_alt')	
								
								
								$(".ui-custom-datepicker-alt").datepicker({										
									dateFormat: 'D d MM, yy',
									altField: $(this), 
									altFormat: 'yy-mm-dd',						
									onClose: function(){ $(this).effect('highlight') }
								});
									
								break;
						case 'depart_day_start':
						case 'depart_day_end':
							
								var dpIndex = index + 1;								
								var inputId = $(this).attr('id');
								
								$(this).attr('class', '.ui-custom-datepicker' + dpIndex);
								$(this).addClass('offscreen');
								$(this).next('p.hint').addClass('offscreen');
								
								// Set default date
								var date = $(this).val().split('-');
								var y = date[0];
								var m = date[1];
								var d = date[2];	
								
								$(this).after('<input type="text" class="ui-custom-datepicker-alt' + dpIndex + '" id="'+ inputId +'_alt" value="' + $.datepicker.formatDate('D d MM, yy', new Date(y, m - 1, d)) + '" />')
								
								$('label[for='+ inputId +']')
								.attr('for', inputId + '_alt')	
								
								
								$(".ui-custom-datepicker-alt" + dpIndex).datepicker({										
									dateFormat: 'D d MM, yy',
									altField: $(this), 
									altFormat: 'yy-mm-dd',						
									onClose: function(){ $(this).effect('highlight') }
								});
						
						default:
							
							break;				
					}
					// set global selector for ensurance
					$('body').addClass('js-ui-datepicker-active');
				});
			}
		
		
		if( $('#create-member').length )
		{
			/* friendly insertion of name in header */
			$('#create-member input#first_name')
			.blur(function(){
				
				var h4 = $(this).next('.help').find('h4');
				
				$(h4).html('Hej ' +  $(this).val() + '!') 
				
				Cufon.replace(h4);
			});
		}
		
		//if( ROADMATE.cfg.page.hasAutoComplete ) ROADMATE.Form.initAutoComplete();
	};
	ROADMATE['Form']['AugmentForms'] = AugmentForms;
	
	function AddKeyword()
	{
		$.ajax({
			url: '?a=addTag&t=' + ROADMATE.Form.encode_utf8( $('#keyword').val() ),
			error: function(){  },
			success: function(responseText, textStatus, XMLHttpRequest){
				$('ul.tags').append( responseText );

				$('ul.tags li:last-child a')				
				.click(function(event){
					
					event.preventDefault();
					
					var tag = $(this).parent('li');
					
					ROADMATE.Form.RemoveKeyword(tag);				
				});
				
				$('input#keyword').val('');
			}
			});
		
	}
	ROADMATE['Form']['AddKeyword'] = AddKeyword;
	
	function RemoveKeyword(tag)
	{
		$.ajax({
			url: $(tag).find('a').attr('href'),
			error: function(){  },
			success: function(responseText, textStatus, XMLHttpRequest){
				$(tag).remove();
			}
			});
	}
	ROADMATE['Form']['RemoveKeyword'] = RemoveKeyword;
	
	
	function encode_utf8(s)
	{
		return encodeURIComponent(s);
	}
	ROADMATE['Form']['encode_utf8'] = encode_utf8;
	
	function decode_utf8(s)
	{
		return decodeURIComponent(s);
	}
	ROADMATE['Form']['decode_utf8'] = decode_utf8;
	
	/**
	 * 
	 * Validates user input thrugh Ajax call 
	 * 	
	 */	
	function Validate(e){
		
		var query = {'validate': '1', 
					't': ROADMATE.Form.getValidationType($(e)), 
					'v': $(e).val() 
					};
		
		ROADMATE.debug('Validation type: ' + ROADMATE.Form.getValidationType($(e)) );
		//ROADMATE.debug('Serialize: ' + $(e).serialize() );
		
		for( var i in query ) ROADMATE.debug('Query.' +  i + ': ' + query[i]);
		ROADMATE.debug('Valdating ' + $(e).attr('id'));
		
		$.getJSON('formValidate.php', query ,function(data) {
			
			for( var i in data ) ROADMATE.debug('data.' +  i + ': ' + data[i]);
		 	
			if( data.valid == 'true' )
			{
				$(e)
				.removeClass('invalid')
				.addClass('valid');
				
				if( data.msg )
				{
					if( data.msg.length > 5 )
					{
						if( $(e).next('p.error').length )
						{	
							$(e).next('p.error').text(data.msg);
						}
						else
						{
							$(e).after('<p class="error">' +  data.msg + '</p>');
						}						
					}					
				}
				else
				{
					$(e).next('p.error').remove();
				}
			}
			else // Is Invalid
			{
				$(e)
				.removeClass('valid')
				.addClass('invalid');
				
				if( data.msg )
				{	
					if( data.msg.length > 5 )
					{
						if( $(e).next('p.error').length )
						{			
							$(e).next('p.error').text(data.msg);
						}
						else
						{
							$(e).after('<p class="error">' +  data.msg + '</p>');
						}						
					}
				}				
			}
		});
			
	};
	ROADMATE['Form']['Validate'] = Validate;
	
	
	/**
	 * 
	 * Determine what kind of data to be validated
	 * 	
	 */	 
	function getValidationType(e)
	{
		var classes = $(e).attr('class').split(' ');
		var val_type = 'default';
		$.each(classes, function(i, v){ 
					if( v.indexOf('ui-vtype-') != -1 )
					{
						val_type = v.split('ui-vtype-')[1];							
					}
		});
		return val_type;
	};
	ROADMATE['Form']['getValidationType'] = getValidationType;
	
	/**
	 * 
	 * Handle all AutoComple setup for forms
	 * 	
	 */	 
	function initAutoComplete()
	{
		$('.ui-custom-autocomplete')
		.each(function(){				   
			
			switch( $(this).attr('id') )
			{
				case 'from':
				case 'to':
				case 'via':
						var data = "Stockholm Göteborg Luleå Malmö Eskilstuna Söderhamn Umeå Kalmar Sundsvall Linköping".split(" ");
						$(this).autocomplete(data, {
							 width: $(this).outerWidth(),
							 scroll: true
						 });
						ROADMATE.debug('Autocomplete on: "' + $(this).attr('id') + '" Success');
					break;
				case 'keyword':						
					$(this).autocomplete(["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "pearl"], {
						width: $(this).outerWidth(),
						max: 4,
						highlight: false,
						multiple: true,
						multipleSeparator: ", ",
						scroll: true,
						scrollHeight: 300
					});
					break;
				default:
					ROADMATE.debug('Autocomplete ID "' + $(this).attr('id') + '" not found.');
					break;				
			}
			
	   });
	};
	ROADMATE['Form']['initAutoComplete'] = initAutoComplete;
	
	function InitDev()
	{
		for( var i in ROADMATE.cfg.page ) ROADMATE.debug({ prefix: 'cfg.page.' + i, val: ROADMATE.cfg.page[i] });		
		
		if( $('#time2').length )
		{
			var h = 24;
			for(var i = 0; i <= h; i++)
			{
				$('#time2')
				.append('<option value="'+ i +'00">'+i+':00</option><option value="'+ i +'30">'+i+':30</option>');

			}
		}
	
	};
	ROADMATE['InitDev'] = InitDev;
	
	

	  /**
	 * 
	 * Writes debugging code the a canvas with the ID of 'debug'.
	 * 
	 * 	 
	 * @config.prefix
	 *   Something to add before the variable value.
	 * @config.val
	 *   A variable value.
	 * @config.nobreak
	 *   Optional. If set to true no linebreak will be added after debug text.
	 * @config.canvas
	 * 	 Optional. Defines a new canvas for the debugging text to be inserted.
	 *
	 */
	function debug(config){
		
		if( ROADMATE.debugOn )
		{	
			data = {};				
			data.nobreak = config.nobreak ? '' : '<br />';
			data.canvas = config.canvas || 'debug';
			
			if( !$('#' + data.canvas).length )
			{
				$('body > form').append('<div id="' + data.canvas + '"></div>')
			}
				
			if( config.prefix )
			{
				data.prefix = config.prefix.toString();				
				data.val = config.val;
				
				$('#' + data.canvas).append('<span>' + data.prefix + ' <var>' + data.val + '</var></span>' + data.nobreak);				
			}
			else
			{
				$('#' + data.canvas).append('<span>' + config + '</span><br />');
			}
		}
	};
	ROADMATE['debug'] = debug;
		  
		  
})();

 

/*(function($) {

	$.fn.debug = function(settings) {
		 
		 var config = {'canvas': '#debug', 'nobreak' : '<br />'};
		
		 if (settings) $.extend(config, settings);
	
		 this.each(function() {
		   		
				data = {};				
				data.nobreak = config.nobreak;
				data.canvas = config.canvas;
				
				
				if( !$(data.canvas) )
				{
					$('body').append('<div id="' + data.canvas + '"></div>')
				}
					
				if( config.prefix )
				{
					data.prefix = config.prefix.toString();
					data.val = config.val ? config.val.toString() : 'null or undefined';
					
					$(data.canvas).append('<span>' + data.prefix + ' <var>' + data.val + '</var></span>' + data.nobreak);
				}
				else
				{
					$(data.canvas).append('<span>' +  this.text() + '</span><br />');
				}			
		 });
	 	
	 return this;

	};
})(jQuery);

$('#to-trip').debug();*/

