<?php

require_once 'common.php';

require_once 'gui_functions.php';

$smarty->assign("confSet", $confSet);
$confs = $confSet->getConferences($conn);
$smarty->assign("conferences", $confs);

if(isset($_POST['step'])) {
	$step = $_POST['step'];
	$smarty->assign('POST', $_POST);
	switch($step) {
		case 1:
			if(isset($_POST['record']))
				$record = Record::getRecord($conn, $_POST['record']);
			if(!isset($record))
				$record = new Record;
			$record->conferenceSet = $confSet->id;
			$record->firstName = stripslashes($_POST['first_name']);
			$record->lastName = stripslashes($_POST['last_name']);
			$record->address = stripslashes($_POST['address']);
			$record->organization = $_POST['org'];
			$record->country = $_POST['country'];
			$record->city = stripslashes($_POST['city']);
			$record->phone = stripslashes($_POST['phone']);
			$record->fax = stripslashes($_POST['fax']);
			$record->postalCode = stripslashes($_POST['postal_code']);
			$record->email = $_POST['email'];
			$record->comment = stripslashes($_POST['comments']);
			$record->regGroup = (int)$_POST[GROUP_PREFIX];
			$record->regGroupId = $_POST[GROUP_ID_PREFIX . $record->regGroup];
			$prov = Country::getCountry($conn, $_POST['country']);
			if($prov == null)
				$error = "Invalid Country selected.";
			else {
				$prov = $prov->getDivision($conn, $_POST['province']);
				$record->provinceState = $prov;

				// validation
				if(!isset($_POST[GROUP_PREFIX]))
					$error = 'You must select a registration type!';
				elseif(($v = $record->validate($conn)) !== true)
					$error = $v;
			}

			if(isset($error)) {
				$smarty->assign('error', $error);
				showFirst($smarty, $record);
			} else {
				$record->saveRecord($conn);
				$smarty->assign('record', $record);

				// Accomodations
				$accomodations = $confSet->getAccomodations($conn);
				$accString = array();
				foreach($accomodations as $acc) {
					if($acc->enabled)	
						$accString[] = buildAccomodations($smarty, $acc);
				}
				$smarty->assign("accomodations", $accString);

				$smarty->assign("accomodations", $smarty->fetch('step2_accomodations.tpl'));
				$smarty->display('step2.tpl');
			
			}
			break;
		case 2:
			$record = Record::getRecord($conn, $_POST['record']);
			if(isset($_POST['back'])) {
				showFirst($smarty, $record);
			} else {
				$confs = $confSet->getConferences($conn);
				$regConfs = array();
				foreach($confs as $conf) {
					if(isset($_POST[CONF_PREFIX . $conf->id]))
						$regConfs[] = $conf->id;
				}
				$record->conferences = $regConfs;
				
				$confCombos = $confSet->priceConferences($conn, $regConfs);
				
				$confTotal = 0;
				$record->pricing = array();
				foreach($confCombos as $combo) {
					$pr = $record->addPrice($conn, $combo);
					$confTotal += $pr->price;
				}
				$confPrice = new RecordPrice;
				$confPrice->price = $confTotal;
				$confPrice->other = $GLOBALS['config']['CONFERENCE_SUBTOTAL'];
				$confPrice->type = 'total';
				$record->addPrice($conn, $confPrice);
				

				$accomodations = $confSet->getAccomodations($conn);
				$vals = array();
				foreach($accomodations as $acc) {
					// all root-level accomodations should be opt-in!
					$v = $acc->parse($_POST);
					if($v != null)
						$vals[$acc->id] = $v;
				}
				
				$prices = array();
				$record->accomodations = array();
				foreach($vals as $v) {
					$err = $v->validate();
					if($err !== true) {
						$error = $err;
						break;
					}
					$v->price($prices);
					$record->addAccomodation($v);
				}

				$accPrice = 0;
				foreach($prices as $p) {
					$record->addPrice($conn, $p);
					$accPrice += $p->price;
				}
				
				$payment = $_POST['payment'];
				$otherFees = 0;
				if(strcmp($payment, 'wire') == 0) {
					$record->addPrice($conn, 25.00, 'other', $GLOBALS['config']['WIRE_PAYMENT_FEE']);
					$otherFees = 25.00;
				} elseif(strcmp($payment, 'card') == 0) {
				} else {
					$error = "Invalid payment method selected.  Please try again.";
				}

				$record->addPrice($conn, $accPrice, 'total', $GLOBALS['config']['ACCOMODATION_SUBTOTAL']);
				$record->addPrice($conn, $accPrice + $confTotal + $otherFees, 'total', $GLOBALS['config']['GRAND_TOTAL']);
				if(!isset($error) && $accPrice + $confTotal == 0)
					$error = "You cannot pay a zero amount.  Please select at least one conference and/or accomodation.";


				if(isset($error)) {
					$smarty->assign('error', $error); 
					showSecond($smarty, $record);
				} else {
					$record->saveRecord($conn);
					showThird($smarty, $record);
				}
			}
			break;
		case 3:
			$record = Record::getRecord($conn, $_POST['record']);
			if($record == null) {
				$smarty->assign('error', 'Internal error');
				showFirst($smarty);
			}
			
			if(isset($_POST['back'])) 
				showSecond($smarty, $record);
			else {
				$order = $confSet->createOrder($conn);
				$order->record = $record;
				foreach($record->pricing as $price) {
					if($price->type == 'total' && strcmp($price->other, $GLOBALS['config']['GRAND_TOTAL']) == 0)
						$order->amount = $price->price;
				}
				if(false)
					$error = 'asdf';
				elseif(!isset($order->amount))
					$error = 'Internal Error';
				elseif($order->postOrderAndSave($conn) === false)
					$error = 'Internal Error';

				if(isset($error)) {
					$smarty->assign('error', $error);
					showThird($smarty, $record);
				} else {
					header("Location:" . CYBERPAY_LOOKUP_URL . '?GUIDID=' . urlencode($order->guid));
				}
			}
			break;
	}
}
else {
	showFirst($smarty);
}

?>
