<?php
//custom plugins used by this app admin GUI only


//return api keys
function returnApiKeysArray()
    {
    $root_array=array();

    $rows_array=fetchRow("SELECT * FROM apl_api_keys ORDER BY api_key_secret");
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['api_key_products_add_formatted']=returnFormattedStatusArray($item_array['api_key_products_add'], "Active", "Inactive", "Suspended");
        $item_array['api_key_products_edit_formatted']=returnFormattedStatusArray($item_array['api_key_products_edit'], "Active", "Inactive", "Suspended");
        $item_array['api_key_clients_add_formatted']=returnFormattedStatusArray($item_array['api_key_clients_add'], "Active", "Inactive", "Suspended");
        $item_array['api_key_clients_edit_formatted']=returnFormattedStatusArray($item_array['api_key_clients_edit'], "Active", "Inactive", "Suspended");
        $item_array['api_key_licenses_add_formatted']=returnFormattedStatusArray($item_array['api_key_licenses_add'], "Active", "Inactive", "Suspended");
        $item_array['api_key_licenses_edit_formatted']=returnFormattedStatusArray($item_array['api_key_licenses_edit'], "Active", "Inactive", "Suspended");
        $item_array['api_key_installations_edit_formatted']=returnFormattedStatusArray($item_array['api_key_installations_edit'], "Active", "Inactive", "Suspended");
        $item_array['api_key_search_formatted']=returnFormattedStatusArray($item_array['api_key_search'], "Active", "Inactive", "Suspended");

        $item_array['api_key_status_formatted']=returnFormattedStatusArray($item_array['api_key_status'], "Active", "Inactive", "Suspended");

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return banned hosts
function returnBannedHostsArray()
    {
    $root_array=array();

    $rows_array=fetchRow("SELECT * FROM apl_banned_hosts ORDER BY banned_host_date DESC, banned_host_id DESC");
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        if (!verifyDate($item_array['banned_host_block_date'], "Y-m-d")) {$item_array['banned_host_block_date']=null;}

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return callbacks
function returnCallbacksArray($product_id=0, $search_keyword=null, $results_limit=50)
    {
    $root_array=array();

    if (empty($search_keyword))
        {
        $rows_array=fetchRow("SELECT * FROM apl_callbacks LEFT JOIN apl_products ON apl_callbacks.product_id=apl_products.product_id LEFT JOIN apl_clients ON apl_callbacks.client_id=apl_clients.client_id WHERE apl_callbacks.product_id=? ORDER BY apl_callbacks.callback_date DESC, apl_callbacks.callback_id DESC", array($product_id), array("i"));
        }
    else
        {
        $search_keyword="%$search_keyword%"; //add wildcards

        $rows_array=fetchRow("SELECT * FROM apl_callbacks LEFT JOIN apl_products ON apl_callbacks.product_id=apl_products.product_id LEFT JOIN apl_clients ON apl_callbacks.client_id=apl_clients.client_id WHERE apl_clients.client_email LIKE ? OR apl_callbacks.license_code LIKE ? OR apl_callbacks.callback_domain LIKE ? OR apl_callbacks.callback_ip LIKE ? ORDER BY apl_callbacks.callback_date DESC, apl_callbacks.callback_id DESC LIMIT $results_limit", array($search_keyword, $search_keyword, $search_keyword, $search_keyword), array("s", "s", "s", "s"));
        }
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['client_formatted']=formatClient($item_array['client_id'], $item_array['client_fname'], $item_array['client_lname'], $item_array['client_email'], $item_array['license_code']);
        $item_array['callback_status_formatted']=returnFormattedStatusArray($item_array['callback_status'], "Success", "Failure", "Unknown");

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return clients
function returnClientsArray($search_keyword=null, $results_limit=50)
    {
    $root_array=array();

    if (empty($search_keyword))
        {
        $rows_array=fetchRow("SELECT *, (SELECT COUNT(*) FROM apl_licenses WHERE apl_clients.client_id=apl_licenses.client_id) AS total_licenses, (SELECT COUNT(*) FROM apl_installations WHERE apl_clients.client_id=apl_installations.client_id) AS total_installations FROM apl_clients ORDER BY client_fname, client_lname");
        }
    else
        {
        $search_keyword="%$search_keyword%"; //add wildcards

        $rows_array=fetchRow("SELECT *, (SELECT COUNT(*) FROM apl_licenses WHERE apl_clients.client_id=apl_licenses.client_id) AS total_licenses, (SELECT COUNT(*) FROM apl_installations WHERE apl_clients.client_id=apl_installations.client_id) AS total_installations FROM apl_clients WHERE client_fname LIKE ? OR client_lname LIKE ? OR client_email LIKE ? ORDER BY client_fname, client_lname LIMIT $results_limit", array($search_keyword, $search_keyword, $search_keyword), array("s", "s", "s"));
        }
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['client_status_formatted']=returnFormattedStatusArray($item_array['client_status'], "Active", "Inactive", "Suspended");

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return products dropdown
function returnProductsDropdownArray($product_id=0)
    {
    $root_array=array();

    $rows_array=fetchRow("SELECT * FROM apl_products ORDER BY product_title");
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['value']=$item_array['product_id'];
        $item_array['title']=$item_array['product_title'];

        if ($item_array['product_id']==$product_id)
            {
            $item_array['selected']=" selected";
            }
        else
            {
            $item_array['selected']=null;
            }

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return installations
function returnInstallationsArray($product_id=0, $search_keyword=null, $results_limit=50)
    {
    $root_array=array();

    if (empty($search_keyword))
        {
        $rows_array=fetchRow("SELECT * FROM apl_installations LEFT JOIN apl_products ON apl_installations.product_id=apl_products.product_id LEFT JOIN apl_clients ON apl_installations.client_id=apl_clients.client_id WHERE apl_installations.product_id=? ORDER BY installation_date DESC, installation_id DESC", array($product_id), array("i"));
        }
    else
        {
        $search_keyword="%$search_keyword%"; //add wildcards

        $rows_array=fetchRow("SELECT * FROM apl_installations LEFT JOIN apl_products ON apl_installations.product_id=apl_products.product_id LEFT JOIN apl_clients ON apl_installations.client_id=apl_clients.client_id WHERE apl_clients.client_email LIKE ? OR apl_installations.license_code LIKE ? OR apl_installations.installation_domain LIKE ? OR apl_installations.installation_ip LIKE ? ORDER BY installation_date DESC, installation_id DESC LIMIT $results_limit", array($search_keyword, $search_keyword, $search_keyword, $search_keyword), array("s", "s", "s", "s"));
        }
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['client_formatted']=formatClient($item_array['client_id'], $item_array['client_fname'], $item_array['client_lname'], $item_array['client_email'], $item_array['license_code']);
        $item_array['installation_status_formatted']=returnFormattedStatusArray($item_array['installation_status'], "Active", "Inactive", "Unknown");

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return licenses
function returnLicensesArray($product_id=0, $search_keyword=null, $results_limit=50)
    {
    $root_array=array();

    if (empty($search_keyword))
        {
        $rows_array=fetchRow("SELECT *, (SELECT COUNT(*) FROM apl_installations WHERE apl_licenses.product_id=apl_installations.product_id AND (apl_licenses.client_id IS NOT NULL AND apl_licenses.license_code IS NULL AND apl_licenses.client_id=apl_installations.client_id OR apl_licenses.client_id IS NULL AND apl_licenses.license_code IS NOT NULL AND apl_licenses.license_code=apl_installations.license_code)) AS total_installations, (SELECT callback_date FROM apl_callbacks WHERE apl_licenses.product_id=apl_callbacks.product_id AND (apl_licenses.client_id IS NOT NULL AND apl_licenses.license_code IS NULL AND apl_licenses.client_id=apl_callbacks.client_id OR apl_licenses.client_id IS NULL AND apl_licenses.license_code IS NOT NULL AND apl_licenses.license_code=apl_callbacks.license_code) ORDER BY apl_callbacks.callback_date DESC LIMIT 1) AS latest_callback_date FROM apl_licenses JOIN apl_products ON apl_licenses.product_id=apl_products.product_id LEFT JOIN apl_clients ON apl_licenses.client_id=apl_clients.client_id WHERE apl_licenses.product_id=? ORDER BY license_date DESC, license_id DESC", array($product_id), array("i"));
        }
    else
        {
        $search_keyword="%$search_keyword%"; //add wildcards

        $rows_array=fetchRow("SELECT *, (SELECT COUNT(*) FROM apl_installations WHERE apl_licenses.product_id=apl_installations.product_id AND (apl_licenses.client_id IS NOT NULL AND apl_licenses.license_code IS NULL AND apl_licenses.client_id=apl_installations.client_id OR apl_licenses.client_id IS NULL AND apl_licenses.license_code IS NOT NULL AND apl_licenses.license_code=apl_installations.license_code)) AS total_installations, (SELECT callback_date FROM apl_callbacks WHERE apl_licenses.product_id=apl_callbacks.product_id AND (apl_licenses.client_id IS NOT NULL AND apl_licenses.license_code IS NULL AND apl_licenses.client_id=apl_callbacks.client_id OR apl_licenses.client_id IS NULL AND apl_licenses.license_code IS NOT NULL AND apl_licenses.license_code=apl_callbacks.license_code) ORDER BY apl_callbacks.callback_date DESC LIMIT 1) AS latest_callback_date FROM apl_licenses JOIN apl_products ON apl_licenses.product_id=apl_products.product_id LEFT JOIN apl_clients ON apl_licenses.client_id=apl_clients.client_id WHERE apl_licenses.license_code LIKE ? OR apl_clients.client_email LIKE ? ORDER BY license_date DESC, license_id DESC LIMIT $results_limit", array($search_keyword, $search_keyword), array("s", "s"));
        }
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        if (!filter_var($item_array['license_limit'], FILTER_VALIDATE_INT)) {$item_array['license_limit']=null;}
        if (verifyDate($item_array['license_expire_date'], "Y-m-d") && $item_array['license_expire_date']<=date("Y-m-d")) {$item_array['license_status']=2;} //expired status will be formatted
        if (!verifyDate($item_array['license_expire_date'], "Y-m-d")) {$item_array['license_expire_date']=null;}
        if (!verifyDate($item_array['license_updates_date'], "Y-m-d")) {$item_array['license_updates_date']=null;}
        if (!verifyDate($item_array['license_support_date'], "Y-m-d")) {$item_array['license_support_date']=null;}

        $item_array['client_formatted']=formatClient($item_array['client_id'], $item_array['client_fname'], $item_array['client_lname'], $item_array['client_email'], $item_array['license_code']);
        $item_array['license_status_formatted']=returnFormattedStatusArray($item_array['license_status'], "Active", "Inactive", "Expired");

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return products
function returnProductsArray($search_keyword=null, $results_limit=50)
    {
    $root_array=array();

    if (empty($search_keyword))
        {
        $rows_array=fetchRow("SELECT *, (SELECT COUNT(*) FROM apl_licenses WHERE apl_products.product_id=apl_licenses.product_id) AS total_licenses, (SELECT COUNT(*) FROM apl_installations WHERE apl_products.product_id=apl_installations.product_id) AS total_installations, (SELECT COUNT(*) FROM apl_callbacks WHERE apl_products.product_id=apl_callbacks.product_id) AS total_callbacks, (SELECT COUNT(*) FROM apl_reports WHERE apl_products.product_id=apl_reports.product_id) AS total_reports, (SELECT license_date FROM apl_licenses WHERE apl_products.product_id=apl_licenses.product_id ORDER BY apl_licenses.license_date DESC LIMIT 1) AS latest_license_date, (SELECT installation_date FROM apl_installations WHERE apl_products.product_id=apl_installations.product_id ORDER BY apl_installations.installation_date DESC LIMIT 1) AS latest_installation_date, (SELECT callback_date FROM apl_callbacks WHERE apl_products.product_id=apl_callbacks.product_id ORDER BY apl_callbacks.callback_date DESC LIMIT 1) AS latest_callback_date, (SELECT report_date FROM apl_reports WHERE apl_products.product_id=apl_reports.product_id ORDER BY apl_reports.report_date DESC LIMIT 1) AS latest_report_date FROM apl_products ORDER BY product_title");
        }
    else
        {
        $search_keyword="%$search_keyword%"; //add wildcards

        $rows_array=fetchRow("SELECT *, (SELECT COUNT(*) FROM apl_licenses WHERE apl_products.product_id=apl_licenses.product_id) AS total_licenses, (SELECT COUNT(*) FROM apl_installations WHERE apl_products.product_id=apl_installations.product_id) AS total_installations, (SELECT COUNT(*) FROM apl_callbacks WHERE apl_products.product_id=apl_callbacks.product_id) AS total_callbacks, (SELECT COUNT(*) FROM apl_reports WHERE apl_products.product_id=apl_reports.product_id) AS total_reports, (SELECT license_date FROM apl_licenses WHERE apl_products.product_id=apl_licenses.product_id ORDER BY apl_licenses.license_date DESC LIMIT 1) AS latest_license_date, (SELECT installation_date FROM apl_installations WHERE apl_products.product_id=apl_installations.product_id ORDER BY apl_installations.installation_date DESC LIMIT 1) AS latest_installation_date, (SELECT callback_date FROM apl_callbacks WHERE apl_products.product_id=apl_callbacks.product_id ORDER BY apl_callbacks.callback_date DESC LIMIT 1) AS latest_callback_date, (SELECT report_date FROM apl_reports WHERE apl_products.product_id=apl_reports.product_id ORDER BY apl_reports.report_date DESC LIMIT 1) AS latest_report_date FROM apl_products WHERE product_title LIKE ? OR product_sku LIKE ? ORDER BY product_title LIMIT $results_limit", array($search_keyword, $search_keyword), array("s", "s"));
        }
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['product_status_formatted']=returnFormattedStatusArray($item_array['product_status'], "Active", "Inactive", "Suspended");

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return license reports
function returnLicenseReportsArray($product_id=0, $search_keyword=null, $results_limit=50)
    {
    $root_array=array();

    if (empty($search_keyword))
        {
        $rows_array=fetchRow("SELECT * FROM apl_reports LEFT JOIN apl_clients ON apl_reports.account_id=apl_clients.client_id WHERE apl_reports.product_id=? AND apl_reports.report_system=? ORDER BY report_date DESC, report_id DESC", array($product_id, 0), array("i", "i"));
        }
    else
        {
        $search_keyword="%$search_keyword%"; //add wildcards

        $rows_array=fetchRow("SELECT * FROM apl_reports LEFT JOIN apl_clients ON apl_reports.account_id=apl_clients.client_id WHERE apl_reports.report_text LIKE ? AND apl_reports.report_system=? ORDER BY report_date DESC, report_id DESC LIMIT $results_limit", array($search_keyword, 0), array("s", "i"));
        }
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['client_formatted']=formatClient($item_array['client_id'], $item_array['client_fname'], $item_array['client_lname'], $item_array['client_email'], $item_array['license_code']);
        $item_array['report_status_formatted']=returnFormattedReportStatusArray($item_array['report_failure'], "Success", "Failure", "Alert");

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return system reports
function returnSystemReportsArray()
    {
    $root_array=array();

    $rows_array=fetchRow("SELECT * FROM apl_reports LEFT JOIN apl_admins ON apl_reports.account_id=apl_admins.admin_id WHERE report_system='1' ORDER BY report_date DESC, report_id DESC");
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['user_formatted']=formatSystemReportUser($item_array['admin_email']);
        $item_array['report_status_formatted']=returnFormattedReportStatusArray($item_array['report_failure'], "Success", "Failure", "Alert");

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return clients dropdown
function returnClientsDropdownArray($client_id=0)
    {
    $root_array=array();

    $rows_array=fetchRow("SELECT * FROM apl_clients ORDER BY client_fname, client_lname");
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['value']=$item_array['client_id'];
        $item_array['title']="$item_array[client_fname] $item_array[client_lname] ($item_array[client_email])";

        if ($item_array['client_id']==$client_id)
            {
            $item_array['selected']=" selected";
            }
        else
            {
            $item_array['selected']=null;
            }

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return products disabled dropdown
function returnProductsDropdownDisabledArray($product_id=0)
    {
    $root_array=array();

    $rows_array=fetchRow("SELECT * FROM apl_products ORDER BY product_title");
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['value']=$item_array['product_id'];
        $item_array['title']=$item_array['product_title'];

        if ($item_array['product_id']==$product_id)
            {
            $item_array['selected']=" selected";
            }
        else
            {
            $item_array['selected']=" disabled";
            }

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return clients disabled dropdown
function returnClientsDropdownDisabledArray($client_id=0)
    {
    $root_array=array();

    $rows_array=fetchRow("SELECT * FROM apl_clients ORDER BY client_fname, client_lname");
    foreach ($rows_array as $row)
        {
        foreach ($row as $key=>$value)
            {
            $item_array[$key]=$value;
            }

        $item_array['value']=$item_array['client_id'];
        $item_array['title']="$item_array[client_fname] $item_array[client_lname] ($item_array[client_email])";

        if ($item_array['client_id']==$client_id)
            {
            $item_array['selected']=" selected";
            }
        else
            {
            $item_array['selected']=" disabled";
            }

        $root_array[]=$item_array;
        }

    return $root_array;
    }


//return time zones
function returnTimezonesArray($TIMEZONE)
    {
    $root_array=array();

    $timezones_array=array("Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Velho", "America/Puerto_Rico", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Chita", "Asia/Choibalsan", "Asia/Colombo", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Gaza", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kathmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Thimphu", "Asia/Tokyo", "Asia/Ulaanbaatar", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faroe", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Europe/Amsterdam", "Europe/Andorra", "Europe/Athens", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Wake", "Pacific/Wallis", "UTC");

    foreach ($timezones_array as $key=>$value)
        {
        $item_array['value']=$value;
        $item_array['title']=$value;

        if ($value==$TIMEZONE)
            {
            $item_array['selected']=" selected";
            }
        else
            {
            $item_array['selected']=null;
            }

        $root_array[]=$item_array;
        }

    return $root_array;
    }