/* GLOBALS */
var effects=Array();
var response_count=0;
var logged_in;
var loggedout_sessions;
var attempted_user_action;
var error_set = true;
var webServiceURL = appURL + '/data_interface.php';

var Images = {
	btn_addToSchedule : imageURL + '/btn_addToSchedule.gif',
	load : imageURL + '/load.gif'
}

window.addEvent('domready', function(){
	session_scroll=new Fx.Scroll('sessionsListContainer');
	document.getElementById('search_field').value='';
	var lock_var=0;
	refreshPage();
	image1 = new Image();
	image1.src = Images.btn_addToSchedule;
	var form = document.getElementById('session_search');
	form.onkeydown = function(e) {
		e = e || window.event;
		if (e.keyCode == 13) {
			document.getElementById('search_string').value=document.getElementById('search_field').value;
			getSessions();
			return false;
		}
	};
	
	checkLogin();
});

function eventChecked(event_id,is_checked) {
	change_via_text_link=false;
	event_checkbox=$('event_checkbox_'+event_id);
	event_status=$('event_status_'+event_id);

	if (event_checkbox.checked!=is_checked) {
		event_checkbox.checked=is_checked;
		change_via_text_link=true;
	}

	track_checkboxes=new Array;
	$$('input.track_checkbox').each (function(track) {if (track.getProperty('event_id')==event_id) { track_checkboxes.push(track)}});
	track_count=track_checkboxes.length;
	if (is_checked) {
		showTracks(event_id,'on');
		track_checkboxes.each(function(track) {track.checked=true;});
		event_status.innerHTML='('+track_count+'/'+track_count+') selected';
	}
	else {
		track_checkboxes.each(function(track) {track.checked=false;});
		event_status.innerHTML='(0/'+track_count+') selected';
		if (!change_via_text_link) {
			showTracks(event_id,'off');
		}
	}
}



Array.prototype.in_array = function (value) {
	for (var i=0; i < this.length; i++) {
		if (this[i] == value) {
			return true;
		}
	}
	return false;
}

function trackChecked(event_id) {
	track_count=0;
	checked_track_count=0;
	$$('input.track_checkbox').each (function(track) {if (track.getProperty('event_id')==event_id) { if (track.checked) checked_track_count++; track_count++;}});
	if (checked_track_count==0) {
		event_checkbox.checked=false;
	}
	else {
		event_checkbox.checked=true;
	}
	$('event_status_'+event_id).innerHTML='('+checked_track_count+'/'+track_count+') selected';
}

function getSessions() {
	var my_id=++response_count;
	//ugly HTML required by IE -- see, if you insert a DIV, for some reason the whole center panel blanks out.
	$('sessionsListContainer').innerHTML='<br /><center><img src="'+Images.load+'" alt="Loading"/></center>';
	tracks_array=new Array();
	$$('input.track_checkbox').each (function(track) {if (track.checked) {tracks_array.push(track.value);} });
	formats_array=new Array();
	$$('input.format_checkbox').each (function(format) {if (format.checked) formats_array.push(format.value); });

	var params = {
		formats:formats_array,
		tracks:tracks_array,
		'search_string': $('search_string') ? $('search_string').value : '',
		'search_by': $('search_by').value,
		'pass_id': $('for_pass') ? $('for_pass').value : '',
		'order_by': $('sort_by') ? $('sort_by').value : '',
		'filter_by_day': $('filter_by_day') ? $('filter_by_day').value : '',
		'filter_by_time': $('filter_by_time') ? $('filter_by_time').value : ''
	}; 

	jsonRequest(webServiceURL + '?action=session_list', function(data) {
			if (my_id==response_count) {
				$('sessionsListContainer').innerHTML=data.session_list;
				appendDebugData(data.debug_data);
			}
	}, params);
}

function appendDebugData(debug_data) {
	//$('debug').innerHTML=$('debug').innerHTML+debug_data;
	
}

function refreshPage() {
	$$('input.eventCheckbox').each(function(el) {trackChecked(el.getProperty('parent_id')); });
	getSessions();
	addCookieToForm();
	
}

function toggleDiv(div_id,show) {
	if (show) {
		$(div_id).setStyle('display','inline');
	}
	else {
		$(div_id).setStyle('display','none');
	}
}

