/*
 * Author: Vertex Logic, Inc
 * Copyright 2005, 2006, 2007 - All rights reserved
 *
 * Vertex Logic, Inc., California, USA 
 *
 * Vertex Logic grants you ("Licensee") a non-exclusive license to use
 * and modify this source and recompile it in
 * accordance with the terms of the Agreement under which this software is bought
 * and provided that (i) this copyright notice appear on all copies of the Software; 
 * (ii) Licensee does not sale the software as is or with modification without
 * the prior consent of Vertex Logic. (iii) Licensee agrees that it does not have any 
 * title or ownership of the Software.
 *
 * The program is provided "as is" without any warranty express or
 * implied, including the warranty of non-infringement and the implied
 * warranties of merchantibility and fitness for a particular purpose.
 * Vertex Logic will not be liable for any damages suffered 
 * by you as a result of using the Program. 
 * In no event will Vertex Logic be liable for any
 * special, indirect or consequential damages or lost profits even if
 * Vertex Logic have been advised of the possibility of their occurrence. 
 * Vertex Logic will not be liable for any third party claims against you.
 */
 
Af.ObjEditor = Class.create();

Af.ObjEditor.prototype = Object.extend(new Af.BaseEditor(), {
   
   initialize: function() {
      this.components = new Array();
      this.nvl = new Array();
   },
   
   addTextByName: function(name) {
         var e = document.getElementById(name);
         if (e == null) {
            return;
         }
         return this.addText(e);
   },
   
   addTextByEC: function(ec, name) {
         var e = ec.getFirstElementById(name);	 
         if (e == null) {
            return;
         }
         return this.addText(e);
   },
   
   addTextAreaByName: function(name) {
         var e = document.getElementById(name);
         if (e == null) {
            return;
         }
         return this.addAreaText(e);
   },
   
   addTextAreaByEC: function(ec, name) {
         var e = ec.getFirstElementById(name);	 
         if (e == null) {
            return;
         }
         return this.addTextArea(e);
   },
   
   addIntByName: function(name) {
         var e = document.getElementById(name);
         if (e == null) {
            return;
         }
         return this.addInt(e);
   },
   
   addIntByEC: function(ec, name) {
         var e = ec.getFirstElementById(name);	 
         if (e == null) {
            return;
         }
         return this.addInt(e);
   },
   
   addSelectByName: function(name) {
         var e = document.getElementById(name);
         if (e == null) {
            return;
         }
         return this.addSelect(e);
   },
   
   addSelectByEC: function(ec, name) {
         var e = ec.getFirstElementById(name);	 
         if (e == null) {
            return;
         }
         return this.addSelect(e);
   },
   
   addDynamicSelectByName: function(name, data, defaultLabel, labelAttrName, valueAttrName) {
         var e = document.getElementById(name);
         if (e == null) {
            return;
         }
         return this.addDynamicSelect(e, data, defaultLabel, labelAttrName, valueAttrName);
   },
   
   addDynamicSelectByEC: function(ec, name, data, defaultLabel, labelAttrName, valueAttrName) {
         var e = ec.getFirstElementById(name);	 
         if (e == null) {
            return;
         }
         return this.addDynamicSelect(e, data, defaultLabel, labelAttrName, valueAttrName);
   },
   
   addCheckBoxByName: function(name) {
         var e = document.getElementById(name);
         if (e == null) {
            return;
         }
         return this.addCheckBox(e);
   },
   
   addCheckBoxByEC: function(ec, name) {
         var e = ec.getFirstElementById(name);	 
         if (e == null) {
            return;
         }
         return this.addCheckBox(e);
   },
   
   addDateByName: function(name, nameTrigger) {
         var e1 = document.getElementById(name);
         if (e1 == null) {
            return;
         }
         var e2 = document.getElementById(nameTrigger);
         if (e2 == null) {
            return;
         }
         return this.addDate(e1, e2);
   },
   
   addDatetByEC: function(ec, name, nameTrigger) {
         var e1 = ec.getFirstElementById(name);	 
         if (e1 == null) {
            return;
         }
         var e2 = ec.getFirstElementById(nameTrigger);	 
         if (e2 == null) {
            return;
         }
         return this.addDate(e1, e2);
   },
   
   addNV: function(name, v) {
      var nv = new Object();
      nv["name"] = name;
      nv["value"] = v;
      var idx = -1;
      for (var i=0; i<this.nvl.length; i++) {
         var nv2 = this.nvl[i];
         if (nv2["name"] == name) {
            idx = i;
            break;
         }
      }
      if (idx != -1) {
         this.nvl[idx] = nv;
      } else {
         this.nvl.push(nv);
      }
   },
   
   setValueFromObj: function(obj) {
      this.obj = obj;
      
      for (var i=0; i<this.components.length; i++) {
		  var c = this.components[i];
		  c.setValueFromObj(obj);
      }
   },
   
   clearChanges: function() {
      for (var i=0; i<this.components.length; i++) {
		  var c = this.components[i];
		  c.modified = false;
      }
      this.nvl.length = 0;
   },
   
   getChangeXml: function(isCreateMode, assocsXml) {
      if (this.obj == null) {
         return null;
      }
      
      var changeType;
      
      if (isCreateMode) {
         changeType = "ObjCreate";
      } else {
         changeType = "ObjModify";
      }
      
      var s = "<" + changeType + " id=\"" + this.obj.__id + "\"";
      
      s += " class=\"" + this.obj.__className + "\"";
      
      if (this.obj.__atype != 'U' && this.obj.__index != null) {
         s += " index=\"" + this.obj.__index + "\"";
      }
      
      if (this.obj.UUID != null) {
         s += " UUID=\"" + this.obj.UUID + "\"";
      }
      
      s += ">"
      
      var changes = false;
      for (var i=0; i<this.components.length; i++) {
		  var c = this.components[i];
		  if (c.modified) {
		     var n = c.name;
		     var v = "" + c.getInternalValue();
		     v = xmlEncode(v);
		     this.addNV(n, v);
		  }
      }
      
      for (var i=0; i<this.nvl.length; i++) {
		  var nv = this.nvl[i];
		  var n = nv["name"];
		  var v = nv["value"];
		  if (v == null) {
		     continue;
		  }
		  v = ""  + v;
		  v = xmlEncode(v);
		  s += "<property name=\"" + n + "\" value=\"" + v + "\" />";
		  changes = true;
      }
      if (assocsXml != null) {
        changes = true;
        s += assocsXml;
      }
      s += "</" + changeType + ">";
      if (changes) {
         return s;
      }
      
      return null;
   },
   
   getChangeXmlForObjList: function(dl, attrList, assocName) {
      var s = "";
      for (var i=0; i<dl.length; i++) {
         var obj = dl[i];
         s += this.getChangeXmlForObj(obj, attrList, assocName);
      }
	  return s;
   },
   
   getChangeXmlForObj: function(obj, attrList, tagName, nestedXml) {
     
     
      var s = "<" + tagName + " id=\"" + obj.__id + "\"";
      
      s += " class=\"" + obj.__className + "\"";
      
       if (obj.__atype != 'U' && obj.__index != null) {
         s += " index=\"" + obj.__index + "\"";
      }
      
      if (obj.UUID != null) {
         s += " UUID=\"" + obj.UUID + "\"";
      }
      
      s += ">"
      
      
      for (var i=0; i<attrList.length; i++) {
		  var n = attrList[i];
		  var v = obj[n];
		  if (v == null) {
		     continue;
		  }
		  v = "" + v;
		  v = xmlEncode(v);
		  s += "<property name=\"" + n + "\" value=\"" + v + "\" />";
      }
      
      if (nestedXml != null) {
         s += nestedXml;
      }
      
      s += "</" + tagName + ">";
      
      return s;
   }


   
});
