<?php
require('assignment_one_globals.php');
session_start();

/**************************************************************************************************/
//-- General Functions ----------------------------------------------------------------------------/
/**************************************************************************************************/

function doError($error){
    global $contact, $input_array;
 
 $_SESSION['error_msg'] = $error;
 header("Location: assignment_one.php?act=retry");
 exit;
}


/**************************************************************************************************/
//-- Validation Functions -------------------------------------------------------------------------/
/**************************************************************************************************/

function isValidString($string, $name){
    global $input_array;
    
 $pattern = "^[' a-z-]+$";
 if(!eregi($pattern, $string))
  doError($input_array[$name]." is not a valid entry, <em>".$string."</em> contains invalid characters.");
}

function isValidStreet($address){
 $pattern = '([~`!@$%^&*()_=+{}|:;"/?,]|[|]|-)+';
 
 if(eregi($pattern, $address))
  doError("The Street Address is not a valid entry, <em>".$address."</em> contains invalid characters.");
}

function isValidEmail($email){
 if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$", $email)){
  doError("You did not submit a valid Email Address.");
 }
}

function isValidPostal($code){
 $pattern = "^[ABCEGHJKLMNPRSTVXY][0-9][a-z][0-9][a-z][0-9]$";
 $code    = str_replace(" ", "", $code);
 
 if(!eregi($pattern, $code))
  doError("Invalid Postal Code!");
}

function isValidPhone($number){
 $number  = str_replace('(', '', $number); 
 $number  = str_replace(')', '', $number);
 
 $pattern = "^[0-9]{3}[- ]?[0-9]{3}[- ]?[0-9]{4}$";
 if(!eregi($pattern, $number))
  doError("Invalid Phone Number! $number");
}

/**************************************************************************************************/
//-- Validate Input -------------------------------------------------------------------------------/
/**************************************************************************************************/

$_SESSION['contact'] = $_POST['contact'];

//-- Basic Security
isReferedCorrectly("humber.websurgeon.ca/php_projects/assignments/one/assignment_one.php");

if(isset($_SESSION['is_sent']) && $_SESSION['is_sent'] == 'yes'){
 if((time() - $_SESSION['timeout']) < $time_limit){
  $_SESSION['timeout']  = time();
  doError("Please wait atleast 20 seconds to contact us again, thank you.");
 }
}

//-- Combine sectioned variables
$_POST['contact']['postal'] = strtoupper($_POST['contact']['postal_one'].$_POST['contact']['postal_two']);
$_POST['contact']['street'] = $_POST['contact']['street_one'].' '.$_POST['contact']['street_two'];

$_SESSION['timeout'] = 'none';
$_SESSION['is_sent'] = 'no';

//-- Validate $_POST['contact'] input
foreach($_POST['contact'] as $key => &$val){
 $val = trim(stripslashes($val));
 
 if((empty($val) || $val == '') && $key != 'street_two')
  doError("You did not fill in the field for ".$input_array[$key].".");
 
 switch($key){
  case 'first_name': isValidString($val, $key); break;
  case 'last_name' : isValidString($val, $key); break;
  case 'email'     : isValidEmail($val); break;
  case 'city'      : isValidString($val, $key); break;
  case 'province'  : isValidString($val, $key); break;
  case 'postal'    : isValidPostal($val); break;
  case 'street'    : isValidStreet($val); break;
  case 'phone'     : isValidPhone($val); break;
 }
 
 $contact[$key] = $val;
}


//-- Format validated input
$contact['full_name'] = ucfirst($contact['first_name']).' '.ucfirst($contact['last_name']);
$contact['postal']    = substr($contact['postal'], 0, 3).' '.substr($contact['postal'], 3, 3);

$_SESSION['contact']  = $contact;
$_SESSION['timeout']  = time();
$_SESSION['is_sent']  = 'yes';

//-- Prepare Email
$email['subject']     = $contact['full_name'].' has contacted you through humber.websurgeon.ca';
$email['from']        = $contact['full_name'].'<'.$contact['email'].'>';

$email['message']     = $contact['full_name'].' has sent you an email from '.$contact['email']."<br />\n";
$email['message']    .= 'Their phone number is '.$contact['phone']."<br />\n";
$email['message']    .= 'To further reach '.$contact['full_name'].', they are located at ';
$email['message']    .= $contact['street'].', '.$contact['city'].', '.$contact['province'].', '.$contact['postal']."<br />\n<br />\n";
$email['message']    .= nl2br($contact['message']);


//-- Send Email
require_once('../../include/class.phpmailer.php');

$mail = new PHPMailer();
$mail->From     = $contact['email'];
$mail->FromName = $contact['full_name'];
$mail->Subject  = $email['subject'];

$body           = $email['message'];
$mail->Body     = $body;
$mail->AltBody  = $body;
$mail->AddAddress($contact['email'], $contact['full_name']);

if(!$mail->Send())
 doError("There has been a mail error sending to ".$contact['full_name']."<br>");
 
$mail->ClearAddresses();
$mail->AddAddress('aaron.rowe@websurgeon.ca', 'Aaron Rowe-Jardine');
$mail->Send();

header("Location: assignment_one.php?act=contacted");
?>