Viewing File: /usr/local/cpanel/base/frontend/jupiter/js2/cron/index.js
var VALID = {};
var OPEN_MODULE = null;
var EDIT_VALID = {};
var EMAIL_VALID;
// TODO: put this in CPANEL.validate
var typeof_validator = function(obj) {
if (typeof (obj.add) != "function") {
return false;
}
if (typeof (obj.attach) != "function") {
return false;
}
if (typeof (obj.title) != "string") {
return false;
}
return true;
};
var load_cron_table = function() {
var table_div = YAHOO.util.Dom.get("current_cron_jobs");
var callback = {
success: function(o) {
table_div.innerHTML = o.responseText;
},
error: function(o) {
table_div.innerHTML = CPANEL.icons.error + " " + LOCALE.maketext("AJAX Error") + ": " + LOCALE.maketext("Please refresh the page and try again.");
}
};
YAHOO.util.Connect.asyncRequest("GET", "cron_entries.html", callback, "");
var div_region = YAHOO.util.Region.getRegion(table_div);
if (div_region.height > 0) {
table_div.innerHTML = '<div style="height: ' + div_region.height + 'px"><div style="padding: 15px">' + CPANEL.icons.ajax + " " + LOCALE.maketext("Loading …") + "</div></div>";
} else {
table_div.innerHTML = '<div style="padding: 15px">' + CPANEL.icons.ajax + " " + LOCALE.maketext("Loading …") + "</div>";
}
};
var reset_all_input = function(id) {
if (!id) {
id = "";
}
reset_input_fields(id);
reset_option_fields(id);
if (id == "") {
YAHOO.util.Dom.get("common_options").value = "--";
for (var i in VALID) {
if (VALID.hasOwnProperty(i)) {
if (typeof_validator(VALID[i]) == false) {
continue;
}
VALID[i].clear_messages();
}
}
} else {
YAHOO.util.Dom.get("common_options_" + id).value = "--";
}
};
var reset_input_fields = function(id) {
(!id) ? id = "" : id = "_" + id;
YAHOO.util.Dom.get("minute" + id).value = "";
YAHOO.util.Dom.get("hour" + id).value = "";
YAHOO.util.Dom.get("day" + id).value = "";
YAHOO.util.Dom.get("month" + id).value = "";
YAHOO.util.Dom.get("weekday" + id).value = "";
YAHOO.util.Dom.get("command" + id).value = "";
};
var reset_option_fields = function(id) {
(!id) ? id = "" : id = "_" + id;
YAHOO.util.Dom.get("minute_options" + id).value = "--";
YAHOO.util.Dom.get("hour_options" + id).value = "--";
YAHOO.util.Dom.get("day_options" + id).value = "--";
YAHOO.util.Dom.get("month_options" + id).value = "--";
YAHOO.util.Dom.get("weekday_options" + id).value = "--";
};
var select_common_option = function(id) {
var id2;
(!id) ? id2 = "" : id2 = "_" + id;
var option = YAHOO.util.Dom.get("common_options" + id2).value;
if (option != "--") {
// fill in values
var option_array = option.split(" ");
YAHOO.util.Dom.get("minute" + id2).value = option_array[0];
YAHOO.util.Dom.get("hour" + id2).value = option_array[1];
YAHOO.util.Dom.get("day" + id2).value = option_array[2];
YAHOO.util.Dom.get("month" + id2).value = option_array[3];
YAHOO.util.Dom.get("weekday" + id2).value = option_array[4];
check_common_options();
// verify fields
if (id2 == "") {
VALID["minute"].verify();
VALID["hour"].verify();
VALID["day"].verify();
VALID["month"].verify();
VALID["weekday"].verify();
} else {
EDIT_VALID["minute"].verify();
EDIT_VALID["hour"].verify();
EDIT_VALID["day"].verify();
EDIT_VALID["month"].verify();
EDIT_VALID["weekday"].verify();
}
}
};
var select_single_option = function(field, id) {
(!id) ? id = "" : id = "_" + id;
var option = YAHOO.util.Dom.get(field + "_options" + id).value;
if (option != "--") {
YAHOO.util.Dom.get(field + id).value = option;
}
VALID[field].verify();
check_common_options();
};
/*
// cron validator
var validate_cron_field = function(id) {
var value = YAHOO.util.Dom.get(id).value;
if (value == "*") return true;
if (CPANEL.validate.positive_integer(value) == true) return true;
var pattern = new RegExp("^[0-9\*][0-9-,\/\*]+[0-9]$");
return pattern.test(value);
};
*/
var validate_minute_field = function(id) {
return validate_cron_field(YAHOO.util.Dom.get(id).value, 0, 59);
};
var validate_hour_field = function(id) {
return validate_cron_field(YAHOO.util.Dom.get(id).value, 0, 23);
};
var validate_day_field = function(id) {
return validate_cron_field(YAHOO.util.Dom.get(id).value, 1, 31);
};
var validate_month_field = function(id) {
var value = YAHOO.util.Dom.get(id).value;
value = value.toLowerCase();
value = value.replace("jan", 1);
value = value.replace("feb", 2);
value = value.replace("mar", 3);
value = value.replace("apr", 4);
value = value.replace("may", 5);
value = value.replace("jun", 6);
value = value.replace("jul", 7);
value = value.replace("aug", 8);
value = value.replace("sep", 9);
value = value.replace("oct", 10);
value = value.replace("nov", 11);
value = value.replace("dec", 12);
return validate_cron_field(value, 1, 12);
};
var validate_weekday_field = function(id) {
var value = YAHOO.util.Dom.get(id).value;
value = value.toLowerCase();
value = value.replace("sun", 0);
value = value.replace("mon", 1);
value = value.replace("tue", 2);
value = value.replace("wed", 3);
value = value.replace("thu", 4);
value = value.replace("fri", 5);
value = value.replace("sat", 6);
return validate_cron_field(value, 0, 7);
};
var validate_cron_field = function(value, start, finish) {
var chunks = value.split(",");
for (var i = 0; i < chunks.length; i++) {
if (chunks.hasOwnProperty(i)) {
// ranges: 3-7
if (chunks[i].search("-") != -1) {
var ranges = chunks[i].split("-");
if (ranges.length != 2) {
return false;
}
if (validate_cron_unit(ranges[0], start, finish) == false) {
return false;
}
if (validate_cron_unit(ranges[1], start, finish) == false) {
return false;
}
ranges[0] = parseInt(ranges[0]);
ranges[1] = parseInt(ranges[1]);
if (ranges[0] >= ranges[1]) {
return false;
} // the first part of a range must be less than the last part of a range, ie: 5-3 should fail
} else if (chunks[i].search("/") != -1) { // moduluar expressions: */2
var modulus = chunks[i].split("/");
if (modulus.length != 2) {
return false;
}
if (validate_cron_unit(modulus[0], start, finish, true) == false) {
return false;
}
if (validate_cron_unit(modulus[1], start, finish) == false) {
return false;
}
} else { // single expressions: 7 *
if (validate_cron_unit(chunks[i], start, finish, true) == false) {
return false;
}
}
}
}
return true;
};
var validate_cron_unit = function(value, start, finish, asterisk) {
if (asterisk) {
if (value == "*") {
return true;
}
}
if (CPANEL.validate.positive_integer(value) == true) {
if (value >= start && value <= finish) {
return true;
}
}
return false;
};
// update the UI if they have selected a common option
var check_common_options = function(id) {
(!id) ? id = "" : id = "_" + id;
var minute = YAHOO.util.Dom.get("minute" + id).value;
select_if_equal(minute, "minute_options" + id);
var hour = YAHOO.util.Dom.get("hour" + id).value;
select_if_equal(hour, "hour_options" + id);
var day = YAHOO.util.Dom.get("day" + id).value;
select_if_equal(day, "day_options" + id);
var month = YAHOO.util.Dom.get("month" + id).value;
select_if_equal(month, "month_options" + id);
var weekday = YAHOO.util.Dom.get("weekday" + id).value;
select_if_equal(weekday, "weekday_options" + id);
var cron = minute + " " + hour + " " + day + " " + month + " " + weekday;
select_if_equal(cron, "common_options" + id);
};
// select an option dropdown from a <select> group if it matches a value
var select_if_equal = function(value, select_id) {
var options = document.getElementById(select_id).options;
var option_found = false;
// loop through the options and auto-select the one that matches our value
for (var i = 0; i < options.length; i++) {
if (options[i].value == value) {
options[i].selected = true;
option_found = true;
}
}
// if none were found select the first element
if (option_found == false) {
options[0].selected = true;
}
};
var add_new_cron_job = function() {
if (window.demo_mode) {
return;
}
// build the call
var api2_call = {
cpanel_jsonapi_version: 2,
cpanel_jsonapi_module: "Cron",
cpanel_jsonapi_func: "add_line",
minute: YAHOO.util.Dom.get("minute").value,
hour: YAHOO.util.Dom.get("hour").value,
day: YAHOO.util.Dom.get("day").value,
month: YAHOO.util.Dom.get("month").value,
weekday: YAHOO.util.Dom.get("weekday").value,
command: YAHOO.util.Dom.get("command").value
};
var reset = function() {
YAHOO.util.Dom.get("add_new_cron").disabled = false;
YAHOO.util.Dom.get("add_new_cron_status").innerHTML = "";
};
// callback
var callback = {
success: function(o) {
try {
var data = YAHOO.lang.JSON.parse(o.responseText);
if (data.cpanelresult.data && data.cpanelresult.data[0] && (data.cpanelresult.data[0].status == "1")) {
CPANEL.widgets.status_bar("add_cron_status_bar", "success", LANG.added_cron_job);
reset_all_input();
load_cron_table();
} else {
CPANEL.widgets.status_bar("add_cron_status_bar", "error", LOCALE.maketext("Error"), data.cpanelresult.error || data.cpanelresult.data[0].statusmsg);
}
} catch (e) {
CPANEL.widgets.status_bar("add_cron_status_bar", "error", LOCALE.maketext("Error"), LOCALE.maketext("JSON parse failed.") + ": " + e);
}
reset();
},
failure: function(o) {
reset();
CPANEL.widgets.status_bar("add_cron_status_bar", "error", LOCALE.maketext("AJAX Error"), LOCALE.maketext("Please refresh the page and try again."));
}
};
// send the request
YAHOO.util.Connect.asyncRequest("GET", CPANEL.urls.json_api(api2_call), callback, "");
YAHOO.util.Dom.get("add_new_cron").disabled = true;
YAHOO.util.Dom.get("add_new_cron_status").innerHTML = CPANEL.icons.ajax + " " + LANG.adding_cron_job;
};
var toggle_module = function(id) {
// close OPEN_MODULE if it's open
if (OPEN_MODULE !== id && YAHOO.util.Dom.getStyle(OPEN_MODULE, "display") == "block") {
var currently_open_div = OPEN_MODULE;
before_hide_module(currently_open_div);
CPANEL.animate.slide_up(currently_open_div, function() {
after_hide_module(currently_open_div);
});
}
// if id is currently displayed, hide it
if (YAHOO.util.Dom.getStyle(id, "display") != "none") {
before_hide_module(id);
CPANEL.animate.slide_up(id, function() {
after_hide_module(id);
});
} else { // else show id and set it as the OPEN_MODULE
before_show_module(id);
CPANEL.animate.slide_down(id, function() {
after_show_module(id);
});
OPEN_MODULE = id;
}
};
var before_show_module = function(id) {
var temp = id.split("_");
var action = temp[0];
var index = temp[2];
if (action === "edit") {
// fill in the values
YAHOO.util.Dom.get("minute_" + index).value = YAHOO.util.Dom.get("minute_info_" + index).innerText;
YAHOO.util.Dom.get("hour_" + index).value = YAHOO.util.Dom.get("hour_info_" + index).innerText;
YAHOO.util.Dom.get("day_" + index).value = YAHOO.util.Dom.get("day_info_" + index).innerText;
YAHOO.util.Dom.get("month_" + index).value = YAHOO.util.Dom.get("month_info_" + index).innerText;
YAHOO.util.Dom.get("weekday_" + index).value = YAHOO.util.Dom.get("weekday_info_" + index).innerText;
YAHOO.util.Dom.get("command_" + index).value = YAHOO.util.Dom.get("command_info_" + index).value;
// create validation
EDIT_VALID["minute"] = new CPANEL.validate.validator(LANG.Minute);
EDIT_VALID["minute"].add("minute_" + index, function() {
return validate_minute_field("minute_" + index);
}, LANG.cron_field_not_valid);
EDIT_VALID["minute"].attach();
EDIT_VALID["hour"] = new CPANEL.validate.validator(LANG.Hour);
EDIT_VALID["hour"].add("hour_" + index, function() {
return validate_hour_field("hour_" + index);
}, LANG.cron_field_not_valid);
EDIT_VALID["hour"].attach();
EDIT_VALID["day"] = new CPANEL.validate.validator(LANG.Day);
EDIT_VALID["day"].add("day_" + index, function() {
return validate_day_field("day_" + index);
}, LANG.cron_field_not_valid);
EDIT_VALID["day"].attach();
EDIT_VALID["month"] = new CPANEL.validate.validator(LANG.Month);
EDIT_VALID["month"].add("month_" + index, function() {
return validate_month_field("month_" + index);
}, LANG.cron_field_not_valid);
EDIT_VALID["month"].attach();
EDIT_VALID["weekday"] = new CPANEL.validate.validator(LANG.Weekday);
EDIT_VALID["weekday"].add("weekday_" + index, function() {
return validate_weekday_field("weekday_" + index);
}, LANG.cron_field_not_valid);
EDIT_VALID["weekday"].attach();
EDIT_VALID["command"] = new CPANEL.validate.validator(LANG.Command);
EDIT_VALID["command"].add("command_" + index, "min_length(%input%, 1)", LANG.command_not_empty);
EDIT_VALID["command"].attach();
// add event handlers
CPANEL.validate.attach_to_form("edit_line_" + index, EDIT_VALID, function() {
edit_line(index);
});
CPANEL.util.catch_enter(["minute_" + index, "hour_" + index, "day_" + index, "month_" + index, "weekday_" + index, "command_" + index], "edit_line_" + index);
}
};
var before_hide_module = function(id) {
var temp = id.split("_");
var action = temp[0];
var index = temp[2];
if (action == "edit") {
for (var i in EDIT_VALID) {
if (EDIT_VALID.hasOwnProperty(i)) {
if (typeof_validator(EDIT_VALID[i]) == false) {
continue;
}
EDIT_VALID[i].clear_messages();
}
}
YAHOO.util.Event.purgeElement(id, true);
}
};
var after_show_module = function(id) {
};
var after_hide_module = function(id) {
};
var edit_line = function(index) {
if (window.demo_mode) {
return;
}
var minute = YAHOO.util.Dom.get("minute_" + index).value;
var hour = YAHOO.util.Dom.get("hour_" + index).value;
var day = YAHOO.util.Dom.get("day_" + index).value;
var month = YAHOO.util.Dom.get("month_" + index).value;
var weekday = YAHOO.util.Dom.get("weekday_" + index).value;
var command = YAHOO.util.Dom.get("command_" + index).value;
var linekey = YAHOO.util.Dom.get("linekey_" + index).value;
// build the call
var api2_call = {
cpanel_jsonapi_version: 2,
cpanel_jsonapi_module: "Cron",
cpanel_jsonapi_func: "edit_line",
minute: minute,
hour: hour,
day: day,
month: month,
weekday: weekday,
command: command,
linekey: linekey
};
var reset = function() {
YAHOO.util.Dom.setStyle("edit_input_" + index, "display", "block");
YAHOO.util.Dom.get("edit_status_" + index).innerHTML = "";
};
// callback
var callback = {
success: function(o) {
try {
var data = YAHOO.lang.JSON.parse(o.responseText);
if ( 1 === parseInt(data.cpanelresult.data[0].status) ) {
// update the UI to reflect the new values
YAHOO.util.Dom.get("minute_info_" + index).innerText = minute;
YAHOO.util.Dom.get("hour_info_" + index).innerText = hour;
YAHOO.util.Dom.get("day_info_" + index).innerText = day;
YAHOO.util.Dom.get("month_info_" + index).innerText = month;
YAHOO.util.Dom.get("weekday_info_" + index).innerText = weekday;
YAHOO.util.Dom.get("command_htmlsafe_" + index).innerText = command;
YAHOO.util.Dom.get("command_info_" + index).value = command;
YAHOO.util.Dom.get("linekey_" + index).value = data.cpanelresult.data[0].linekey;
CPANEL.widgets.status_bar("status_bar_" + index, "success", LANG.edit_successful);
toggle_module("edit_module_" + index);
} else {
CPANEL.widgets.status_bar("status_bar_" + index, "error", LOCALE.maketext("Error"), data.cpanelresult.data[0].statusmsg);
}
} catch (e) {
CPANEL.widgets.status_bar("status_bar_" + index, "error", LOCALE.maketext("Error"), LOCALE.maketext("JSON parse failed."));
}
reset();
},
failure: function(o) {
reset();
CPANEL.widgets.status_bar("status_bar_" + index, "error", LOCALE.maketext("AJAX Error"), LOCALE.maketext("Please refresh the page and try again."));
}
};
// send the request
YAHOO.util.Connect.asyncRequest("GET", CPANEL.urls.json_api(api2_call), callback, "");
YAHOO.util.Dom.setStyle("edit_input_" + index, "display", "none");
YAHOO.util.Dom.get("edit_status_" + index).innerHTML = CPANEL.icons.ajax + " " + LANG.editing_cron_job;
};
var delete_line = function(index) {
if (window.demo_mode) {
return;
}
// build the call
var api2_call = {
cpanel_jsonapi_version: 2,
cpanel_jsonapi_module: "Cron",
cpanel_jsonapi_func: "remove_line",
linekey: YAHOO.util.Dom.get("linekey_" + index).value
};
var reset = function() {
YAHOO.util.Dom.setStyle("delete_input_" + index, "display", "block");
YAHOO.util.Dom.get("delete_status_" + index).innerHTML = "";
};
var check_no_more_rows = function() {
var rows = YAHOO.util.Dom.getElementsByClassName("dt_info_row", "tr", "cron_jobs_table");
var reload_table = true;
for (var i = 0; i < rows.length; i++) {
if (YAHOO.util.Dom.getStyle(rows[i], "display") != "none") {
reload_table = false;
}
}
if (reload_table == true) {
load_cron_table();
}
};
// callback
var callback = {
success: function(o) {
try {
var data = YAHOO.lang.JSON.parse(o.responseText);
if (data.cpanelresult.data[0].status == "1") {
CPANEL.animate.fade_out("info_row_" + index);
CPANEL.animate.fade_out("delete_module_" + index, check_no_more_rows);
} else {
reset();
CPANEL.widgets.status_bar("status_bar_" + index, "error", LOCALE.maketext("Error"), data.cpanelresult.data[0].statusmsg);
}
} catch (e) {
reset();
CPANEL.widgets.status_bar("status_bar_" + index, "error", LOCALE.maketext("Error"), LOCALE.maketext("JSON parse failed."));
}
},
failure: function(o) {
reset();
CPANEL.widgets.status_bar("status_bar_" + index, "error", LOCALE.maketext("AJAX Error"), LOCALE.maketext("Please refresh the page and try again."));
}
};
// send the request
YAHOO.util.Connect.asyncRequest("GET", CPANEL.urls.json_api(api2_call), callback, "");
YAHOO.util.Dom.setStyle("delete_input_" + index, "display", "none");
YAHOO.util.Dom.get("delete_status_" + index).innerHTML = CPANEL.icons.ajax + " " + LANG.deleting_cron_job;
};
var validate_cron_email = function() {
var email = YAHOO.util.Dom.get("email").value;
if (email == "") {
return true;
}
// crontab doesn't like some special chars, even if the RFC 822 authorize them
var crontab_special_regexp = new RegExp("^[@!:\\%\\-\\.,_+]");
if (crontab_special_regexp.test(email)) {
return false;
}
if (email == SYSTEM_ACCOUNT) {
return true;
}
return CPANEL.validate.email(email);
};
var setup_email = function() {
EMAIL_VALID = new CPANEL.validate.validator(LANG.email_address);
EMAIL_VALID.add("email", validate_cron_email, LANG.cron_valid_email);
EMAIL_VALID.attach();
CPANEL.validate.attach_to_form("update_email", EMAIL_VALID, change_email);
CPANEL.util.catch_enter("email", "update_email");
};
var change_email = function() {
if (window.demo_mode) {
return;
}
var email = YAHOO.util.Dom.get("email").value;
// add a confirm for empty emails
if (email == "") {
var answer = confirm(LANG.confirm_empty_email);
if (answer == false) {
EMAIL_VALID.clear_messages();
return;
}
}
// build the call
var api2_call = {
"cpanel_jsonapi_version": 2,
"cpanel_jsonapi_module": "Cron",
"cpanel_jsonapi_func": "set_email",
"email": email
};
// callback
var callback = {
success: function(o) {
EMAIL_VALID.clear_messages();
try {
var data = YAHOO.lang.JSON.parse(o.responseText);
if (data.cpanelresult.data[0].status == "1") {
YAHOO.util.Dom.get("update_email").disabled = false;
YAHOO.util.Dom.get("email_status").innerHTML = "";
CPANEL.widgets.status_bar("email_status_bar", "success", LANG.email_updated);
YAHOO.util.Dom.get("current_email").innerHTML = email;
YAHOO.util.Dom.get("email").value = "";
} else {
YAHOO.util.Dom.get("update_email").disabled = false;
YAHOO.util.Dom.get("email_status").innerHTML = "";
CPANEL.widgets.status_bar("email_status_bar", "error", LOCALE.maketext("Error"), data.cpanelresult.data[0].statusmsg);
}
} catch (e) {
YAHOO.util.Dom.get("update_email").disabled = false;
YAHOO.util.Dom.get("email_status").innerHTML = "";
CPANEL.widgets.status_bar("email_status_bar", "error", LOCALE.maketext("Error"), LOCALE.maketext("JSON parse failed."));
}
check_empty_email();
},
failure: function(o) {
EMAIL_VALID.clear_messages();
YAHOO.util.Dom.get("update_email").disabled = false;
YAHOO.util.Dom.get("email_status").innerHTML = "";
CPANEL.widgets.status_bar("email_status_bar", "error", LOCALE.maketext("AJAX Error"), LOCALE.maketext("Please refresh the page and try again."));
check_empty_email();
}
};
// send the request
YAHOO.util.Connect.asyncRequest("GET", CPANEL.urls.json_api(api2_call), callback, "");
YAHOO.util.Dom.get("update_email").disabled = true;
YAHOO.util.Dom.get("email_status").innerHTML = CPANEL.icons.ajax + " " + LANG.changing_email;
};
var init_email_div = function() {
var current_email = YAHOO.util.Dom.get("current_email").innerHTML;
current_email = YAHOO.lang.trim(current_email);
if (current_email != "") {
YAHOO.util.Dom.setStyle("edit_cron_email", "display", "block");
YAHOO.util.Dom.get("email_toggle_more_less").innerHTML = LOCALE.maketext("less »");
}
};
var check_empty_email = function() {
var email_span = YAHOO.util.Dom.get("current_email");
if (email_span.innerHTML == "") {
email_span.innerHTML = "(" + LANG.none + ")";
}
};
var init = function() {
VALID["minute"] = new CPANEL.validate.validator(LANG.Minute);
VALID["minute"].add("minute", function() {
return validate_minute_field("minute");
}, LANG.cron_field_not_valid);
VALID["minute"].attach();
VALID["hour"] = new CPANEL.validate.validator(LANG.Hour);
VALID["hour"].add("hour", function() {
return validate_hour_field("hour");
}, LANG.cron_field_not_valid);
VALID["hour"].attach();
VALID["day"] = new CPANEL.validate.validator(LANG.Day);
VALID["day"].add("day", function() {
return validate_day_field("day");
}, LANG.cron_field_not_valid);
VALID["day"].attach();
VALID["month"] = new CPANEL.validate.validator(LANG.Month);
VALID["month"].add("month", function() {
return validate_month_field("month");
}, LANG.cron_field_not_valid);
VALID["month"].attach();
VALID["weekday"] = new CPANEL.validate.validator(LANG.Weekday);
VALID["weekday"].add("weekday", function() {
return validate_weekday_field("weekday");
}, LANG.cron_field_not_valid);
VALID["weekday"].attach();
VALID["command"] = new CPANEL.validate.validator(LANG.Command);
VALID["command"].add("command", "min_length(%input%, 1)", LANG.command_not_empty);
VALID["command"].attach();
// check for Common Settings if someone enters a value
YAHOO.util.Event.on(["minute", "hour", "day", "month", "weekday"], "change", function() {
check_common_options();
});
CPANEL.validate.attach_to_form("add_new_cron", VALID, add_new_cron_job);
CPANEL.util.catch_enter(["minute", "hour", "day", "month", "weekday", "command"], "add_new_cron");
setup_email();
init_email_div();
check_empty_email();
load_cron_table();
};
YAHOO.util.Event.onDOMReady(init);
Back to Directory
File Manager