Index: trunk/core/admin_templates/js/forms.js =================================================================== diff -u -N --- trunk/core/admin_templates/js/forms.js (revision 8901) +++ trunk/core/admin_templates/js/forms.js (revision 0) @@ -1,246 +0,0 @@ -var last_shown_error = false; -var errors = new Object(); -var first_error = new Object(); -var fields = new Object(); -function show_form_error(prefix, field, sticky) -{ - if (isset(errors[prefix]) && isset(errors[prefix][field])) { - span = document.getElementById('error_msg_'+prefix); - span.innerHTML = fields[prefix][field] + ' - ' + errors[prefix][field]; - if (sticky) last_shown_error = field; - } -} -function hide_form_error(prefix) -{ - span = document.getElementById('error_msg_'+prefix); - if (!span) return; - span.innerHTML = '
'; - if (typeof(last_shown_error) != 'undefined' && last_shown_error) { - show_form_error(prefix, last_shown_error); - } -} -function add_form_error(prefix, field, element, error_msg) { - if (error_msg != '') { - if (typeof(errors[prefix]) == 'undefined') { - errors[prefix] = new Object(); - } - errors[prefix][field] = error_msg; - addEvent(document.getElementById(element), 'focus', function() { - show_form_error(prefix, field, true) - } ); - addEvent(document.getElementById(element), 'blur', function() {last_shown_error = false} ) - if (typeof(first_error[prefix]) == 'undefined' || first_error[prefix] == false) { - first_error[prefix] = [field, element]; - } - } -} - -function Form() {} - -Form = new Form(); - -Form.Controls = new Array(); -Form.Div = false; -Form.MinControlsHeight = 0; -Form.Options = new Object(); -Form.FlexibleCount = 0; - -Form.ScrollerW = 17; -Form.ScrollerH = 17; -Form.Wrap = true; - -Form.Init = function(id) -{ - this.Div = document.getElementById(id); - - for (var i in this.Controls) { - dim = getDimensions(document.getElementById(this.Controls[i])); - options = this.Options[this.Controls[i]]; - if (options.height) { // fixed height - options.min_height = options.height; - options.max_height = options.height; - } - if (!options.min_height) options.min_height = dim.innerHeight; - this.MinControlsHeight += options.min_height; - if (dim.innerHeight < options.min_height) { - document.getElementById(this.Controls[i]).style.height = options.min_height+'px'; - } -// alert('adding element '+this.Controls[i]+' height: '+options.min_height+' total: '+this.MinControlsHeight) - } - - /*alert('one more time'); - document.body.style.height = '100%'; - document.body.style.overflow = 'hidden'; - document.body.scroll = 'no' - alert('done');*/ - - var a_div = document.createElement('DIV'); - a_div.style.position = 'relative'; - a_div.style.overflow = 'auto'; - a_div.style.width = '100%'; -// a_div.style.height = '100%'; -// a_div.style.backgroundColor = 'yellow'; - - a_div.appendChild(el.parentNode.replaceChild(a_div, el)) - - this.Table = this.Div.getElementsByTagName('table')[0]; - this.Table.style.height = 'auto'; - this.Table.style.width = 'auto'; - this.MinHeight = this.Table.offsetHeight; - this.MinWidth = this.Table.offsetWidth; - -// alert('Measuring min width now') - - addEvent(window, 'resize', function() {Form.Resize()}) - - this.Resize() - - if (isset(first_error)) { - for (var i in first_error) { - if (first_error[i] != false) { - document.getElementById(first_error[i][1]).focus(); - show_form_error(i, first_error[i][0], true); -// alert('focused on '+first_error[i][1]) - } - } - } -} - -Form.addControl = function(id, options) { - this.Controls.push(id); - if (!options) { - options = {coeff: 1, max_height: 0, min_height: 0}; - } - else { - if (typeof(options['coeff']) == 'undefined') options['coeff'] = 1; - if (typeof(options['max_height']) == 'undefined') options['max_height'] = 0; - if (typeof(options['min_height']) == 'undefined') options['min_height'] = 0; - } - options['real_height'] = 0; - this.Options[id] = options; // for future use -// print_pre(this.Options[id]); -} - -Form.Resize = function() -{ - var h = (document.all ? window.document.body.offsetHeight : window.innerHeight); - var pos = findPos(el); - var dim = getDimensions(this.Div); - h -= pos[1] + dim.padding[0] + dim.padding[2] + dim.borders[0] + dim.borders[2]; -// alert('h after correction is '+h); - - var w = (document.all ? window.document.body.offsetWidth : window.innerWidth); - w -= pos[0] + dim.padding[1] + dim.padding[3] + dim.borders[1] + dim.borders[3]; - - scroller_height = this.MinWidth > w ? this.ScrollerH : 0; - scroller_width = this.MinHeight > h - scroller_height ? this.ScrollerW : 0; - scroller_height = this.MinWidth > w - scroller_width ? this.ScrollerH : 0; - - var st = document.getElementById('width_status'); - if (st) st.innerHTML = 'minWdith: '+this.MinWidth+' minHeight: '+this.MinHeight+' w: '+w+' h: '+h+' scroll_w: '+scroller_width+' scroll_h: '+scroller_height; - -// alert('scroller W x H = '+scroller_width+' x '+scroller_height); - -// alert('resize: '+w+'x'+h) - -// h -= 100; - - this.Table.style.width = (w-scroller_width) + 'px'; - - this.Div.style.width = (w-scroller_width)+'px'; - this.Div.style.height = (h)+'px'; - - var count = this.Controls.length; - - // -count here is adjustment - 1px for each control - var split = h - count*2 - this.MinHeight + this.MinControlsHeight; - if (split < this.MinControlsHeight) split = this.MinControlsHeight; - - this.ResetHeights(); - var used = this.SetMinHeights(); - split -= used; - - var cur_diff = 0; - var iterations = 0; - do { - var prev_diff = cur_diff; - var cur_diff = this.SplitExtra(split); - split = cur_diff; - iterations++; - } while (cur_diff != 0 && cur_diff != prev_diff && iterations < 10); - - for (var i in this.Controls) { - document.getElementById(this.Controls[i]).style.height = this.Options[this.Controls[i]]['real_height'] + 'px'; -// document.getElementById(this.Controls[i]).value = this.Options[this.Controls[i]]['real_height']; - } - -// alert('h is: '+h+' min height is '+this.MinHeight+' MinControlsHeight is '+this.MinControlsHeight+' -> '+split+' to split between '+count+' new height is '+new_height); -// print_pre(this.Controls) - -} - -Form.ResetHeights = function() -{ - for (var i in this.Controls) { - var options = this.Options[this.Controls[i]] - options['real_height'] = 0; - options.fixed = false; - } - this.FlexibleCount = this.Controls.length; -} - - -// Enlarge heights when possible -// Return any not split pixels number -Form.SplitExtra = function(split) -{ - var number = 0; - - for (var i in this.Controls) { - var options = this.Options[this.Controls[i]] - if (options['max_height'] ==0 || options['real_height'] < options.max_height) { - number++; - } - } - - if (number == 0) return 0; - - var delta = Math.floor(split / number); -// alert('splitting '+split+' between '+number+' delta is '+delta) - var added = 0; - for (var i in this.Controls) { - var options = this.Options[this.Controls[i]]; - var to_add; - if (options['max_height'] != 0 && options['real_height']+delta > options['max_height']) { - to_add = options['max_height']-options['real_height']; - } - else { - to_add = delta; - } -// alert('delta: '+delta+' current real: '+options['real_height']+' min: '+options['min_height']+' max:'+options['max_height']+' to_add: '+to_add) - options['real_height'] = options['real_height']+to_add; - added += to_add; - } -// alert('added total '+added) - - // removing extra added from the last (any) control - if (added > split) { - extra = added-split; - options['real_height'] -= extra; - added -= extra; - } - return split - added; -} - -Form.SetMinHeights = function() -{ - var used = 0; - for (var i in this.Controls) { - var options = this.Options[this.Controls[i]] - if (options['real_height'] < options['min_height']) { - options['real_height'] = options.min_height; - used += options.min_height; - } - } - return used; -} \ No newline at end of file