<div id="installer">
<?php

/*
*  Copyright (c) Codiad & Kent Safranski (codiad.com), distributed
*  as-is and without warranty under the MIT License. See
*  [root]/license.txt for more. This information must remain intact.
*/

$path = rtrim(str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME']), "/");

$workspace = is_writable($path . "/workspace");
$data = is_writable($path . "/data");
$plugins = is_writable($path . "/plugins");
$themes = is_writable($path . "/themes");
$workspace = is_writable($path . "/workspace");

$conf = $path . '/config.php';

$config = is_writable(file_exists($conf) ? $conf : $path);

if (ini_get('register_globals') == 1) {
    $register = true;
} else {
    $register = false;
}

if (ini_get('newrelic.enabled') == 1) {
    $newrelic = true;
} else {
    $newrelic = false;
}

$query = $_SERVER['QUERY_STRING'];

$autocomplete = array(
  'username' => '',
  'password' => '',
  'password_confirm' => '',
  'project_name' => '',
  'project_path' => '',
  'timezone' => '',
  'site_name' => '',
);

if (!empty($query)) {
    $params = explode('&', $query);
    foreach ($params as $param) {
        $param = explode('=', $param);
        if (array_key_exists($param[0], $autocomplete)) {
            $autocomplete[$param[0]] = urldecode($param[1]);
        }
    }
}

if (!$workspace || !$data || !$config || $register || $newrelic) {
    ?>
    <h1><?php i18n("Installation Error"); ?></h1>
    <p><?php i18n("Please make sure the following exist and are writeable:"); ?></p>
    <div class="install_issues">
        <p>[SYSTEM]/config.php - <?php if ($config) {
            echo '<font style="color:green">PASSED</font>';
} else {
    echo '<font style="color:red">ERROR</font>';
} ?></p>
        <p>[SYSTEM]/workspace - <?php if ($workspace) {
            echo '<font style="color:green">PASSED</font>';
} else {
    echo '<font style="color:red">ERROR</font>';
} ?></p>
        <p>[SYSTEM]/plugins - <?php if ($plugins) {
            echo '<font style="color:green">PASSED</font>';
} else {
    echo '<font style="color:red">ERROR</font>';
} ?></p>
        <p>[SYSTEM]/themes - <?php if ($themes) {
            echo '<font style="color:green">PASSED</font>';
} else {
    echo '<font style="color:red">ERROR</font>';
} ?></p>
        <p>[SYSTEM]/data - <?php if ($data) {
            echo '<font style="color:green">PASSED</font>';
} else {
    echo '<font style="color:red">ERROR</font>';
} ?></p> 
    </div>
    <?php if ($register || $newrelic) { ?>
    <p><?php i18n("Please make sure these environmental variables are set:"); ?></p>
    <div class="install_issues">
        <?php if ($register) {
            echo '<p>register_globals: Off</p>';
}
if ($newrelic) {
    echo '<p>newrelic.enabled: Off</p>';
} ?>
    </div>
    <?php } ?>
    <button onclick="window.location.reload();">Re-Test</button>

    <?php
} else {
    ?>
    <form id="install">
    <h1><?php i18n("Initial Setup"); ?></h1>

        <label><?php i18n("Dependencies"); ?></label>
        <div id="dependencies">
            <?php foreach (array("ZIP", "OpenSSL", "MBString") as $dep) {
                if (extension_loaded(strtolower($dep))) { ?>
                    <div class="success"><span class="icon-check"></span> <?=$dep?></div>
                <?php
                } else { ?>
                    <div class="error"><span class="icon-cancel"></span> <?=$dep?></div>
<?php
                }
} ?>
        </div>

    <input type="hidden" name="path" value="<?php echo($path); ?>">

            <label><?php i18n("New Username"); ?></label>
    <input type="text" name="username" autofocus="autofocus"  value="<?php echo($autocomplete['username']); ?>">

    <div style="float:left; width: 48%; margin-right: 4%;">

        <label><?php i18n("Password"); ?></label>
        <input type="password" name="password" value="<?php echo($autocomplete['password']); ?>">

    </div>

    <div style="float:left; width: 48%;">

        <label><?php i18n("Confirm Password"); ?></label>
        <input type="password" name="password_confirm" value="<?php echo($autocomplete['password_confirm']); ?>">

    </div>
	
	<div style="float:left; width: 48%; margin-right: 4%;">

        <label><?php i18n("Site Name"); ?></label>
        <input type="text" name="site_name" value="<?php echo($autocomplete['site_name']); ?>">

    </div>
	
    <div style="clear:both;"></div>

    <hr>

    <label><?php i18n("New Project Name"); ?></label>
    <input type="text" name="project_name" value="<?php echo($autocomplete['project_name']); ?>">
    <label><?php i18n("Folder Name or Absolute Path"); ?></label>
    <input type="text" name="project_path" value="<?php echo($autocomplete['project_path']); ?>">
    <hr>
        <?php
        $location = array(
          "Pacific/Midway" => "(GMT-11:00) Midway Island, Samoa",
          "America/Adak" => "(GMT-10:00) Hawaii-Aleutian",
          "Etc/GMT+10" => "(GMT-10:00) Hawaii",
          "Pacific/Marquesas" => "(GMT-09:30) Marquesas Islands",
          "Pacific/Gambier" => "(GMT-09:00) Gambier Islands",
          "America/Anchorage" => "(GMT-09:00) Alaska",
          "America/Ensenada" => "(GMT-08:00) Tijuana, Baja California",
          "Etc/GMT+8" => "(GMT-08:00) Pitcairn Islands",
          "America/Los_Angeles" => "(GMT-08:00) Pacific Time (US & Canada)",
          "America/Denver" => "(GMT-07:00) Mountain Time (US & Canada)",
          "America/Chihuahua" => "(GMT-07:00) Chihuahua, La Paz, Mazatlan",
          "America/Dawson_Creek" => "(GMT-07:00) Arizona",
          "America/Belize" => "(GMT-06:00) Saskatchewan, Central America",
          "America/Cancun" => "(GMT-06:00) Guadalajara, Mexico City, Monterrey",
          "Chile/EasterIsland" => "(GMT-06:00) Easter Island",
          "America/Chicago" => "(GMT-06:00) Central Time (US & Canada)",
          "America/New_York" => "(GMT-05:00) Eastern Time (US & Canada)",
          "America/Havana" => "(GMT-05:00) Cuba",
          "America/Bogota" => "(GMT-05:00) Bogota, Lima, Quito, Rio Branco",
          "America/Caracas" => "(GMT-04:30) Caracas",
          "America/Santiago" => "(GMT-04:00) Santiago",
          "America/La_Paz" => "(GMT-04:00) La Paz",
          "Atlantic/Stanley" => "(GMT-04:00) Faukland Islands",
          "America/Campo_Grande" => "(GMT-04:00) Brazil",
          "America/Goose_Bay" => "(GMT-04:00) Atlantic Time (Goose Bay)",
          "America/Glace_Bay" => "(GMT-04:00) Atlantic Time (Canada)",
          "America/St_Johns" => "(GMT-03:30) Newfoundland",
          "America/Araguaina" => "(GMT-03:00) UTC-3",
          "America/Montevideo" => "(GMT-03:00) Montevideo",
          "America/Miquelon" => "(GMT-03:00) Miquelon, St. Pierre",
          "America/Godthab" => "(GMT-03:00) Greenland",
          "America/Argentina/Buenos_Aires" => "(GMT-03:00) Buenos Aires",
          "America/Sao_Paulo" => "(GMT-03:00) Brasilia",
          "America/Noronha" => "(GMT-02:00) Mid-Atlantic",
          "Atlantic/Cape_Verde" => "(GMT-01:00) Cape Verde Is.",
          "Atlantic/Azores" => "(GMT-01:00) Azores",
          "Europe/Belfast" => "(GMT) Greenwich Mean Time : Belfast",
          "Europe/Dublin" => "(GMT) Greenwich Mean Time : Dublin",
          "Europe/Lisbon" => "(GMT) Greenwich Mean Time : Lisbon",
          "Europe/London" => "(GMT) Greenwich Mean Time : London",
          "Africa/Abidjan" => "(GMT) Monrovia, Reykjavik",
          "Europe/Amsterdam" => "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
          "Europe/Belgrade" => "(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
          "Europe/Brussels" => "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris",
          "Africa/Algiers" => "(GMT+01:00) West Central Africa",
          "Africa/Windhoek" => "(GMT+01:00) Windhoek",
          "Asia/Beirut" => "(GMT+02:00) Beirut",
          "Africa/Cairo" => "(GMT+02:00) Cairo",
          "Asia/Gaza" => "(GMT+02:00) Gaza",
          "Africa/Blantyre" => "(GMT+02:00) Harare, Pretoria",
          "Asia/Jerusalem" => "(GMT+02:00) Jerusalem",
          "Europe/Minsk" => "(GMT+02:00) Minsk",
          "Asia/Damascus" => "(GMT+02:00) Syria",
          "Europe/Moscow" => "(GMT+03:00) Moscow, St. Petersburg, Volgograd",
          "Africa/Addis_Ababa" => "(GMT+03:00) Nairobi",
          "Asia/Tehran" => "(GMT+03:30) Tehran",
          "Asia/Dubai" => "(GMT+04:00) Abu Dhabi, Muscat",
          "Asia/Yerevan" => "(GMT+04:00) Yerevan",
          "Asia/Kabul" => "(GMT+04:30) Kabul",
          "Asia/Yekaterinburg" => "(GMT+05:00) Ekaterinburg",
          "Asia/Tashkent" => "(GMT+05:00) Tashkent",
          "Asia/Kolkata" => "(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi",
          "Asia/Katmandu" => "(GMT+05:45) Kathmandu",
          "Asia/Dhaka" => "(GMT+06:00) Astana, Dhaka",
          "Asia/Novosibirsk" => "(GMT+06:00) Novosibirsk",
          "Asia/Rangoon" => "(GMT+06:30) Yangon (Rangoon)",
          "Asia/Bangkok" => "(GMT+07:00) Bangkok, Hanoi, Jakarta",
          "Asia/Krasnoyarsk" => "(GMT+07:00) Krasnoyarsk",
          "Asia/Hong_Kong" => "(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
          "Asia/Irkutsk" => "(GMT+08:00) Irkutsk, Ulaan Bataar",
          "Australia/Perth" => "(GMT+08:00) Perth",
          "Australia/Eucla" => "(GMT+08:45) Eucla",
          "Asia/Tokyo" => "(GMT+09:00) Osaka, Sapporo, Tokyo",
          "Asia/Seoul" => "(GMT+09:00) Seoul",
          "Asia/Yakutsk" => "(GMT+09:00) Yakutsk",
          "Australia/Adelaide" => "(GMT+09:30) Adelaide",
          "Australia/Darwin" => "(GMT+09:30) Darwin",
          "Australia/Brisbane" => "(GMT+10:00) Brisbane",
          "Australia/Hobart" => "(GMT+10:00) Hobart",
          "Asia/Vladivostok" => "(GMT+10:00) Vladivostok",
          "Australia/Lord_Howe" => "(GMT+10:30) Lord Howe Island",
          "Etc/GMT-11" => "(GMT+11:00) Solomon Is., New Caledonia",
          "Asia/Magadan" => "(GMT+11:00) Magadan",
          "Pacific/Norfolk" => "(GMT+11:30) Norfolk Island",
          "Asia/Anadyr" => "(GMT+12:00) Anadyr, Kamchatka",
          "Pacific/Auckland" => "(GMT+12:00) Auckland, Wellington",
          "Etc/GMT-12" => "(GMT+12:00) Fiji, Kamchatka, Marshall Is.",
          "Pacific/Chatham" => "(GMT+12:45) Chatham Islands",
          "Pacific/Tongatapu" => "(GMT+13:00) Nuku'alofa",
          "Pacific/Kiritimati" => "(GMT+14:00) Kiritimati",
        );
        ?>

    <label><?php i18n("Timezone"); ?></label>
    <select name="timezone">
        <?php
        foreach ($location as $key => $city) {
            if ($autocomplete['timezone'] == $key) {
                $timezones .= '<option selected="selected" value="' . $key . '">' . $city . '</option>';
            } else {
                $timezones .= '<option value="' . $key . '">' . $city . '</option>';
            }
        }
        echo($timezones);
        ?>
    </select>

    <button><?php i18n("Install"); ?></button>
    </form>
    <?php
}
?>

</div>
<script>

    $(function(){

        $('html, body').css('overflow', 'auto');
        
        // Automatically select first timezone with the appropriate GMT offset
        function getTimeZoneString() {
            var num = new Date().getTimezoneOffset();
            if (num === 0) {
                return "GMT";
            } else {
                var hours = Math.floor(num / 60);
                var minutes = Math.floor((num - (hours * 60)));

                if (hours < 10) hours = "0" + Math.abs(hours);
                if (minutes < 10) minutes = "0" + Math.abs(minutes);
                
                return "GMT" + (num < 0 ? "+" : "-") + hours + ":" + minutes;
            }
        }
        var timezone = getTimeZoneString();
        $("[name=timezone] option").each(function() {
            if($(this).text().indexOf(timezone) > -1) $("[name=timezone]").val($(this).val());
        })

        $('#install').on('submit',function(e){
            e.preventDefault();

            // Check empty fields

            empty_fields = false;
            $('input').each(function(){
                if($(this).val()=='' && $(this).attr('name')!='path'){ empty_fields = true; }
            });

            if(empty_fields){ alert('All fields must be filled out'); }

            // Check password
            password_match = true;
            if($('input[name="password"]').val()!=$('input[name="password_confirm"]').val()){
                password_match = false;
            }

            // Check Path
            check_path = true;
            projectPath = '';
            if($('input[name="project_path"]').length) {
                projectPath = $('input[name="project_path"]').val();
            }

            if ( projectPath.indexOf("/") == 0 ) {
                check_path = confirm('Do you really want to create project with absolute path "' + projectPath + '"?');
            }

            if(!password_match){ alert('The passwords entered do not match'); }

            if(!empty_fields && password_match && check_path){
                $.post('components/install/process.php',$('#install').serialize(),function(data){
                    if(data=='success'){
                        window.location.reload();
                    }else{
                        alert("An Error Occoured<br><br>"+data);
                    }
                });
            }

        });
    });

</script>