<?php
  /*
  $Id: edit_orders.php, v2.8.5 2007/02/05 12:00:00 ams Exp $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2006 osCommerce

  Released under the GNU General Public License
 
  Original file written by Jonathan Hilgeman of SiteCreative.com
  
  Order Editor 2.7 and up also owe much to Josh Dechant, author of MOECTOE- Manual Order Entry, Customer Tools, and Order Editing Suite
     
  */
  
  // First things first: get the required includes, classes, etc.
  require('includes/application_top.php');

  require(DIR_WS_CLASSES . 'currencies.php');
  $currencies = new currencies();
  
  require(DIR_WS_FUNCTIONS . 'oe_functions.php');
  require(DIR_WS_CLASSES . 'oe_order.php');
  
  //set a default tax class
  //shipping tax is added to the default tax class
   $default_tax_class = 1; 
   
  // Then we get down to the nitty gritty
  $orders_statuses = array();
  $orders_status_array = array();
  $orders_status_query = tep_db_query("select orders_status_id, orders_status_name from " . TABLE_ORDERS_STATUS . " where language_id = '" . (int)$languages_id . "'");
  while ($orders_status = tep_db_fetch_array($orders_status_query)) {
    $orders_statuses[] = array('id' => $orders_status['orders_status_id'],
                               'text' => $orders_status['orders_status_name']);
    $orders_status_array[$orders_status['orders_status_id']] = $orders_status['orders_status_name'];
  }

  $action = (isset($_GET['action']) ? $_GET['action'] : 'edit');

  // Update Inventory Quantity
  if (tep_not_null($action)) {
    switch ($action) {
    	
	// 1. UPDATE ORDER ###############################################################################################
	case 'update_order':
		
		$oID = tep_db_prepare_input($_GET['oID']);
		$order = new oe_order($oID);
		$status = tep_db_prepare_input($_POST['status']);
		
		// Set this Session's variables
        $_SESSION['billing_same_as_customer'] = $_POST['billing_same_as_customer'];
        $_SESSION['shipping_same_as_billing'] = $_POST['shipping_same_as_billing'];
		
		//tax business
	    $default_tax_name  = tep_get_tax_description($default_tax_class, $_POST['update_delivery_country_id'], $_POST['update_delivery_zone_id']);
		
		//figure out the new currency value
		$currency_value_query = tep_db_query("SELECT
		value FROM " . TABLE_CURRENCIES . " WHERE code = '" . $_POST['update_info_payment_currency'] . "'");
		$currency_value = tep_db_fetch_array($currency_value_query);
		
		//figure out the country, state
		$update_customer_state = tep_get_zone_name($_POST['update_customer_country_id'], $_POST['update_customer_zone_id'], $_POST['update_customer_state']);
        $update_customer_country = tep_get_country_name($_POST['update_customer_country_id']);
        $update_billing_state = tep_get_zone_name($_POST['update_billing_country_id'], $_POST['update_billing_zone_id'], $_POST['update_billing_state']);
        $update_billing_country = tep_get_country_name($_POST['update_billing_country_id']);
        $update_delivery_state = tep_get_zone_name($_POST['update_delivery_country_id'], $_POST['update_delivery_zone_id'], $_POST['update_delivery_state']);
        $update_delivery_country = tep_get_country_name($_POST['update_delivery_country_id']);
		
		 	
		// 1.1 UPDATE ORDER INFO #####
		
		$UpdateOrders = "UPDATE " . TABLE_ORDERS . " SET 
	    customers_name = '" . tep_db_prepare_input($_POST['update_customer_name']) . "',
	    customers_company = '" . tep_db_prepare_input($_POST['update_customer_company']) . "',
	    customers_street_address = '" . tep_db_prepare_input($_POST['update_customer_street_address']) . "',
	    customers_suburb = '" . tep_db_prepare_input($_POST['update_customer_suburb']) . "',
	    customers_city = '" . tep_db_prepare_input($_POST['update_customer_city']) . "',
	    customers_state = '" . tep_db_prepare_input($update_customer_state) . "',
	    customers_postcode = '" . tep_db_prepare_input($_POST['update_customer_postcode']) . "',
	    customers_country = '" . tep_db_prepare_input($update_customer_country) . "',
	    customers_telephone = '" . tep_db_prepare_input($_POST['update_customer_telephone']) . "',
	    customers_email_address = '" . tep_db_prepare_input($_POST['update_customer_email_address']) . "',";
		
		$UpdateOrders .= "
		billing_name = '" . tep_db_prepare_input((($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_name'] : $_POST['update_billing_name'])) . "',
        billing_company = '" . tep_db_prepare_input((($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_company'] : $_POST['update_billing_company'])) . "',
        billing_street_address = '" . tep_db_prepare_input((($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_street_address'] : $_POST['update_billing_street_address'])) . "',
        billing_suburb = '" . tep_db_prepare_input((($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_suburb'] : $_POST['update_billing_suburb'])) . "',
        billing_city = '" . tep_db_prepare_input((($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_city'] : $_POST['update_billing_city'])) . "',
        billing_state = '" . tep_db_prepare_input((($_POST['billing_same_as_customer'] == 'on') ? $update_customer_state : $update_billing_state)) . "',
        billing_postcode = '" . tep_db_prepare_input((($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_postcode'] : $_POST['update_billing_postcode'])) . "',
        billing_country = '" . tep_db_prepare_input((($_POST['billing_same_as_customer'] == 'on') ? $update_customer_country : $update_billing_country)) . "',";
		
		$UpdateOrders .= "
		delivery_name = '". tep_db_prepare_input((($_POST['shipping_same_as_billing'] == 'on') ? (($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_name'] : $_POST['update_billing_name']) : $_POST['update_delivery_name'])) . "',
		delivery_company = '". tep_db_prepare_input((($_POST['shipping_same_as_billing'] == 'on') ? (($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_company'] : $_POST['update_billing_company']) : $_POST['update_delivery_company'])) . "',
        delivery_street_address = '". tep_db_prepare_input((($_POST['shipping_same_as_billing'] == 'on') ? (($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_street_address'] : $_POST['update_billing_street_address']) : $_POST['update_delivery_street_address'])) . "',
        delivery_suburb = '". tep_db_prepare_input((($_POST['shipping_same_as_billing'] == 'on') ? (($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_suburb'] : $_POST['update_billing_suburb']) : $_POST['update_delivery_suburb'])) . "',
        delivery_city = '". tep_db_prepare_input((($_POST['shipping_same_as_billing'] == 'on') ? (($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_city'] : $_POST['update_billing_city']) : $_POST['update_delivery_city'])) . "',
        delivery_state = '". tep_db_prepare_input((($_POST['shipping_same_as_billing'] == 'on') ? (($_POST['billing_same_as_customer'] == 'on') ? $update_customer_state : $update_billing_state) : $update_delivery_state)) . "',
        delivery_postcode = '". tep_db_prepare_input((($_POST['shipping_same_as_billing'] == 'on') ? (($_POST['billing_same_as_customer'] == 'on') ? $_POST['update_customer_postcode'] : $_POST['update_billing_postcode']) : $_POST['update_delivery_postcode'])) . "',
        delivery_country = '". tep_db_prepare_input((($_POST['shipping_same_as_billing'] == 'on') ? (($_POST['billing_same_as_customer'] == 'on') ? $update_customer_country : $update_billing_country) : $update_delivery_country)) . "',";
		
		$UpdateOrders .= "
	    payment_method = '" . tep_db_prepare_input($_POST['update_info_payment_method']) . "',
	    currency = '" . tep_db_prepare_input($_POST['update_info_payment_currency']) . "',
	    currency_value = '" . tep_db_prepare_input($currency_value['value']) . "',
		cc_type = '" . tep_db_prepare_input($_POST['update_info_cc_type']) . "',
		cc_owner = '" . tep_db_prepare_input($_POST['update_info_cc_owner']) . "',
		cc_number = '" . tep_db_prepare_input($_POST['update_info_cc_number']) . "',
		cc_expires = '" . tep_db_prepare_input($_POST['update_info_cc_expires']) . "',
		shipping_tax = '" . tep_db_prepare_input($_POST['update_shipping_tax']) . "'";
		
		$UpdateOrders .= " where orders_id = '" . tep_db_prepare_input($_GET['oID']) . "';";

		tep_db_query($UpdateOrders);
		$order_updated = true;

    // 1.2 UPDATE STATUS HISTORY & SEND EMAIL TO CUSTOMER IF NECESSARY #####

    $check_status_query = tep_db_query("SELECT
	customers_name, customers_email_address, orders_status, date_purchased 
	FROM " . TABLE_ORDERS . " WHERE orders_id = '" . (int)$oID . "'");
    $check_status = tep_db_fetch_array($check_status_query); 
	
  if (($check_status['orders_status'] != $_POST['status']) || (tep_not_null($_POST['comments']))) {

        tep_db_query("UPDATE " . TABLE_ORDERS . " SET 
					  orders_status = '" . tep_db_input($_POST['status']) . "', 
                      last_modified = now() 
                      WHERE orders_id = '" . (int)$oID . "'");
		
		 // Notify Customer ?
      $customer_notified = '0';
			if (isset($_POST['notify']) && ($_POST['notify'] == 'on')) {
			  $notify_comments = '';
			  if (isset($_POST['notify_comments']) && ($_POST['notify_comments'] == 'on')) {
			    $notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $_POST['comments']) . "\n\n";
			  }
			  $email = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . $oID, 'SSL') . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n" . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]) . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE2);
			  tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT, $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
			  $customer_notified = '1';
			}			  
          		
			tep_db_query("INSERT into " . TABLE_ORDERS_STATUS_HISTORY . " 
			(orders_id, orders_status_id, date_added, customer_notified, comments) 
			values ('" . tep_db_input($_GET['oID']) . "', 
				'" . tep_db_input($_POST['status']) . "', 
				now(), 
				" . tep_db_input($customer_notified) . ", 
				'" . tep_db_input($_POST['comments'])  . "')");
			}

	// 1.3 UPDATE PRODUCTS #####
		$RunningSubTotal = 0;
		$RunningTax = array($default_tax_name => 0);

    // Do pre-check for subtotal field existence
		$ot_subtotal_found = false;
		$ot_total_found = false;
		if (is_array ($_POST['update_totals'])) {
	foreach($_POST['update_totals'] as $total_details) {
		  extract($total_details,EXTR_PREFIX_ALL,"ot");
			if($ot_class == "ot_subtotal") {
			  $ot_subtotal_found = true;
    	break;
			}
			
			if($ot_class == "ot_total"){
			$ot_total_found = true;
			break;
			}
		}//end foreach() 
		}//end if (is_array())
		        
		// 1.3.1 Update orders_products Table
		if (is_array ($_POST['update_products'])){
		foreach($_POST['update_products'] as $orders_products_id => $products_details)	{
		if (!tep_not_null($products_details["qty"])) $products_details["qty"] = 0;
		
			// 1.3.1.1 Update Inventory Quantity
			$order_query = tep_db_query("SELECT products_id, products_quantity 
			FROM " . TABLE_ORDERS_PRODUCTS . " 
			WHERE orders_id = '" . (int)$oID . "'
			AND orders_products_id = '$orders_products_id'");
			$order = tep_db_fetch_array($order_query);
			
			// First we do a stock check 
			
			if ($products_details["qty"] != $order['products_quantity']){
			$quantity_difference = ($products_details["qty"] - $order['products_quantity']);
				if (STOCK_LIMITED == 'true'){
				    tep_db_query("UPDATE " . TABLE_PRODUCTS . " SET 
					products_quantity = products_quantity - " . $quantity_difference . ",
					products_ordered = products_ordered + " . $quantity_difference . " 
					WHERE products_id = '" . (int)$order['products_id'] . "'");
					} else {
					tep_db_query ("UPDATE " . TABLE_PRODUCTS . " SET
					products_ordered = products_ordered + " . $quantity_difference . "
					WHERE products_id = '" . (int)$order['products_id'] . "'");
				}
			}
               
			 //Then we check if the product should be deleted  
			 if (isset($products_details['delete'])){
			 //update quantities first
			 if (STOCK_LIMITED == 'true'){
				    tep_db_query("UPDATE " . TABLE_PRODUCTS . " SET 
					products_quantity = products_quantity + " . $products_details["qty"] . ",
					products_ordered = products_ordered - " . $products_details["qty"] . " 
					WHERE products_id = '" . (int)$order['products_id'] . "'");
					} else {
					tep_db_query ("UPDATE " . TABLE_PRODUCTS . " SET
					products_ordered = products_ordered - " . $products_details["qty"] . "
					WHERE products_id = '" . (int)$order['products_id'] . "'");
					}
					
            //then delete the little bugger
			$Query = "DELETE FROM " . TABLE_ORDERS_PRODUCTS . " 
			WHERE orders_id = '" . (int)$oID . "' 
			AND orders_products_id = '$orders_products_id';";
				tep_db_query($Query);
							
				// and all its attributes
				if(isset($products_details[attributes]))
				{
				$Query = "DELETE FROM " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " 
				WHERE orders_id = '" . (int)$oID . "' 
				AND orders_products_id = '$orders_products_id';";
				tep_db_query($Query);
				
                $Query2 = "DELETE FROM " . TABLE_ORDERS_PRODUCTS_DOWNLOAD . "
                WHERE orders_id = '" . (int)$oID . "'
                AND orders_products_id = '$orders_products_id';";
                tep_db_query($Query2);
				}
				
				
			
			}// end of if (isset($products_details['delete']))
			
			   else { // if we don't delete, we update
				$Query = "UPDATE " . TABLE_ORDERS_PRODUCTS . " SET
					products_model = '" . $products_details["model"] . "',
					products_name = '" . tep_html_quotes($products_details["name"]) . "',
					products_price = '" . $products_details["price"] . "',
					final_price = '" . $products_details["final_price"] . "',
					products_tax = '" . $products_details["tax"] . "',
					products_quantity = '" . $products_details["qty"] . "'
					WHERE orders_id = '" . (int)$oID . "'
					AND orders_products_id = '$orders_products_id';";
				tep_db_query($Query);
                        	
   				//update subtotal and total during update function
				if (DISPLAY_PRICE_WITH_TAX == 'true') {
				$RunningSubTotal += (($products_details['tax']/100 + 1) * ($products_details['qty'] * $products_details['final_price'])); 
				} else {
				$RunningSubTotal += $products_details["qty"] * $products_details["final_price"];
				}
                
				$RunningTax[$products_details['tax_description']] += (($products_details['tax']/100) * ($products_details['qty'] * $products_details['final_price']));
				
				// Update Any Attributes
				if(isset($products_details[attributes]))
				{ foreach($products_details["attributes"] as $orders_products_attributes_id => $attributes_details) {
					$Query = "UPDATE " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " set
						products_options = '" . $attributes_details["option"] . "',
						products_options_values = '" . $attributes_details["value"] . "',
						options_values_price ='" . $attributes_details["price"] . "',
						price_prefix ='" . $attributes_details["prefix"] . "'
						where orders_products_attributes_id = '$orders_products_attributes_id';";
						tep_db_query($Query);
					}//end of foreach($products_details["attributes"]
				}// end of if(isset($products_details[attributes]))
				}// end of if/else (isset($products_details['delete']))
			
		}//end of foreach
		}//end of if (is_array())
		
		//1.3.5
		//update any downloads that may exist
      if (is_array($_POST['update_downloads'])) {
	  foreach($_POST['update_downloads'] as $orders_products_download_id => $download_details) {
		$Query = "UPDATE " . TABLE_ORDERS_PRODUCTS_DOWNLOAD . " SET
					orders_products_filename = '" . $download_details["filename"] . "',
					download_maxdays = '" . $download_details["maxdays"] . "',
					download_count = '" . $download_details["maxcount"] . "'
					WHERE orders_id = '" . (int)$oID . "'
					AND orders_products_download_id = '$orders_products_download_id';";
					tep_db_query($Query);
				}
				}	
		
		// 1.4 UPDATE SHIPPING, CUSTOM FEES, DISOUNTS, TAXES, AND TOTALS #####
		
	// 1.4.0.1 Shipping Tax
		 	
			if (is_array ($_POST['update_totals'])){
			foreach($_POST['update_totals'] as $total_index => $total_details)
			{
				extract($total_details,EXTR_PREFIX_ALL,"ot");
				if($ot_class == "ot_shipping")//a good place to add in custom total components
				{
				    if (DISPLAY_PRICE_WITH_TAX == 'true') {//the shipping charge includes tax
			$RunningTax[$default_tax_name] += ($ot_value * $_POST['update_shipping_tax']) / ($_POST['update_shipping_tax'] + 100);
					} else { //shipping tax is in addition to the shipping charge
	$RunningTax[$default_tax_name] += (($_POST['update_shipping_tax'] / 100) * $ot_value);
					}
				}
			  }
		    }
		
		//1.4.1.0
		$RunningTotal = 0;
		$sort_order = 0;
			
			// 1.4.1.1  If ot_tax doesn't exist, but $RunningTax has been calculated, create an appropriate entry in the db and add tax to the subtotal or total as appropriate
			if (array_sum($RunningTax) != 0) {
			foreach ($RunningTax as $key => $val) {
			
			if (is_array ($_POST['update_totals'])){//1
			foreach($_POST['update_totals'] as $total_details)	{//2
				extract($total_details,EXTR_PREFIX_ALL,"ot");
				$ot_tax_found = 0;
				 if (($ot_class == "ot_tax") && (preg_replace("/:$/","",$ot_title) == $key))
				 {//3
					$ot_tax_found = 1;
					break;
					}//end 3
				}//end 2

//bizzarro code needed to input text value into db properly
//I still don't understand why 
//text = '" . $currencies->format($val, true, $order->info['currency'], $order->info['currency_value']) . "', 
//isn't adequate.  Maybe I never will
	if ($ot_class == "ot_total" || $ot_class == "ot_tax" || $ot_class == "ot_subtotal" || 
	$ot_class == "ot_shipping" || $ot_class == "ot_custom" || $ot_class == "ot_loworderfee") {
		$order = new oe_order($oID);
       // $RunningTax[$default_tax_name] += 0 * $products_details['tax'] / $order->info['currency_value'] / 100 ; 
		  }//end bizarro code
		  
				}// end 1
			
				if (($val > 0) && ($ot_tax_found != 1)) {
				$sort_order++;
			$Query = "INSERT INTO " . TABLE_ORDERS_TOTAL . " SET
			orders_id = '" . (int)$oID . "',
			title ='" . $key . ":',
            text = '" . $currencies->format($val, true, $order->info['currency'], $order->info['currency_value']) . "',
		    value = '" . $val . "',
			class = 'ot_tax',
			sort_order = '2'";
			tep_db_query($Query);
			$ot_tax_found = 1;
						
			if (DISPLAY_PRICE_WITH_TAX != 'true') {
				 $RunningTotal += $val;
				} //end if (DISPLAY_PRICE_WITH_TAX != 'true')
				} //end if (($val > 0) && ($ot_tax_found != 1)) {
			 } //end foreach ($RunningTax as $key => $val)
		} //end if (array_sum($RunningTax) != 0)
						
  ////////////////////OPTIONAL- create entries for subtotal and/or total if none exists
				/*			
			//1.4.1.2
			/////////////////////////Add in subtotal to db if it doesn't already exist
			if (($RunningSubTotal >0) && ($ot_subtotal_found != true)) {
				$Query = 'INSERT INTO ' . TABLE_ORDERS_TOTAL . ' SET
							orders_id = "' . (int)$oID . '",
							title ="' . ENTRY_SUB_TOTAL . '",
							text = "' . $currencies->format($RunningSubTotal, true, $order->info['currency'], $order->info['currency_value']) . '",
				            value = "' . $RunningSubTotal . '",
							class = "ot_subtotal",
							sort_order = "1"';
						tep_db_query($Query);
						$ot_subtotal_found = true;
						$RunningTotal += $RunningSubTotal;
						}
						
						//1.4.1.3
  /////////////////////////Add in total to db if it doesn't already exist
			if (($RunningTotal >0) && ($ot_total_found != true)) {
				$Query = 'INSERT INTO ' . TABLE_ORDERS_TOTAL . ' SET
							orders_id = "' . (int)$oID . '",
							title ="' . ENTRY_TOTAL . '",
							text = "' . $currencies->format($RunningTotal, true, $order->info['currency'], $order->info['currency_value']) . '",
				            value = "' . $RunningTotal . '",
							class = "ot_total",
							sort_order = "4"';
						tep_db_query($Query);
						$ot_total_found = true;
						}
						*/
  //////////////////////////end optional section
						
	// 1.4.2. Summing up total
			if (is_array ($_POST['update_totals'])) {
			foreach($_POST['update_totals'] as $total_index => $total_details)	{ 
			
			extract($total_details,EXTR_PREFIX_ALL,"ot");
			if (trim($ot_title)) {
			     $sort_order++;
					
					if ($ot_class == "ot_subtotal") {
						$ot_value = $RunningSubTotal;
					}	
										
					if ($ot_class == "ot_tax") {
						$ot_value = $RunningTax[preg_replace("/:$/","",$ot_title)];
					}

				   	if ($ot_class == "ot_total") {
					$ot_value = $RunningTotal;
				         		          
				    if ( !$ot_subtotal_found ) 
				    { // There was no subtotal on this order, lets add the running subtotal in.
				     $ot_value +=  $RunningSubTotal;
				     }
				     }
									
			  // Set $ot_text (display-formatted value)
              $order = new oe_order($oID);
              $ot_text = $currencies->format($ot_value, true, $order->info['currency'], $order->info['currency_value']);
						
				if ($ot_class == "ot_total") {
				$ot_text = "<b>" . $ot_text . "</b>";
					}
					
					if($ot_total_id > 0) { // Already in database --> Update
						$Query = "UPDATE " . TABLE_ORDERS_TOTAL . " SET
							title = '" . $ot_title . "',
							text = '" . $ot_text . "',
							value = '" . $ot_value . "',
							sort_order = '" . $sort_order . "'
							WHERE orders_total_id = '". $ot_total_id . "'
							AND orders_id = '" . (int)$oID . "'";
						tep_db_query($Query);
					} else { // New Insert (ie ot_custom)
						$Query = "INSERT INTO " . TABLE_ORDERS_TOTAL . " SET
							orders_id = '" . (int)$oID . "',
							title = '" . $ot_title . "',
							text = '" . $ot_text . "',
							value = '" . $ot_value . "',
							class = '" . $ot_class . "',
							sort_order = '" . $sort_order . "'";
						tep_db_query($Query);
					}
										
					if ($ot_class == "ot_tax") {
					
					if (DISPLAY_PRICE_WITH_TAX != 'true') { 
					//we don't add tax to the total here because it's already added to the subtotal
						$RunningTotal += $ot_value;
						}
						} else {
						$RunningTotal += $ot_value;
						}
				}
				
	if (!trim($ot_value) && ($ot_class != "ot_shipping") && ($ot_class != "ot_subtotal") && ($ot_class != "ot_total")) { // value = 0 => Delete Total Piece
				
					$Query = "DELETE from " . TABLE_ORDERS_TOTAL . " 
					WHERE orders_id = '" . (int)$oID . "' 
					AND orders_total_id = '$ot_total_id'";
					tep_db_query($Query);
				}
				
		}
}//end if (is_array())
		
		// 1.5 SUCCESS MESSAGE #####
		
		if ($order_updated)	{
			$messageStack->add_session(SUCCESS_ORDER_UPDATED, 'success');
		}

		tep_redirect(tep_href_link(FILENAME_ORDERS_EDIT, tep_get_all_get_params(array('action')) . 'action=edit'));
		
	break;

	// 2. ADD A PRODUCT ###############################################################################################
	case 'add_product':
	
		if($_POST['step'] == 4)
		{
		// 2.1 GET ORDER INFO #####
			
			$oID = tep_db_prepare_input($_GET['oID']);
			$order = new oe_order($oID);
			$AddedOptionsPrice = 0;
			
		//tax business
		$default_tax_name  = tep_get_tax_description($default_tax_class, $order->delivery['country_id'], $order->delivery['zone_id']);
			
		// 2.1.1 Get Product Attribute Info
			if(is_array ($_POST['add_product_options']))
			{
				foreach($_POST['add_product_options'] as $option_id => $option_value_id)
				{
					$result = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_ATTRIBUTES . " 
					pa LEFT JOIN " . TABLE_PRODUCTS_OPTIONS . " po 
					ON po.products_options_id=pa.options_id 
					LEFT JOIN " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov 
					ON pov.products_options_values_id=pa.options_values_id 
					WHERE products_id=" . $_POST['add_product_products_id'] . " 
					and options_id=" . $option_id . " 
					and options_values_id=" . $option_value_id . " 
					and po.language_id = '" . (int)$languages_id . "' 
					and pov.language_id = '" . (int)$languages_id . "'");
					
					$row = tep_db_fetch_array($result);
					if (is_array($row)) extract($row, EXTR_PREFIX_ALL, "opt");
					if ($opt_price_prefix == '-')
					{$AddedOptionsPrice -= $opt_options_values_price;}
					else //default to positive
					{$AddedOptionsPrice += $opt_options_values_price;}
					$option_value_details[$option_id][$option_value_id] = array (
					"options_values_price" => $opt_options_values_price,
					"price_prefix" => $opt_price_prefix);
					$option_names[$option_id] = $opt_products_options_name;
					$option_values_names[$option_value_id] = $opt_products_options_values_name;
					
		//add on for downloads
		if (DOWNLOAD_ENABLED == 'true') {
        $download_query_raw ="select products_attributes_filename, products_attributes_maxdays, products_attributes_maxcount 
        from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " 
        where products_attributes_id='" . $opt_products_attributes_id . "'";
        
		$download_query = tep_db_query($download_query_raw);
        if (tep_db_num_rows($download_query) > 0) {
          $download = tep_db_fetch_array($download_query);
          $filename[$option_id] = $download['products_attributes_filename'];
          $maxdays[$option_id]  = $download['products_attributes_maxdays'];
          $maxcount[$option_id] = $download['products_attributes_maxcount'];
        } //end if (tep_db_num_rows($download_query) > 0) {
		} //end if (DOWNLOAD_ENABLED == 'true') {
		//end downloads 
		
				} //end foreach($_POST['add_product_options'] as $option_id => $option_value_id)
			} //end if(is_array ($_POST['add_product_options']))

	// 2.1.2 Get Product Info
				$InfoQuery = "SELECT 
				p.products_model, p.products_price, pd.products_name, p.products_tax_class_id 
				from " . TABLE_PRODUCTS . " p
				LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd 
				ON pd.products_id=p.products_id 
				WHERE p.products_id=" . $_POST['add_product_products_id'] . " 
				AND pd.language_id = '" . (int)$languages_id . "'";
			    $result = tep_db_query($InfoQuery);

			$row = tep_db_fetch_array($result);
			if (is_array($row)) extract($row, EXTR_PREFIX_ALL, "p");
			
			// 2.1.3  Pull specials price from db if there is an active offer
			$special_price = tep_db_query("
			SELECT specials_new_products_price 
			FROM " . TABLE_SPECIALS . " 
			WHERE products_id =". $_POST['add_product_products_id'] . " 
			AND status");
			$new_price = tep_db_fetch_array($special_price);
			
			if ($new_price) 
			{ $p_products_price = $new_price['specials_new_products_price']; }
			
			// 2.2 UPDATE ORDER ####
            $Query = "INSERT INTO " . TABLE_ORDERS_PRODUCTS . " SET
              orders_id = '" . (int)$oID . "',
              products_id = '" . $_POST['add_product_products_id'] . "',
              products_model = '" . $p_products_model . "',
              products_name = '" . tep_html_quotes($p_products_name) . "',
              products_price = '". $p_products_price . "',
              final_price = '" . ($p_products_price + $AddedOptionsPrice) . "',
         products_tax = '" . tep_get_tax_rate($p_products_tax_class_id, $countryid, $zoneid) . "',
              products_quantity = '" . $_POST['add_product_quantity'] . "'";
              tep_db_query($Query);
              $new_product_id = tep_db_insert_id();
			
			// 2.2.1 Update inventory Quantity
			//This is only done if store is set up to use stock
			if (STOCK_LIMITED == 'true'){
			tep_db_query("UPDATE " . TABLE_PRODUCTS . " SET
			products_quantity = products_quantity - " . $_POST['add_product_quantity'] . " 
			WHERE products_id = '" . $_POST['add_product_products_id'] . "'");
			}
			
			//2.2.1.1 Update products_ordered info
			tep_db_query ("UPDATE " . TABLE_PRODUCTS . " SET
			products_ordered = products_ordered + " . $_POST['add_product_quantity'] . "
			WHERE products_id = '" . $_POST['add_product_products_id'] . "'");
           			
			//2.2.1.2 keep a record of the products attributes
			if (is_array ($_POST['add_product_options'])) {
				foreach($_POST['add_product_options'] as $option_id => $option_value_id) {
				$Query = "INSERT INTO " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " SET
						orders_id = '" . (int)$oID . "',
						orders_products_id = '" . $new_product_id . "',
						products_options = '" . $option_names[$option_id] . "',
						products_options_values = '" . 
						tep_db_input($option_values_names[$option_value_id]) . "',
						
                       options_values_price = '" . 
		$option_value_details[$option_id][$option_value_id]['options_values_price'] . "',
		
						price_prefix = '" . 
						$option_value_details[$option_id][$option_value_id]['price_prefix'] . "'";
						
					tep_db_query($Query);
					
					//add on for downloads
		if (DOWNLOAD_ENABLED == 'true' && isset($filename[$option_id])) {
		
		$Query2 = "INSERT INTO " . TABLE_ORDERS_PRODUCTS_DOWNLOAD . " SET
				orders_id = '" . (int)$oID . "',
				orders_products_id = '" . $new_product_id . "',
				orders_products_filename = '" . $filename[$option_id] . "',
				download_maxdays = '" . $maxdays[$option_id] . "',
	            download_count = '" . $maxcount[$option_id] . "'";
						
					tep_db_query($Query2);
					
       	} //end if (DOWNLOAD_ENABLED == 'true') {
		//end downloads 
		
				}
			}
			
			// 2.2.2 Calculate Tax and Sub-Totals
			$order = new oe_order($oID);
			$RunningSubTotal = 0;
			$RunningTax = array($default_tax_name => 0);

  //just adding in shipping tax, don't mind me
		$ot_shipping_query = tep_db_query("
		SELECT value 
		FROM " . TABLE_ORDERS_TOTAL . " 
		WHERE orders_id = '" . (int)$oID . "'
		AND class = 'ot_shipping'");
				
		while ($ot_shipping_info = tep_db_fetch_array($ot_shipping_query)) {
      	$ot_shipping_value = $ot_shipping_info['value'];
					
		if (DISPLAY_PRICE_WITH_TAX == 'true') {
			$RunningTax[$default_tax_name] += ($ot_shipping_value * $order->info['shipping_tax'] / ($order->info['shipping_tax'] + 100));
				} else {
  $RunningTax[$default_tax_name] += (($order->info['shipping_tax'] / 100) * $ot_shipping_value);
					
					}// end if (DISPLAY_PRICE_WITH_TAX == 'true') {
					}// end while
												
		// end shipping tax calcs
			 
  for ($i=0; $i<sizeof($order->products); $i++) {

        // This calculatiion of Subtotal and Tax is part of the 'add a product' process
		if (DISPLAY_PRICE_WITH_TAX == 'true') {
		$RunningSubTotal += (($order->products[$i]['tax'] / 100 + 1) * ($order->products[$i]['qty'] * $order->products[$i]['final_price']));
		} else {
		$RunningSubTotal += ($order->products[$i]['qty'] * $order->products[$i]['final_price']);
		}
		
		$RunningTax[$order->products[$i]['tax_description']] += (($order->products[$i]['tax'] / 100) * ($order->products[$i]['qty'] * $order->products[$i]['final_price']));		
			
			}// end of for ($i=0; $i<sizeof($order->products); $i++) {
			
			
			
		// 2.2.2.1 Tax
		foreach ($RunningTax as $key => $val) {
			$Query = 'UPDATE ' . TABLE_ORDERS_TOTAL . ' set
			text = "' . $currencies->format($val, true, $order->info['currency'], $order->info['currency_value']) . '",
			value = "' . $val . '"
			WHERE class= "ot_tax" 
			AND (title = "' . $key . ':" OR title = "' . $key . '") 
			AND orders_id= "' . (int)$oID . '"';
			tep_db_query($Query);
			}
			
			
			// 2.2.2.2 Sub-Total
			$Query = 'UPDATE ' . TABLE_ORDERS_TOTAL . ' SET
				text = "' . $currencies->format($RunningSubTotal, true, $order->info['currency'], $order->info['currency_value']) . '",
				value = "' . $RunningSubTotal . '"
				WHERE class="ot_subtotal" 
				AND orders_id= "' . (int)$oID . '"';
			tep_db_query($Query);
			
			// 2.2.2.3 Total
			if (DISPLAY_PRICE_WITH_TAX == 'true') {
			$Query = 'SELECT sum(value) 
			AS total_value from ' . TABLE_ORDERS_TOTAL . '
			WHERE class != "ot_total" 
			AND class != "ot_tax" 
			AND orders_id= "' . (int)$oID . '"';
			$result = tep_db_query($Query);
			$row = tep_db_fetch_array($result);
			$Total = $row['total_value'];
			} else {
			$Query = 'SELECT sum(value) 
			AS total_value from ' . TABLE_ORDERS_TOTAL . '
			WHERE class != "ot_total" 
			AND orders_id= "' . (int)$oID . '"';
			$result = tep_db_query($Query);
			$row = tep_db_fetch_array($result);
			$Total = $row['total_value'];
			}

			$Query = 'UPDATE ' . TABLE_ORDERS_TOTAL . ' set
             text = "' . $currencies->format($Total, true, $order->info['currency'], $order->info['currency_value']) . '",
				value = "' . $Total . '"
				WHERE class="ot_total" and orders_id= "' . (int)$oID . '"';
			tep_db_query($Query);

			// 2.3 REDIRECTION #####
			tep_redirect(tep_href_link(FILENAME_ORDERS_EDIT, tep_get_all_get_params(array('action')) . 'action=edit'));

		}
	
	  break;
		
  }
}

  if (($action == 'edit') && isset($_GET['oID'])) {
    $oID = tep_db_prepare_input($_GET['oID']);

    $orders_query = tep_db_query("select orders_id from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'");
    $order_exists = true;
    if (!tep_db_num_rows($orders_query)) {
      $order_exists = false;
      $messageStack->add(sprintf(ERROR_ORDER_DOES_NOT_EXIST, $oID), 'error');
    }
  }

  //oh, and by the way....
  if (($action == 'edit') && ($order_exists == true)) $order = new oe_order($oID);
  
  //and, we're off....
   ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">

<?php if (($action == 'edit') && ($order_exists == true)) {  ?>
<style type="text/css">
  
  .SubTitle {
  font-family: Verdana, Arial, Helvetica, sans-serif;
  font-size: 11px;
  font-weight: bold;
  color: #29ADB8;
  }
  
  .hidden
  {
  position: absolute;
  left: -1500em;
  }
  
  .update1 {
  font-family: Verdana, Arial, Helvetica, sans-serif;
  font-size: 12px;
  background-color: #DBF5F7;
  }
  
  .update2 {
  background-color: #AFE9ED;
  }
  
  .update3 {
  background-color: #97E1E8;
  }
  
  .update4 {
  background-color: #79DAE1;
  }
  
  .update5 {
  background-color: #4DCCD7;
  }
  
  #dhtmltooltip {
   position: absolute;
   width: 150px;
   border: 2px solid black;
   padding: 2px;
   background-color: lightyellow;
   visibility: hidden;
   z-index: 100;
   }
   
  
  
					
   <?php
  if ($order->customer['zone_id'] != '') {
?>
#customerStateInput { visibility: hidden; display: none; }

<?php
  } else {
?>
#customerStateMenu { visibility: hidden; display: none; }

<?php
  }

  if ($order->delivery['zone_id'] != '') {
?>
#deliveryStateInput { visibility: hidden; display: none; }
<?php
  } else {
?>
#deliveryStateMenu { visibility: hidden; display: none; }
<?php
  }

  if ($order->billing['zone_id'] != '') {
?>
#billingStateInput { visibility: hidden; display: none; }
<?php
  } else {
?>
#billingStateMenu { visibility: hidden; display: none; }
<?php
  }
?>
#shippingAddressEntry { visibility: <?php echo (($_SESSION['shipping_same_as_billing'] == 'on') ? 'hidden' : 'visible') ?>; display: <?php echo (($_SESSION['shipping_same_as_billing'] == 'on') ? 'none' : 'table-row') ?>; }
#billingAddressEntry { visibility: <?php echo (($_SESSION['billing_same_as_customer'] == 'on') ? 'hidden' : 'visible') ?>; display: <?php echo (($_SESSION['billing_same_as_customer'] == 'on') ? 'none' : 'table-row') ?>; }
   
</style>

<?php } //end check if action=edit // 
 if ($action == "add_product") { ?>

<style type="text/css">

.bluelink
{color: #6495ED;}

.redlink
{color: #FF0000;}

</style>

<?php } //end check if action=add_product ?>

<title><?php echo TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<script language="javascript" type="text/javascript" src="includes/general.js"></script>

<script language="javascript" type="text/javascript">

<?php if (($action == 'edit') && ($order_exists == true)) {  
     
	 echo "DISPLAY_PAYMENT_METHOD_DROPDOWN = '".DISPLAY_PAYMENT_METHOD_DROPDOWN."';"; 
	  
     $default_tax_name  = tep_get_tax_description($default_tax_class, $order->delivery['country_id'], $order->delivery['zone_id']);
	 //default tax class is set at the top of the file
     echo "defaultTaxName = '" . $default_tax_name . "';"; 
	 
	 ?>

addLoadListener(init);

function init()
{
  var optional = document.getElementById("optional");
  if (optional) {
  optional.className = "hidden";
  }
  //START dropdown option for payment method by quick_fixer
      if (DISPLAY_PAYMENT_METHOD_DROPDOWN == 'true') {
            var selObj = document.getElementById('update_info_payment_method');
            if (selObj) { var selIndex = selObj.selectedIndex; }
        
        //text in lieu of value supported by firefox and mozilla but not others SO MAKE SURE text and optional value are the same (in the payment dropdown they are)
            if (selObj.options[selIndex].text) {
                var paymentMethod = selObj.options[selIndex].text;
            }
            else {
                var paymentMethod = selObj.options[selIndex].value;
            }
        }
        else {
            //if you only use an input field to display payment method use this
            var selObj = document.getElementById('update_info_payment_method');
            if (selObj) { var paymentMethod = selObj.value; }
        }
                          
    //END dropdown option for payment method by quick_fixer

  if (optional) {
  if (paymentMethod == "<?php echo ENTRY_CREDIT_CARD ?>") {
  optional.className = "";
  return true;
  } else {
  optional.className = "hidden";
  return true;
  }
  }
  
} // end function init()

  function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
} // end function addLoadListener(fn)
  
  function doRound(x, places) {  //we only have so much space
    return Math.round(x * Math.pow(10, places)) / Math.pow(10, places);
 }
 
 function doFormat(x, places)  //keeps all calculated values the same length
{
var a = doRound(x, places);
var s = a.toString();

var decimalIndex = s.indexOf(".");
if (places > 0 && decimalIndex < 0)
{
decimalIndex = s.length;
s += '.';
}
while (decimalIndex + places + 1 > s.length)
{
s += '0';
}
return s;
} // end function doFormat

 function getAttributesPrices(pid){ //get any attributes prices that may exist 
var sum =0;
var el=document.getElementsByTagName('input');//all the input elements
for(var i=0;i<el.length;i++){
if(el[i].id.indexOf(pid)>-1){
var aid=el[i].id.replace(pid,'').replace('a', '');//extract the attribute id
var p=el[i].id.replace(pid,'').replace(/\d/g,'');
if((p=='a') && (document.getElementById(pid + '_' + aid + '_prefix').value) == '-') {
sum-=Number(el[i].value);
}
if((p=='a') && (document.getElementById(pid + '_' + aid + '_prefix').value) == '+') {
sum+=Number(el[i].value);
}
}
}
return sum
} //end function getAttributePrices(pid)

function getTaxTotals(action, taxdescription){ //find the right place to put the tax totals
var sum =0;
var taxRate = document.getElementById("shipping_tax_rate").value;
var el=document.getElementsByTagName('input');//all the input elements

for(var i=0;i<el.length;i++){
var p=el[i].id.replace(taxdescription,'').replace(/\d/g,'');

if(p=='p'){
sum+=Number(el[i].value);
}//end p = p

//shipping tax is added to the default tax class
  if (p == 'ot_shipping') {
  <?php
  if (DISPLAY_PRICE_WITH_TAX == 'true') { ?>//shipping tax is part of the shipping charge
  sum += Number(el[i].value) * taxRate / (Number(taxRate) + 100); 
  <?php } else { ?>//shipping tax is in addition to the shipping charge
  sum += Number(el[i].value) * taxRate / 100; 
  <?php } ?>
  }//end if p == ot_shipping
 
} //end for(var i=0;i<el.length;i++){
return sum
} //end function getTaxTotals

  function updateTotals(action, taxdescription){ //do the totals
  var sum =0;
  var el=document.getElementsByTagName('input');//all the input elements
  for(var i=0;i<el.length;i++){
  var pid=el[i].id.replace(/\d/g,'');//removes the numbers from id
 
  if (action == 'subtotal') {
  <?php if (DISPLAY_PRICE_WITH_TAX == 'true') { ?>
  if(pid == 'p-total_incl')// display price with tax => total including tax
  <?php } else { ?>
  if(pid == 'p-total_excl')// display price without tax => total excluding tax
  <?php } ?>
  {
  sum+=Number(el[i].value);
  }
  } 

  if ((action == 'weight') && (pid == 'p-total_weight')) {
  sum += Number(el[i].value);
  }

if (action =='total'){
//I cheat here- the grand total always includes the value of the various totals including tax of 
//each item, regardless of individual shop settings.  So I take the various Total incls, all the
//ot_customs, ot_loworderfees, and any ot_shipping value, and voila
if ((pid ==  'ot_custom') || (pid == 'ot_shipping') || (pid == 'p-total_incl') || (pid == 'ot_loworderfee')) {
sum += Number(el[i].value);
  }
  
 <?php
 if (DISPLAY_PRICE_WITH_TAX != 'true') //when set to true, shipping charge already includes tax
 {  ?>
 //calculates the shipping tax 
 //This has to be done independently since the grand total doesn't count the various tax totals
  if (pid == 'ot_shipping') {
  var taxRate = document.getElementById("shipping_tax_rate").value; 
  sum += Number(el[i].value) * taxRate / 100; 
    }//end if pid == defaultTaxName + 'ot_shipping'
   <?php } ?>
   
    } //end if action == total

  } //end for(var i=0;i<el.length;i++)
  
  return sum
  }//end function updateTotals()
  
  function updatePrices(action, pid, taxdescription) { 
  //calculates all the different values as new entries are typed
    var qty = document.getElementById(pid + "-qty").value;
	var taxRate = document.getElementById(pid + "-tax").value;
	var weight = document.getElementById(pid + "-weight").value;
	var attValue = getAttributesPrices(pid);
			
	if ((action == 'qty') || (action == 'tax') || (action == 'att_price') || (action == 'price')) {
	
	var finalPriceValue = document.getElementById(pid + "-price").value;
	var priceInclValue = document.getElementById(pid + "-price").value;
	var totalInclValue = document.getElementById(pid + "-price").value;
	var totalExclValue = document.getElementById(pid + "-price").value;
	var totalWeight = document.getElementById(pid + "-weight").value;
			
	finalPriceValue = Number(attValue) + Number(finalPriceValue);
	priceInclValue = ( Number(attValue) + Number(priceInclValue) ) * ((taxRate / 100) + 1);
	totalInclValue = ( Number(attValue) + Number(totalInclValue) ) * ((taxRate / 100) + 1) * qty;
	totalExclValue = ( Number(attValue) + Number(totalExclValue) ) * qty;
	totalWeight = totalWeight * qty;
	taxValue = taxRate * finalPriceValue / 100 * qty;
	
	}
	
	if (action == 'final_price') {
	
	var priceValue = document.getElementById(pid + "-final_price").value;
	var priceInclValue = document.getElementById(pid + "-final_price").value;
	var totalInclValue = document.getElementById(pid + "-final_price").value;
	var totalExclValue = document.getElementById(pid + "-final_price").value;
	var taxValue = document.getElementById(pid + "-final_price").value;
		
	priceValue = Number(priceValue) - Number(attValue);
	priceInclValue = priceInclValue * ((taxRate / 100) + 1);
	totalInclValue = totalInclValue * ((taxRate / 100) + 1) * qty;
	totalExclValue = totalExclValue * qty;
	taxValue = taxRate * taxValue / 100 * qty;
		
	} //end if ((action == 'qty') || (action == 'tax') || (action == 'final_price')) 
	
	if (action == 'price_incl') {
	
	var priceValue = document.getElementById(pid + "-price_incl").value;
	var finalPriceValue = document.getElementById(pid + "-price_incl").value;
	var totalInclValue = document.getElementById(pid + "-price_incl").value;
	var totalExclValue = document.getElementById(pid + "-price_incl").value;
		
	priceValue = Number(finalPriceValue / ((taxRate / 100) + 1)) - Number(attValue);
	finalPriceValue = finalPriceValue / ((taxRate / 100) + 1);
	totalInclValue = totalInclValue * qty;
	totalExclValue = totalExclValue * qty / ((taxRate / 100) + 1);
	taxValue = taxRate * finalPriceValue / 100 * qty;
	
	} //end of if (action == 'price_incl')
	
	if (action == 'total_excl') {
	
	var priceValue = document.getElementById(pid + "-total_excl").value;
	var finalPriceValue = document.getElementById(pid + "-total_excl").value;
	var priceInclValue = document.getElementById(pid + "-total_excl").value;
	var totalInclValue = document.getElementById(pid + "-total_excl").value;
			
	priceValue = ( Number (finalPriceValue / qty) ) - Number (attValue);
	finalPriceValue = finalPriceValue / qty;
	priceInclValue = priceInclValue * ((taxRate / 100) + 1) / qty;
	totalInclValue = totalInclValue * ((taxRate / 100) + 1);
	taxValue = taxRate * finalPriceValue / 100 * qty;
	
	} //end of if (action == 'total_excl')
	
	if (action == 'total_incl') {
	
	var priceValue = document.getElementById(pid + "-total_incl").value;
	var finalPriceValue = document.getElementById(pid + "-total_incl").value;
	var priceInclValue = document.getElementById(pid + "-total_incl").value;
	var totalExclValue = document.getElementById(pid + "-total_incl").value;
		
	priceValue = Number (finalPriceValue / ((taxRate / 100) + 1) / qty) - Number(attValue)
	finalPriceValue = finalPriceValue / ((taxRate / 100) + 1) / qty;
	priceInclValue = priceInclValue / qty;
	totalExclValue = totalExclValue / ((taxRate / 100) + 1);
	taxValue = taxRate * finalPriceValue / 100 * qty;
	
	} //end of if (action == 'total_incl')
	
	if (action == 'qty') {
	document.getElementById(pid + "-total_weight").value = doFormat(totalWeight, 2);
	var totalOrderWeight = updateTotals('weight');//performed after formatting weight above
	document.getElementById("total_order_weight").value = doFormat(totalOrderWeight, 2);
	}
	
	if ((action != 'qty') && (action != 'tax') && (action != 'att_price') && (action != 'price')) {
	document.getElementById(pid + "-price").value = doFormat(priceValue, 4);
	}
	
	if (action != 'final_price') {
	document.getElementById(pid + "-final_price").value = doFormat(finalPriceValue, 4);
	}
	
	if ((action != 'qty') && (action != 'price_incl')) {
	document.getElementById(pid + "-price_incl").value = doFormat(priceInclValue, 4);
	}
	
	if ((action != 'tax') && (action != 'total_excl')) {
	document.getElementById(pid + "-total_excl").value = doFormat(totalExclValue, 4);
	}
	
	if (action != 'total_incl') {
	document.getElementById(pid + "-total_incl").value = doFormat(totalInclValue, 4);
	}
	
	document.getElementById(taxdescription + pid).value = doFormat(taxValue, 4);
	
	var subTotal = updateTotals('subtotal', taxdescription);
	document.getElementById("ot_subtotal").value = doFormat(subTotal, 4);
	
	var taxTotal = getTaxTotals('tax', taxdescription);
	var field = document.getElementById(taxdescription + "-total");
    if (field) field.value = doFormat(taxTotal, 4);//tax fields won't necessarily exist
	
	var preTotal = updateTotals('total', taxdescription);
	//var total = Number(preTotal) + Number(subTotal);
	document.getElementById("ot_total").value = doFormat(preTotal, 4);
	
	} //end function updatePrices(action, pid)
	
    function getTotals(action, taxdescription) { 
	//called when updating editable total components such as shipping
	var subTotal = updateTotals('subtotal', taxdescription);
	document.getElementById("ot_subtotal").value = doFormat(subTotal, 4);
	
	//need to perform special step if shipping charge is changed
	if (action == 'shipping') {
	var taxTotal = getTaxTotals('tax', taxdescription);
	var field = document.getElementById(taxdescription + "-total");
	if (field) field.value = doFormat(taxTotal, 4);
	}//end if action == shipping
	
	var preTotal = updateTotals('total', taxdescription);
	//var total = Number(preTotal) + Number(subTotal);
	document.getElementById("ot_total").value = doFormat(preTotal, 4);
	} //end function getTotals

 
		function currency() {
		    var selObj = document.getElementById("update_info_payment_currency");
			var selIndex = selObj.selectedIndex;
			<?php
			 $currency_query_raw = "select code, value from " . TABLE_CURRENCIES . "";
             $currency_query = tep_db_query($currency_query_raw);
             while ($currency = tep_db_fetch_array($currency_query)) {
			echo 'if (selObj.options[selIndex].value == \'' . $currency['code'] . '\') {' . "\n";
			echo 'document.getElementById("update_info_payment_currency_value").value = \'' . $currency['value'] . '\';' . "\n";
			echo '}' . "\n";
			echo "\n";
			}
            ?>
        }
		
   function setAddressVisibility(szDivID, checkID) {
     var obj = document.getElementById(szDivID);

      if (checkID.checked) {
        obj.style.visibility = "hidden";
        obj.style.display = "none";
      } else {
        obj.style.visibility = "visible";
        
		//try to fix IE
		if (window.navigator.userAgent.indexOf('MSIE') != -1) { 
		               obj.style.display = "inline"; //IE is not standards compliant, apparently not even IE7
		} else {		
		obj.style.display = "table-row";
		}//this should all just be obj.style.display = "table-row"; but IE is not standards compliant
				
      }
    }
    
    function update_zone(theForm, countryID, zoneID, inputID, menuID) {
    var NumState = theForm[countryID].options.length;
    var SelectedCountry = '';

    while(NumState > 0) {
      NumState--;
      theForm[zoneID].options[NumState] = null;
    }

    SelectedCountry = theForm[countryID].options[theForm[countryID].selectedIndex].value;

<?php echo tep_oe_js_zone_list('SelectedCountry', 'theForm', 'zoneID', 'inputID', 'menuID'); ?>
  }

 
     function setStateVisibility(ID, vis, ID2) {
    
      var obj = document.getElementById(ID);
      var obj2 = document.getElementById(ID2);

      if (vis == "hidden") {
        obj.style.visibility = "hidden";
        obj.style.display = "none";
        obj2.style.visibility = "visible";
        obj2.style.display = "inline";
      } else {
        obj.style.visibility = "visible";
        obj.style.display = "inline";
        obj2.style.visibility = "hidden";
        obj2.style.display = "none";
     
         } //end if vis == hidden
     } //end function
  
  <?php } //end check if action=edit  ?>

</script>

</head>
<body>
<?php if (($action == 'edit') && ($order_exists == true)) {  ?>
<div id="dhtmltooltip"></div>

<script type="text/javascript">

/***********************************************
* Cool DHTML tooltip script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/

var offsetxpoint=-60 //Customize x offset of tooltip
var offsetypoint=20 //Customize y offset of tooltip
var ie=document.all
var ns6=document.getElementById && !document.all
var enabletip=false
if (ie||ns6)
var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : ""

function ietruebody(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function ddrivetip(thetext, thecolor, thewidth){
if (ns6||ie){
if (typeof thewidth!="undefined") tipobj.style.width=thewidth+"px"
if (typeof thecolor!="undefined" && thecolor!="") tipobj.style.backgroundColor=thecolor
tipobj.innerHTML=thetext
enabletip=true
return false
}
}

function positiontip(e){
if (enabletip){
var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
//Find out how close the mouse is to the corner of the window
var rightedge=ie&&!window.opera? ietruebody().clientWidth-event.clientX-offsetxpoint : window.innerWidth-e.clientX-offsetxpoint-20
var bottomedge=ie&&!window.opera? ietruebody().clientHeight-event.clientY-offsetypoint : window.innerHeight-e.clientY-offsetypoint-20

var leftedge=(offsetxpoint<0)? offsetxpoint*(-1) : -1000

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<tipobj.offsetWidth)
//move the horizontal position of the menu to the left by it's width
tipobj.style.left=ie? ietruebody().scrollLeft+event.clientX-tipobj.offsetWidth+"px" : window.pageXOffset+e.clientX-tipobj.offsetWidth+"px"
else if (curX<leftedge)
tipobj.style.left="5px"
else
//position the horizontal position of the menu where the mouse is positioned
tipobj.style.left=curX+offsetxpoint+"px"

//same concept with the vertical position
if (bottomedge<tipobj.offsetHeight)
tipobj.style.top=ie? ietruebody().scrollTop+event.clientY-tipobj.offsetHeight-offsetypoint+"px" : window.pageYOffset+e.clientY-tipobj.offsetHeight-offsetypoint+"px"
else
tipobj.style.top=curY+offsetypoint+"px"
tipobj.style.visibility="visible"
}
}

function hideddrivetip(){
if (ns6||ie){
enabletip=false
tipobj.style.visibility="hidden"
tipobj.style.left="-1000px"
tipobj.style.backgroundColor='white'
tipobj.style.width='200'
}
}

document.onmousemove=positiontip

</script>

<?php }//end check if action=edit ?>

<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->

<table border="0" width="100%" cellspacing="2" cellpadding="2">
  <tr>
    <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
    </table></td>
<!-- body_text //-->
    <td width="100%" valign="top">
	 <table border="0" width="100%" cellspacing="0" cellpadding="2">
	 <?php if (($action == 'edit') && ($order_exists == true)) { ?>
		<tr>
        <td width="100%">
		 <table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td class="pageHeading"><?php echo HEADING_TITLE . '&nbsp;(' . HEADING_TITLE_NUMBER . '&nbsp;' . $oID . '&nbsp;' . HEADING_TITLE_DATE  . '&nbsp;' . tep_datetime_short($order->info['date_purchased']) . ')'; ?></td>
            <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', 1, HEADING_IMAGE_HEIGHT); ?></td>
             <td class="pageHeading" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action')) . 'oID=' . $_GET['oID'] . '&action=edit') . '">' . tep_image_button('button_details.gif', IMAGE_EDIT) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_INVOICE, 'oID=' . $_GET['oID']) . '" TARGET="_blank">' . tep_image_button('button_invoice.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_PACKINGSLIP, 'oID=' . $_GET['oID']) . '" TARGET="_blank">' . tep_image_button('button_packingslip.gif', IMAGE_ORDERS_PACKINGSLIP) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('action'))) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a> '; ?></td>
          </tr>
		</table></td>
      </tr>

<!-- Begin Addresses Block -->
     <tr><td><?php echo tep_draw_form('edit_order', FILENAME_ORDERS_EDIT, tep_get_all_get_params(array('action')) . 'action=update_order'); ?></td>
	  </tr>
	  
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
      </tr>   

	<!-- Begin Update Block -->
      <tr>
	      <td>
          <table width="100%" border="0" cellpadding="2" cellspacing="1">
            <tr>
              <td class="update1"><?php echo HINT_PRESS_UPDATE; ?></td>
              <td class="update2" width="10">&nbsp;</td>
              <td class="update3" width="10">&nbsp;</td>
              <td class="update4" width="10">&nbsp;</td>
              <td class="update5" width="120" align="center"><?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?></td>
	          </tr>
          </table>
				</td>
      </tr>
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
      </tr>   
	<!-- End of Update Block -->

      <tr>
	    <td class="SubTitle" valign="bottom"><?php echo MENUE_TITLE_CUSTOMER; ?></td>
	  </tr>
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
      </tr>   

			<tr>
			  <td>
		  
 
 <!-- customer_info bof //-->
            <table border="0" cellspacing="0" cellpadding="2">
          <tr>
            <td valign="top">
			  <table width="100%" border="0" cellspacing="0" cellpadding="2" style="border: 1px solid #C9C9C9;">
              <tr class="dataTableHeadingRow"> 
                <td colspan="4" class="dataTableHeadingContent" valign="top"><?php echo ENTRY_CUSTOMER_ADDRESS; ?></td>
              </tr>
              <tr class="dataTableRow"> 
                <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_CUSTOMER_NAME; ?></td>
                <td colspan="3" valign="top" class="dataTableContent"><input name="update_customer_name" size="37" value="<?php echo stripslashes($order->customer['name']); ?>"></td>
              </tr>
              <tr class="dataTableRow"> 
                <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_COMPANY; ?></td>
                <td colspan="3" valign="top" class="dataTableContent"><input name="update_customer_company" size="37" value="<?php echo stripslashes($order->customer['company']); ?>"></td>
              </tr>
              <tr class="dataTableRow"> 
                <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_STREET_ADDRESS; ?></td>
                <td colspan="3" valign="top" class="dataTableContent" nowrap><input name="update_customer_street_address" size="37" value="<?php echo stripslashes($order->customer['street_address']); ?>"></td>
              </tr>
              <tr class="dataTableRow"> 
                <td class="dataTableContent" valign="middle" align="right"><?php echo ENTRY_SUBURB; ?></td>
                <td colspan="3" valign="top" class="dataTableContent" nowrap><input name="update_customer_suburb" size="37" value="<?php echo stripslashes($order->customer['suburb']); ?>"></td>
              </tr>
              <tr class="dataTableRow"> 
                <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_CITY_STATE; ?></td>
                <td colspan="2" valign="top" class="dataTableContent" nowrap><input name="update_customer_city" size="15" value="<?php echo stripslashes($order->customer['city']); ?>">,</td>
                <td valign="top" class="dataTableContent"><span id="customerStateMenu"><?php echo tep_draw_pull_down_menu('update_customer_zone_id', tep_get_country_zones($order->customer['country_id']), $order->customer['zone_id']); ?></span><span id="customerStateInput"><input name="update_customer_state" size="15" value="<?php echo stripslashes($order->customer['state']); ?>"></span></td>
              </tr>
			  
			 <tr class="dataTableRow"> 
                <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_POST_CODE; ?></td>
                <td class="dataTableContent" valign="top"><input name="update_customer_postcode" size="5" value="<?php echo $order->customer['postcode']; ?>"></td>
                <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_COUNTRY; ?></td>
                <td class="dataTableContent" valign="top"><?php echo tep_draw_pull_down_menu('update_customer_country_id', tep_get_countries(), tep_get_country_id($order->customer['country']), 'onchange="update_zone(this.form, \'update_customer_country_id\', \'update_customer_zone_id\', \'customerStateInput\', \'customerStateMenu\');"'); ?></td>
              </tr>
              <tr class="dataTableRow"> 
               <td colspan="4" style="border-top: 1px solid #C9C9C9;"><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
              </tr>
              <tr class="dataTableRow"> 
                <td class="dataTableContent" valign="middle" align="right"><?php echo ENTRY_TELEPHONE_NUMBER; ?></td>
                <td colspan="3" valign="top" class="dataTableContent"><input name="update_customer_telephone" size="15" value="<?php echo $order->customer['telephone']; ?>"></td>
              </tr>
              <tr class="dataTableRow"> 
                <td class="dataTableContent" valign="middle" align="right"><?php echo ENTRY_EMAIL_ADDRESS; ?></td>
                <td colspan="3" valign="top" class="dataTableContent"><input name='update_customer_email_address' size='35' value='<?php echo $order->customer['email_address']; ?>'></td>
              </tr>
            </table>
            <!-- customer_info_eof //-->
            <!-- shipping_address bof -->
            <table width="100%" border="0" cellspacing="0" cellpadding="0" style="border: 1px solid #C9C9C9;">
              <tr>
                <td class="dataTableContent">
                <table width="100%" cellspacing="0" cellpadding="2">
                   <tr class="dataTableHeadingRow">
				    <td class="dataTableHeadingContent" onMouseover="ddrivetip('<?php echo HINT_SHIPPING_ADDRESS; ?>')"; onMouseout="hideddrivetip()"><?php echo ENTRY_SHIPPING_ADDRESS; ?> <img src="images/icon_info.gif" border= "0" width="13" height="13" /></td>
                   </tr>
                  <tr class="dataTableRow"> 
                    <td valign="middle" class="dataTableContent"><input type="checkbox" name="shipping_same_as_billing" onClick="javascript:setAddressVisibility('shippingAddressEntry', this);"<?php echo (($_SESSION['shipping_same_as_billing'] == 'on') ? ' checked' : '') ?>>&nbsp;<?php echo TEXT_SHIPPING_SAME_AS_BILLING; ?></td>
                  </tr>
                </table>
                </td>
              </tr>
              <tr id="shippingAddressEntry">
                <td class="dataTableContent">
                <table width="100%" cellspacing="0" cellpadding="2">
                  <tr class="dataTableRow"> 
                    <td colspan="4" style="border-top: 1px solid #C9C9C9;"><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right"><?php echo ENTRY_CUSTOMER_NAME; ?></td>
                    <td colspan="3" valign="top" class="dataTableContent"><input name="update_delivery_name" size="37" value="<?php echo stripslashes($order->delivery['name']); ?>"></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right"><?php echo ENTRY_COMPANY; ?></td>
                    <td colspan="3" valign="top" class="dataTableContent"><input name="update_delivery_company" size="37" value="<?php echo stripslashes($order->delivery['company']); ?>"></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right"><?php echo ENTRY_STREET_ADDRESS; ?></td>
                    <td colspan="3" valign="top" class="dataTableContent"><input name="update_delivery_street_address" size="37" value="<?php echo stripslashes($order->delivery['street_address']); ?>"></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right"><?php echo ENTRY_SUBURB; ?></td>
                    <td colspan="3" valign="top" class="dataTableContent"><input name="update_delivery_suburb" size="37" value="<?php echo stripslashes($order->delivery['suburb']); ?>"></td>
                  </tr>
                  <tr class="dataTableRow">
                    <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_CITY_STATE; ?></td>
                    <td colspan="2" valign="top" class="dataTableContent" nowrap><input name="update_delivery_city" size="15" value="<?php echo stripslashes($order->delivery['city']); ?>">,</td>
                    <td valign="top" class="dataTableContent"><span id="deliveryStateMenu"><?php echo tep_draw_pull_down_menu('update_delivery_zone_id', tep_get_country_zones($order->delivery['country_id']), $order->delivery['zone_id']); ?></span><span id="deliveryStateInput"><input name="update_delivery_state" size="15" value="<?php echo stripslashes($order->delivery['state']); ?>"></span></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right"><?php echo ENTRY_POST_CODE; ?></td>
                    <td class="dataTableContent" valign="top"><input name="update_delivery_postcode" size="5" value="<?php echo $order->delivery['postcode']; ?>"></td>
                    <td class="dataTableContent" valign="middle" align="right"><?php echo ENTRY_COUNTRY; ?></td>
                    <td class="dataTableContent" valign="top"><?php echo tep_draw_pull_down_menu('update_delivery_country_id', tep_get_countries(), tep_get_country_id($order->delivery['country']), 'onchange="update_zone(this.form, \'update_delivery_country_id\', \'update_delivery_zone_id\', \'deliveryStateInput\', \'deliveryStateMenu\');"'); ?></td>
					</tr>  
				  </table>
                </td>
              </tr>                  
            </table>
            <!-- shipping_address_eof //-->
            </td>
            <td valign="top" width="10">&nbsp;</td>
            <td valign="top">
            <table width="100%" border="0" cellspacing="0" cellpadding="0" style="border: 1px solid #C9C9C9;">
              <!-- billing_address bof //-->
              <tr>
                <td class="dataTableContent">
                <table width="100%" cellspacing="0" cellpadding="2">
                  <tr class="dataTableHeadingRow"> 
                    <td colspan="4" class="dataTableHeadingContent" valign="top"><?php echo ENTRY_BILLING_ADDRESS; ?></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td colspan="4" valign="middle" class="dataTableContent"><input type="checkbox" name="billing_same_as_customer" onClick="javascript:setAddressVisibility('billingAddressEntry', this);"<?php echo (($_SESSION['billing_same_as_customer'] == 'on') ? ' checked' : '') ?>>&nbsp;<?php echo TEXT_BILLING_SAME_AS_CUSTOMER; ?></td>
                  </tr>
                </table>
                </td>
              </tr>
              <tr id="billingAddressEntry">
                <td class="dataTableContent">
                <table width="100%" cellspacing="0" cellpadding="2">               
                  <tr class="dataTableRow">
                    <td colspan="4" style="border-top: 1px solid #C9C9C9;"><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_CUSTOMER_NAME; ?></td>
                    <td colspan="3" valign="top" class="dataTableContent"><input name="update_billing_name" size="37" value="<?php echo stripslashes($order->billing['name']); ?>"></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_COMPANY; ?></td>
                    <td colspan="3" valign="top" class="dataTableContent"><input name="update_billing_company" size="37" value="<?php echo stripslashes($order->billing['company']); ?>"></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_STREET_ADDRESS; ?></td>
                    <td colspan="3" valign="top" class="dataTableContent"><input name="update_billing_street_address" size="37" value="<?php echo stripslashes($order->billing['street_address']); ?>"></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_SUBURB; ?></td>
                    <td colspan="3" valign="top" class="dataTableContent"><input name="update_billing_suburb" size="37" value="<?php echo stripslashes($order->billing['suburb']); ?>"></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_CITY_STATE; ?></td>
                    <td colspan="2" valign="top" class="dataTableContent" nowrap><input name="update_billing_city" size="15" value="<?php echo stripslashes($order->billing['city']); ?>">,</td>
                    <td valign="top" class="dataTableContent"><span id="billingStateMenu"><?php echo tep_draw_pull_down_menu('update_billing_zone_id', tep_get_country_zones($order->billing['country_id']), $order->billing['zone_id']); ?></span><span id="billingStateInput"><input name="update_billing_state" size="15" value="<?php echo stripslashes($order->billing['state']); ?>"></span></td>
                  </tr>
                  <tr class="dataTableRow"> 
                    <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_POST_CODE; ?></td>
                    <td class="dataTableContent" valign="top"><input name="update_billing_postcode" size="5" value="<?php echo $order->billing['postcode']; ?>"></td>
                    <td class="dataTableContent" valign="middle" align="right" nowrap><?php echo ENTRY_COUNTRY; ?></td>
                    <td class="dataTableContent" valign="top"><?php echo tep_draw_pull_down_menu('update_billing_country_id', tep_get_countries(), tep_get_country_id($order->billing['country']), 'onchange="update_zone(this.form, \'update_billing_country_id\', \'update_billing_zone_id\', \'billingStateInput\', \'billingStateMenu\');"'); ?></td>
                  </tr>
                </table>
                </td>
              </tr>
              <!-- billing_address_eof //-->
              <!-- Begin Payment Block -->
      
      <tr>
	      <td>
				
<table border="0" cellspacing="0" cellpadding="2" class="dataTableRow">
  <tr class="dataTableHeadingRow">
    <td colspan="2" class="dataTableHeadingContent" valign="bottom" onMouseover="ddrivetip('<?php echo HINT_UPDATE_TO_CC . ENTRY_CREDIT_CARD . HINT_UPDATE_TO_CC2; ?>')"; onMouseout="hideddrivetip()"><?php echo ENTRY_PAYMENT_METHOD; ?> <img src="images/icon_info.gif" border="0" width="13" height="13" /></td>
	<td></td>
	<td class="dataTableHeadingContent"><?php echo ENTRY_CURRENCY_TYPE; ?></td>
	<td></td>
	<td class="dataTableHeadingContent"><?php echo ENTRY_CURRENCY_VALUE; ?></td>
	</tr>
  <tr>
	  <td colspan="2" class="main">
	  <?php 
	  //START for payment dropdown menu use this by quick_fixer
  		if (DISPLAY_PAYMENT_METHOD_DROPDOWN == 'true') { 
		
		  // Get list of all payment modules available
  $enabled_payment = array();
  $module_directory = DIR_FS_CATALOG_MODULES . 'payment/';
  $file_extension = substr($PHP_SELF, strrpos($PHP_SELF, '.'));

  if ($dir = @dir($module_directory)) {
    while ($file = $dir->read()) {
      if (!is_dir( $module_directory . $file)) {
        if (substr($file, strrpos($file, '.')) == $file_extension) {
          $directory_array[] = $file;
        }
      }
    }
    sort($directory_array);
    $dir->close();
  }

  // For each available payment module, check if enabled
  for ($i=0, $n=sizeof($directory_array); $i<$n; $i++) {
    $file = $directory_array[$i];

    include(DIR_FS_CATALOG_LANGUAGES . $language . '/modules/payment/' . $file);
    include($module_directory . $file);

    $class = substr($file, 0, strrpos($file, '.'));
    if (tep_class_exists($class)) {
      $module = new $class;
      if ($module->check() > 0) {
        // If module enabled create array of titles
      	$enabled_payment[] = array('id' => $module->title, 'text' => $module->title);
		
		//if the payment method is the same as the payment module title then don't add it to dropdown menu
		if ($module->title == $order->info['payment_method']) {
			$paymentMatchExists='true';	
		}
      }
   }
 }
 		//just in case the payment method found in db is not the same as the payment module title then make it part of the dropdown array or else it cannot be the selected default value
		if ($paymentMatchExists !='true') {
			$enabled_payment[] = array('id' => $order->info['payment_method'], 'text' => $order->info['payment_method']);	
 }
 $enabled_payment[] = array('id' => 'Other', 'text' => 'Other');	
		//draw the dropdown menu for payment methods and default to the order value
	  		echo tep_draw_pull_down_menu('update_info_payment_method', $enabled_payment, $order->info['payment_method'], 'id="update_info_payment_method" onChange="init()"'); 
		}
	  	else {
		//draw the input field for payment methods and default to the order value
?><input name="update_info_payment_method" size="35" value="<?php echo $order->info['payment_method']; ?>" id="update_info_payment_method" onKeyUp="init()"/><?php
}
//END for payment dropdown menu use this by quick_fixer
	?></td>
	
	<td width="20">
	</td>
	
	<td><?php
	///get the currency info
reset($currencies->currencies);
    $currencies_array = array();
    while (list($key, $value) = each($currencies->currencies)) {
      $currencies_array[] = array('id' => $key, 'text' => $value['title']);
    }
	
echo tep_draw_pull_down_menu('update_info_payment_currency', $currencies_array, $order->info['currency'], 'id="update_info_payment_currency" onChange="currency()"'); 

?>
</td>

<td width="10">
</td>

	  <td><input name="update_info_payment_currency_value" size="15" readonly="readonly" id="update_info_payment_currency_value" value="<?php echo $order->info['currency_value']; ?>" /></td>
	</tr>

	<!-- Begin Credit Card Info Block checked ok-->
	  <tr><td>
	  
	  <table id="optional">
	 <tr>
	    <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
	  </tr>
	  <tr>
	    <td class="main"><?php echo ENTRY_CREDIT_CARD_TYPE; ?></td>
	    <td class="main"><input name="update_info_cc_type" size="20" value="<?php echo $order->info['cc_type']; ?>" /></td>
	  </tr>
	  <tr>
	    <td class="main"><?php echo ENTRY_CREDIT_CARD_OWNER; ?></td>
	    <td class="main"><input name="update_info_cc_owner" size="20" value="<?php echo $order->info['cc_owner']; ?>" /></td>
	  </tr>
	  <tr>
	    <td class="main"><?php echo ENTRY_CREDIT_CARD_NUMBER; ?></td>
	    <td class="main"><input name="update_info_cc_number" size="20" value="<?php echo $order->info['cc_number']; ?>" /></td>
	  </tr>
	  <tr>
	    <td class="main"><?php echo ENTRY_CREDIT_CARD_EXPIRES; ?></td>
	    <td class="main"><input name="update_info_cc_expires" size="4" value="<?php echo $order->info['cc_expires']; ?>" maxlength="4" /></td>
	  </tr>
	  </table>
	  
	  </td></tr>
	
  <!-- End Credit Card Info Block -->

              </table></td>
              </tr>                  
            </table></td>
          </tr>
        </table>
 
   </td>
      </tr>
	 
<!-- End Payment Block -->
	
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
      </tr>

<!-- Begin Products Listing Block -->
      <tr>
	      <td class="SubTitle" onMouseover="ddrivetip('<?php echo HINT_PRODUCTS_PRICES; ?>')"; onMouseout="hideddrivetip()"><?php echo MENUE_TITLE_ORDER; ?> <img src="images/icon_info.gif" border= "0" width="13" height="13" /></td>
			</tr>
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
      </tr>   
      <tr>
	      <td>
	
	<table border="0" width="100%" cellspacing="0" cellpadding="2"  style="border: 1px solid #C9C9C9;">
		<tr class="dataTableHeadingRow">
	  <td class="dataTableHeadingContent"><?php  echo TABLE_HEADING_DELETE; ?></td>
	  <td class="dataTableHeadingContent"><?php  echo TABLE_HEADING_QUANTITY; ?></td>
	  <td class="dataTableHeadingContent"><?php  echo TABLE_HEADING_PRODUCTS; ?></td>
	  <td class="dataTableHeadingContent"><?php  echo TABLE_HEADING_PRODUCTS_MODEL; ?></td>
	  <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_PRODUCTS_STOCK; ?></td>
	  <td class="dataTableHeadingContent"><?php  echo TABLE_HEADING_TAX; ?></td>
	  <td class="dataTableHeadingContent" onMouseover="ddrivetip('<?php echo HINT_BASE_PRICE; ?>')"; onMouseout="hideddrivetip()"><?php  echo TABLE_HEADING_BASE_PRICE; ?> <img src="images/icon_info.gif" border= "0" width="13" height="13" /></td>
	  <td class="dataTableHeadingContent" onMouseover="ddrivetip('<?php echo HINT_PRICE_EXCL; ?>')"; onMouseout="hideddrivetip()"><?php  echo TABLE_HEADING_UNIT_PRICE; ?> <img src="images/icon_info.gif" border= "0" width="13" height="13" /></td>
	  <td class="dataTableHeadingContent" onMouseover="ddrivetip('<?php echo HINT_PRICE_INCL; ?>')"; onMouseout="hideddrivetip()"><?php  echo TABLE_HEADING_UNIT_PRICE_TAXED; ?> <img src="images/icon_info.gif" border= "0" width="13" height="13" /></td>
	  <td class="dataTableHeadingContent" onMouseover="ddrivetip('<?php echo HINT_TOTAL_EXCL; ?>')"; onMouseout="hideddrivetip()"><?php  echo TABLE_HEADING_TOTAL_PRICE; ?> <img src="images/icon_info.gif" border= "0" width="13" height="13" /></td>
	  <td class="dataTableHeadingContent" onMouseover="ddrivetip('<?php echo HINT_TOTAL_INCL; ?>')"; onMouseout="hideddrivetip()"><?php  echo TABLE_HEADING_TOTAL_PRICE_TAXED; ?> <img src="images/icon_info.gif" border= "0" width="13" height="13" /></td>
	  <td class="dataTableHeadingContent"><?php  echo TABLE_HEADING_PRODUCTS_WEIGHT; ?></td>
	</tr>
	<?php

	for ($i=0; $i<sizeof($order->products); $i++) {
	//calculate total weight
	$products_weight = array($order->products[$i]['weight'] * $order->products[$i]['qty']);
    foreach ($products_weight as $key => $value);
    $total_weight += $value;
    //end total weight
	$orders_products_id = $order->products[$i]['orders_products_id'];
		$RowStyle = "dataTableContent";
		echo '	  <tr class="dataTableRow">' . "\n" .
		     '	    <td class="' . $RowStyle . '" valign="top"><div align="center">' . "<input name='update_products[$orders_products_id][delete]' type='checkbox' /></div></td>\n" . 
			 '	    <td class="' . $RowStyle . '" align="right" valign="top"><div align="center">' . "<input name='update_products[$orders_products_id][qty]' size='2' value='" . $order->products[$i]['qty'] . "' onKeyUp=\"updatePrices('qty', 'p" . $orders_products_id . "', '" . $order->products[$i]['tax_description'] . "')\" id='p" . $orders_products_id . "-qty' /></div></td>\n" . 
 		     '	    <td class="' . $RowStyle . '" valign="top">' . "<input name='update_products[$orders_products_id][name]' size='35' value='" . tep_html_quotes($order->products[$i]['name']) . "'>";
		
		// Has Attributes? 
		if (sizeof($order->products[$i]['attributes']) > 0) {
			for ($j=0; $j<sizeof($order->products[$i]['attributes']); $j++) {
				$orders_products_attributes_id = $order->products[$i]['attributes'][$j]['orders_products_attributes_id'];
				echo '<br /><nobr><small>&nbsp;<i> - ' . "<input name='update_products[$orders_products_id][attributes][$orders_products_attributes_id][option]' size='6' value='" . $order->products[$i]['attributes'][$j]['option'] . "'>" . ': ' . "<input name='update_products[$orders_products_id][attributes][$orders_products_attributes_id][value]' size='10' value='" . $order->products[$i]['attributes'][$j]['value'] . "'>" . ': ' . "</i><input name='update_products[$orders_products_id][attributes][$orders_products_attributes_id][prefix]' size='1' id='p" . $orders_products_id . "_" . $orders_products_attributes_id . "_prefix' value='" . $order->products[$i]['attributes'][$j]['prefix'] . "' onKeyUp=\"updatePrices('att_price', 'p" . $orders_products_id . "', '" . $order->products[$i]['tax_description'] . "', '" . $orders_products_attributes_id . "')\">" . ': ' . "<input name='update_products[$orders_products_id][attributes][$orders_products_attributes_id][price]' size='7' value='" . $order->products[$i]['attributes'][$j]['price'] . "' onKeyUp=\"updatePrices('att_price', 'p" . $orders_products_id . "', '" . $order->products[$i]['tax_description'] . "', '" . $orders_products_attributes_id . "')\" id='p". $orders_products_id . "a" . $orders_products_attributes_id . "'>";
				echo '</small></nobr>';
			}  //end for ($j=0; $j<sizeof($order->products[$i]['attributes']); $j++) {
			
			 //Has downloads?
  
    if (DOWNLOAD_ENABLED == 'true') {
   $downloads_count = 1;
   $d_index = 0;
   $download_query_raw ="SELECT *
                         FROM " . TABLE_ORDERS_PRODUCTS_DOWNLOAD . "                               
						 WHERE orders_products_id='" . $orders_products_id . "'
						 AND orders_id='" . (int)$oID . "'
						 ORDER BY orders_products_download_id";
  
		$download_query = tep_db_query($download_query_raw);
		
		//
		if (isset($downloads->products)) unset($downloads->products);
		//
		
		if (tep_db_num_rows($download_query) > 0) {
        while ($download = tep_db_fetch_array($download_query)) {
		
 		$downloads->products[$d_index] = array(
		            'id' => $download['orders_products_download_id'],
		            'filename' => $download['orders_products_filename'],
                    'maxdays' => $download['download_maxdays'],
                    'maxcount' => $download['download_count']);
		
		$d_index++; 
		
		} 
       } 
        
  for ($mm=0; $mm<sizeof($downloads->products); $mm++) {  
  $id =  $downloads->products[$mm]['id'];
  echo '<br /><small>';
  echo '<nobr>' . ENTRY_DOWNLOAD_COUNT . $downloads_count . "";
  echo ' </nobr><br />' . "\n";
  echo '<nobr>&nbsp;- ' . ENTRY_DOWNLOAD_FILENAME . ": <input name='update_downloads[$id][filename]' size='12' value='" . $downloads->products[$mm]['filename'] . "'>";
  echo ' </nobr><br />' . "\n";
  echo '<nobr>&nbsp;- ' . ENTRY_DOWNLOAD_MAXDAYS . ": <input name='update_downloads[$id][maxdays]' size='6' value='" . $downloads->products[$mm]['maxdays'] . "'>";
  echo ' </nobr><br />' . "\n";
  echo '<nobr>&nbsp;- ' . ENTRY_DOWNLOAD_MAXCOUNT . ": <input name='update_downloads[$id][maxcount]' size='6' value='" . $downloads->products[$mm]['maxcount'] . "'>";
  echo ' </nobr>' . "\n";
  echo '<hr /></small>';
  $downloads_count++;
    } //end  for ($mm=0; $mm<sizeof($download_query); $mm++) {
	} //end download
	
		} //end if (sizeof($order->products[$i]['attributes']) > 0) {
		
		echo '	    </td>' . "\n" .
		     '	    <td class="' . $RowStyle . '" valign="top">' . "<input name='update_products[$orders_products_id][model]' size='12' value='" . $order->products[$i]['model'] . "'>" . '</td>' . "\n" .
			 '	    <td class="' . $RowStyle . '" valign="top">' . tep_get_products_inventory_stock($order->products[$i]['magazzino']). '</td>' .//MOD mag view ************************************************
		     '	    <td class="' . $RowStyle . '" valign="top">' . "<input name='update_products[$orders_products_id][tax]' size='6' value='" . tep_display_tax_value($order->products[$i]['tax']) . "' onKeyUp=\"updatePrices('tax', 'p" . $orders_products_id . "', '" . $order->products[$i]['tax_description'] . "')\" id='p" . $orders_products_id . "-tax' />" . 
			 "<input type='hidden' name='update_products[$orders_products_id][tax_description]' value='".$order->products[$i]['tax_description']."'>" . 
			 "<input type='hidden' name='" . $order->products[$i]['tax_description'] . 'p' . $orders_products_id . "' id='" . $order->products[$i]['tax_description'] . 'p' . $orders_products_id . "' value='" . number_format(($order->products[$i]['tax'] * $order->products[$i]['final_price'] / 100 * $order->products[$i]['qty']), 4, '.', '') . "'>" . 
			 '</td>' . "\n" .
		     '	    <td class="' . $RowStyle . '" align="right" valign="top">' . "<input name='update_products[$orders_products_id][price]' size='7' value='" . number_format($order->products[$i]['price'], 4, '.', '') . "' onKeyUp=\"updatePrices('price', 'p" . $orders_products_id . "', '" . $order->products[$i]['tax_description'] . "')\" id='p" . $orders_products_id . "-price' />" . '</td>' . "\n" .
			 '	    <td class="' . $RowStyle . '" align="right" valign="top">' . "<input name='update_products[$orders_products_id][final_price]' size='7' value='" . number_format($order->products[$i]['final_price'], 4, '.', '') . "' onKeyUp=\"updatePrices('final_price', 'p" . $orders_products_id . "', '" . $order->products[$i]['tax_description'] . "')\" id='p" . $orders_products_id . "-final_price' />" . '</td>' . "\n" . 
		     '	    <td class="' . $RowStyle . '" align="right" valign="top">' . "<input name='update_products[$orders_products_id][price_incl]' size='7' value='" . number_format(($order->products[$i]['final_price'] * (($order->products[$i]['tax']/100) + 1)), 4, '.', '') . "' onKeyUp=\"updatePrices('price_incl', 'p" . $orders_products_id . "', '" . $order->products[$i]['tax_description'] . "')\" id='p" . $orders_products_id . "-price_incl' />" . '</td>' . "\n" . 
		     '	    <td class="' . $RowStyle . '" align="right" valign="top">' . "<input name='update_products[$orders_products_id][total_excl]' size='7' value='" . number_format($order->products[$i]['final_price'] * $order->products[$i]['qty'], 4, '.', '') . "' onKeyUp=\"updatePrices('total_excl', 'p" . $orders_products_id . "', '" . $order->products[$i]['tax_description'] . "')\" id='p" . $orders_products_id . "-total_excl' />" . '</td>' . "\n" . 
		     '	    <td class="' . $RowStyle . '" align="right" valign="top">' . "<input name='update_products[$orders_products_id][total_incl]' size='7' value='" . number_format((($order->products[$i]['final_price'] * (($order->products[$i]['tax']/100) + 1))) * $order->products[$i]['qty'], 4, '.', '') . "' onKeyUp=\"updatePrices('total_incl', 'p" . $orders_products_id . "', '" . $order->products[$i]['tax_description'] . "')\" id='p" . $orders_products_id . "-total_incl' />" . '</td>' . "\n" .
			 '	    <td class="' . $RowStyle . '" align="right" valign="top">'  . 
		"<input name='update_products[$orders_products_id][total_weight]' size='6' value='" . number_format(($order->products[$i]['weight'] * $order->products[$i]['qty']), 2, '.', '') . "' id='p" . $orders_products_id . "-total_weight' readonly='readonly'>" . "<input type='hidden' name='update_products[$orders_products_id][weight]' value='" . $order->products[$i]['weight'] . "' id='p" . $orders_products_id . "-weight'>"  . '</td>' . "\n" .
			 '	  </tr>' . "\n" .
			 '     <tr class="dataTableRow"><td colspan="12" style="border-bottom: 1px solid #C9C9C9;">' . tep_draw_separator('pixel_trans.gif', '1', '1') . '</td></tr>' . "\n";
	}
?>
</table> 
        </td>
      <tr>
	      <td>
		<table width="100%" cellpadding="0" cellspacing="0">
					  <tr>
  <td align="right"><?php echo '<a href="' . tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action')) . 'action=add_product&step=1') . '">' . tep_image_button('button_add_article.gif', ADDING_TITLE) . '</a>'; ?></td>
						</tr>
					</table>
			  </td>
      </tr>
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
      </tr>
			
	<!-- End Products Listings Block -->

	<!-- Begin Update Block -->
      <tr>
	      <td>
          <table width="100%" border="0" cellpadding="2" cellspacing="1">
            <tr>
              <td class="update1"><?php echo HINT_PRESS_UPDATE; ?></td>
              <td class="update2" width="10">&nbsp;</td>
              <td class="update3" width="10">&nbsp;</td>
              <td class="update4" width="10">&nbsp;</td>
              <td class="update5" width="120" align="center"><?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?></td>
	          </tr>
          </table>
				</td>
      </tr>
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
      </tr>   
	<!-- End of Update Block -->

	<!-- Begin Order Total Block -->
      <tr>
	      <td class="SubTitle" onMouseover="ddrivetip('<?php echo HINT_TOTALS; ?>')"; onMouseout="hideddrivetip()"><?php echo MENUE_TITLE_TOTAL; ?> <img src="images/icon_info.gif" border= "0" width="13" height="13" /></td>
			</tr>
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
      </tr>   
      <tr>
	      <td>
	<table border="0" cellspacing="0" cellpadding="2" class="dataTableRow">
      <tr class="dataTableHeadingRow">
	  <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_TOTAL_MODULE; ?></td>
	  <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_PRODUCTS_WEIGHT; ?></td>
	  <td class="dataTableHeadingContent"width="1"><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
	  </tr>
	  <tr>
	  <td class="smallText" align="right"><b><?php echo TABLE_HEADING_TOTAL_WEIGHT; ?></b></td>
	  <td class="smallText" align="right"><?php  echo '<input name="total_order_weight" id="total_order_weight" size="10" value="' . number_format($total_weight, 2, '.', '') . '" readonly="readonly" />'; ?></td>
	  <td></td>
	   </tr>
	<tr class="dataTableHeadingRow">
	  <td class="dataTableHeadingContent"></td>
	  <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_TAX; ?></td>
	  <td class="dataTableHeadingContent"width="1"><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
	  </tr>
	  <tr>
	  <td class="smallText" align="right"><b><?php echo TABLE_HEADING_SHIPPING_TAX; ?></b></td>
	  <td class="smallText" align="right">
	  <input name="update_shipping_tax" size="10" onKeyUp="getTotals('shipping', '<?php 
	$countryid = tep_get_country_id($order->delivery["country"]);
	$zoneid = tep_get_zone_id($countryid, $order->delivery["state"]);
	$default_tax_name  = tep_get_tax_description($default_tax_class, $countryid, $zoneid);
	//default tax class is set at the top of the file
	echo $default_tax_name; ?>')" value="<?php echo tep_display_tax_value($order->info['shipping_tax']); ?>" id="shipping_tax_rate" />
	</td>
	  <td></td>
	   </tr>
		<tr class="dataTableHeadingRow">
	  <td class="dataTableHeadingContent"></td>
	  <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_TOTAL_AMOUNT; ?></td>
	  <td class="dataTableHeadingContent"width="1"><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
	</tr>
<?php
// START OF MAKING ALL INPUT FIELDS THE SAME LENGTH 
	$max_length = 0;
	$TotalsLengthArray = array();
	for ($i=0; $i<sizeof($order->totals); $i++) {
		$TotalsLengthArray[] = array("Name" => $order->totals[$i]['title']);
	}
	reset($TotalsLengthArray);
	foreach($TotalsLengthArray as $TotalIndex => $TotalDetails) {
		if (strlen($TotalDetails["Name"]) > $max_length) {
			$max_length = strlen($TotalDetails["Name"]);
		}
	}
// END OF MAKING ALL INPUT FIELDS THE SAME LENGTH

	$TotalsArray = array();
		for ($i=0; $i<sizeof($order->totals); $i++) {
		$TotalsArray[] = array(
		"Name" => $order->totals[$i]['title'], 
		"Price" => number_format($order->totals[$i]['value'], 2, '.', ''), 
		"Class" => $order->totals[$i]['class'], 
		"TotalID" => $order->totals[$i]['orders_total_id']);
		
		$TotalsArray[] = array(
		"Name" => "", 
		"Price" => "", 
		"Class" => "ot_custom", 
		"TotalID" => "0");
	}
	
	array_pop($TotalsArray);
	foreach($TotalsArray as $TotalIndex => $TotalDetails)
	{
		$TotalStyle = "smallText";
		
		if ($TotalDetails["Class"] == "ot_total" || $TotalDetails["Class"] == "ot_subtotal") {
			$id = $TotalDetails["Class"];//subtotal and total should each only exist once
			
			} elseif ($TotalDetails["Class"] == "ot_tax") {
			$id = preg_replace("/:$/", "", $TotalDetails["Name"]) . '-total';
			
			} elseif ($TotalDetails["Class"] == "ot_shipping") {
			$id = $TotalDetails["Class"] . $TotalIndex;
			
			} else {
			$id = $TotalDetails["Class"] . $TotalIndex;
			}
			
		if(//tax, subtotal, and total are not editable, but have all the same format
		$TotalDetails["Class"] == "ot_total" || 
		$TotalDetails["Class"] == "ot_subtotal" || 
		$TotalDetails["Class"] == "ot_tax")
		{
					
			echo '	<tr>' . "\n" .
				   '		<td align="right" class="' . $TotalStyle . '"><b>' . $TotalDetails["Name"] . '</b></td>' .
				   '		<td align="right" class="' . $TotalStyle . '">' . 
				            "<input name='" . $TotalDetails["Name"] . "' size='10' value='" . $TotalDetails["Price"] . "' id='" . $id . "' readonly='readonly' />" . 
						    "<input name='update_totals[$TotalIndex][title]' type='hidden' value='" . trim($TotalDetails["Name"]) . "'>" . 
						    "<input name='update_totals[$TotalIndex][value]' type='hidden' value='" . $TotalDetails["Price"] . "'>" . 
						    "<input name='update_totals[$TotalIndex][class]' type='hidden' value='" . $TotalDetails["Class"] . "'>\n" . 
						    "<input type='hidden' name='update_totals[$TotalIndex][total_id]' value='" . $TotalDetails["TotalID"] . "'>" . '</td>' . 
				   '		<td align="right" class="' . $TotalStyle . '"><b>' . tep_draw_separator('pixel_trans.gif', '1', '17') . '</b>' . 
				   '	</tr>' . "\n";
		} else { //the other total components are editable
			echo '	<tr>' . "\n" .
				   '		<td align="right" class="' . $TotalStyle . '">' . "<input name='update_totals[$TotalIndex][title]' size='" . $max_length . "' value='" . tep_html_quotes($TotalDetails["Name"]) . "'>" . '</td>' . "\n" .
				   '		<td align="right" class="' . $TotalStyle . '">' . "<input name='update_totals[$TotalIndex][value]' size='10' value='" . $TotalDetails["Price"] . "' id='" . $id . "' onKeyUp=\"getTotals('shipping', '" . $default_tax_name . "')\">" . 
						    "<input type='hidden' name='update_totals[$TotalIndex][class]' value='" . $TotalDetails["Class"] . "'>" . 
						    "<input type='hidden' name='update_totals[$TotalIndex][total_id]' value='" . $TotalDetails["TotalID"] . "'>" . 
				   '		<td align="right" class="' . $TotalStyle . '"><b>' . tep_draw_separator('pixel_trans.gif', '1', '17') . '</b>' . 
					 '   </td>' . "\n" .
				   '	</tr>' . "\n";
		}
	}
	
		?>
</table>

	      </td>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
      </tr>
	<!-- End Order Total Block -->
	
	<!-- Begin Status Block -->
      <tr>
	      <td class="SubTitle"><?php echo MENUE_TITLE_STATUS; ?></td>
			</tr>
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
      </tr> 
      <tr>
        <td class="main">
				  
<table border="0" cellspacing="0" cellpadding="2" class="dataTableRow">
  <tr class="dataTableHeadingRow">
    <td class="dataTableHeadingContent" align="left"><?php echo TABLE_HEADING_DATE_ADDED; ?></td>
    <td class="dataTableHeadingContent" align="left" width="10">&nbsp;</td>
    <td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_CUSTOMER_NOTIFIED; ?></td>
    <td class="dataTableHeadingContent" align="left" width="10">&nbsp;</td>
    <td class="dataTableHeadingContent" align="left"><?php echo HEADING_TITLE_STATUS; ?></td>
   <td class="dataTableHeadingContent" align="left" width="10">&nbsp;</td>
    <td class="dataTableHeadingContent" align="left"><?php echo TABLE_HEADING_COMMENTS; ?></td>
   </tr>
<?php
$orders_history_query = tep_db_query("select * from " . TABLE_ORDERS_STATUS_HISTORY . " where orders_id = '" . tep_db_input($oID) . "' order by date_added");
if (tep_db_num_rows($orders_history_query)) {
  while ($orders_history = tep_db_fetch_array($orders_history_query)) {
    echo '  <tr>' . "\n" .
         '    <td class="smallText" align="center">' . tep_datetime_short($orders_history['date_added']) . '</td>' . "\n" .
         '    <td class="dataTableHeadingContent" align="left" width="10">&nbsp;</td>' . "\n" .
         '    <td class="smallText" align="center">';
    if ($orders_history['customer_notified'] == '1') {
      echo tep_image(DIR_WS_ICONS . 'tick.gif', ICON_TICK) . "</td>\n";
    } else {
      echo tep_image(DIR_WS_ICONS . 'cross.gif', ICON_CROSS) . "</td>\n";
    }
    echo '    <td class="dataTableHeadingContent" align="left" width="10">&nbsp;</td>' . "\n" .
         '    <td class="smallText" align="left">' . $orders_status_array[$orders_history['orders_status_id']] . '</td>' . "\n";
   echo '    <td class="dataTableHeadingContent" align="left" width="10">&nbsp;</td>' . "\n" .
           '    <td class="smallText" align="left">' . nl2br(tep_db_output($orders_history['comments'])) . '&nbsp;</td>' . "\n";
  echo '  </tr>' . "\n";
  }
} else {
  echo '  <tr>' . "\n" .
       '    <td class="smallText" colspan="5">' . TEXT_NO_ORDER_HISTORY . '</td>' . "\n" .
       '  </tr>' . "\n";
}
?>
</table>

			  </td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
      </tr>
      <tr>
			  <td>	
						
<table border="0" cellspacing="0" cellpadding="2" class="dataTableRow">
  <tr class="dataTableHeadingRow">
    <td class="dataTableHeadingContent" align="left"><?php echo TABLE_HEADING_STATUS; ?></td>
    <td class="main" width="10">&nbsp;</td>
    <td class="dataTableHeadingContent" align="left"><?php echo TABLE_HEADING_COMMENTS; ?></td>
  </tr>
	<tr>
	  <td>
		  <table border="0" cellspacing="0" cellpadding="2">
        <tr>
          <td class="main"><b><?php echo ENTRY_STATUS; ?></b></td>
          <td class="main" align="right"><?php echo tep_draw_pull_down_menu('status', $orders_statuses, $order->info['orders_status']); ?></td>
        </tr>
        <tr>
          <td class="main"><b><?php echo ENTRY_NOTIFY_CUSTOMER; ?></b></td>
          <td class="main" align="right"><?php echo tep_draw_checkbox_field('notify', '', false); ?></td>
        </tr>
        <tr>
          <td class="main"><b><?php echo ENTRY_NOTIFY_COMMENTS; ?></b></td>
          <td class="main" align="right"><?php echo tep_draw_checkbox_field('notify_comments', '', false); ?></td>
        </tr>
     </table>
	  </td>
    <td class="main" width="10">&nbsp;</td>
    <td class="main">
    <?php echo tep_draw_textarea_field('comments', 'soft', '40', '5', ''); ?>
    </td>
  </tr>
</table>
			  </td>
			</tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
      </tr>
	<!-- End of Status Block -->
	
	<!-- Begin Update Block -->
	
      <tr>
	      <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '1'); ?></td>
      </tr>   
      <tr>
	      <td>
          <table width="100%" border="0" cellpadding="2" cellspacing="1">
            <tr>
              <td class="update1"><?php echo HINT_PRESS_UPDATE; ?></td>
              <td class="update2" width="10">&nbsp;</td>
              <td class="update3" width="10">&nbsp;</td>
              <td class="update4" width="10">&nbsp;</td>
              <td class="update5" width="120" align="center"><?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?></td>
	          </tr>
          </table>
				</td>
      </tr>
	<!-- End of Update Block -->
	
      </form>
	  
<?php
} /// end if action == edit
if (($action == "add_product") || (isset($_GET['step']) == 3)){
?>
      <tr>
        <td width="100%">
				  <table border="0" width="100%" cellspacing="0" cellpadding="0">
            <tr>
		      <td class="pageHeading"><?php echo ADDING_TITLE . $_GET['oID']; ?>)</td>
              <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', 1, HEADING_IMAGE_HEIGHT); ?></td>
              <td class="pageHeading" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS_EDIT) . '?oID=' . $_GET['oID'] . '&action=edit">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a>'; ?></td>
            </tr>
          </table>
		  </td>
      </tr>

<?php
	// ############################################################################
	//   Get List of All Products
	// ############################################################################

		$result = tep_db_query("
		SELECT pd.products_name, p.products_id, cd.categories_name, ptc.categories_id 
		FROM " . TABLE_PRODUCTS . " p 
		LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd 
		ON pd.products_id=p.products_id 
		LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " ptc 
		ON ptc.products_id=p.products_id 
		LEFT JOIN " . TABLE_CATEGORIES_DESCRIPTION . " cd 
		ON cd.categories_id=ptc.categories_id 
		WHERE pd.language_id = '" . (int)$languages_id . "' 
		ORDER BY categories_name");
		while($row = tep_db_fetch_array($result))
		{
			extract($row,EXTR_PREFIX_ALL,"db");
			$ProductList[$db_categories_id][$db_products_id] = $db_products_name;
			$CategoryList[$db_categories_id] = $db_categories_name;
			$LastCategory = $db_categories_name;
		}
	// ############################################################################
	//   Add Products Steps
	// ############################################################################
	echo '<tr><td><table border="0">' . "\n";
	
	?>

<script language="JavaScript" type="text/javascript">
//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Your browser does not support this feature.  Please upgrade or use a different browser. Older (pre-v2.8) versions of Order Editor do not have this restriction.");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();

//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest() {
	if (searchReq.readyState == 4 || searchReq.readyState == 0) {
		var str = escape(document.getElementById('txtSearch').value);
		var oid = "<?php echo $_GET['oID']; ?>";
		searchReq.open("GET", 'search_suggest.php?search=' + str + '&oID=' + oid, true);
		searchReq.onreadystatechange = handleSearchSuggest; 
		searchReq.send(null);
	}		
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
	if (searchReq.readyState == 4) {
		var ss = document.getElementById('search_suggest')
		ss.innerHTML = '';
		var str = searchReq.responseText.split("\n");
		for(i=0; i < str.length - 1; i++) {
			//Build our element string.  This is cleaner using the DOM, but
			//IE doesn't support dynamically added attributes.
			var suggest = '<div  ';
			suggest += 'class="suggestlink">' + str[i] + '</div>';
			ss.innerHTML += suggest;
		}
	}
}


//Click function
function setSearch(value) {
	document.getElementById('txtSearch').value = value;
	document.getElementById('search_suggest').innerHTML = '';
}
</script>
<?
		// Step 1: Choose Products
			echo '<tr class="dataTableRow">' . tep_draw_form('quick_find', FILENAME_ORDERS_EDIT,'oID=' . $_GET['oID'] . '&action=' . $_GET['action']) . "\n";
			echo '<td class="dataTableContent" align="right"><b>' . ADDPRODUCT_TEXT_STEP . ' 1:</b></td>' .  "\n";
			echo '<td class="dataTableContent" valign="top">';
			if (isset($_GET['add_product_products_id'])) {
				  $form_product_name_query = tep_db_query("select products_name from " .  TABLE_PRODUCTS_DESCRIPTION  . " where products_id = '" . $_GET['add_product_products_id'] . "' and language_id = '" . (int)$languages_id . "'");
				  $form_product_name = tep_db_fetch_array($form_product_name_query);
		          echo ' ' . '<input type="text" name="keywords" size="45" onFocus="this.value=\'\'"  value="'. tep_html_no_oe_quote($form_product_name['products_name']) .'" id="txtSearch" onKeyUp="searchSuggest();"  maxlength="45"/>';			
			}else{
				  echo ' ' . '<input type="text" name="keywords" size="45" onFocus="this.value=\'\'"  value="'. ADDPRODUCT_TEXT_SELECT_PRODUCT .'" id="txtSearch" onKeyUp="searchSuggest();"  maxlength="45"/>';						
			}
			echo '<input type="hidden" name="oID" value="' . $_GET['oID'] .'">' . "\n";
			echo '</td>' . "\n";
			echo '<td class="dataTableContent"><div id="search_suggest"></div></td>' . "\n";
			echo '</form></tr>' . "\n";
			echo '<tr><td colspan="3">&nbsp;</td></tr>' . "\n";
		
		// Step 2: Choose Options
		if( (($_GET['step'] > 1) && ($_GET['add_product_products_id'] > 0)) || (($_POST['step'] > 1) && ($_POST['add_product_products_id'] > 0)) )
		
		{
			 // Get Options for Products	
            $products_attributes_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . $_GET['add_product_products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "'");
			$products_attributes = tep_db_fetch_array($products_attributes_query);
		    if ($products_attributes['total'] == 0) {
				echo '<tr class="dataTableRow">' . "\n";
				echo '<td class="dataTableContent" align="left"><b>' . ADDPRODUCT_TEXT_STEP . ' 2: </b></td>' . "\n";
				echo '<td class="dataTableContent" ><i>' . ADDPRODUCT_TEXT_OPTIONS_NOTEXIST . '</i></td>' . "\n";
				echo '</tr>' . "\n";
				$_POST['step'] = 3;
			}
			else //product options exist
			{
			echo '<tr class="dataTableRow">' . tep_draw_form('addProduct', FILENAME_ORDERS_EDIT,'oID=' . $_GET['oID'] . '&action=' . $_GET['action'] . '&add_product_products_id=' . $_GET['add_product_products_id']) . "\n";
			echo '<td class="dataTableContent" align="right"><b>' . ADDPRODUCT_TEXT_STEP . ' 2: </b></td><td class="dataTableContent" valign="top">';
			$products_options_name_query = tep_db_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . $_GET['add_product_products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "' order by popt.products_options_name");
      		while ($products_options_name = tep_db_fetch_array($products_options_name_query)) {
        		$products_options_array = array();
        		$products_options_query = tep_db_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov where pa.products_id = '" . $_GET['add_product_products_id'] . "' and pa.options_id = '" . (int)$products_options_name['products_options_id'] . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . (int)$languages_id . "'");
        		while ($products_options = tep_db_fetch_array($products_options_query)) {
          			$products_options_array[] = array('id' => $products_options['products_options_values_id'], 'text' => $products_options['products_options_values_name']);
          			if ($products_options['options_values_price'] != '0') {
            			$products_options_array[sizeof($products_options_array)-1]['text'] .= ' (' . $products_options['price_prefix'] . $currencies->display_price($products_options['options_values_price'], tep_get_tax_rate($product_info['products_tax_class_id'])) .') ';
          			}
        		}
		  
		  if(isset($_POST['add_product_options'])) {
          $selected_attribute = $_POST['add_product_options'][$products_options_name['products_options_id']];
        } else {
          $selected_attribute = false;
        }
		
			echo $products_options_name['products_options_name'] . ':' . "\n";
			echo tep_draw_pull_down_menu('add_product_options[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute) . '<br />' . "\n";
		}
		
				echo '</td>';
			echo '<td class="dataTableContent" align="center"><input type="submit" value="' . ADDPRODUCT_TEXT_OPTIONS_CONFIRM . '">';
				echo '<input type="hidden" name="add_product_products_id" value=' . $_GET['add_product_products_id'] . '>';
				echo '<input type="hidden" name="step" value="3">';
				echo '</td>' . "\n";
				echo '</form></tr>' . "\n";
			}
			echo '<tr><td colspan="3">&nbsp;</td></tr>' . "\n";
		}

		// Step 3: Confirm
		if($_POST['step'] > 2)
		{
		   	echo '<tr class="dataTableRow">' . tep_draw_form('addProduct', FILENAME_ORDERS_EDIT,'oID=' . $_GET['oID'] . '&action=' . $_GET['action']) . "\n";
			echo '<td class="dataTableContent" align="right"><b>' . ADDPRODUCT_TEXT_STEP . ' 3: </b></td>';
			echo '<input type="hidden" name="add_product_products_id" value=' . $_POST['add_product_products_id'] . '>';
			echo '<td class="dataTableContent" valign="top"><input name="add_product_quantity" size="2" value="1"> ' . ADDPRODUCT_TEXT_CONFIRM_QUANTITY . '</td>';
			echo '<td class="dataTableContent" align="center"><input type="submit" value="' . ADDPRODUCT_TEXT_CONFIRM_ADDNOW . '">';
			if(is_array ($_POST['add_product_options']))
			{
				foreach($_POST['add_product_options'] as $option_id => $option_value_id)
				{
					echo '<input type="hidden" name="add_product_options[' . $option_id . ']" value="' . $option_value_id . '">';
				}
			}
			echo '<input type="hidden" name="add_product_products_id" value=' . $_GET['add_product_products_id'] . '>';
			echo '<input type="hidden" name="step" value="4">';
			echo '</td>' . "\n";
			echo '</form></tr>' . "\n";
		}
		echo '</table></td></tr>' . "\n";
}  
?>
    </table></td>
<!-- body_text_eof //-->
  </tr></table>
<!-- body_eof //-->
<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br />
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>