/*
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 = '
';
// Loop de loop
for(var i = 0; i < element.childNodes.length; i++)
{
if(!element.childNodes[i].tagName || element.nodeType == 3) continue;
if(element.childNodes[i].tagName == "OPTGROUP")
{
innerhtml += ISSelectReplacement.add_group(element, element.childNodes[i], i);
}
else if(element.childNodes[i].tagName == "OPTION")
{
innerhtml += ISSelectReplacement.add_option(element, element.childNodes[i], i);
}
}
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 = '';
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();
}