function loginUser() {
	var login_data=new Hash();
	$$('input.login_input').each(function(el) { if (el != undefined) login_data.set(el.name,el.value);});
	document.getElementById('login').value="Please Wait...";
	document.getElementById('login').disabled=true;
	
	//Stores and loads a Hash as a Cookie using JSON format and assigns it to a new variable.
	var session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
	
	//Grabs the session data from the cookie and passes it into a new variable.
	var sessions = session_cookie.get('sessions');
	
	//Executes the login_user case in the data_interface.php file and appends the cookie data to the URL.
	jsonRequest(webServiceURL + '?action=login_user&cookie='+sessions, function(data){

			if (data.valid_login) {
				document.getElementById('loginStatus').innerHTML= data.results;
				$('loginContainer').setStyle('display','none');
				$('logoutContainer').setStyle('display','inline');
				session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
				session_cookie.extend({'user_id':data.user_id,'user_key':data.user_key,'user_email':data.user_email,'sessions':data.sessions});
				addCookieToForm();
				TB_remove();
				refreshPage();
				if (attempted_user_action != undefined) {
					eval(attempted_user_action);
				}
			}
			else {
				if (error_set == true)
				{
					document.getElementById('TB_ajaxContent').innerHTML= document.getElementById('TB_ajaxContent').innerHTML+data.results;	
					error_set = false;
				}
			}

		},{'login':login_data});
}

function logoutUser() {	
	Cookie.dispose('scheduler_session');	
	Cookie.dispose('php121pw');
	Cookie.dispose('php121un');
	Cookie.dispose('phpfox_h');
	Cookie.dispose('phpfox_id');
	Cookie.dispose('PHPSESSID');
	jsonRequest(webServiceURL + '?action=logout_user', function(data) {
			window.location = appURL;
	},{});
}

function showEmailMySchedule() {
	var session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
	user_id=session_cookie.get('user_id');
	if (user_id) {
	
		var answer = confirm ("Attention: By clicking ok, you will save your current schedule.  If do not wish to save your schedule, please click Cancel to continue.");
			if (answer) {
			var session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
			user_id=session_cookie.get('user_id');
			if (user_id) {
			var now = new Date();
			var hour        = now.getHours();
			var minute      = now.getMinutes();
			var seconds      = now.getSeconds();
			if (minute < 10) { minute = '0' + minute}
			if (seconds < 10) { seconds = '0' + seconds}
			var ap = "AM";
			if (hour   > 11) { ap = "PM";        }
			if (hour   > 12) { hour = hour - 12; }
			if (hour   == 0) { hour = 12;        }
			var savedTime = ('Last Saved: ' + hour + ':' + minute + ':' + seconds + ' ' + ap);
			document.getElementById('SaveResultsContainer').innerHTML=savedTime;
			}
		}

		TB_show(resourceBundle['emailPopup_title'], appURL+'#TB_inline?inlineId=popoverContainer&height=' + emailPopup.height + '&width=' + emailPopup.width, null);
		
		var now = new Date();

		try {
			//document.images.captcha.src = appURL+'/captcha.jpg?' + now.getTime();
			//document.getElementById('email_schedule_security_code').value="";
			document.getElementById('email_results').innerHTML='';
			document.getElementById('email_schedule_security_code').value="";
			document.getElementById('email_schedule_from').value="";
			document.getElementById('email_schedule_from_name').value="";
			document.getElementById('email_schedule_recipients').value="";
		}
		catch (e) {
			//alert(e);
		}
	}
	else {
		showLogin();
	}
}

