/* ISSelectReplacement */ if(typeof(ISSelectReplacement) == 'undefined') { var ISSelectReplacement = { init: function() { if(window.addEventListener) window.addEventListener('load', ISSelectReplacement.on_load, false); else window.attachEvent('onload', ISSelectReplacement.on_load); }, on_load: function() { var selects = document.getElementsByTagName('SELECT'); if(!selects) return false; for(var i = 0; i < selects.length; i++) { var select = selects[i]; if(!select.multiple || select.className.indexOf('ISSelectReplacement') == -1 || select.className.indexOf('ISSelectAlreadyReplaced') != -1) continue; // Only multiple selects are supported ISSelectReplacement.replace_select(selects[i]); } }, replace_select: function(element) { var name = element.name; element.style.visibility = 'hidden'; // Start whipping up our replacement var replacement = document.createElement('DIV'); replacement.className = "ISSelect "+element.className; replacement.className += " ISSelectAlreadyReplaced"; var hideSelectReplacement = false; // If the offsetHeight is 0, this select is hidden if(element.offsetHeight == 0) { var clone = element.cloneNode(true); clone.style.position = 'absolute'; clone.style.left = '-10000px'; clone.style.top = '-10000px'; clone.style.display = 'block'; document.body.appendChild(clone); offset_height = clone.offsetHeight+"px"; offset_width = clone.offsetWidth+"px"; clone.parentNode.removeChild(clone); if(element.style.display && element.style.display == 'none') { var hideSelectReplacement = true; } } else { offset_height = element.offsetHeight+"px"; offset_width = element.offsetWidth+"px"; } var style_offset_width = ISSelectReplacement.get_prop(element, 'width'); if(style_offset_width && style_offset_width != "auto") offset_width = style_offset_width; var style_offset_height = ISSelectReplacement.get_prop(element, 'height'); if(style_offset_height && style_offset_height != "auto") offset_height = style_offset_height; replacement.style.height = offset_height; if(parseInt(offset_width) < 200) { offset_width = '200px'; } replacement.style.width = offset_width; if(element.id) { replacement.id = element.id; element.id += "_old"; } if(hideSelectReplacement) { replacement.style.display = 'none'; } replacement.select = element; replacement.options = element.options; replacement.selectedIndex = element.selectedIndex; this.select = element; this.replacement = replacement; if(element.onchange) { replacement.onclick = function() { $(this.select).trigger('change'); } } if(element.ondblclick) { replacement.ondblclick = function() { $(this.select).trigger('dblclick'); } } var innerhtml = ''; replacement.innerHTML = innerhtml; element.parentNode.insertBefore(replacement, element); element.style.display = 'none'; }, get_prop: function(element, prop) { if(element.currentStyle) { return element.currentStyle[prop]; } else if(document.defaultView && document.defaultView.getComputedStyle) { prop = prop.replace(/([A-Z])/g,"-$1"); prop = prop.toLowerCase(); return document.defaultView.getComputedStyle(element, "").getPropertyValue(prop); } }, add_group: function(select, group, group_id) { var extraClass = ''; if(group.className) { extraClass = group.className; } group_html = '
  • ' + '
    '+group.label+'
    '; if(group.childNodes) { group_html += ''; } group_html += '
  • '; return group_html; }, add_option: function(select, option, id) { var value, element_class, checked = ''; if(option.selected) { element_class = "SelectedRow"; checked = 'checked="checked"' } else { element_class = ''; } if(option.className) { element_class += ' '+option.className; } var label = option.innerHTML; var whitespace = label.match(/^\s*( )*/); if(whitespace[0]) { label = label.replace(/^\s*( )*/, ''); } var disabled = ''; if(this.select.disabled) { var disabled = ' disabled="disabled"'; } var extraKey = ''; var extra = ''; if(option.className && option.className.indexOf('forceKey') != -1) { var start = option.className.indexOf('forceKey'); var end = option.className.indexOf(' ', start+1); if(end == -1) { var end = option.className.length; } var extraKey = option.className.substring(start+8, end); var extra = '[]'; } html = '
  • ' + whitespace[0]; if($(option).hasClass('freeform')) { html += ''; } else { html += '' + label; } html += '
  • '; return html; }, on_hover: function(element, id, action) { var id = id.split(','); // Selected an option group child if(id.length == 2) { var replacement = element.parentNode.parentNode.parentNode.parentNode; var option = replacement.select.childNodes[id[0]].childNodes[id[1]]; } else { var replacement = element.parentNode.parentNode; var option = replacement.select.childNodes[id[0]]; } if(action == 'out') { $(element).removeClass('ISSelectOptionHover'); $(option).trigger('mouseout'); } else { if(!$(element).hasClass('SelectedRow')) { $(element).addClass('ISSelectOptionHover'); } $(option).trigger('mouseover'); } }, scrollToItem: function(select_name, value, group) { var item = 'ISSelect'+select_name.replace('[]', '')+'_'+value; if(!document.getElementById(item)) return; var obj = document.getElementById(item); var top = obj.offsetTop-4; if(typeof(group) != 'undefined') { top -= 20; } while(obj && obj.tagName != 'DIV') { obj = obj.parentNode; if(obj && obj.tagName == 'DIV') { obj.scrollTop = top; break; } } }, on_click: function(element, id) { if(element.dblclicktimeout) { return false; } if(element.tagName == "INPUT") { var checkbox = element; if(checkbox.disabled) { return false; } var element = element.parentNode; } else { var checkbox = element.getElementsByTagName('input')[0]; if(checkbox.disabled) { return false; } checkbox.checked = !checkbox.checked; } element.dblclicktimeout = setTimeout(function() { element.dblclicktimeout = ''; }, 250); var id = id.split(','); // Selected an option group child if(id.length == 2) { var replacement = element.parentNode.parentNode.parentNode.parentNode; var option = replacement.select.childNodes[id[0]].childNodes[id[1]]; } else { var replacement = element.parentNode.parentNode; var option = replacement.select.childNodes[id[0]]; } option.selected = checkbox.checked; replacement.selectedIndex = replacement.select.selectedIndex; $(option).triggerHandler('click'); if(checkbox.checked) { $(element).addClass('SelectedRow'); } else { $(element).removeClass('SelectedRow'); } } }; ISSelectReplacement.init(); }