diff --git a/htdocs/sql/js/tbl_change.js b/htdocs/sql/js/tbl_change.js new file mode 100755 --- /dev/null +++ b/htdocs/sql/js/tbl_change.js @@ -0,0 +1,345 @@ +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * function used in table data manipulation pages + * + * @version $Id: tbl_change.js 10474 2007-07-08 17:39:06Z lem9 $ + */ + +/** + * Modify from controls when the "NULL" checkbox is selected + * + * @param string the MySQL field type + * @param string the urlencoded field name + * @param string the md5 hashed field name + * + * @return boolean always true + */ +function nullify(theType, urlField, md5Field, multi_edit) +{ + var rowForm = document.forms['insertForm']; + + if (typeof(rowForm.elements['funcs' + multi_edit + '[' + urlField + ']']) != 'undefined') { + rowForm.elements['funcs' + multi_edit + '[' + urlField + ']'].selectedIndex = -1; + } + + // "SET" field , "ENUM" field with more than 20 characters + // or foreign key field + if (theType == 1 || theType == 3 || theType == 4) { + rowForm.elements['field_' + md5Field + multi_edit + '[]'].selectedIndex = -1; + } + // Other "ENUM" field + else if (theType == 2) { + var elts = rowForm.elements['field_' + md5Field + multi_edit + '[]']; + // when there is just one option in ENUM: + if (elts.checked) { + elts.checked = false; + } else { + var elts_cnt = elts.length; + for (var i = 0; i < elts_cnt; i++ ) { + elts[i].checked = false; + } // end for + + } // end if + } + // Other field types + else /*if (theType == 5)*/ { + rowForm.elements['fields' + multi_edit + '[' + urlField + ']'].value = ''; + } // end if... else if... else + + return true; +} // end of the 'nullify()' function + + +/** + * Unchecks the "NULL" control when a function has been selected or a value + * entered + * + * @param string the urlencoded field name + * + * @return boolean always true + */ +function unNullify(urlField, multi_edit) +{ + var rowForm = document.forms['insertForm']; + + if (typeof(rowForm.elements['fields_null[multi_edit][' + multi_edit + '][' + urlField + ']']) != 'undefined') { + rowForm.elements['fields_null[multi_edit][' + multi_edit + '][' + urlField + ']'].checked = false + } // end if + + if (typeof(rowForm.elements['insert_ignore_' + multi_edit]) != 'undefined') { + rowForm.elements['insert_ignore_' + multi_edit].checked = false + } // end if + + return true; +} // end of the 'unNullify()' function + +var day; +var month; +var year; +var hour; +var minute; +var second; +var clock_set = 0; + +/** + * Opens calendar window. + * + * @param string calendar.php parameters + * @param string form name + * @param string field name + * @param string edit type - date/timestamp + */ +function openCalendar(params, form, field, type) { + window.open("./calendar.php?" + params, "calendar", "width=400,height=200,status=yes"); + dateField = eval("document." + form + "." + field); + dateType = type; +} + +/** + * Formats number to two digits. + * + * @param int number to format. + * @param string type of number + */ +function formatNum2(i, valtype) { + f = (i < 10 ? '0' : '') + i; + if (valtype && valtype != '') { + switch(valtype) { + case 'month': + f = (f > 12 ? 12 : f); + break; + + case 'day': + f = (f > 31 ? 31 : f); + break; + + case 'hour': + f = (f > 24 ? 24 : f); + break; + + default: + case 'second': + case 'minute': + f = (f > 59 ? 59 : f); + break; + } + } + + return f; +} + +/** + * Formats number to two digits. + * + * @param int number to format. + * @param int default value + * @param string type of number + */ +function formatNum2d(i, default_v, valtype) { + i = parseInt(i, 10); + if (isNaN(i)) return default_v; + return formatNum2(i, valtype) +} + +/** + * Formats number to four digits. + * + * @param int number to format. + */ +function formatNum4(i) { + i = parseInt(i, 10) + return (i < 1000 ? i < 100 ? i < 10 ? '000' : '00' : '0' : '') + i; +} + +/** + * Initializes calendar window. + */ +function initCalendar() { + if (!year && !month && !day) { + /* Called for first time */ + if (window.opener.dateField.value) { + value = window.opener.dateField.value; + if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') { + if (window.opener.dateType == 'datetime') { + parts = value.split(' '); + value = parts[0]; + + if (parts[1]) { + time = parts[1].split(':'); + hour = parseInt(time[0],10); + minute = parseInt(time[1],10); + second = parseInt(time[2],10); + } + } + date = value.split("-"); + day = parseInt(date[2],10); + month = parseInt(date[1],10) - 1; + year = parseInt(date[0],10); + } else { + year = parseInt(value.substr(0,4),10); + month = parseInt(value.substr(4,2),10) - 1; + day = parseInt(value.substr(6,2),10); + hour = parseInt(value.substr(8,2),10); + minute = parseInt(value.substr(10,2),10); + second = parseInt(value.substr(12,2),10); + } + } + if (isNaN(year) || isNaN(month) || isNaN(day) || day == 0) { + dt = new Date(); + year = dt.getFullYear(); + month = dt.getMonth(); + day = dt.getDate(); + } + if (isNaN(hour) || isNaN(minute) || isNaN(second)) { + dt = new Date(); + hour = dt.getHours(); + minute = dt.getMinutes(); + second = dt.getSeconds(); + } + } else { + /* Moving in calendar */ + if (month > 11) { + month = 0; + year++; + } + if (month < 0) { + month = 11; + year--; + } + } + + if (document.getElementById) { + cnt = document.getElementById("calendar_data"); + } else if (document.all) { + cnt = document.all["calendar_data"]; + } + + cnt.innerHTML = ""; + + str = "" + + //heading table + str += '
'; + str += '
'; + str += '« '; + str += ''; + str += ' »'; + str += '
'; + str += '
'; + str += '
'; + str += '« '; + str += ''; + str += ' »'; + str += '
'; + str += '
'; + + str += ''; + for (i = 0; i < 7; i++) { + str += ""; + } + str += ""; + + var firstDay = new Date(year, month, 1).getDay(); + var lastDay = new Date(year, month + 1, 0).getDate(); + + str += ""; + + dayInWeek = 0; + for (i = 0; i < firstDay; i++) { + str += ""; + dayInWeek++; + } + for (i = 1; i <= lastDay; i++) { + if (dayInWeek == 7) { + str += ""; + dayInWeek = 0; + } + + dispmonth = 1 + month; + + if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') { + actVal = "" + formatNum4(year) + "-" + formatNum2(dispmonth, 'month') + "-" + formatNum2(i, 'day'); + } else { + actVal = "" + formatNum4(year) + formatNum2(dispmonth, 'month') + formatNum2(i, 'day'); + } + if (i == day) { + style = ' class="selected"'; + current_date = actVal; + } else { + style = ''; + } + str += "" + i + "" + dayInWeek++; + } + for (i = dayInWeek; i < 7; i++) { + str += ""; + } + + str += "
" + day_names[i] + "
 
 
"; + + cnt.innerHTML = str; + + // Should we handle time also? + if (window.opener.dateType != 'date' && !clock_set) { + + if (document.getElementById) { + cnt = document.getElementById("clock_data"); + } else if (document.all) { + cnt = document.all["clock_data"]; + } + + str = ''; + init_hour = hour; + init_minute = minute; + init_second = second; + str += '
'; + str += '
'; + str += ':'; + str += ':'; + str += ''; + str += '  '; + str += ''; + str += '
'; + str += '
'; + + cnt.innerHTML = str; + clock_set = 1; + } + +} + +/** + * Returns date from calendar. + * + * @param string date text + */ +function returnDate(d) { + txt = d; + if (window.opener.dateType != 'date') { + // need to get time + h = parseInt(document.getElementById('hour').value,10); + m = parseInt(document.getElementById('minute').value,10); + s = parseInt(document.getElementById('second').value,10); + if (window.opener.dateType == 'datetime') { + txt += ' ' + formatNum2(h, 'hour') + ':' + formatNum2(m, 'minute') + ':' + formatNum2(s, 'second'); + } else { + // timestamp + txt += formatNum2(h, 'hour') + formatNum2(m, 'minute') + formatNum2(s, 'second'); + } + } + + window.opener.dateField.value = txt; + window.close(); +}