function emailSchedule(user_id) {

	/*
	 * I had to use native javascript because the method "getElement" provided
	 * by Mootools doesn't seem to work for IE7. I have read that any Mootools 
	 * Element used in IE is 'weird'. This code below is strict on the DOM tree.
	 */
	try {
		var tb_ajaxContent = document.getElementById('TB_ajaxContent');
		var formInputs = tb_ajaxContent.getElementsByTagName('input');
		var divs = tb_ajaxContent.getElementsByTagName('div');
		
		var emailResults;
		var fromEmail;
		var sendToEmail;
		var sendBtn;
		
		// Populate form inputs.
		for (var i = 0; i < formInputs.length; i++) {
			switch (formInputs[i].id) {
				case 'email_schedule_recipients':
					fromEmail = formInputs[i];
					break;
				case 'email_schedule_from':
					sendToEmail = formInputs[i];
					break;
				case 'my_schedule_send':
					sendBtn = formInputs[i];
					break;
				default:
					break;
			}
		}
		
		// Find 'email_results' <div>.
		for (var i = 0; i < divs.length; i++) {
			switch (divs[i].id) {
				case 'email_results':
					emailResults = divs[i];
					break;
				default:
					break;
			}
		}
	}
	
	catch (e) {
		//alert(e);
	}

	// Validate from email.
	var fromEmailValidated = validateEmailSchedule(fromEmail.value);
	if (!fromEmailValidated['validated']) {
		emailResults.innerHTML = '<span class="emailErrorText">' + fromEmailValidated['error'] + '</span>';
		return;
	}
	
	// Check if send to email addresses exist.
	if (!sendToEmail.value || sendToEmail.value == '') {
		emailResults.innerHTML = '<span class="emailErrorText">Please enter email addresses to send.</span>';
		return;
	}
	
	// Validate each send to email addresses.
	var sendToEmailAddys = sendToEmail.value.split(',');
	for (var i = 0; i < sendToEmailAddys.length; i++) {
		var sendToEmailValidated = validateEmailSchedule(sendToEmailAddys[i]);
		if (!sendToEmailValidated['validated']) {
			emailResults.innerHTML = '<span class="emailErrorText">' + sendToEmailValidated['error'] + '</span>';
			return;			
		}
	}
	
	var session_cookie = new Hash.Cookie('scheduler_session',{duration:false});
	user_id = session_cookie.get('user_id');
	mail_data = new Hash();
	$$('input.email_schedule_input').each(function(el) { 
		if (el != undefined) {
			mail_data.set(el.name,el.value);
		}
	});	

    sendBtn.value = "Sending...";
    sendBtn.disabled = true;
    
	if (user_id) {
		jsonRequest(webServiceURL + '?action=email_schedule', function(data) {

			// If data doesn't exist or is an object that doesn't contain
			// the 'results' property.
			emailResults.innerHTML = (data && data.results) 
				? data.results 
				: '<span class="emailErrorText">Email failed to send. Please try again later.</span>';				

			try {
				appendDebugData(data.debug_data);
			}
			catch (e) {}
			
			sendBtn.value = "Send";
			sendBtn.disabled = false;
			
		}, {'mail_data':mail_data,'user_id':user_id,'user_key':session_cookie.get('user_key')});
	}
	else {
		showLogin();
	}
}

function getUserSessions(user_id) {
	var session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
	var user_key= session_cookie.get('user_key');
	var user_id = session_cookie.get('user_id');

	var user_session_data=new Hash();
	jsonRequest(webServiceURL + '?action=get_user_sessions', function(data){
			appendDebugData(data.debug_data);
			if ($data.permission_denied) {
				return false;
			}
			else {
				user_session_data.set('sessions',data.user_sessions);
				user_session_data.set('user_name',data.user_name);
				return user_session_data;
			}
		},{'user_id':user_id,'user_key':user_key});

}

function printSchedule(new_window,user_id) {
	var session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
	user_id=session_cookie.get('user_id');
	//alert(user_id);

	if (user_id) {
	
		var answer = confirm ("Attention: By clicking ok, you will save your current schedule.  If do not wish to save your schedule, please click Cancel to continue.");
			if (answer) {
			var session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
			user_id=session_cookie.get('user_id');
			if (user_id) {
			//alert(user_id);
			var now = new Date();
			var hour        = now.getHours();
			var minute      = now.getMinutes();
			var seconds      = now.getSeconds();
			if (minute < 10) { minute = '0' + minute}
			if (seconds < 10) { seconds = '0' + seconds}
			var ap = "AM";
			if (hour   > 11) { ap = "PM";        }
			if (hour   > 12) { hour = hour - 12; }
			if (hour   == 0) { hour = 12;        }
			var savedTime = ('Last Saved: ' + hour + ':' + minute + ':' + seconds + ' ' + ap);
			document.getElementById('SaveResultsContainer').innerHTML=savedTime;
			}
		}
		
	
		print_sessions=session_cookie.get('sessions');
		user_name=session_cookie.get('user_name');
		jsonRequest(webServiceURL + '?action=print_schedule', function(data){
				appendDebugData(data.debug_data);
				print_page=new_window.document;
				print_page.write(data.user_schedule_print);
				print_page.close(); 
		},{'user_id':user_id,'user_key':session_cookie.get('user_key')});
	}
	else {
		print_sessions=session_cookie.get('sessions');
		user_name=session_cookie.get('user_name');
		jsonRequest(webServiceURL + '?action=print_schedule', function(data){
				appendDebugData(data.debug_data);
				print_page=new_window.document;
				print_page.write(data.user_schedule_print);
				print_page.close(); 
		}, {'user_name':user_name,'sessions':print_sessions});
	}
	
}

