Comboboxes = function(id, server_path, default_text) {
this.id = id
this.server_path = server_path
this.default_text = default_text
this.comboboxes = jQuery('#' + this.id + ' .combobox')
this.selected_items = new Array() 
jQuery('#' + id + ' .combotext').each(function(i) {
jQuery(this).val(default_text[i])
})
function splitCode(code) {
var result = ''
for (var ch = 0; ch < code.length; ch++) {
var index = ch + 1
result = result + code.charAt(ch);
if (index < code.length && (index % 2 == 0))
result = result + '/'
}
return result
}
this.selectItem = function(code, scope) {
var children = jQuery(this).children();
for (var j = 0; j < children.length; j++) {
if (jQuery(children[j]).attr('catalog_code') == code) {
jQuery(children[j]).addClass('item_selected');
var level = parseInt(jQuery(this).attr('level'))
scope.selected_items[level] = children[j]
break;
}
}
}
this.select = function(target, parent_code, selected_code) {
if (parent_code == '0') {
jQuery(this.selected_items[0]).removeClass('item_selected')

}
this.loadData(target, parent_code, function() {
this.selectItem.call(this.comboboxes[target], selected_code, this);
})
}
this.clearData = function(target) {
var index = parseInt(target)
var combobox = jQuery(this.comboboxes[index])
combobox.children('.combocontainer').children('.combotext').css('background-image', 'none').val(this.default_text[index]);
combobox.children('.dropdown').empty();
var cascade = combobox.attr('cascade')
cascade && this.clearData(cascade);
}
this.itemClicked = function(scope) {
var combobox = jQuery(this).parents('.combobox')
var level = parseInt(combobox.attr('level'))
scope.selected_items[level] && jQuery(scope.selected_items[level]).removeClass('item_selected')
jQuery(this).addClass('item_selected')
scope.selected_items[level] = jQuery(this)
combobox.children('.combocontainer').children('.combotext').val('').css('background-image', 'url(' + jQuery(this).children('img').attr('src') + ')')
combobox.children('.dropdown').hide();
combobox.nextAll('#shim').hide()
var selectedCode = jQuery(this).attr('catalog_code');
jQuery('#' + scope.id + ' #hidden_field').val(selectedCode)
var cascade = combobox.attr('cascade')
cascade && (jQuery(this).hasClass('all') ? scope.clearData(cascade) : scope.loadData(parseInt(cascade), selectedCode));
}
this.loadData = function(level, parent_code, callback) {
var combobox = jQuery(this.comboboxes[level])
var itemClicked = this.itemClicked
var this_ = this
jQuery.get(this.server_path, {
code: parent_code
}, function(data) {
var dropdown = combobox.children('.dropdown')
var children = eval('(' + data + ')')
dropdown.empty()
combobox.children('.combocontainer').children('.combotext').css('background-image', 'none').val(this_.default_text[level]);
var temp = (parent_code=='0')?'':parent_code
dropdown.append('<div class="item all" catalog_code="' + temp + '"><img src="' + this_.imagePath + '/all.png"/></div>')
for (var j = 0; j < children.length; j++) {
var imagePath = this_.imagePath + '/' + splitCode(children[j])
var item = '<div class="item" catalog_code="' + children[j] + '"><img src="' + imagePath + '.png"/></div>'
dropdown.append(item)
}
if (callback) {
callback.call(this_);
}
else {
var cascade = combobox.attr('cascade')
cascade && this_.clearData(cascade);
}
dropdown.children('.item').mouseover(function() {
jQuery(this).parent().children('.item_selected').removeClass('item_selected')
jQuery(this).addClass('item_selected')
}).mousedown(function(){
itemClicked.call(this, this_)
})
})
}
this.select_full_path = function(value) {
if (value == '')
return;
var code_path = value.split('-');
this.select(0, '', value.substr(0, 2))
this.select(1, value.substr(0, 2), value.substr(0, 4))
this.select(2, value.substr(0, 4), value.substr(0, 6))
if (value.length == 8)
this.select(3, value.substr(0, 6), value.substr(0, 8))
}
var comboclicked = function() {
var combobox = jQuery(this).parents(".combobox");
var combocontainer = combobox.children('.combocontainer')
var combotext = combocontainer.children('.combotext')
var trigger = combocontainer.next('.trigger')
var dropdown = combobox.children('.dropdown')
var shim = combobox.nextAll('#shim')
var targetTop = combotext.offset().top - combotext.offsetParent().offset().top + combotext.outerHeight()
var targetLeft = combotext.offset().left - combotext.offsetParent().offset().left
combotext.focus();
dropdown.css('top', targetTop).css('left', targetLeft)
shim.css('top', targetTop).css('left', targetLeft).toggle()
dropdown.width(combotext.outerWidth() + trigger.outerWidth())
shim.width(combotext.outerWidth() + trigger.outerWidth() + 2)
dropdown.toggle();
}
jQuery('.combotext').click(comboclicked).blur(function(e) {
var dropdown = jQuery(this).parent().nextAll('.dropdown')
var shim = dropdown.parent().nextAll('#shim')
var relativeX = jQuery(window).scrollLeft() + e.clientX - parseInt(dropdown.css('left'))
var relativeY = jQuery(window).scrollTop() + e.clientY - parseInt(dropdown.css('top'))
if (0 >= relativeX || relativeX >= dropdown.width() || 0 >= relativeY || relativeY >= dropdown.height()) {
shim.hide();
dropdown.hide();
}
})
jQuery('.trigger').click(comboclicked)
jQuery('#' + id + ' #hidden_field').after('<iframe id="shim" src="" frameborder="no"/>')
}

