
	///////// SEQUENCES
	
		//// app sequences		 ----------------------------------------------------------------------\\\\\\\\\\\\\\\
	
	
	function insertUser() {
		o.f[o.f.length] = function (o) { 
			getUserFormVars(o); 
			//alert(o.form);
			//f(o);
		}; 
		
		o.preloaderMessage = 'Saving Your Information'
		getPreloader(o);  
		
		o.f[o.f.length] = function (o) { 
			o.page = 'reg/insertUser.php';
			o.method ='POST';
			o.parameters= o.form;
			//alert(o.parameters);
			ajaxRequest(o);
			//o.xhrResponse.responseText = 'true';
			//f(o);
		}; 
		o.f[o.f.length] = function (o) { 
			//alert(o.xhrResponse.responseText); 
			//alert(o.xhrResponse.responseText);
			if (o.xhrResponse.responseText == 'true') {
				//alert('insert worked');
				o.pageNum += 2;
				getPage(o);
			} else {
				o.error.push(o.xhrResponse.responseText);
				handle(o);
			}
	
		};
		f(o);	
	}
	
	function addFriends(o) {
		
		o.preloaderMessage = 'Contacting Paypal'
		getPreloader(o);  
		
		o.f[o.f.length] = function (o) { 
			o.page = 'reg/addFriends.php';
			o.method ='POST';
			o.parameters= 'token=token&numTickets='+o.numTickets+'&user='+o.user.email+'&emails='+o.friendsEmails.join(',');
			
			//alert(o.parameters);
			ajaxRequest(o);
			//o.xhrResponse.responseText = 'true';
		}; 
		o.f[o.f.length] = function (o) { 
			var response = o.xhrResponse.responseText;
			response = response.split('=');
			//
			if (response[0] == 'trans') {
				o.transID = response[1];
				//alert(o.transID);
				o.pageNum += 2;
				getPage(o);
			} else {
				o.error.push(o.xhrResponse.responseText);
				handle(o);
			}
	
		};
		f(o);		
	}
	
	
	function addWorkshops(o) {
		o.f[o.f.length] = function (o) { 
			getWorkshopFormVars(o);
			//alert(o.workForm);
			f(o);
		};
		
		o.preloaderMessage = 'Contacting Paypal'
		getPreloader(o);  
		
		o.f[o.f.length] = function (o) { 
			o.page = 'reg/addWorkshops.php';
			o.method ='POST';
			o.parameters= o.workForm+ "&email=" + o.user.email;
			//alert(o.parameters);
			ajaxRequest(o);
			
		}; 
		o.f[o.f.length] = function (o) { 
			//alert(o.xhrResponse.responseText);
			
			var response = o.xhrResponse.responseText;
			response = response.split('=');
			//
			if (response[0] == 'trans') {
				o.transID = response[1];
				//alert(o.transID);
				o.pageNum += 2;
				getPage(o);
			} else {
				o.error.push(o.xhrResponse.responseText);
				handle(o);
			}
		
		};
		f(o);	
	}
	
	
	
	
	
	///////  APP Instance codes -------------------------------------------------------------------------------\\\


	function getUserFormVars(o) {
		var v = ['email', 'password', 'fname', 'lname', 'phone', 'city', 'updates'];
		var validate = '';
		o.form = '';
		o.user = {};
		for (var i=0, il=v.length; i<il; i++) {
			if (v[i] == 'updates') {
				o.form += v[i] + '=' + $(v[i]).checked + '&';
				o.user[ v[i] ] = $(v[i]).checked;
			} else {
				o.form += v[i] + '=' + $(v[i]).value + '&';
				o.user[ v[i] ] = $(v[i]).value;
				//check empty
				if ($(v[i]).value==null||$(v[i]).value=='') {
					validate = v[i];
				}
				//check email
				if (v[i] == 'email' && !isEmail($(v[i]).value)) {
					validate = v[i];
				}
				
			}
		}
		o.form += 'token=token';
		
		// check validation
			//alert(validate);
		switch (validate) {
		case '': f(o); break;
		case 'email': 
			$('error').innerHTML = '<p>Your Email address is not valid.</p>';
			$('error').style.display = 'block';
			o.f=[];
			break;
		default:
			$('error').innerHTML = '<p>Please complete the form.</p>';
			$('error').style.display = 'block';
			o.f=[];
			break;
		}
		
	}
	
	function getWorkshopFormVars(o) {
		var v = ['flash', 'ableton', 'photoshop', 'ae', 'cinema', 'max', 'paint', 'ajax', 'flash2', 'illustrator', 'ae2', 'cinema2' ];
		o.workForm = '';
		o.workTotal = 0;
		o.workOrPass = 'work';
		for (var i=0, il=v.length; i<il; i++) {
			if ($(v[i])) {
			o.workForm += v[i] + '=' + $(v[i]).value + '&';
			o.workTotal += parseInt($(v[i]).value) ;
			//alert(o.workTotal);
			}
		}
		o.workForm += 'token=token';
		
	}


	function prePage(o) { // before showing a page
		switch (o.pageNum) {
			case 1:
				// setup forward links
				$('page2').onclick = function() {  o.pageNum=2; getPage(o); return false; }; 
				//$('page3').onclick = function() {  o.pageNum = 3; getPage(o); return false; };
				$('howMany').onsubmit = function () { return false;};
				// preload header graphics
				o.image = '../img/screenings/screenings_top.png';
				o.imageHeight = 199;
				o.imageWidth = 590;
				preloadImage(o) ;
				o.image = '../img/workshops2b.png';
				o.imageHeight = 159;
				o.imageWidth = 590;
				preloadImage(o) ;
			break;
			case 2:
			case 3:
				// make form functional
				$('insertUser').onsubmit = function() { 
					insertUser();
					return false;
				};
				$('email').focus();
				
			break;
			case 4:
				$('friends').onclick = function() {
					o.workOrPass = 'pass';
					//alert($('friends').checked);
					if ($('friends').checked) {
						o.filler = '';
						o.filler += '<p>Also send confirmations to:</p>\
									<table width="400" border="0" align="center" cellpadding="0" cellspacing="4">';
						if (o.numTickets < 1) { o.numTickets = 1;}
						for (var i=0, il=o.numTickets; i<il; i++) {
							o.filler += '<tr><td align="right">Email Address '+(i+1)+':</td>\
										<td width="10">&nbsp;</td>\
										<td><input type="text" name="textfield" id="f_email'+(i)+'" /></td></tr>';
						}
						o.filler += '</table>';
						$('friendsDiv').innerHTML = o.filler;
						//$('friendsDiv').innerHTML = $('friendsDiv').innerHTML; // for IE
						//alert('here');
						if (o.numTickets > 1) { $('f_email0').value = o.user.email };
						$('friendsDiv').style.display = 'block';
						
					} else {
						$('friendsDiv').style.display = 'none';
						//alert('hide');
					}
					return true;
				}
				$('friendsForm').onsubmit = function() {
					//alert('submit');
					o.friendsEmails = [];
					//alert(1);
					if ($('friends').checked) {
					for (var i=0, il=o.numTickets; i<il; i++) {
						//alert(isEmail($('f_email'+i).value));
						if ($('friends').checked) {
						if (isEmail($('f_email'+i).value)) {
							o.friendsEmails.push($('f_email'+i).value);
							//alert($('f_email'+i).value);
						}}
					}}
					//alert('emails='+o.friendsEmails);
					
					addFriends(o);
					
					return false;
				}
				
			break;
			case 5: 
				$('workshops').onsubmit = function() {
					
					addWorkshops(o);
					
					return false;
				};
			break;
			case 6:
			case 7:
				
				$('paypal').innerHTML = getPaypalLink(o);
				
			break;
		}
		f(o);
	}
	
	function postPage(o) { // before hiding a page
		switch (o.pageNum) {
			case 2:
			/* get num tickets */
				o.numTickets = $('numTickets').value;
				//alert(o.numTickets);
			break;
		}
		f(o);
	}
	
	
	function getPaypalLink(o){
		_workOrPass = o.workOrPass;
		_workPrice = o.workPrice;
		_passPrice = o.passPrice;
		_workTotal = o.workTotal;
		_numTickets = o.numTickets;
		_passName = o.passName;
		_workName = o.workName;
		_trans = o.transID;
		_price = 0;

		o.paypalLink = '';
						// common
		o.paypalLink += '<form action="https://www.paypal.com/cgi-bin/webscr" method="post">\
						<input type="hidden" name="notify_url" value="http://www.mgfest.com/elm/ipn.php" />\
						<input type="hidden" name="cancel_return" value="http://www.mgfest.com/09/WashingtonDC/registration.php" />\
						<input type="hidden" name="cbt" value="Return to MGFest Registration" />\
						<input type="hidden" name="return" value="http://www.mgfest.com/09/WashingtonDC/registrationEnd.php" />\
						<input type="hidden" name="rm" value="2" />\
						<input type="hidden" name="shopping_url" value="http://www.mgfest.com/09/WashingtonDC/registration.php" />\
						<input type="hidden" name="no_shipping" value="1" />\
						<input type="hidden" name="shipping" value="0.00">\
						<input type="hidden" name="no_note" value="1">\
						<input type="hidden" name="currency_code" value="USD">\
						<input type="hidden" name="lc" value="US">';
						// included in psy form but not ours
		o.paypalLink += '<input type="hidden" name="business" value="sales@psymbolic.com">\
						<input type="hidden" name="cmd" value="_xclick">\
						 <input type="hidden" name="bn" value="PP-BuyNowBF">';
						 //<input type="image" src="http://www.psymbolic.com/shop/images/buynow_psymbolic.jpg" border="0" name="submit" alt="Make secure payments with PayPal">';
						// not included in psy form
		o.paypalLink += '<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">\
						<input type="hidden" name="cpp_image_header" value="http://www.psymbolic.com/mgfest/header.png" />\
						<input type="hidden" name="cpp_headerback_color" value="fcfcfc" />\
						<input type="hidden" name="cpp_headerborder_color" value="fcfcfc" />\
						<input type="hidden" name="cpp_payflow_color" value="fcfcfc" />\
						<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" style="padding:15px;background-color:#f8f8f8; margin-right:17px; border:1px solid #fff;">\
						<input type="hidden" name="image_url" value="http://www.psymbolic.com/mgfest/header.png" />';
					/*	<input type="hidden" name="cmd" value="_s-xclick">\
						
						
						// removed, not in psy form
						//'<input type="hidden" name="hosted_button_id" value="4985435">';*/
		
						
		if (_workOrPass == 'work') {
			_workTotal = _workTotal;
			_price = _workPrice * _workTotal;
			//alert(_workTotal);
			_name = _workTotal + ' ' +  _workName;
		} else {
			_numTickets = _numTickets;
			_price = _passPrice * _numTickets;
			//alert(_numTickets);
			_name = _numTickets + ' ' + _passName;
		}
						// programmatic fields
		o.paypalLink += '<input type="hidden" name="item_name" value="'+_name+'">\
						<input type="hidden" name="item_number" value="DC_'+_trans+'">\
						<input type="hidden" name="amount" value="'+_price+'">';
		o.paypalLink += '</form>';
	
	return o.paypalLink;

	}
	