function exportHTML(user_id) {
	var session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
	user_id=session_cookie.get('user_id');
	if (user_id) {
	var answer = confirm ("Attention: By clicking ok, you will save your current schedule.  If do not wish to save your schedule, please click Cancel to continue.");
		if (answer) {
			var session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
			user_id=session_cookie.get('user_id');
			if (user_id) {
			//alert(user_id);
			var now = new Date();
			var hour        = now.getHours();
			var minute      = now.getMinutes();
			var seconds      = now.getSeconds();
			if (minute < 10) { minute = '0' + minute}
			if (seconds < 10) { seconds = '0' + seconds}
			var ap = "AM";
			if (hour   > 11) { ap = "PM";        }
			if (hour   > 12) { hour = hour - 12; }
			if (hour   == 0) { hour = 12;        }
			var savedTime = ('Last Saved: ' + hour + ':' + minute + ':' + seconds + ' ' + ap);
			document.getElementById('SaveResultsContainer').innerHTML=savedTime;
			}
		}
		
			var answer = confirm ("Attention: By clicking ok, the current schedule you have created will be saved to your myE2 profile and override any existing items you have placed in MY CONFERENCE SCHEDULE on your profile . If you have existing content in that field that you would like to save, please select cancel. You may elect to save a copy and add it back in to your PROFILE SETTINGS later.");
			if (answer) {
				jsonRequest(webServiceURL + '?action=export_schedule', function(data){
							appendDebugData(data.debug_data);
							if (data.results) {
								var now = new Date();
								var hour        = now.getHours();
								var minute      = now.getMinutes();
								var seconds      = now.getSeconds();
								if (minute < 10) { minute = '0' + minute}
								if (seconds < 10) { seconds = '0' + seconds}
								var ap = "AM";
								if (hour   > 11) { ap = "PM";        }
								if (hour   > 12) { hour = hour - 12; }
								if (hour   == 0) { hour = 12;        }
								var savedTime = ('Profile Last Updated: ' + hour + ':' + minute + ':' + seconds + ' ' + ap);
								document.getElementById('SaveResultsContainer').innerHTML=savedTime;
							}
							else {
								document.getElementById('SaveResultsContainer').innerHTML='Updated Failed';
							}
						},{'user_id':user_id,'user_key':session_cookie.get('user_key')});
			}
			else {
				document.getElementById('SaveResultsContainer').innerHTML="Profile not updated";
			}	
		}
		else {
			showLogin();
		}
}

function trackSaveButton() {
	jsonRequest(webServiceURL + '?action=track_save_button', function(data){},{'data':'hello'});
}

function saveMySchedule(track) {
	var session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
	user_id=session_cookie.get('user_id');
	if (user_id) {
		//alert(user_id);
		var now = new Date();
		var hour        = now.getHours();
		var minute      = now.getMinutes();
		var seconds      = now.getSeconds();
		if (minute < 10) { minute = '0' + minute}
		if (seconds < 10) { seconds = '0' + seconds}
		var ap = "AM";
		if (hour   > 11) { ap = "PM";        }
		if (hour   > 12) { hour = hour - 12; }
		if (hour   == 0) { hour = 12;        }
		var savedTime = ('Last Saved: ' + hour + ':' + minute + ':' + seconds + ' ' + ap);
		document.getElementById('SaveResultsContainer').innerHTML=savedTime;
	
		if(track) {
			trackSaveButton();
		}	
	}
	else {
		showLogin();
	}
}

