/* vim: set expandtab sw=4 ts=4 sts=4: */ /** * function used in table data manipulation pages * * @version $Id: tbl_change.js 12489 2009-05-23 12:29:54Z helmo $ */ /** * Modify from controls when the "NULL" checkbox is selected * * @param string the MySQL field type * @param string the urlencoded field name - OBSOLETE * @param string the md5 hashed field name * @param string the multi_edit row sequence number * * @return boolean always true */ function nullify(theType, urlField, md5Field, multi_edit) { var rowForm = document.forms['insertForm']; if (typeof(rowForm.elements['funcs' + multi_edit + '[' + md5Field + ']']) != 'undefined') { rowForm.elements['funcs' + multi_edit + '[' + md5Field + ']'].selectedIndex = -1; } // "SET" field , "ENUM" field with more than 20 characters // or foreign key field (drop-down) 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 } // foreign key field (with browsing icon for foreign values) else if (theType == 6) { rowForm.elements['field_' + md5Field + multi_edit + '[]'].value = ''; } // Other field types else /*if (theType == 5)*/ { rowForm.elements['fields' + multi_edit + '[' + md5Field + ']'].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 * @param string the multi_edit row sequence number * * @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 id of field name * @param string edit type - date/timestamp * @param string id of the corresponding checkbox for NULL */ function openCalendar(params, form, field, type, fieldNull) { window.open("./calendar.php?" + params, "calendar", "width=400,height=200,status=yes"); dateField = eval("document." + form + "." + field); dateType = type; if (fieldNull != '') { dateFieldNull = eval("document." + form + "." + fieldNull); } } /** * 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; if (typeof(window.opener.dateFieldNull) != 'undefined') { window.opener.dateFieldNull.checked = false; } window.close(); }