function getTransactionInfo($id, $test = false, $by = 'transactionId', $where_sql = "")
{
    global $cnn_cs;
    $trans_table_name = "cs_transactiondetails";
    if ($test) {
        $trans_table_name = "cs_test_transactiondetails";
    }
    $sql = "\n\t\t\tSELECT \n\t\t\t\tt.*, DATE_FORMAT(t.transactionDate,'%M %D %Y at %r') as transaction_date_formatted,\n\t\t\t\tsub.*,\n\t\t\t\t\tc.contact_email,\n\t\t\t\t\tc.customer_service_phone,\n\t\t\t\t\tc.cc_billingdescriptor,\n\t\t\t\t\tc.ch_billingdescriptor,\n\t\t\t\t\tc.cc_visa_billingdescriptor,\n\t\t\t\t\tc.cc_master_billingdescriptor,\n\t\t\t\t\tc.we_billingdescriptor, \n\t\t\t\t\tc.cd_recieve_order_confirmations,\n\t\t\t\t\tc.we_billingdescriptor,\n\t\t\t\t\tc.companyname, \n\t\t\t\t\tc.cd_tracking_init_response, \n\t\t\t\t\tc.cd_enable_tracking, \n\t\t\t\t\tc.gateway_id, \n\t\t\t\t\tc.bank_Creditcard,\n\t\t\t\t\ts.*, \n\t\t\t\t\t(r.note_id is not null) as hasRefundRequest,\n\t\t\t\t\t r.call_date_time, \n\t\t\t\t\t r.service_notes \n\t\t\tFROM \n\t\t\t\t{$trans_table_name} as t\n\t\t\tLEFT JOIN `cs_subscription` as sub ON sub.`ss_ID` = t.`td_ss_ID`\n\t\t\tLEFT JOIN `cs_companydetails` as c ON c.`userId` = t.`userId`\n\t\t\tLEFT JOIN `cs_company_sites` as s ON `cs_ID` = `td_site_ID`\n\t\t\tleft join cs_callnotes as r on r.`transaction_id`=t.`transactionId` AND r.cn_type = 'refundrequest'  \n\t\t\tWHERE \n\t\t\t\t`{$by}` = '{$id}' \n\t\t\t\t{$where_sql}\n\t\t\t\t";
    $result = sql_query_read($sql, $cnn_cs) or dieLog(mysql_errno() . ": " . mysql_error() . "<BR>{$sql}<BR>");
    if (mysql_num_rows($result) <= 0) {
        return -1;
    }
    $transactionInfo = mysql_fetch_assoc($result);
    $transactionInfo['CCnumber'] = etelDec($transactionInfo['CCnumber']);
    $transactionInfo['bankaccountnumber'] = etelDec($transactionInfo['bankaccountnumber']);
    $transactionInfo['bankaccountnumber'] = "XXXXXX" . substr($transactionInfo['bankaccountnumber'], -4, 4);
    $transactionInfo['CCnumber_format'] = "XXXXXXXXXXXX" . substr($transactionInfo['CCnumber'], -4, 4);
    $time = strtotime($transactionInfo['transactionDate']);
    $subAcc = getRebillInfo($transactionInfo['td_rebillingID'], $time, false);
    $transactionInfo['userActiveCode'] = UserActivity(&$transactionInfo);
    $transactionInfo['userRebillCode'] = UserRebill(&$transactionInfo);
    //Shipping
    if ($transactionInfo['cd_enable_tracking'] == 'on') {
        $transactionInfo['Tracking_Deadline'] = $time + $transactionInfo['cd_tracking_init_response'] * 24 * 60 * 60;
        $transactionInfo['Tracking_Days_Left'] = floor(($transactionInfo['Tracking_Deadline'] - time()) / (24 * 60 * 60));
    }
    if ($transactionInfo['userActiveCode'] == "ACT") {
        $transactionInfo['userActiveMsg'] = "Account is Active, ";
    } else {
        if ($transactionInfo['userActiveCode'] == "INA") {
            $transactionInfo['userActiveMsg'] = "Account is Inactive, ";
        } else {
            if ($transactionInfo['userActiveCode'] == "CAN") {
                $transactionInfo['userActiveMsg'] = "Account is Cancelled, ";
            } else {
                if ($transactionInfo['userActiveCode'] == "CHB") {
                    $transactionInfo['userActiveMsg'] = "Account has been Charged Back, ";
                }
            }
        }
    }
    if ($transactionInfo['userRebillCode'] == "ACT") {
        $transactionInfo['userActiveMsg'] .= "Rebilling is Active.";
    } else {
        if ($transactionInfo['userRebillCode'] == "INA") {
            $transactionInfo['userActiveMsg'] .= "Rebilling is Inactive.";
        }
    }
    if ($transactionInfo['checkorcard'] == 'H') {
        $transactionInfo['charge_type_info'] = "Credit Card (" . $transactionInfo['cardtype'] . ")";
        if ($transactionInfo['cardtype'] == "Visa") {
            $transactionInfo['billingdescriptor'] = $transactionInfo['cc_visa_billingdescriptor'];
        }
        if ($transactionInfo['cardtype'] == "Master") {
            $transactionInfo['billingdescriptor'] = $transactionInfo['cc_master_billingdescriptor'];
        }
    }
    if ($transactionInfo['checkorcard'] == 'C') {
        $transactionInfo['charge_type_info'] = "Check Account";
        $transactionInfo['billingdescriptor'] = $transactionInfo['ch_billingdescriptor'];
    }
    if ($transactionInfo['checkorcard'] == 'W') {
        $transactionInfo['charge_type_info'] = "Web900 ";
        $transactionInfo['billingdescriptor'] = $transactionInfo['we_billingdescriptor'];
    }
    // Next Payment
    $transactionInfo['subAccountName'] = $subAcc['rd_subName'];
    $transactionInfo['chargeAmount'] = $subAcc['chargeAmount'];
    $transactionInfo['schedule'] = $subAcc['schedule'];
    $transactionInfo['nextDateInfo'] = $subAcc['nextDateInfo'];
    $transactionInfo['nextRecurDate'] = $subAcc['nextRecurDate'];
    if ($transactionInfo['nextRecurDate'] == -1) {
        $transactionInfo['nextRecurDate'] = "N/A";
    }
    if ($transactionInfo['td_enable_rebill'] == 0) {
        $transactionInfo['nextRecurDate'] = "No/Canceled Subscription";
    }
    $transactionInfo['td_recur_next_date_next'] = $subAcc['td_recur_next_date'];
    $transactionInfo['subAcc'] = $subAcc;
    $recurDate = $subAcc['nextRecurDate'];
    $transactionInfo['expires'] = 'N/A';
    $transactionInfo['expired'] = 'N/A';
    if ($transactionInfo['ss_account_status'] == 'inactive') {
        $transactionInfo['expired'] = "Expired on " . date("F j, Y", strtotime($transactionInfo['ss_account_expire_date']));
    } else {
        if ($transactionInfo['ss_account_status'] == 'active') {
            $transactionInfo['expires'] = date("F j, Y", strtotime($transactionInfo['ss_account_expire_date']));
        }
    }
    //Formatting
    $transactionInfo['phonenumber_format'] = formatPhone($transactionInfo['phonenumber']);
    $transactionInfo['fullname'] = $transactionInfo['name'] . " " . $transactionInfo['surname'];
    return $transactionInfo;
}
} else {
    // IMPORTANT 5-6-05, DONT ALLOW THIS ANYMORE AFTER A WEEK = CONCAT($companyid,'-',`rd_subName`
    $sql = "SELECT rd_subaccount FROM `cs_rebillingdetails` WHERE (`rd_subName` = '{$mt_subAccount}') AND `company_user_id` = " . $companyid;
    if (!($result = mysql_query($sql, $cnn_cs))) {
        print mysql_errno() . ": " . mysql_error() . "<BR>";
        print $qry_update . "<br>";
        print "Failed to access company Product Database";
        exit;
    } else {
        if (mysql_num_rows($result) <= 0) {
            $strMessage = "INV";
            $msgtodisplay = "<form name='Frmname' action='{$mt_return_url}' method='post'><input type='hidden' name='mt_transaction_result' value='{$strMessage}'><table width='350' height='100' align='center' valign='middle' style='border:1px solid black' cellpading='0' cellspacing='0'><tr><td align='center' valign='middle'>SubAccount '{$mt_subAccount}' not found for this company. Please contact an administrator. If you are a merchant seeing this message, please make sure the <strong>Entire</strong> SubAccount is sent (ex. '425-00101', not '00101')</td></tr><tr><td align='center'><input type='image' border='0' src='https://www.etelegate.com/images/back.jpg'></td></tr></table></form>";
            die($msgtodisplay);
        }
        $subAccID = mysql_fetch_assoc($result);
        $subAcc = getRebillInfo($subAccID['rd_subaccount'], time(), true);
        //print_r($subAcc);
        if ($companyInfo['cd_enable_price_points'] == 0 || $subAcc['rd_subaccount'] == -1) {
            $strMessage = "INV";
            $msgtodisplay = "<form name='Frmname' action='{$mt_return_url}' method='post'><input type='hidden' name='mt_transaction_result' value='{$strMessage}'><table width='350' height='100' align='center' valign='middle' style='border:1px solid black' cellpading='0' cellspacing='0'><tr><td align='center' valign='middle'>Invalid PricePoint Account or Price Points Not Enabled for this site. Please contact an administrator.</td></tr><tr><td align='center'><input type='image' border='0' src='https://www.etelegate.com/images/back.jpg'></td></tr></table></form>";
            die($msgtodisplay);
        }
        $_SESSION['rd_subaccount'] = $subAcc['rd_subaccount'];
        $_SESSION['td_enable_rebill'] = $subAcc['td_enable_rebill'];
        $_SESSION['td_one_time_subscription'] = $subAcc['td_one_time_subscription'];
        $_SESSION['td_recur_next_date'] = $subAcc['td_recur_next_date'];
        $_SESSION['nextDateInfo'] = $subAcc['nextDateInfo'];
        $_SESSION['amount'] = $subAcc['chargeAmount'];
        $_SESSION['payment_schedule'] = $subAcc['payment_schedule'];
        if (!$_SESSION['mt_prod_desc']) {
            $_SESSION['mt_prod_desc'] = $subAcc['rd_description'];