function getSessionDescription(session_id) {
	if ($('session_description_'+session_id)) {		
		$('session_description_'+session_id).destroy();
		$('session_'+session_id+'_div').setStyle("display", "none");
	}
	else {
		var elm = new Element('div');
		elm.setProperties({id:'session_description_'+session_id});
		elm.injectInside('session_'+session_id+'_div');
		jsonRequest(webServiceURL + '?action=session_description', function(data) {
			$('session_description_'+session_id).innerHTML=data.session_description;			
			if ($('saved_session_'+session_id)) {				
				$('session_'+session_id+'_cart_action').setProperties({
				'class':'cart_delete',
				src: imageURL + '/btn_removeFromSchedule.gif',
				title:"Remove From My Schedule"});				
			}			
			appendDebugData(data.debug_data);
			$('session_'+session_id+'_div').setStyle("display", "block");
		}, {'session_id':session_id});
	}
}

function colorCycle(element) {
	var myColorFx = new Fx.Color(element, 'background-color', {duration: 10000});
	myColorFx.start('#54A1CF', '#000000');
}

function shareMyProfile(share) {
	if (share) {
		$('userRegistrationExtendedContainer').setStyle('display','block');
	}
	else {
		$('userRegistrationExtendedContainer').setStyle('display','none');
	}
}

function addCookieToForm() {
	var sessions; //declare to prevent errors (sessions can be undefined, if it is undeclared as well, we'll throw an error).
	session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
	if (session_cookie.get('user_id')) {
		$('loginContainer').setStyle('display','none');
		$('logoutContainer').setStyle('display','inline');
		jsonRequest(webServiceURL + '?action=get_user_sessions', function(data){
			if (data.error != undefined) {
				alert(data.error);
			}
			if (data.sessions != undefined) {
				data.sessions.each( function(id) {
				if(!$('saved_session_'+id)){
					var saved_session_input= new Element('input',{'type':'hidden','value':id, 'name':'saved_session_'+id, 'id':'saved_session_'+id,'class':'saved_user_session'});
					$('user_sessions').appendChild(saved_session_input);
				}
				});
			}
			appendDebugData(data.debug_data);
			updateUserScheduleDisplay();
		},{'user_id':session_cookie.get('user_id'),'user_key':session_cookie.get('user_key')});

	}
	else if (session_cookie.get('sessions') != undefined) {
		//get sessions from session cookie.
		sessions=session_cookie.get('sessions');
		if (sessions != undefined) {
			sessions.each(function(id) {
				if(!$('saved_session_' + id)) {
					var saved_session_input= new Element('input',{'type':'hidden','value':id, 'name':'saved_session_'+id, 'id':'saved_session_'+id,'class':'saved_user_session'});
					$('user_sessions').appendChild(saved_session_input);
				}		
			});
		}
		updateUserScheduleDisplay();
	}
}

function clearSessions() {
	session_cookie= new Hash.Cookie('scheduler_session',{duration:false});
	session_cookie.set('sessions',new Array());
	
	var answer = confirm("Attention: By clicking ok, the current schedule will be erased.  Please note that when erased, the sessions cannot be restored.");
	if (answer) 
	{
		// Destroy the the hidden inputs.
		$$('input.saved_user_session').each(function (el) {
			el.destroy();
		});

		$$('img.cart_delete').each(function(el) {
			el.setProperties({'class':'',src:Images.btn_addToSchedule,title:"Add To My Schedule"});
		});

		if (session_cookie.get('user_id') != undefined) 
		{
			jsonRequest(webServiceURL + '?action=clear_sessions', function(data){
				if (data.error != undefined){
					alert(data.error);
				}
				try {
					appendDebugData(data.debug_data);
				}
				
				catch (e) {}
				
				// Update the user schedule and the session list after clearing.
				updateUserScheduleDisplay();
				getUserSessions();
				
			},{'user_id':session_cookie.get('user_id'),'user_key':session_cookie.get('user_key')});
		}
		else
		{
			session_cookie.set("");
			$('userScheduleListContainer').innerHTML="<div id='user_schedule_div'>No sessions selected.</div>";
		}		
	}	
}

