﻿


/* XProperty ------------------------------------------------------------------ */
function XProperty(key_xml_node,value,type){
  this.key=!_bsVariable.isObject(key_xml_node)?key_xml_node:"";
  this.value=value?value:"";
  this.type=type?type:5; /* [int] = 1, [float] = 2, [double] = 3, [decimal] = 4, [string] = 5, [boolean] = 6, [dateTime] = 7, [xml] = 8 */      
  this.loadDOMElement=function(el,key,returnText){
    el=_bsElement.getRef(el);
    this.value=_bsElement.getValue(el,returnText);
    if(_bsVariable.isBoolean(this.value)) this.type = 6;
    this.key=!key?el.id:key;
  };
  this.serialize=function(){
     return Sys.Serialization.JavaScriptSerializer.serialize(this);
  };
  this.deserialize=function(jsonStr){
    var o = Sys.Serialization.JavaScriptSerializer.deserialize(jsonStr);
    this.key=o.key;
    this.value=o.value;
  };
  this.getXML=function(){
     var xml = '<property ';
         xml += 'key="' + _bsXML.encodeAttribute(this.key) + '" ';
         xml += 'valueType="' + this.type + '">';
           switch (this.type){
             case 1: /* int */
               xml += parseInt(this.value);
             break;
             case 2: /* float */
               xml += parseFloat(this.value);
             break;
             case 3: /* double */
               xml += parseFloat(this.value);
             break;
             case 4: /* decimal */
               xml += parseFloat(this.value);
             break;
             case 5: /* string */
               xml +=  _bsXML.encodeValue(this.value);
             break;
             case 6: /* boolean */
               xml += this.value?'true':'false';
             break;
             case 7: /* dateTime */
               xml += this.value;
             break;
             case 8: /* xml */
               xml += _bsVariable.isObject(this.value)?this.value.getXML():this.value;
             break;
           };
         xml += '</property>';
         return xml;
  }; /* getXML */
  
  this.loadXML=function(xml_node){
    var node;
    if(_bsVariable.isString(xml_node)){
      doc = _bsXML.getDoc(xml_node);
      if(!doc.childNodes[0]) return null;
      node = (doc.childNodes[0].nodeName=='xml')?doc.childNodes[1]:doc.childNodes[0];
    }else if(_bsVariable.isObject(xml_node)){
      node = xml_node;
    }else{
      alert('ERROR: [XProperty::loadXML] - Invalid Parameter value (' + xml_node + ').');
    };
    
     if(node.attributes){
       this.key=node.attributes.getNamedItem("key").nodeValue;
       this.type=parseInt(node.attributes.getNamedItem("valueType").nodeValue);
     };
       
       var value = node.firstChild?node.firstChild.nodeValue:null;
       switch (this.type){
         case 1: /* int */
           this.value=value?parseInt(value):0;
         break;
         case 2: /* float */
           this.value = value?parseFloat(value):0;
         break;
         case 3: /* double */
           this.value = value?parseFloat(value):0;
         break;
         case 4: /* decimal */
           this.value = value?parseFloat(value):0;
         break;
         case 5: /* string */
           this.value=value?value:'';
         break;
         case 6: /* boolean */
           this.value = value?(value=='true'?true:false):false;
         break;
         case 7: /* dateTime */
           this.value = new Date(value);
         break;
         case 8: /* xml (Not implemented)*/

         break;
       };
    
  }; /* loadXML */
  
  if(_bsVariable.isObject(key_xml_node) && !value && !type) this.loadXML(key_xml_node);
};

/* XPropertyCollection ------------------------------------------------------------------ */
function XPropertyCollection(){
  this.cClass="XProperty";
  this.loadDOMElement=function(el,key,returnText){
     var o = new XProperty()
         o.loadDOMElement(el,key,returnText);
     this._add(o);
  };
  this.add=function(key_xml_node,value,type){
     if(!key_xml_node) return this._add();
     if(_bsVariable.isObject(key_xml_node) && (_bsVariable.getClassName(key_xml_node) == this.cClass)){
       return this._add(key_xml_node);
     };
     var o = new XProperty(key_xml_node,value,type)
     this._add(o);
     return o;
  };
};XPropertyCollection.inherits(bsCollection);

/* XItem ------------------------------------------------------------------ */
function XItem(xml_node){
  this.dispose=function(){
    if(this.properties) this.properties.clear(true);
  }
  this.properties = new XPropertyCollection();
  this.serialize=function(){
     return Sys.Serialization.JavaScriptSerializer.serialize(this);
  };
  this.getXML=function(){
     var pCount = this.properties.count();
     var xml = '<item ';
         xml += 'key="' + _bsXML.encodeAttribute(this.key) + '">';
         if(pCount > 0){
           xml += '<properties>';
           for(var j=0;j<this.properties._items.length;j++){
             xml += this.properties._items[j].getXML();
           };
           xml += '</properties>';
         }else{
           xml += '<properties />';
         };
         xml += '</item>';
         
         return xml;
  };
  this.loadXML=function(xml_node){
        var node;
        if(_bsVariable.isString(xml_node)){
          doc = _bsXML.getDoc(xml_node);
          if(!doc.childNodes[0]) return null;
          node = (doc.childNodes[0].nodeName=='xml')?doc.childNodes[1]:doc.childNodes[0];
        }else if(_bsVariable.isObject(xml_node)){
          node = xml_node;
        }else{
          alert('ERROR: [XItem::loadXML] - Invalid Parameter value (' + xml_node + ').');
        };
        
     /* Attributes xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx */
     if(node.attributes){
      if(node.attributes.getNamedItem("key")) this.key=node.attributes.getNamedItem("key").nodeValue;
     };
     this.properties.clear(true);
     var pnode = node.childNodes[0]; /* <Properties> */
     for(var j = 0; j < pnode.childNodes.length; j++){
        this.properties.add(pnode.childNodes[j]);
      };
  };
  if(xml_node) this.loadXML(xml_node);
};XItem.inherits(bsObject);

/* XItemCollection ------------------------------------------------------------------ */
function XItemCollection(xml_node){
  this.cClass="XItem";
  this.add=function(xml_node){
     if(!xml_node) return this._add();
     
     if(_bsVariable.isObject(xml_node) && (_bsVariable.getClassName(xml_node) == this.cClass)){
       return this._add(xml_node);
     };
     var o = new XItem(xml_node)
     this._add(o);
     return o;
  };
  this.getXML=function(){
    var xml = '<items>';
     if(this._items){
         for(var j=0;j<this._items.length;j++){
            xml += this._items[j].getXML();
          };
      };
    xml += '</items>';
    return xml;
  }
  this.loadXML=function(xml_node){
        var node;
        if(_bsVariable.isString(xml_node)){
          doc = _bsXML.getDoc(xml_node);
          if(!doc.childNodes[0]) return null;
          node = (doc.childNodes[0].nodeName=='xml')?doc.childNodes[1]:doc.childNodes[0];
        }else if(_bsVariable.isObject(xml_node)){
          node = xml_node;
        }else{
          alert('ERROR: [XItem::loadXML] - Invalid Parameter value (' + xml_node + ').');
        };
        
     for(var j=0;j<node.childNodes.length;j++){
        this.add(new XItem(node.childNodes[j]));
      };
  };
  if(xml_node) this.loadXML(xml_node);
};XItemCollection.inherits(bsCollection);


