/********************************************************************************************
* BlueShoes Framework; This file is part of the php application framework.
* NOTE: This code is stripped (obfuscated). To get the clean documented code goto 
*       www.blueshoes.org and register for the free open source *DEVELOPER* version or 
*       buy the commercial version.
*       
*       In case you've already got the developer version, then this is one of the few 
*       packages/classes that is only available to *PAYING* customers.
*       To get it go to www.blueshoes.org and buy a commercial version.
* 
* @copyright www.blueshoes.org
* @author    sam blum <sam-at-blueshoes-dot-org>
* @author    Andrej Arn <andrej-at-blueshoes-dot-org>
*/
if (!Bs_Objects) {var Bs_Objects = [];};function Bs_Mls_updateMe(e) {
if (!e) e = window.event;e.srcElement.Bs_Mls_Obj.updateMe(e.srcElement.Bs_Mls_Level);}
function Bs_MultiLevelSelector() {
this._objectId;this._id;this._levels = 0;this._data = new Array();this._fieldElements = new Array();this.jsrsUrl;this._jsrsIssuedCalls = new Array();this.setData = function(data) {
this._data = data;}
this._countLevels = function(data, i) {
if (typeof(i) == 'undefined') i = 0;i++;var oldI = i;for (key in data) {
if ((typeof(data[key]['children']) != 'undefined') && (typeof(data[key]['children']) == 'object')) {
var newI = this._countLevels(data[key]['children'], oldI);if (newI > i) i = newI;}
}
return i;}
this.initLevelByExistingField = function(level, fieldElementId, loadOptionsJsrsFunction) {
var elm = document.getElementById(fieldElementId);var s = new Bs_FormFieldSelect();s.init(elm);this._fieldElements[level] = new Array();this._fieldElements[level]['elm'] = elm;if (typeof(loadOptionsJsrsFunction) != 'undefined') this._fieldElements[level]['loadOptionsJsrsFunction'] = loadOptionsJsrsFunction;if (level > this._levels) this._levels = level;}
this.render = function() {
for (var i=1; i<this._fieldElements.length; i++) {
elm = this._fieldElements[i]['elm'];elm.Bs_Mls_Obj   = this;elm.Bs_Mls_Level = i;elm.attachEvent('onchange', Bs_Mls_updateMe);}
var elm = this._fieldElements[1]['elm'];elm.Bs_Mls_data = this._data;elm.prune();for (key in this._data) {
var selected = ((typeof(this._data[key]['selected']) != 'undefined') && (this._data[key]['selected']));var caption  = (typeof(this._data[key]['caption']) != 'undefined') ? this._data[key]['caption'] : key;var newOption = new Option(caption, key, false, selected);elm.options[elm.length] = newOption;}
this.updateMe(1);}
this.updateMe = function(level) {
var elmSelf = this._fieldElements[level]['elm'];var value   = elmSelf.getValue();if (typeof(elmSelf.Bs_Mls_data) != 'undefined') {
for (key in elmSelf.Bs_Mls_data) {
if (typeof(elmSelf.Bs_Mls_data[key]) == 'string') {
var tmp = elmSelf.Bs_Mls_data[key];elmSelf.Bs_Mls_data[key] = new Array();elmSelf.Bs_Mls_data[key]['caption'] = tmp;}
elmSelf.Bs_Mls_data[key]['selected'] = false;}
if (value != 'undefined') {
elmSelf.Bs_Mls_data[value]['selected'] = true;}
}
if (level >= this._levels) return;var elmChild   = this._fieldElements[level +1]['elm'];elmChild.prune();if (value != 'undefined') {
if (typeof(elmSelf.Bs_Mls_data[value].children) == 'undefined') {
this._loadOptionsFromServer(level +1, value, elmSelf);} else {
var data = elmSelf.Bs_Mls_data[value].children;elmChild.Bs_Mls_data = data;for (key in data) {
if (typeof(data[key]) == 'object') {
var selected = ((typeof(data[key]['selected']) != 'undefined') && (data[key]['selected']));var caption  = (typeof(data[key]['caption']) != 'undefined') ? data[key]['caption'] : key;} else if (typeof(data[key]) == 'string') {
var selected = false;var caption  = data[key];} else {
var selected = false;var caption  = key;}
var newOption = new Option(caption, key, false, selected);elmChild.options[elmChild.length] = newOption;}
}
}
if (level < this._levels) this.updateMe(level +1);}
this._loadOptionsFromServer = function(level, key, elm) {
var functionName = this._fieldElements[level]['loadOptionsJsrsFunction'];var callId    = jsrsCall(this.jsrsUrl, 'Bs_Objects['+this._id+']' + "._callbackLoadOptionsFromServer", functionName, key);this._jsrsIssuedCalls[callId] = new Array(level, key, elm);}
this._callbackLoadOptionsFromServer = function(value, callId) {
var level = this._jsrsIssuedCalls[callId][0];var key   = this._jsrsIssuedCalls[callId][1];var elm   = this._jsrsIssuedCalls[callId][2];elm.Bs_Mls_data[key].children = value;this.updateMe(level -1);}
this._constructor = function() {
this._id = Bs_Objects.length;Bs_Objects[this._id] = this;this._objectId = "Bs_Mls_"+this._id;}
this._constructor();}