function showLogin(action) {
	checkLogin();

	if (session_cookie.get('user_id') == undefined) {
		TB_show(resourceBundle['loginPopup_title'], appURL+'#TB_inline?inlineId=userLogin&height=' + loginPopup.height + '&width=' + loginPopup.width, null);
		if (action != undefined) {
			attempted_user_action=action;
		}
	}
}

function checkLogin() {
	session_cookie=new Hash.Cookie('scheduler_session',{duration:false});

	jsonRequest(webServiceURL + '?action=check_login', function(data){
		try {
			appendDebugData(data.debug_data);
		}
		
		catch (e) {
			
		}
		if (data.valid_login) 
		{	
			document.getElementById('loginStatus').innerHTML=data.results;
			$('loginContainer').setStyle('display','none');
			$('logoutContainer').setStyle('display','inline');
			session_cookie.extend({'user_id':data.user_id,'user_key':data.user_key,'user_email':data.user_email,'sessions':data.sessions, 'user_name':data.user_name});
			addCookieToForm();
			TB_remove();
			refreshPage();
			if (attempted_user_action != undefined)
			{
				eval(attempted_user_action);
			}
		}
	},{});
	
}

function addToMySchedule(id) {
	if (!$('saved_session_'+id)) {
		var saved_session_input= new Element('input',{'type':'hidden','value':id, 'name':'saved_session_'+id, 'id':'saved_session_'+id,'class':'saved_user_session'});
		$('user_sessions').appendChild(saved_session_input);
		if ($('session_'+id+'_cart_action')) {
			$('session_'+id+'_cart_action').setProperties({'class':'cart_delete',src:imageURL +'/btn_removeFromSchedule.gif',title:"Remove From My Schedule"});
		}

		session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
		if (session_cookie.get('user_id') != undefined) {
			jsonRequest(webServiceURL + '?action=add_session', function(data){
				if(data.failure != true){
					var saved_session_input= new Element('input',{'type':'hidden','value':id, 'name':'saved_session_'+id, 'id':'saved_session_'+id,'class':'saved_user_session'});
					$('user_sessions').appendChild(saved_session_input);
				}
				else {
					alert("This session could not be added to your myE2 Schedule because it conflicts with the time of another class that you are already attending.");
				}
				try {
					appendDebugData(data.debug_data);
				}
				
				catch (e) {}
				
				updateUserScheduleDisplay();
				saveMySchedule();
			
			},{'user_id':session_cookie.get('user_id'),'user_key':session_cookie.get('user_key'),'session_id':id});
		}
		else {
			updateUserScheduleDisplay();
		}
	}
	else {
		$('saved_session_'+id).destroy();
		
		if ($('session_'+id+'_cart_action')) {
			$('session_'+id+'_cart_action').setProperties({'class':'',src:Images.btn_addToSchedule,title:"Add To My Schedule"});
		}
		session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
		if (session_cookie.get('user_id') != undefined) {
			jsonRequest(webServiceURL + '?action=remove_session', function(data) {
				if(data.failure == true){
					alert("You have already removed this session from your myE2 schedule.  Please refresh your page if you reached this error.");
				}
				
				appendDebugData(data.debug_data);
				updateUserScheduleDisplay();
				saveMySchedule();
			},{'user_id':session_cookie.get('user_id'),'user_key':session_cookie.get('user_key'),'session_id':id});
		}
		else {
			updateUserScheduleDisplay();
		}
	}
}

function updateUserScheduleDisplay() {
	var saved_sessions_array=new Array();
	session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
	if (session_cookie.get('user_id') != undefined) {
		jsonRequest(webServiceURL + '?action=update_user_schedule_list', function(data) {
			$('userScheduleListContainer').innerHTML=data.user_schedule_list;
			//$('userSchedulePassesContainer').innerHTML=data.user_schedule_pass_list;
			appendDebugData(data.debug_data);
		},{'user_id':session_cookie.get('user_id'),'user_key':session_cookie.get('user_key')});
	}
	else {
		$$('input.saved_user_session').each (function(saved_session) {
			saved_sessions_array.push(saved_session.value); 
		});
		
		session_cookie.extend({'sessions':saved_sessions_array});
		jsonRequest(webServiceURL + '?action=update_user_schedule_list', function(data) {
			$('userScheduleListContainer').innerHTML=data.user_schedule_list;
			appendDebugData(data.debug_data);
		},{'sessions':saved_sessions_array});
	}
}

