//-- Globals -------------------------------/

//------------------------------------------/

//function control(objectType, args) {
function control() {

   // Initialize inherited parameters
   this.initInheritedParams = function(args) {
      this.getControlListener = "";
      if (args == undefined) {args = {}; }
      this.baseParams = {};
      this.params = {};
      this.baseParams = {};
      this.styleParams = {};

      this.baseParams.id          = 'id' in args? args.id: '';
      this.baseParams.onclick     = 'onclick' in args? args.onclick: '';
      this.baseParams.onmouseout  = 'onmouseover' in args? args.onmouseover: '';
      this.baseParams.onmouseover = 'onmouseout' in args? args.onmouseout: '';
      this.baseParams.parent      = 'parent' in args? args.parent: '';
      this.baseParams.callback    = 'callback' in args? args.callback: function() {};

      this.styleParams.backgroundColor = 'backgroundColor' in args? args.backgroundColor: '';
      this.styleParams.backgroundImage = 'backgroundImage' in args? args.backgroundImage: '';
      this.styleParams.border = 'border' in args? args.border : '';
      this.styleParams.borderColor = 'borderColor' in args? args.borderColor: '';
      this.styleParams.borderStyle = 'borderStyle' in args? args.borderStyle: '';
      this.styleParams.color = 'color' in args? args.color: '';
      this.styleParams.display = 'display' in args? args.display: '';
      this.styleParams.float = 'float' in args? args.float: '';
      this.styleParams.fontSize = 'fontSize' in args? args.fontSize: '';
      this.styleParams.fontWeight = 'fontWeight' in args? args.fontWeight: '';
      this.styleParams.height = 'height' in args? args.height: '';
      this.styleParams.left = 'left' in args? args.left: '';
      this.styleParams.margin = 'margin' in args? args.margin: '';
      this.styleParams.textAlign = 'textAlign' in args? args.textAlign: '';
      this.styleParams.padding = 'padding' in args?  args.padding: '';
      this.styleParams.position = 'position' in args? args.position: '';
      this.styleParams.top = 'top' in args? args.top: '';
      this.styleParams.verticalAlign = 'verticalAlign' in args? args.verticalAlign: '';
      this.styleParams.width = 'width' in args? args.width: '';
      this.className = 'className' in args? args.className: '';
   }

   this.initHelp = function(objectType){
      this.help = {};
      this.help.objectType = objectType;
      this.objectType = objectType;
   }

   this.appendGuts = function(guts) {
      if(this.control == undefined) {
         this.control = document.createElement("div");
      }
      this.control.appendChild(guts);
   }

   this.setGuts = function(guts) {
      this.control = guts; 
   }

   this.getControl = function() {
      if (this.baseParams.id != '') {this.control.id = this.baseParams.id};
      if (this.baseParams.onclick != '') {this.control.onclick = this.baseParams.onclick};
      if (this.baseParams.callback != '') {this.control.callback = this.baseParams.callback};

      if (this.styleParams.backgroundColor != '') {this.control.style.backgroundColor = this.styleParams.backgroundColor};
      if (this.styleParams.backgroundImage != '') {this.control.style.backgroundImage = this.styleParams.backgroundImage};
      if (this.styleParams.border != '') {this.control.style.border = this.styleParams.border};
      if (this.styleParams.borderColor != '') {this.control.style.borderColor = this.styleParams.borderColor};
      if (this.styleParams.borderStyle != '') {this.control.style.borderStyle = this.styleParams.borderStyle};
      if (this.styleParams.textAlign != '') {this.control.style.textAlign = this.styleParams.textAlign};
      if (this.styleParams.width != '') {this.control.style.width = this.styleParams.width};
      if (this.styleParams.height != '') {this.control.style.height = this.styleParams.height};
      if (this.styleParams.left != '') {this.control.style.left = this.styleParams.left};
      if (this.styleParams.top != '') {this.control.style.top = this.styleParams.top};
      if (this.styleParams.display != '') {this.control.style.display = this.styleParams.display};
      if (this.styleParams.position != '') {this.control.style.position = this.styleParams.position};
      if (this.styleParams.float != '') {this.control.style.cssFloat = this.styleParams.float};
      if (this.styleParams.float != '') {this.control.style.styleFloat = this.styleParams.float};
      if (this.styleParams.fontSize != '') {this.control.style.fontSize = this.styleParams.fontSize};
      if (this.styleParams.fontWeight != '') {this.control.style.fontWeight = this.styleParams.fontWeight};
      if (this.styleParams.margin != '') {this.control.style.margin = this.styleParams.margin};
      if (this.styleParams.padding != '') {this.control.style.padding = this.styleParams.padding};
      if (this.styleParams.color != '') {this.control.style.color = this.styleParams.color};
      if (this.styleParams.verticalAlign != '') {this.control.style.verticalAlign = this.styleParams.verticalAlign};
      if (this.className != '') {this.control.className = this.className};
      this.control.id = this.objectType;
      if(this.getControlListener != "") {
         this.getControlListener();
      }
      return this.control;
   }

   this.setParam = function(paramName, paramValue) {
      // Check if this is a style param
      
      //var response = paramName in this.styleParams? this.styleParams[paramName] : '[NOTHERE]';
      if(paramName in this.styleParams) {
        // alert ("(" + paramName + ": " + this.styleParams[paramName] + ") is in Style Param List"); 
         this.styleParams[paramName] = paramValue;
         
      } else {
         if(paramName in this.baseParams) {
         //   alert ("(" + paramName + ": " + this.baseParams[paramName] + ") is in base Param List"); 
            this.baseParams[paramName] = paramValue;
         } else {
            if(paramName in this.params) {
               //alert ("(" + paramName + ": " + this.params[paramName] + ") is in Custom Param List"); 
               this.params[paramName] = paramValue;
               //alert ("Updated: (" + paramName + ": " + this.params[paramName] + ") is in Custom Param List"); 
               this.initCustomParams();
            }  
         }
      }
   }
 
   this.getPos = function(el) {
      var lx = 0;
      var ly = 0;

      while(el!=null) {
         lx += el.offsetLeft;
         ly += el.offsetTop;
         el = el.offsetParent;
      }
      return {x: lx,y: ly};
   }

   this.printPairs = function(list, color) {
      var pairDiv = document.createElement("div");
      pairDiv.style.float= "left";
      pairDiv.style.display = "inline";
      var paramTable = document.createElement("table");
      paramTable.bgColor = color;
      pairDiv.appendChild(paramTable);
      paramTable.border = "1px";
      var tableBody = document.createElement("tbody");
      paramTable.appendChild(tableBody);

      var headers = document.createElement("tr");
      tableBody.appendChild(headers);

      var col1 = document.createElement("th");
      col1.innerHTML = "Parameter Name";
      headers.appendChild(col1);
      var col2 = document.createElement("th");
      col2.innerHTML = "Parameter Value";
      headers.appendChild(col2);

      for (var param in list) {
         var row = document.createElement("tr");
         var paramCol = document.createElement("td");
         paramCol.innerHTML = param;
         row.appendChild(paramCol);
         var valCol = document.createElement("td");
         valCol.innerHTML = list[param];
         row.appendChild(valCol);
         tableBody.appendChild(row);
      }

      return pairDiv;
   }

   this.getHelp = function() {
      var returnVal = document.createElement("div");
      returnVal.style.display = "block";

      var paramHelp = document.createElement("div");
      returnVal.appendChild(paramHelp);
      paramHelp.style.width = "300px";
      paramHelp.innerHTML = "<b>Object Type: " + this.help.objectType + "</b>";

      var helpTable = document.createElement("table");
      helpTable.border = "3px";
      returnVal.appendChild(helpTable);
      var helpTableBody = document.createElement("tbody");
      helpTable.appendChild(helpTableBody);

      var hth = document.createElement("tr");
      var htc1 = document.createElement("td"); htc1.innerHTML = "Style Parameters";
      var htc2 = document.createElement("td"); htc2.innerHTML = "Base Parameters";
      var htc3 = document.createElement("td"); htc3.innerHTML = "Obj Specific Parameters";
      hth.appendChild(htc1);
      hth.appendChild(htc2);
      hth.appendChild(htc3);

      helpTableBody.appendChild(hth);

      var helpTableRow = document.createElement("tr");
      helpTableRow.vAlign = "top";
      helpTableBody.appendChild(helpTableRow);
       
      var col1 = document.createElement("td");
      col1.appendChild(this.printPairs(this.styleParams, "yellow"));
      helpTableRow.appendChild(col1);

      var col2 = document.createElement("td");
      col2.appendChild(this.printPairs(this.baseParams, "silver"));
      helpTableRow.appendChild(col2);

      var col3 = document.createElement("td");
      col3.appendChild(this.printPairs(this.params, "orange"));
      helpTableRow.appendChild(col3);

      return returnVal;
   }
}