function exportList(list) {
	session_cookie=new Hash.Cookie('scheduler_session',{duration:false});
	if(session_cookie.get('user_id')) {
		TB_show('Share Schedule', webServiceURL + '/data_interface.php?height=110&width=120&action=export_menu&list=' + list);
	}
	else
		showLogin();
}

function getUserProfileForm() {
	var user_profile_form= new Hash()
	$$('input.user_registration_input').each(function(el) {
		if (el != undefined) {
			if (el.type=='checkbox') {
				if (el.checked) user_profile_form.set(el.name,el.value);
			}
			else if (el.type=='radio') {
				if  (el.selected) user_profile_form.set(el.name,el.value);
			}
			else {
				if  (el.value!='') user_profile_form.set(el.name,el.value);
			}
		}
	});
	return user_profile_form;
}

function saveUser()	{
	var user_data = getUserProfileForm();
	var session_cookie= new Hash.Cookie('scheduler_session',{duration:false});
	if (session_cookie.get('user_key')) {
		jsonRequest(webServiceURL + '?action=create_user', function(data) {
				$('userRegistrationResults').innerHTML=data.result;
				$("TB_ajaxContent").innerHTML=$('userLogin').innerHTML; 
				appendDebugData(data.debug_data);
		},{'user_data':user_data.obj,'user_id':session_cookie.get('user_id'),'user_key':session_cookie.get('user_key')});
	}
	else {
		var sessions= session_cookie.get('sessions');
		jsonRequest(webServiceURL + '?action=create_user', function(data) {
				if (data.user_created) {
					$("TB_ajaxContent").innerHTML=data.result; 
				}
				else {
					$('userRegistrationResults').innerHTML=data.result;
					$("TB_ajaxContent").innerHTML=$('userLogin').innerHTML; 
				}
				appendDebugData(data.debug_data);
			},{'user_data':user_data.obj,'sessions':sessions,'user_id':'','user_key':''});
	}
}

/*************************/
/* BEGIN Util FUNCTIONS */
/*************************/

function checkSession(id) {
	$('session_'+id).checked=true;
}

function showTracks(id,show_track) {
	if ($('tracks_'+id)) {

		if (!effects['tracks_slider_'+id]) {
			child_div=document.getElementById('tracks_'+id);
			if (document.defaultView && document.defaultView.getComputedStyle(child_div, null)==null) {
				$('tracks_'+id).setStyle('display','block');
			}
			effects['tracks_slider_'+id]= new Fx.Slide('tracks_'+id,{duration:500});
			effects['tracks_slider_'+id].hide();
			if ($('tracks_'+id).getStyle('display')=='none') $('tracks_'+id).setStyle('display','block');
		}
		if (show_track=="on") {

			effects['tracks_slider_'+id].slideIn();
		}
		else if (show_track=="off") {
			effects['tracks_slider_'+id].slideOut();
		}
		else {
			effects['tracks_slider_'+id].toggle();
		}
	}
}

function validateEmailSchedule(emailAddy) {
	var validateObj = {
		validated : true,
		error : ""
	}

	var re = new RegExp('^.+@[^\.].*\.[a-z]{2,}$');
	
	if (emailAddy == undefined || emailAddy == '') {
		validateObj['error'] = "Please enter an email address.";
		validateObj['validated'] = false;
	}
	else if (!emailAddy.match(re)) {
		validateObj['error'] = emailAddy + " is not a valid email address";
		validateObj['validated'] = false;
	}
	
	return validateObj;
}

function jsonRequest(url, funct, json) {
		json = JSON.encode(json);
		new Request.JSON({'url':url, onComplete: funct}).post({'json':json});		
}

function printObject(object) {
	var str = '';
	for(prop in object) {
		if(object.hasOwnProperty(prop))
			str += prop + " : " + object[prop] + "\n";
	}
	alert(str);
}
