    // ---------------------- Begin Action_Include_Util --------------- //
function $(){
  if (arguments.length == 1){ return get$(arguments[0]); }
  var i,zElements = [];
  for(i=0;i<arguments.length;i++){
    zElements.push(get$(arguments[i]));
  }
  function get$(el){
    return (typeof el == 'string' ? document.getElementById(el):el);
  }
  return zElements;
}
function isTrue(aValue,aDefaultValue) {
  aDefaultValue = (typeof(aDefaultValue)=='undefined' ? false:aDefaultValue);
  if(typeof(aValue)=='undefined'||aValue==null) { return aDefaultValue; }
  var zVal = aValue.toString().toLowerCase();
  return ((zVal=='y'||zVal=='true'||zVal=='1') ? true:((zVal=='n'||zVal=='false'||zVal=='0') ? false:aDefaultValue));
}
Math.RandomNumber = function(aMin,aMax) {
  return ( Math.floor( Math.random() * ( aMax+1 - aMin ) ) + aMin );
}
var Util = {
  Stack: {
    StackItems: [],
    add: function(aObject) {
      Util.Stack.StackItems.append(aObject);
      return true;
    },
    remove: function(aObject) {
      Util.Stack.StackItems.remove(aObject);
      return true;
    },
    dump: function() {
      if (Util.Stack.StackItems.length < 1) {return ""};
      var zOutput = "", zI, zItem;
      for (zI = 0; Util.Stack.StackItems.length-1; -1) {
        zItem = Util.Stack.StackItems[zI];
        zOutput += "Item: "+zI
        + " ReceiveFunctionName: "+ zItem.ReceiveFunctionName
        + " CallerFunctionName: "+ zItem.CallerFunctionName
        + " Url: "+ zItem.URL+"\n";
      }
      return zOutput;
    }
  },
  ErrorCount: 0,
  AdvancedErrorCount: 0,
  LastError: "",
  LastAdvancedError: "",
  copyObject: function(aObject){
    return Util.copyProperties(new Object(), aObject);
  },
  copyProperties: function(aToObject,aFromObject,aOverwrite){ 
    aOverwrite = isTrue(aOverwrite);
    for(var zProp in aFromObject){
      if(!aToObject[zProp]||aOverwrite){
        aToObject[zProp] = aFromObject[zProp];
      }
    }
    return aToObject;
  },
  debug: function(aText){
    if(Util.debug.Enabled){
      if(!Util.debug.Container&&!Util.debug.ThrowError) {
        Util.debug.Container = DOM.createElement("textarea","DebugAlertArea","","font-size: 11px; line-height: 12px; display: block; border: 1px solid red; width: 90%; height: 100px;");
        Util.debug.Container.style.height = "100px";
        Util.debug.Container.style.width = "90%";
        Util.debug.Container.style.position = 'absolute';
        document.body.appendChild(Util.debug.Container,document.body.childNodes[0]);
      }
      if(Util.debug.Container||Util.debug.ThrowError) {
        if(Util.debug.ThrowError){
          setTimeout(function() {
            throw new Error("[debug] " + aText);
          },0);
        }else{
          Util.debug.Container.value += aText + "\n";
          Util.debug.Container.scrollTop = Util.debug.Container.scrollHeight;
        }
      }
    }
    return false;
  },
  getCookieVars: function() {
    Util.getCookieVars.Values = {};
    var zCookieString = document.cookie;
    var zParamPairs = zCookieString.split("; ");
    var zSplitPair;
    for(var i = 0; i < zParamPairs.length; i++) {
      zSplitPair = zParamPairs[i].split("=");
      if (zSplitPair.length == 2) {
        Util.getCookieVars.Values[zSplitPair[0]] = {Name: zSplitPair[0], Value: zSplitPair[1]};
      }
    };
    Util.getCookieVars.Loaded = true;
    return true;
  },
  getCookieValue: function(aParameterName) {
    if (!Util.getCookieVars.Loaded) {
      Util.getCookieVars();
    }
    return (Util.getCookieVars.Values[aParameterName]) ? Util.getCookieVars.Values[aParameterName].Value : "";
  },
  setCookie: function(aName, aValue, aExpires, aPath, aDomain, aSecure) {
    var zCookieValues = [];
    zCookieValues.push(aName+"="+escape(aValue));
    if(aExpires){
      if(typeof(aExpires)=="string"&&aExpires.toUpperCase()=="NEVER"){
        aExpires = new Date();
        aExpires.setFullYear(aExpires.getFullYear()+10);
      }
      zCookieValues.push("expires="+aExpires.toGMTString());
    }
    if(!aPath){
      aPath = "/";
    }
    zCookieValues.push("path="+aPath);
    if(aDomain){
      zCookieValues.push("domain="+aDomain);
    }
    if(aSecure){
      zCookieValues.push("secure");
    }
    document.cookie = zCookieValues.join("; ");
    Util.setCookie.Loaded = false;
    return true;
  },
  deleteCookie: function(aName,aDomain){
    var zExpires = new Date();
    zExpires.setFullYear(zExpires.getFullYear()-1);
    Util.setCookie(aName,"",zExpires,null,aDomain);
    return true;
  },
  bindTimeout: function (aObject, aMethod, aMsec) {
    var zObject = aObject,
        zArgs = Array.prototype.slice.apply(arguments, [3]);
    if (typeof aMethod === "string") {
      aMethod = zObject[aMethod];
    }
    var zTimeout = setTimeout(function () {
      aMethod.apply(zObject, zArgs);
    }, aMsec);
    return zTimeout;
  },
  receiveNotificationConfirmation: function (aNotificationResponse) {
    return true;
  },
  genericErrorHandler: function(aError, aErrorExtraDetail, aErrorCategory) {
      DOM.ErrorDialog.show(aError, null,"Error",400,300);
    Util.logErrorAdvanced("GenericErrorHandler:"+aErrorCategory, aErrorExtraDetail);
  },
  logErrorAdvanced: function (aSubject, aErrorBase, aParamObject, aToRunFunction, aCallerFunction) {
    if (Util.AdvancedLastError == aSubject + aErrorBase) {
      return true;
    }
    Util.AdvancedLastError = aSubject + aErrorBase;
    Util.AdvancedErrorCount++;
    if (Util.AdvancedErrorCount >= 3) {return true};
    var zErrorDetail = aErrorBase+'\n';
    zErrorDetail += 'Function Stack: ' + Util.Stack.dump()+'\n';
    zErrorDetail += '\nUrl: '+ window.location.href;
    zErrorDetail += '\nBrowser: '+ navigator.userAgent;
    if (aParamObject) {
      zErrorDetail += '\nParamObject:\n';
      for(var x in aParamObject){
        try {
          if(aParamObject[x]){
            zErrorDetail += 'Param.'+x+'='+aParamObject[x]+'\n';
          }
        } catch(e) {}
      }
    }
    if (aToRunFunction) {
      if (aToRunFunction.name){
        zErrorDetail += '\nFunction to Run Name:'+ aToRunFunction.name;
      }
      if (aToRunFunction.toString){
        zErrorDetail += '\nFunction to Run Detail:'
                        + "\n-----------------------"
                        + "\n"+aToRunFunction.toString()
                        + "\n-----------------------";
      }
    }
    if (aCallerFunction) {
      if (aCallerFunction.name){
        zErrorDetail += '\nCaller Function Name:'+ aCallerFunction.name;
      }
      if (aCallerFunction.toString){
        zErrorDetail += '\nCaller Function Detail:'
                        + "\n-----------------------"
                        + "\n"+aCallerFunction.toString()
                        + "\n-----------------------";
      }
    }
    Util.Notification('', '',zErrorDetail,
                      '[Live] JS Error: '+aSubject+' '+ URI.LastHash +' (' + Util.AdvancedErrorCount + ')', 'JSError', 'High', 'Y', 'Y');
    return true;
  },
  trapError: function (aDescription, aPage, aLine, aChar) {
    if(!aDescription){aDescription = 'UNKNOWN';}
    if(!aPage){aPage = 'unkPage';}
    if(!aLine){aLine = 'unkLine';}
    if(!aChar){aChar = 'unkChar';}
    if (Util.LastError == aDescription + aPage + aLine + aChar) {
      return true;
    }
    Util.LastError = aDescription + aPage + aLine + aChar;
    Util.ErrorCount++;
    if(Util.ErrorCount <= 5 && aDescription != 'error loading script'){
      var zMessage = new Array();
      zMessage.push('A JavaScript error has occurred in ' + window.location.hostname + '\n\n');
      zMessage.push('Function Stack: ' + Util.Stack.dump()+'\n');
      zMessage.push('Error Details:');
      zMessage.push('  Error Number:' + Util.ErrorCount);
      if(aDescription){ zMessage.push('  Description:' + aDescription); }
      if(aPage){ zMessage.push('  Page:' + aPage); }
      if(aLine){ zMessage.push('  Line:' + aLine); }
      if(aChar){ zMessage.push('  Char:' + aChar + '\n\n'); }
      zMessage.push('Additional Information:');
      zMessage.push('  url:'+ window.location.href);
      zMessage.push('  userAgent:' + navigator.userAgent);
      zMessage.push('  platform:' + navigator.platform);
      zMessage.push('  referrer:' + document.referrer + '\n\n\n');
      zMessage.push('View System Notification:');
      Util.Notification('', '', zMessage.join('\n'), '[Live] JS Error: ID: '+ aLine +' '+ aDescription.substring(0, 100) + ' ' + URI.LastHash +  ' (' + Util.ErrorCount + ')', 'JSError', 'High', 'Y', 'Y');
    }
    return true;
  },
  disableErrorTrapping: function() {
    window.onerror = '';
    return true;
  },
  enableErrorTrapping: function() {
    window.onerror = Util.trapError;
    return true;
  },
  Notification: function (aRecipients, aFrom, aMessage, aSubject, aType, aPriority, aIncludeDeveloperEmailAddress, aIncludeDefaultRecipients) {
    Ajax.makeRequest({
      URL: '/JavaScript.RequestSystemNotification?aObjectTypeAlias=SystemNotification',
      Function: Util.receiveNotificationConfirmation,
      PostValues:{
        aRecipients : aRecipients,
        aFrom : aFrom,
        aSubject : aSubject,
        aType : aType,
        aPriority : aPriority,
        aIncludeDeveloperEmailAddress : aIncludeDeveloperEmailAddress,
        aIncludeDefaultRecipients : aIncludeDefaultRecipients,
        aMessage : aMessage
      },
      Method:'POST'
    });
    return true;
  },
  CommaFormatted: function(amount) {
    var delimiter = ",";
    var a = amount.split('.',2)
    var d = a[1];
    var i = parseInt(a[0]);
    if(isNaN(i)) { return ''; }
    var minus = '';
    if(i < 0) { minus = '-'; }
    i = Math.abs(i);
    var n = new String(i);
    var a = [];
    while(n.length > 3)
    {
      var nn = n.substr(n.length-3);
      a.unshift(nn);
      n = n.substr(0,n.length-3);
    }
    if(n.length > 0) { a.unshift(n); }
    n = a.join(delimiter);
    if(d.length < 1) { amount = n; }
    else { amount = n + '.' + d; }
    amount = minus + amount;
    return amount;
  },
  CurrencyFormat: function(amount) {
    var zCurrencyAmount=Util.CommaFormatted(Util.CurrencyFormatted(amount));
    return zCurrencyAmount;
  },
  CurrencyFormatted: function(amount) {
    var i = parseFloat(amount);
    if(isNaN(i)) { i = 0.00; }
    var minus = '';
    if(i < 0) { minus = '-'; }
    i = Math.abs(i);
    i = parseInt((i + .005) * 100);
    i = i / 100;
    s = new String(i);
    if(s.indexOf('.') < 0) { s += '.00'; }
    if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
    s = minus + s;
    return s;
  },
  formatFileSize: function(aFileSize) {
    var zFileSize = parseFloat(aFileSize) || 0;
    var zSuffix = "";
    if (zFileSize==1) {
      zSuffix = "byte"
    }
    else if (zFileSize<1024) {
      zSuffix = "bytes"
    }
    else if (zFileSize<1048576) {
      zFileSize = (zFileSize/1024*100000)/100000;
      zSuffix = "KB"
    }
    else if (zFileSize<1073741824) {
      zFileSize = (zFileSize/1048576*100000)/100000;
      zSuffix = "MB"
    }
    else {
      zFileSize = (zFileSize/1073741824*100000)/100000;
      zSuffix = "GB"
    }
    return Math.round(zFileSize) + " " + zSuffix
  }
};
  if (document.location.href.indexOf('aEnableErrorTrapping=N') == -1) Util.enableErrorTrapping();
var ActivityOptions = {
  show: function(e,aParams) {
    Event.fix(e);
    try {
      e.target.blur();
    } catch(e) {
    }
    if(ActivityOptions.ActiveLink && ActivityOptions.ActiveLink == e.target) {
      ActivityOptions.hide(e);
      return true;
    }
    if(typeof aParams.length == 'number') {
      aOptionsArray = aParams;
      zTitle = "";
    }
    else {
      zTitle = aParams.Title || "";
      aOptionsArray = aParams.Options;
    }
    ActivityOptions.ActiveOptionType = aOptionsArray;
    ActivityOptions.ActiveLink = e.target;
    document.body.appendChild(ActivityOptions.Container);
    ActivityOptions.Container.innerHTML = '<span><span class="ActivityOptionClose" onclick="ActivityOptions.closeOptions()" target="_self">X</span><div class="ActivityOptionTitle">'+zTitle+'&nbsp;</div></span>';
    aOptionsArray.forEach(function(aOption) {
      var zSpan = CreateBasicElement("span",null,"ActivityOptionLink");
      ActivityOptions.Container.childNodes[0].appendChild(zSpan);
      zSpan.innerHTML = aOption.DisplayName;
      if(aOption.Class) {
        DOM.addClass(zSpan,aOption.Class);
      }
      DOM.addEvent(zSpan, "onclick", ActivityOptions.hide);
      DOM.addEvent(zSpan, "onclick", aOption.Function, aOption.Params);
      DOM.makeHoverable(zSpan);
    });
    return true;
  },
  hide: function(e) {
    ActivityOptions.closeOptions();
    return true;
  },
  addParams: function(aOptionsArray,aParamObject) {
    var zOptions = [];
    aOptionsArray.forEach(function(aOption) {
      var zOption = Util.copyObject(aOption);
      zOptions.push(zOption);
      if(!zOption.Params) {
        zOption.Params = Util.copyObject(aParamObject);
      }
      else {
        Util.copyProperties(zOption.Params,aParamObject,true);
      }
    });
    return zOptions;
  },
  append: function(aElement,aOptionsArray,aParamObject) {
    DOM.addEvent(aElement, "onclick", ActivityOptions.ahow, ActivityOptions.addParams(aOptionsArray,aParamObject));
    return true;
  },
  closeOptions: function() {
    if(ActivityOptions.ActiveLink) {
      document.body.removeChild(ActivityOptions.Container);
    }
    ActivityOptions.ActiveOptionType = null;
    ActivityOptions.ActivePagePath = null;
    ActivityOptions.ActiveLink = null;
    return true;
  }
};
Util.Object = {
  clone: function( obj ) {
    function F() {};
    F.prototype = obj;
    return new F();
  },
  augment: function( cloneFromObj, extendWithObj ) {
    var newObj = Util.Object.clone( cloneFromObj );
    Util.Object.extend( newObj, extendWithObj );
    return newObj;
  },
  extend: function( obj, withObj ) {
    for(var zProp in withObj){
      obj[zProp] = withObj[zProp];
    }
    return obj;
  },
  create: function( inhertisFromObj, aParams ) {
    var obj   = Util.Object.clone( inhertisFromObj );
    obj.parent = inhertisFromObj;
    if ( obj.construct ) {
      obj.construct( aParams );
    }
    return obj;
  }
};
    // ---------------------- End Action_Include_Util ----------------- //
    // ---------------------- Begin Action_Include_Array --------------- //
Array.prototype.append = function () {
  var i;
  for (i=0; i < arguments.length; i++) {
    this[this.length] = arguments[i];
  }
}
Array.prototype.copy = function ()  {
  return this.concat();
}
Array.prototype.contains = function (vItem )  {
  return this.indexOf(vItem)>-1;
}
if(!Array.every){
  Array.prototype.every = function (fnTest , oThis ) {
    if (this.length > 0) {
      var i,l,bResult = true;
      var zProperty = "__everyFunc__".makeUnique();
      oThis = oThis || window;
      oThis[zProperty] = fnTest;
      for (i=0, l=this.length; i < l && bResult; i++) {
        bResult = bResult && oThis[zProperty](this[i], i, this);
      }
      oThis[zProperty] = null;
      return bResult;
    } else {
      return true; 
    }
  }
}
if(!Array.filter){
  Array.prototype.filter= function (fnTest , oThis ) {
    var i,l,aResult  = new Array();
    var zProperty = "__filterFunc__".makeUnique();
    oThis = oThis || window;
    oThis[zProperty] = fnTest;
    for (i=0, l=this.length; i < l; i++) {
      if (oThis[zProperty](this[i], i, this)) {
        aResult.push(this[i]);
      }
    }
    oThis[zProperty] = null;
    return aResult;
  }
}
if(!Array.forEach){
  Array.prototype.forEach = function (fnExec , oThis ) {
    var i,l;
    var zProperty = "__forEachFunc__".makeUnique();
    oThis = oThis || window;
    oThis[zProperty] = fnExec;
    for (i=0, l=this.length; i < l; i++) {
      oThis[zProperty](this[i], i, this);
    }
    oThis[zProperty] = null;
  }
}
if(!Array.indexOf){
  Array.prototype.indexOf = function (vItem , iStart ) {
    var i,l;
    if (iStart == null) {
      iStart = 0;
    }
    for (i=iStart, l=this.length; i < l; i++) {
      if (this[i] == vItem) {
        return i;
      }
    }
    return -1;
  }
}
if(!Array.insertAt){
  Array.prototype.insertAt = function (vItem , iIndex )  {
    this.splice(iIndex, 0, vItem);
  }
}
if(!Array.insertBefore){
  Array.prototype.insertBefore = function (vItem , vBeforeItem )  {
    this.insertAt(vItem, this.indexOf(vBeforeItem));
  }
}
if(!Array.lastIndexOf){
  Array.prototype.lastIndexOf = function (vItem , iStart ) {
    var i;
    if (iStart == null || iStart >= this.length) {
      iStart = this.length-1;
    }
    for (i=iStart; i >= 0; i--) {
      if (this[i] == vItem) {
        return i;
      }
    }
    return -1;
  }
}
if(!Array.map){
  Array.prototype.map = function (fnExec , oThis ) {
    var i,l,aResult  = new Array();
    var zProperty = "__mapFunc__".makeUnique();
    oThis = oThis || window;
    oThis[zProperty] = fnExec;
    for (i=0, l=this.length; i < l; i++) {
      aResult.push(oThis[zProperty](this[i], i, this));
    }
    oThis[zProperty] = null;
    return aResult;
  }
}
if(!Array.pop){
  Array.prototype.pop = function () {
    var oItem  = null;
    if (this.length > 0) {
      oItem = this[this.length-1];
      this.length--;
    }
    return oItem;
  }
}
if(!Array.push){
  Array.prototype.push = Array.prototype.append;
}
if(!Array.remove){
  Array.prototype.remove = function (vItem )  {
    this.removeAt(this.indexOf(vItem));
    return vItem;
  }
}
if(!Array.removeAt){
  Array.prototype.removeAt = function (iIndex )  {
    var vItem = this[iIndex];
    if (vItem) {
      this.splice(iIndex, 1);
    }
    return vItem;
  }
}
if(!Array.slice){
  Array.prototype.slice = function (iStart , iStop ) {
    var i,aResult  = new Array();
    iStop = ( iStop && iStop < this.length ) ? iStop : this.length;
    for (i=iStart; i < iStop; i++) {
      aResult.push(this[i]);
    }
    return aResult;
  }
}
if(!Array.shift){
  Array.prototype.shift = function () {
    var vItem = this[0];
    if (vItem) {
      this.splice(0,1);
    }
    return vItem;
  }
}
if(!Array.some){
  Array.prototype.some= function (fnTest , oThis ) {
    var i,l;
    var zProperty = "__someFunc__".makeUnique();
    oThis = oThis || window;
    oThis[zProperty] = fnTest;
    for (i=0, l=this.length; i < l; i++) {
      if (oThis[zProperty](this[i], i, this)) {
       return true;
      }
    }
    oThis[zProperty] = null;
    return false;
  }
}
if(!Array.splice){
  Array.prototype.splice = function (iIndex , iLength ) {
    var i,aResult  = new Array();
    var aRemoved  = new Array();
    for (i=0; i < iIndex; i++){
      aResult.push(this[i]);
    }
    for (i=iIndex; i < iIndex+iLength; i++) {
     aRemoved.push(this[i]);
    }
    if (arguments.length > 2) {
      for (i=2; i < arguments.length; i++) {
        aResult.push(arguments[i]);
      }
    }
    for (i=iIndex+iLength; i < this.length; i++) {
      aResult.push(this[i]);
    }
    for (i=0; i < aResult.length; i++) {
      this[i] = aResult[i];
    }
    this.length = aResult.length;
    return aRemoved;
  }
}
if(!Array.sum){
  Array.prototype.sum = function (fnConvert , oThis ) {
    if (this.length > 0) {
      var i,l,vResult = null;
      var zProperty = "__sumFunc__".makeUnique();
      oThis = oThis || window;
      oThis[zProperty] = fnConvert || function (vVal) { return vVal; }
      vResult = oThis[zProperty](this[0], 0, this);
      for (i=1, l=this.length; i < l; i++) {
        vResult += oThis[zProperty](this[i], i, this);
      }
      oThis[zProperty] = null;
      return vResult;
    } else {
      return null;
    }
  }
}
if(!Array.unshift){
  Array.prototype.unshift = function () {
    var i,l,sExec = "this.splice(";
    var aArgs = new Array();
    for (i=0,l=arguments.length; i < l; i++) {
      aArgs.push("arguments["+i+"]");
    }
    eval("this.splice(0,0," + aArgs.join(",") + ")");
  }
}
if(!Array.moveBefore){
  Array.prototype.moveBefore = function(aItem,aBeforeItem){
    this.remove(aItem);
    this.insertBefore(aItem,aBeforeItem);
  }
}
if(!Array.insertAfter){
  Array.prototype.insertAfter = function (aItem , aAfterItem )  {
    this.insertAt(aItem, this.indexOf(aAfterItem)+1);
  }
}
if(!Array.moveAfter){
  Array.prototype.moveAfter = function(aItem,aAfterItem){
    this.remove(aItem);
    this.insertAfter(aItem,aAfterItem);
  }
}
Array.prototype.fastFindFirst = function(fnTest, oThis) {
  var zProperty = "__FastFindFirstFunc__".makeUnique();
  oThis = oThis || window;
  oThis[zProperty] = fnTest;
  var zIdx, zMatch;
  var zFirstIndex = 0;
  var zLastIndex     = this.length - 1;
  var zFound = false;
  while (zFirstIndex <= zLastIndex) {
    zIdx = (zFirstIndex + zLastIndex) >> 1;
    zMatch = oThis[zProperty](this[zIdx],zIdx,this);
    if (zMatch < 0) {
      zFirstIndex = zIdx + 1;
    }  else {
      zLastIndex = zIdx - 1;
      if (zMatch == 0) {
        zFound = true;
      }
    }
  }
  oThis[zProperty] = null;
  if (zFound) {
    return zFirstIndex;
  }else{
    return -1;
  }
}
Array.prototype.fastFilter = function(fnTest, oThis) {
  var zProperty = "__FastFilterFunc__".makeUnique();
  oThis = oThis || window;
  oThis[zProperty] = fnTest;
  var zIdx;
  var zLastIndex;
  var zMaxIdx     = this.length - 1;
  var zResultArray = new Array();
  var zFirstIndex = this.fastFindFirst(fnTest, oThis);
  if (zFirstIndex>-1) {
    zLastIndex = zFirstIndex;
    while ((zLastIndex < zMaxIdx) && (oThis[zProperty](this[zLastIndex+1], zLastIndex+1,this) == 0)) {
      zLastIndex++;
    }
    for (zIdx = zFirstIndex; zIdx <= zLastIndex; zIdx++) {
      zResultArray.push(this[zIdx]);
    }
  }
  oThis[zProperty] = null;
  return zResultArray;
}
Array.prototype.set = function(aItem,aKey){
  if(this._Field) {
    aKey = aKey || aItem[this._Field];
  }
  if(typeof aKey == 'undefined'){
    this.push(aItem);
  }else{
    aKey = aKey.toString();
    if(!this._List){
      this._List = {};
      this._Indexes = {};
    }
    if(this._List[aKey]){
      var zOldItem = this._List[aKey];
      this._List[aKey] = aItem;
      if(this[this._Indexes[aKey]] == zOldItem){
        this[this._Indexes[aKey]] = aItem;
      }else{
        var zIndex = this.indexOf(zOldItem);
        this[zIndex] = aItem;
        this._Indexes[aKey] = zIndex;
      }
    }else{
      this._Indexes[aKey] = this.length;
      this.push(aItem);
      this._List[aKey] = aItem;
    }
  }
}
Array.prototype.get = function(aValue,aField){
  if(typeof aField == 'undefined'){
    return (this._List ? (this._List[aValue] ? this._List[aValue]: null): null);
  }else{
    return this.filter(function(aItem){
      return (aItem[aField] == aValue);
    });
  }
}
Array.prototype.getFirst = function(aValue,aField) {
  return this.get(aValue,aField).first();
}
Array.prototype.makeUnique = function(aField, aRememberField){
  var zResult = [];
  if(aRememberField) {
    zResult._Field = aField;
  }
  this.forEach(function(aItem){
    zResult.set(aItem,aItem[aField]);
  });
  return zResult;
}
Array.prototype.first = function(){
  return this[0];
}
Array.prototype.last = function(){
  return this[this.length-1];
}
Array.Copy = function(aArray){
  var i,zResult = [];
  for(i=0;i<aArray.length;i++){
    zResult.push(aArray[i]);
  }
  return zResult;
}
Array.prototype.alphaSort = function () {
  return this.sort(function(a, b) {
    a = a.toLowerCase();
    b = b.toLowerCase();
    return (b<a)-(a<b);
  });
}
    // ---------------------- End Action_Include_Array ----------------- //
    // ---------------------- Begin Action_Include_String --------------- //
Util.copyProperties(String.prototype, {
  HTMLEncode: function(){
    var x,zOutput = new Array(this.length);
    for(x=0;x<this.length;x++){
      zOutput[x] = '&#'+ this.charCodeAt(x) +';';
    }
    return zOutput.join('');
  },
  HTMLDecode: function(){
    var zMatches = this.match(/&#\d+;/g), zOutput = this.toString();
    if(zMatches) {
      for(var i = 0; i < zMatches.length; i++){
        zOutput = zOutput.replace(/&#\d+;/,String.fromCharCode((zMatches[i]).replace(/\D/g,'')));
      }
    }
    return zOutput;
  },
  trim: function(){
    return this.replace(/^\s*|\s*$/g,'');
  },
  toPagePath: function(){
    return '/'+ this.replace(/\\/g,'/');
  },
  toAliasString: function(){
    return this.replace(/[^a-z0-9_]/gi,'');
  },
  CrToBr: function(){
    return this.replace(/\r{0,1}\n/gi,'<br />');
  },
  makeUnique: function(aHexify){
    if(aHexify) {
      return this + ((new Date().valueOf()).toString(16).substring(2).toUpperCase());
    }
    else {
      return this + ((new Date().valueOf()) + Math.round(Math.random()*1000000));
    }
  },
  addClass: function(aClass){
    if (this != "") {
      if (!this.classExists(aClass)) {
        return this + " " + aClass;
      }
    }
    else {
      return aClass;
    }
    return this;
  },
  classExists: function(aClass){
    var zRegExp = new RegExp('(^|\\s)' + aClass + '\\b');
    return zRegExp.test(this);
  },
  removeClass: function(aClass){
    var zRegExp = new RegExp('(^|\\s)' + aClass + '\\b');
    return this.replace(zRegExp, '').trim();
  },
  replaceClass: function(aOldClass,aNewClass){
    if(this.classExists(aOldClass)){
      var zRegExp = new RegExp('(^|\\s)' + aOldClass + '\\b');
      return this.replace(zRegExp,'$1'+aNewClass);
    }else{
      return this.addClass(aNewClass);
    }
  },
  isClass: function(aClass){
    return (this.search('(^|\\s)' + aClass + '(\\s|$)') != -1);
  },
  setURLVariable: function(aVarName,aValue,aBeforeNoLiveCache){
    var zHashSplit = this.split('#');
    var zURLParts = zHashSplit[0].split('?');
    var zNewString = aVarName + '=' + aValue;
    var zVarsBeforeNoLiveCache = new Array();
    var zVarsAfterNoLiveCache = new Array();
    var zNoLiveCacheFound = false;
    var x,zSplitPair,zNewURL;
    aBeforeNoLiveCache = (aBeforeNoLiveCache===true||aBeforeNoLiveCache=='Y' ? true:(aBeforeNoLiveCache=='N'||aBeforeNoLiveCache===false) ? false:true);
    if(zURLParts.length>1){
      var zParamPairs = zURLParts[1].split('&');
      for (x=0; x<zParamPairs.length; x++) {
        zSplitPair = zParamPairs[x].split('=');
        if(zSplitPair[0].toLowerCase()=='_nolivecache'){
          zNoLiveCacheFound = true;
        }
        if(zSplitPair[0].toLowerCase()!=aVarName.toLowerCase()&&zSplitPair[0].toLowerCase()!='_nolivecache'){
          if(!zNoLiveCacheFound){
            zVarsBeforeNoLiveCache[zVarsBeforeNoLiveCache.length] = zSplitPair[0] + '=' + (zSplitPair[1] ? zSplitPair[1]:'');
          }else{
            zVarsAfterNoLiveCache[zVarsAfterNoLiveCache.length] = zSplitPair[0] + '=' + (zSplitPair[1] ? zSplitPair[1]:'');
          }
        }
      }
    }
    if(aBeforeNoLiveCache){
      zVarsBeforeNoLiveCache[zVarsBeforeNoLiveCache.length] = zNewString;
    }else{
      zVarsAfterNoLiveCache[zVarsAfterNoLiveCache.length] = zNewString;
    }
    zNewURL = zURLParts[0] + '?' + zVarsBeforeNoLiveCache.join('&') + (zVarsAfterNoLiveCache.length>0 ? (zVarsBeforeNoLiveCache.length>0 ? '&':'') + '_nolivecache=Y&' + zVarsAfterNoLiveCache.join('&'):'')
    if(zHashSplit.length > 1) {
      return zNewURL + '#' + zHashSplit[1];
    } else {
      return zNewURL;
    }
  },
  setHashVariable: function(aVarName,aValue){
    var zHashSplit = this.split("#");
    var zVarString = zHashSplit[zHashSplit.length-1];
    var zParamPairs = zVarString.split("&");
    var zSplitPair;
    var zVarFound = false;
    for(var i = 0; i < zParamPairs.length; i++) {
      zSplitPair = zParamPairs[i].split("=");
      if(zSplitPair[0].toLowerCase()==aVarName.toLowerCase()) {
        zParamPairs[i] = aVarName+"="+aValue;
        zVarFound = true;
      }
    }
    if(!zVarFound) {
      zParamPairs.push(aVarName+"="+aValue);
    }
    zHashSplit[zHashSplit.length-1] = zParamPairs.join("&");
    return zHashSplit.join("#");
  }
});
    // ---------------------- End Action_Include_String ----------------- //
    // ---------------------- Begin Action_Include_DOM --------------- //
var DOM = {
  onLoad: function(aFunction,aParamObject) {
    if (!window.__load_events) {
      var init = function () {
        if (arguments.callee.done) return true;
        arguments.callee.done = true;
        if (window.__load_timer) {
          clearInterval(window.__load_timer);
          window.__load_timer = null;
        }
        for (var i=0;i < window.__load_events.length;i++) {
          window.__load_events[i].Function(window.__load_events[i].Params);
        }
        window.__load_events = null;
        return true;
      };
      if (document.addEventListener) {
        document.addEventListener("DOMContentLoaded", init, false);
      }
      if(/Konqueror|WebKit|Safari|KHTML/.test(navigator.userAgent)) {
        window.__load_timer = setInterval(function() {
          if (/loaded|complete/.test(document.readyState)) {
            init();
          }
        }, 10);
      }
      /*@cc_on @*/
      /*@if (@_win32)
        document.write('<scr'+'ipt id="__ie_onload" defer s'+'rc="/home.blankjs"><\/scr'+'ipt>');
        var script = document.getElementById('__ie_onload');
        script.onreadystatechange = function() {
          if (this.readyState == 'complete') {
            init();
          }
        };
      /*@end @*/
      DOM.addEvent(window, "onload", init, aParamObject);
      window.__load_events = [];
    }
    window.__load_events.push({Function:aFunction,Params:aParamObject});
  },
  getElementsWithAttribute: function(aAttribute,aValue,aTagName,aElement) {
    var i, zElements = new Array(), zAllElements = (aElement || document).getElementsByTagName(aTagName || "*");
    for(i = 0; i < zAllElements.length; i++) {
      if(!aAttribute||DOM.hasAttribute(zAllElements[i],aAttribute,aValue)) {
        zElements.push(zAllElements[i]);
      }
    }
    return zElements;
  },
  getElementsWithClassName: function(elementName,className,aSourceElement) {
    if (!aSourceElement) {aSourceElement = document};
    var allElements = aSourceElement.getElementsByTagName(elementName);
    var elemColl = new Array();
    for(var i = 0; i< allElements.length; i++) {
      if(allElements[i].className.isClass(className)) {
        elemColl[elemColl.length] = allElements[i];
      }
    }
    return elemColl;
  },
  addEvent: function (aElement, aEvent, aFunction, aParamObject, aAdditionalParams){
    if (!aElement) {
      Util.logErrorAdvanced("addEvent("+aEvent+") with no Element",
                            "Event: "+aEvent,
                            aParamObject, aFunction, DOM.addEvent.caller);
      return true;
    }
    var zElementFunctions = aEvent +'Functions';
    if (aElement[zElementFunctions]){
      aElement[zElementFunctions][aElement[zElementFunctions].length] = { Function: aFunction, Params: aParamObject, AdditionalParams: aAdditionalParams };
    } else {
      aElement[zElementFunctions] = [];
      if (aElement[aEvent]){
        aElement[aEvent + 'OriginalFunction'] = aElement[aEvent];
      }
      aElement[zElementFunctions][aElement[zElementFunctions].length] = { Function: aFunction, Params: aParamObject, AdditionalParams: aAdditionalParams };
      aElement[aEvent] = DOM.runEvent;
    }
    return true;
  },
  runEvent: function(e){
    e = (e ? e:window.event);
    var zElement;
    if (e.target) {zElement = e.target}
    else if (e.srcElement) {zElement = e.srcElement}
    else zElement = document.body; 
    if (zElement.nodeType && zElement.nodeType == 3) {
    	zElement = zElement.parentNode;
    }
    try {if (!e.originalTarget) {e.originalTarget = this}} catch(e) {};
    var zEvent = "on"+e.type;
    var zElementFunctions = zEvent+"Functions"; 
    var zLength = (this[zElementFunctions] && this[zElementFunctions].length) ? this[zElementFunctions].length : 0;
    for (var x=0;x<zLength;x++){
      zElement.TempFunc = this[zElementFunctions][x].Function;
      var zThisEvent = this[zElementFunctions][x],
          zReturn;
      if(!zThisEvent.AdditionalParams || !zThisEvent.AdditionalParams.BindTo) {
        if(!zThisEvent.AdditionalParams || !zThisEvent.AdditionalParams.NoEvent){
          zReturn = zElement.TempFunc(e, zThisEvent.Params);
        } else {
          zReturn = zElement.TempFunc(zThisEvent.Params);
        }
      } else {
        var zObjectToBindTo = zThisEvent.AdditionalParams.BindTo;
        if (typeof zElement.TempFunc === "string") {
          aElement.TempFunc = zObjectToBindTo[zElement.TempFunc];
        }
        if(!zThisEvent.AdditionalParams || !zThisEvent.AdditionalParams.NoEvent){
          zReturn = zElement.TempFunc.apply(zObjectToBindTo,[e,zThisEvent.Params]);
        } else {
          zReturn = zElement.TempFunc.apply(zObjectToBindTo,[zThisEvent.Params]);
        }
      }
      if(!zReturn) {
        return false;
      }
    }
    if(zElement[zEvent+"OriginalFunction"]){
      zElement.TempFunc = zElement[zEvent+"OriginalFunction"];
      if(!zElement.TempFunc(e)){
        return false;
      }
    }
    return true;
  },
  removeEvent: function(aElement, aEvent, aFunction, aParamObject, aAdditionalParams){
    if (!aElement) {
      Util.logErrorAdvanced("removeEvent("+aEvent+") with no Element",
                            "Event: "+aEvent,
                            aParamObject, aFunction, DOM.removeEvent.caller);
      return true;
    }
    if(aElement[aEvent+'Functions']){
      for(var i=aElement[aEvent+'Functions'].length-1;i>=0;i--){
        var zThisEvent = aElement[aEvent+'Functions'][i];
        if(!aFunction||zThisEvent.Function==aFunction){
          if(!aParamObject||aParamObject==zThisEvent.Params){
            if(!aAdditionalParams||!aAdditionalParams.BindTo||aAdditionalParams.BindTo==zThisEvent.AdditionalParams.BindTo){
              aElement[aEvent+'Functions'].splice(i,1);
            }
          }
        }
      }
    }
    return true;
  },
  fixEvent: function(aEvent){
    aEvent = (aEvent ? aEvent:window.event);
    if(typeof(aEvent.target)=='undefined'){
      aEvent.target = aEvent.srcElement;
    }
    if(!aEvent.srcElement && aEvent.target){
      aEvent.srcElement = aEvent.target;
    }
    return aEvent;
  },
  linkObject: function(aElement, aReference, aObject){
    if (!aElement.LinkedObjectArray) {aElement.LinkedObjectArray = []};
    if (!aElement.LinkedObjectArray.contains(aReference)){
      aElement.LinkedObjectArray.append(aReference);
    }
    aElement[aReference] = aObject;
    return true;
  },
  unlinkObject: function(aElement, aReference){
    aElement[aReference] = null;
    return true;
  },
  linkDOMObject: function(aElement, aReference, aDOMObject){
    if (!aElement.LinkedDOMObjectArray) {aElement.LinkedDOMObjectArray = []};
    if (!aElement.LinkedDOMObjectArray.contains(aReference)){
      aElement.LinkedDOMObjectArray.append(aReference);
    }
    aElement[aReference] = aDOMObject;
    return true;
  },
  unlinkDOMObject: function(aElement, aReference){
    aElement[aReference] = null;
    return true;
  },
  addEventSimple: function(aElement,aEvent,aFunction) {
    if (aElement.addEventListener)
      aElement.addEventListener(aEvent,aFunction,false);
    else if (aElement.attachEvent)
      aElement.attachEvent("on"+aEvent,aFunction);
  },
  removeEventSimple: function(aElement,aEvent,aFunction) {
    if (aElement.removeEventListener)
      aElement.removeEventListener(aEvent,aFunction,false);
    else if (aElement.detachEvent)
      aElement.detachEvent("on"+aEvent,aFunction);
  },
  cancelBubble: function(e){
   	if (!e) e = window.event;
   	e.cancelBubble = true;
   	if (e.stopPropagation) e.stopPropagation();
    return true;
  },
  getEventCoordinates: function(e,aElement) {
    var zResults, zCoords;
    if(aElement) {
      zCoords = DOM.getAbsolutePosition(aElement);
      zResults = {x: (e.clientX-zCoords.x), y: (e.clientY-zCoords.y)};
    }
    else {
      zResults = {x: (e.clientX), y: (e.clientY)};
    }
    return zResults;
  },
  getAbsolutePosition: function( aElement, aMinusScrollTop ){
    var zScrollTop = aMinusScrollTop ? aElement.scrollTop : 0;
    var zReturn    = { x:aElement.offsetLeft, y:aElement.offsetTop - zScrollTop };
    if(aElement.offsetParent && aElement.offsetParent.nodeName != "BODY") {
      var tmp = DOM.getAbsolutePosition(aElement.offsetParent,aMinusScrollTop);
      zReturn.x += tmp.x;
      zReturn.y += tmp.y;
    }
    return zReturn;
  },
  getScrollTop: function( aElement ) {
    var zTop = 0;
    if( aElement && aElement != document.body ) {
      zTop = aElement.scrollTop;
    } else if ( window.innerHeight ) {
      zTop = window.pageYOffset;
    } else if ( document.documentElement && document.documentElement.scrollTop ) {
      zTop = document.documentElement.scrollTop;
    } else if ( document.body ) {
      zTop = document.body.scrollTop;
    }
    return zTop;
  },
  placeElementInView: function(aElement, aContainerElement, aLeft, aTop) {
    if(!aContainerElement) {
      aContainerElement = document.body
    }
    var zViewableAreaHeight, zViewableAreaWidth, zElementHeight, zElementWidth, zAdjustHeight, zUseLeft, zUseTop, zScrollTop;
    zScrollTop = getScrollTop(aContainerElement);
    zUseLeft = aLeft + aContainerElement.scrollLeft;
    zUseTop = aTop + zScrollTop;
    zElementHeight = (aElement.style.pixelHeight) ? aElement.style.pixelHeight : aElement.scrollHeight;
    zElementWidth = (aElement.style.pixelWidth) ? aElement.style.pixelWidth : aElement.scrollWidth;
    if( aContainerElement == document.body ) {
      var zTrueBodyHeight;
      if(aContainerElement.style.pixelHeight) {
        zTrueBodyHeight = aContainerElement.style.pixelHeight;
      }
      else {
        zTrueBodyHeight = aContainerElement.scrollHeight;
      }
      var zTempContainer = document.createElement('div');
      zTempContainer.setAttribute("width", "100%");
      zTempContainer.setAttribute("height", "100%");
      zTempContainer.style.position = "absolute";
      zTempContainer.style.top = "0px";
      zTempContainer.style.left = "0px";
      zTempContainer.style.width = "100%";
      if( DOM.Browser ) {
        if(!(DOM.Browser.isIE && DOM.Browser.isMac)) {
          zTempContainer.style.height = "100%";
        }
      } else {
        zTempContainer.style.height = "100%";
      }
      var zActiveTempContainer = document.body.appendChild(zTempContainer);
      var zTempContainerHeight;
      if( zActiveTempContainer.style.pixelHeight && typeof( zActiveTempContainer.style.pixelHeight ) == 'number' ) {
        zTempContainerHeight = zActiveTempContainer.style.pixelHeight;
      } else {
        zTempContainerHeight = zActiveTempContainer.scrollHeight;
      }
      zViewableAreaHeight = Math.max( zTempContainerHeight, zTrueBodyHeight );
      document.body.removeChild(zActiveTempContainer);
    } else {
      if( aContainerElement.style.pixelHeight ) {
        zViewableAreaHeight = aContainerElement.style.pixelHeight;
      } else {
        zViewableAreaHeight = aContainerElement.scrollHeight;
      }
    }
    zViewableAreaHeight -= zScrollTop;
    zViewableAreaWidth   = aContainerElement.scrollWidth - aContainerElement.scrollLeft;
    aElement.style.top   = Math.max(0,Math.min((zUseTop),(zViewableAreaHeight-zElementHeight+zScrollTop-20))) + 'px';
    aElement.style.left  = Math.max(0,Math.min((zUseLeft),(zViewableAreaWidth-zElementWidth+aContainerElement.scrollLeft-20)))  + 'px';
    return true;
  },
  getMaxHeight: function(aStartYCoord, aOnlyVisible) {
    var y;
    if ( typeof( aStartYCoord ) == "object" ) {
      y  = DOM.getAbsolutePosition( aStartYCoord ).y;
      y -= DOM.getScrollTop();
    } else {
      y = aStartYCoord;
    }
    if ( typeof( y ) != "number" )  return 0;
    var zBodyHeight = aOnlyVisible ? document.body.offsetHeight : document.body.scrollHeight;
    var dy = zBodyHeight - y;
    return dy > 0 ? dy: 0;
  },
  getMaxHeightFromBottom: function( aEndYCoord, aOnlyVisible) {
    var zBodyHeight = aOnlyVisible ? document.body.offsetHeight : document.body.scrollHeight;
    var zStartYCoord = zBodyHeight - aEndYCoord;
    return this.getMaxHeight( zStartYCoord, aOnlyVisible );
  },
  disableSelection: function(target) {
    if (typeof target.onselectstart != "undefined") //IE route
      DOM.addEvent(target, "onselectstart", function() {return false});
    else if (typeof target.style.MozUserSelect != "undefined") //Firefox route
      target.style.MozUserSelect = "none";
    else //All other route (ie: Opera)
      DOM.addEvent(target, "onmousedown", function(){return false});
    return true;
  },
  addClass: function(aElement,aClass){
    if (!aElement) {
      return true;
    }
    aElement.className = aElement.className.addClass(aClass);
    return true;
  },
  removeClass: function(aElement,aClass){
    if (!aElement) {
      return true;
    }
    aElement.className = aElement.className.removeClass(aClass);
    return true;
  },
  replaceClass: function(aElement,aOldClass,aNewClass){
    if (!aElement) {
      return true;
    }
    aElement.className = aElement.className.replaceClass(aOldClass,aNewClass);
    return true;
  },
  hasAttribute: function(aElement,aAttribute,aValue) {
    if(!aAttribute) {
      return false;
    }
    if(aAttribute == "class" || aAttribute == "className") {
      if(!aValue) {
        return !!(aElement.className);
      }
      return aElement.className.isClass(aValue);
    } else if(aAttribute == "for" || aAttribute == "htmlFor") {
      return ((aElement["htmlFor"] && aElement["htmlFor"] == aValue) || (aElement.getAttribute("for") && aElement.getAttribute("for") == aValue));
    } else {
      if(!aValue) {
        return !!(aElement.getAttribute(aAttribute));
      }
      return (aElement.getAttribute(aAttribute) == aValue);
    }
    return false;
  },
  createElement: function(aTagName,aId,aClassName,aStyle) {
    var zElement = document.createElement(aTagName);
    if(aId) {
      zElement.setAttribute("name",aId);
      zElement.setAttribute("id",aId);
    }
    if(aClassName) {
      zElement.setAttribute("class", aClassName);
      zElement.setAttribute("className", aClassName);
    }
    if(aStyle) {
      zElement.setAttribute("style",aStyle);
    }
    return zElement;
  },
  createImage: function(aSource,aWidth,aHeight,aId,aClassName,aStyle) {
    var zImageElement = DOM.createElement('img',aId,aClassName,aStyle);
    if (aSource) {
      var zImageInfo = new Image();
      zImageInfo.src = aSource;
      zImageElement.setAttribute('src', zImageInfo.src);
    }
    if (aWidth) {
      zImageElement.setAttribute('width', aWidth);
    }
    if (aHeight) {
      zImageElement.setAttribute('height', aHeight);
    }
    return zImageElement;
  },
  createTextElement: function(aTagName,aId,aClassName,aStyle,aInnerText) {
    var zElement = DOM.createElement(aTagName,aId,aClassName,aStyle);
    zElement.innerHTML = aInnerText;
    return zElement;
  },
  createRemoveElement: function(aParentElement, aId, aFunc, aParams) {
    var zRemoveElement = DOM.createElement('span', aId, 'remove-element-item');
    zRemoveElement.innerHTML = "x";
    aParentElement.style.overflow = "visible";
    DOM.addEvent(zRemoveElement, "onmousedown", aFunc, aParams);
    aParentElement.insertBefore(zRemoveElement, aParentElement.childNodes[0]);
    return true;
  },
  insertFlash: function(aParentElement, aSrc, aId, aWidth, aHeight, aVersion, aFlashParams){
    aVersion = aVersion || 8;
    aWidth = aWidth || aParentElement.offsetWidth;
    aHeight = aHeight || aParentElement.offsetHeight;
    if(aParentElement && DOM.Browser.hasFlash && parseInt(DOM.Browser.flashVersion) >= aVersion){
      var objStart = '<object id="' + aId + '"'
              + ((window.ActiveXObject)? ' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" data="' + aSrc + '"' : '')
              + ' width="' + aWidth + '" height="' + aHeight + '"'
              + ' wmode="opaque">'
              + '<param name="movie" value="' + aSrc + '">'
              + '<param name="wmode" value="opaque">'
              + '<param name="allowScriptAccess" value="always">'
              + '<param name="allowFullScreen" value="true">';
      var extraParams = [];
      var extraAttributes = [];
      for(var i in aFlashParams){
        extraParams.push('<param name="' + i + '" value="' + aFlashParams[i] + '">');
        extraAttributes.push(' ' + i + '="' + aFlashParams[i] + '"');
      }
      var embed = '<embed id="' + aId + '" name="' + aId + '" src="' + aSrc + '" type="application/x-shockwave-flash" width="' + aWidth + '" height="' + aHeight + '" allowFullScreen="true" wmode="opaque" allowScriptAccess="always"'
      embed  += extraAttributes.join('')
                + '></embed>';
      var objEnd = '</object>';
      DOM.replaceContent(aParentElement);
      aParentElement.innerHTML = objStart + extraParams.join('\n') + embed + objEnd;
    }
    return true;
  },
  selectElement: function(aElement, aClass, aParentElement) {
    aClass = aClass || "Selected";
    if(DOM.hasAttribute(aElement,"SelectGroup")) {
      DOM.getElementsWithAttribute("SelectGroup",aElement.getAttribute("SelectGroup"), "*", aParentElement).forEach(function(aGroupElement){
        if(aGroupElement != aElement) {
          DOM.deSelectElement(aGroupElement, aClass);
        }
      });
    }
    aElement.setAttribute("IsSelected","Y");
    DOM.addClass(aElement,aClass);
    return true;
  },
  deSelectElement: function(aElement, aClass) {
    aClass = aClass || "Selected";
    aElement.setAttribute("IsSelected","N");
    DOM.removeClass(aElement,aClass);
    if(DOM.hasAttribute(aElement,"SelectInput")) {
      document.getElementById(aElement.getAttribute("SelectInput")).checked = false;
    }
    return true;
  },
  makeSelectable: function(aElement, aClass, aOnSelectFunction, aOnDeSelectFunction) {
    aClass = aClass || "Selected";
    if(DOM.hasAttribute(aElement,"IsSelected","Y")) {
      DOM.selectElement(aElement);
    }
    else {
      aElement.setAttribute("IsSelected","N");
    }
    DOM.addEvent(aElement, "onclick", DOM.toggleSelectElement, {Element: aElement, Class: aClass, OnSelectFunction: aOnSelectFunction, OnDeSelectFunction: aOnDeSelectFunction});
    return true;
  },
  toggleSelectElement: function(e,aParams) {
    if(DOM.hasAttribute(aParams.Element,"IsSelected","Y")) {
      DOM.deSelectElement(aParams.Element, aParams.Class);
      if(aParams.OnDeSelectFunction) {
        aParams.OnDeSelectFunction(aParams.Element);
      }
    }
    else {
      DOM.selectElement(aParams.Element, aParams.Class);
      if(aParams.OnSelectFunction) {
        aParams.OnSelectFunction(aParams.Element);
      }
    }
    return true;
  },
  makeHoverable: function(aElement, aHoverClass) {
    var zHoverClass = aHoverClass || aElement.getAttribute('hoverclass') || "Hover";
    DOM.addEvent(aElement, "onmouseover", function(e,aElement) {DOM.addClass(aElement,zHoverClass); return true;}, aElement);
    DOM.addEvent(aElement, "onmouseout", function(e,aElement) {DOM.removeClass(aElement,zHoverClass); return true;}, aElement);
  },
  getIEGarbageBin: function() {
    var zGarbageBin = document.getElementById('IELeakGarbageBin');
    if (!zGarbageBin) {
      zGarbageBin = document.createElement('DIV');
      zGarbageBin.id = 'IELeakGarbageBin';
      zGarbageBin.style.display = 'none';
      document.body.appendChild(zGarbageBin);
    }
    return zGarbageBin;
  },
  removeElement: function(aElement) {
    DOM.objectHousekeep(aElement);
    if (DOM.Browser.isIE) {
      var zGarbageBin = DOM.getIEGarbageBin();
      zGarbageBin.appendChild(aElement);
      zGarbageBin.innerHTML = "";
    } else {
      aElement.parentNode.removeChild(aElement);
    }
  },
  replaceContent: function(aParentElement, aNewElement, aProcessContent) {
    if (aParentElement){
      if (DOM.Browser.isIE) {
        var zGarbageBin = DOM.getIEGarbageBin();
      }
      var zLen = aParentElement.childNodes.length;
      for(var i = zLen-1; i >= 0; i--) {
        if (aParentElement.childNodes[i]) {
          DOM.objectHousekeep(aParentElement.childNodes[i]);
          if (DOM.Browser.isIE) {
            zGarbageBin.appendChild(aParentElement.childNodes[i]);
            zGarbageBin.innerHTML = "";
          } else {
            aParentElement.removeChild(aParentElement.childNodes[i]);
          }
        }
      }
    }
    if (aNewElement){
      if (typeof(aNewElement)=="string") {
        aParentElement.innerHTML = aNewElement;
      } else {
        aParentElement.appendChild(aNewElement);
      }
    }
    if (aProcessContent) {
      DOM.processHTML(aParentElement);
    }
    return true;
  },
  extractContent: function(aElement, aMethod) {
    if(!aElement) {
      return false;
    }
    var zContentArray = [];
    var zMethod       = (aMethod && aMethod != "") ? aMethod.toLowerCase() : "reference";
    if(zMethod == "reference") {
      for(var i = 0; i < aElement.childNodes.length; i++) {
        zContentArray.push(aElement.childNodes[i]);
      }
    } else if (zMethod == "copy") {
      for(var i = 0; i < aElement.childNodes.length; i++) {
        zContentArray.push(aElement.childNodes[i].cloneNode());
      }
    } else if (zMethod == "remove") {
      while(aElement.childNodes[0]) {
        zContentArray.push(aElement.removeChild(aElement.childNodes[0]));
      }
    }
    return zContentArray;
  },
  purgeEvents: function(aElement) {
    return DOM.objectHousekeep(aElement);
  },
  objectHousekeep: function(aElement) {
    if (!aElement) {return true}
    if (aElement.DisableHousekeeping) {
      return true;
    }
    if (aElement.onunload) {
      aElement.onunload = null; 
      DOM.runEvent.call(aElement, {target:aElement,type:"unload"});
      aElement.onunloadFunctions = null;
    }
    var i, zLen;
    if (aElement.attributes) {
      var a = aElement.attributes, n;
      zLen = a.length;
      for (i = 0; i < zLen; i++) {
        n = a[i].name;
        if (typeof aElement[n] === 'function') {
          aElement[n] = null;
          if (aElement[n+"Functions"]) {
            aElement[n+"Functions"] = null;
          }
        }
      }
    }
    if (aElement.TempFunc) {aElement.TempFunc = null};
    if (aElement.ResizeSettings) {aElement.ResizeSettings = null}
    if (aElement.List) {aElement.List = null}
    if (aElement.SubItemList) {aElement.SubItemList = null}
    if (aElement.LinkedObjectArray) {
      zLen = aElement.LinkedObjectArray.length;
      for (i = 0; i < zLen; i ++) {
        aElement[aElement.LinkedObjectArray[i]] = null;
      }
      aElement.LinkedObjectArray = null;
    }
    if (aElement.LinkedDOMObjectArray) {
      zLen = aElement.LinkedDOMObjectArray.length;
      for (i = 0; i < zLen; i ++) {
        aElement[aElement.LinkedDOMObjectArray[i]] = null;
      }
      aElement.LinkedDOMObjectArray = null;
    }
    if (aElement.childNodes) {
      zLen = aElement.childNodes.length;
      for (i = 0; i < zLen; i ++) {
        DOM.objectHousekeep(aElement.childNodes[i]);
      }
    }
    return true;
  },
  processHTML: function(aElement) {
    URI.fixLinks(aElement);
    return true;
  },
  cleanWhitespace: function(aElement,aRecurse) {
    var node = aElement.firstChild;
    while (node) {
      var nextNode = node.nextSibling;
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
        aElement.removeChild(node);
      }
      else if(node.nodeType == 1 && isTrue(aRecurse)) {
        cleanWhitespace(aElement.childNodes[i],aRecurse);
      }
      node = nextNode;
    }
    return aElement;
  },
  insertAfter: function(newElement, targetElement) {
    var parent = targetElement.parentNode;
    if (parent.lastChild == targetElement) {
      parent.appendChild(newElement);
    }
    else {
      parent.insertBefore(newElement, targetElement.nextSibling);
    }
  },
  createActionElement: function(aTagName, aOnclickFunc, aInnerTxt, aParams) {
    var zClickAbleElement = document.createElement("span");
    DOM.addClass(zClickAbleElement, 'action-container');
    zClickAbleElement.innerHTML = '+';
    DOM.addEvent(zClickAbleElement, "onclick", aOnclickFunc, aParams);
    var zActionElement = document.createElement(aTagName);
    var zActionText = document.createTextNode(aInnerTxt);
    zActionElement.appendChild(zClickAbleElement);
    zActionElement.appendChild(zActionText);
    DOM.addClass(zActionElement, 'action-element');
    zActionElement.appendChild(zActionText);
    return zActionElement;
  },
  drawBubble: function(zContainerElement, aParams) {
    aParams = aParams || {};
    zContainerClass = aParams.ContainerClass || "ActionUI_SingleItemContainer";
    DOM.addClass( zContainerElement, zContainerClass );
    DOM.addClass( zContainerElement, "ActionUI_Container" );
    DOM.addClass( zContainerElement, "ActionUI_Bubble" );
    var zDivArray = aParams.DivArray || ["BottomRow","TopLeft","LeftBackground","TopRow","BottomLeft","TopRight","RightColumn","BottomRight","InLineHelp","Content"];
    var zDivs = {};
    zDivArray.forEach(function( aDivName ){
      zDivs[aDivName] = document.createElement("div");
      zContainerElement.appendChild( zDivs[aDivName] );
      DOM.addClass( zDivs[aDivName], "ActionUI_" + aDivName );
    });
    zContainerElement.ResizeSettings = { Width: "100%", Height: "100%", MakeEven: "Y" };
    zDivs.Content.ResizeSettings     = { Padding: 5, Width: "*", Height: "*", Left: 0 };
    return zDivs;
  },
  getIframeDocument: function(aIframe) {
    return aIframe.contentDocument || aIframe.contentWindow || aIframe.document;
  },
  browserDetect: function() {
    var ua = navigator.userAgent.toLowerCase();
    this.isGecko       = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
    this.isAppleWebKit = (ua.indexOf('applewebkit') != -1);
    this.isWebKit = /webkit/.test(ua);
    this.isKonqueror   = (ua.indexOf('konqueror') != -1);
    this.isSafari      = (ua.indexOf('safari') != - 1);
    this.isOmniweb     = (ua.indexOf('omniweb') != - 1);
    this.isOpera       = (ua.indexOf('opera') != -1);
    this.isIcab        = (ua.indexOf('icab') != -1);
    this.isAol         = (ua.indexOf('aol') != -1);
    this.isIE          = (ua.indexOf('msie') != -1 && !this.isOpera && (ua.indexOf('webtv') == -1) );
    this.isMozilla     = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
    this.isFirefox     = (ua.indexOf('firefox/') != -1 || ua.indexOf('firebird/') != -1);
    this.isNS          = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && !this.isOpera && !this.isSafari && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
    this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
    this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);
    this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
    this.equivalentMozilla = ( (this.isGecko) ? parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) ) : -1 );
    this.appleWebKitVersion = ( (this.isAppleWebKit) ? parseFloat( ua.substring( ua.indexOf('applewebkit/') + 12) ) : -1 );
    this.webKitVersion =  (this.isWebKit) ? parseFloat(ua.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : -1 ;
    this.versionMinor = parseFloat(navigator.appVersion);
    if (this.isGecko && !this.isMozilla) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('/', ua.indexOf('gecko/') + 6) + 1 ) );
    } else if (this.isMozilla) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );
    } else if (this.isIE && this.versionMinor >= 4) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
    } else if (this.isKonqueror) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
    } else if (this.isSafari) {
      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('safari/') + 7 ) );
    } else if (this.isOmniweb) {
      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('omniweb/') + 8 ) );
    } else if (this.isOpera) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera') + 6 ) );
    } else if (this.isIcab) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab') + 5 ) );
    }
    this.versionMajor = parseInt(this.versionMinor);
    this.isDOM1 = (document.getElementById);
    this.isDOM2Event = (document.addEventListener && document.removeEventListener);
    this.mode = document.compatMode ? document.compatMode : 'BackCompat';
    this.isWin    = (ua.indexOf('win') != -1);
    this.isWin32  = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
    this.isMac    = (ua.indexOf('mac') != -1);
    this.isUnix   = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
    this.isLinux  = (ua.indexOf('linux') != -1);
    this.isNS4x = (this.isNS && this.versionMajor == 4);
    this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
    this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
    this.isNS4up = (this.isNS && this.versionMinor >= 4);
    this.isNS6x = (this.isNS && this.versionMajor == 6);
    this.isNS6up = (this.isNS && this.versionMajor >= 6);
    this.isNS7x = (this.isNS && this.versionMajor == 7);
    this.isNS7up = (this.isNS && this.versionMajor >= 7);
    this.isIE4x = (this.isIE && this.versionMajor == 4);
    this.isIE4up = (this.isIE && this.versionMajor >= 4);
    this.isIE5x = (this.isIE && this.versionMajor == 5);
    this.isIE55 = (this.isIE && this.versionMinor == 5.5);
    this.isIE5up = (this.isIE && this.versionMajor >= 5);
    this.isIE6x = (this.isIE && this.versionMajor == 6);
    this.isIE6up = (this.isIE && this.versionMajor >= 6);
    this.isIE4xMac = (this.isIE4x && this.isMac);
    this.isFirefox3 = (this.isFirefox && this.versionMajor == 3);
    function GetFlashVersion() {
      var x,y,i;
      if (navigator.plugins && navigator.plugins.length) {
        x = navigator.plugins["Shockwave Flash"];
        if (x) {
          if (x.description) {
            var y = x.description;
            var zPos = y.indexOf('.');
            var zEnd = y.charAt(zPos-1);
            var zStart = y.charAt(zPos-2);
            if (zStart != ' ') {
              return zStart+zEnd;
            } else {
              return zEnd;
            }            
          }
        } else {
          return -1;
        }
        if (navigator.plugins["Shockwave Flash 2.0"]) {
          return 2;
        }
      } else if (navigator.mimeTypes && navigator.mimeTypes.length) {
        x = navigator.mimeTypes["application/x-shockwave-flash"];
        if (x && x.enabledPlugin){
          return 1;
        } else {
          return -1;
        }
      } else {
        for (i=15; i>0; i--){
         try{
            new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i);
            return i;
          } catch(e){
          }
        }
      }
      return -1;
    }
    this.flashVersion = GetFlashVersion();
    this.hasFlash = (this.flashVersion>0);
    this.isWMP = false;
    this.isWMP64 = false;
    this.isWMP7up = false;
    if (this.isWin && this.isIE4up) {
      var objMediaPlayer;
      try {
        objMediaPlayer = new ActiveXObject("MediaPlayer.MediaPlayer.1");
        this.isWMP = true;
        this.isWMP64 = true;
      }
      catch(objError) {
        this.isWMP = false;
        this.isWMP64 = false;
      }
      if (this.isWMP) {
        try {
          objMediaPlayer = new ActiveXObject("WMPlayer.OCX");
          this.isWMP7up = true;
        }
        catch(objError) {
          this.isWMP7up = false;
        }
      }
    }
    else {  
      var numPlugins = navigator.plugins.length;
      for (var i = 0; i < numPlugins; i++) {
        if (navigator.plugins[i].name.substring(0,20)=="Windows Media Player") {
          this.isWMP = true;
          this.isWMP64 = true;
        }
      }
    }
    if (this.isWMP7up) {
      this.WMPVer = objMediaPlayer.versionInfo;
      objMediaPlayer = null;
    } else {
      this.WMPVer = "6.4";
    }
    this.WMPVerMinor = parseFloat(this.WMPVer);
    this.WMPVerMajor = parseInt(this.WMPVerMinor);
    this.isWMP7 = (this.WMPVerMinor == 7.0);
    this.isWMP71 = (this.WMPVerMinor == 7.1);
    this.isWMP8 = (this.WMPVerMajor == 8);
    this.isWMP9 = (this.WMPVerMajor == 9);
    this.isWMP71up = (this.WMPVerMinor >= 7.1);
    this.isWMP8up = (this.WMPVerMinor >= 8);
    this.isWMP9up = (this.WMPVerMinor >= 9);
  },
  placeElementInView:function(aElement, aContainerElement, aLeft, aTop) {
    if(!aContainerElement) {
      aContainerElement = document.body
    }
    var zViewableAreaHeight,zViewableAreaWidth,zElementHeight,zElementWidth,zAdjustHeight,zUseLeft,zUseTop,zScrollTop;
    function getScrollTop(aElement) {
      var zTop = 0;
      if(aElement && aElement != document.body) {
        zTop = aElement.scrollTop;
      } else if (window.innerHeight) {
        zTop = window.pageYOffset;
      } else if (document.documentElement && document.documentElement.scrollTop) {
        zTop = document.documentElement.scrollTop;
      } else if (document.body) {
        zTop = document.body.scrollTop;
      }
      return zTop;
    }
    zScrollTop = getScrollTop(aContainerElement);
    zUseLeft = aLeft + aContainerElement.scrollLeft;
    zUseTop = aTop + zScrollTop;
    zElementHeight = (aElement.style.pixelHeight) ? aElement.style.pixelHeight : aElement.scrollHeight;
    zElementWidth = (aElement.style.pixelWidth) ? aElement.style.pixelWidth : aElement.scrollWidth;
    if(aContainerElement == document.body) {
      var zTrueBodyHeight;
      if(aContainerElement.style.pixelHeight) {
        zTrueBodyHeight = aContainerElement.style.pixelHeight;
      } else {
        zTrueBodyHeight = aContainerElement.scrollHeight;
      }
      var zTempContainer = document.createElement('div');
      zTempContainer.setAttribute("width", "100%");
      zTempContainer.setAttribute("height", "100%");
      zTempContainer.style.position = "absolute";
      zTempContainer.style.top = "0px";
      zTempContainer.style.left = "0px";
      zTempContainer.style.width = "100%";
      if(DOM.Browser) {
        if(!(DOM.Browser.isIE && DOM.Browser.isMac)) {
          zTempContainer.style.height = "100%";
        }
      } else {
          zTempContainer.style.height = "100%";
      }
      var zActiveTempContainer = document.body.appendChild(zTempContainer);
      var zTempContainerHeight;
      if(zActiveTempContainer.style.pixelHeight && typeof(zActiveTempContainer.style.pixelHeight) == 'number') {
        zTempContainerHeight = zActiveTempContainer.style.pixelHeight;
      } else {
        zTempContainerHeight = zActiveTempContainer.scrollHeight;
      }
      zViewableAreaHeight = Math.max(zTempContainerHeight,zTrueBodyHeight);
      document.body.removeChild(zActiveTempContainer);
    } else {
      if(aContainerElement.style.pixelHeight) {
        zViewableAreaHeight = aContainerElement.style.pixelHeight;
      } else {
        zViewableAreaHeight = aContainerElement.scrollHeight;
      }
    }
    zViewableAreaHeight -= zScrollTop;
    zViewableAreaWidth = aContainerElement.scrollWidth - aContainerElement.scrollLeft;
    aElement.style.top = Math.max(0,Math.min((zUseTop),(zViewableAreaHeight-zElementHeight+zScrollTop-20))) + 'px';
    aElement.style.left = Math.max(0,Math.min((zUseLeft),(zViewableAreaWidth-zElementWidth+aContainerElement.scrollLeft-20)))  + 'px';
  },
  Resize: {
    recurse: function(e,aElement){
      aElement = aElement || document.body;
      for(var i = 0; i < aElement.childNodes.length; i++) {
        if(aElement.childNodes[i].nodeType == 1) {
          if(aElement.childNodes[i].ResizeSettings) {
            DOM.Resize.updateElementDimensions(aElement.childNodes[i]);
          } else if (!aElement.childNodes[i].DisableResizeRecurse) {
            DOM.Resize.recurse(e,aElement.childNodes[i]);
          }
        }
      }
      return true;
    },
    initializeElement: function(aElement){
      if(aElement && !aElement.ResizeInitialized) {
        var zValue;
        ["Left","Top","Width","Height"].forEach(function(aProperty){
          zValue = aElement.ResizeSettings[aProperty];
          aElement.ResizeSettings["Update"+aProperty] = (zValue || zValue === 0);
          if(aElement.ResizeSettings["Update"+aProperty]) {
            if(zValue == "*") {
              if(aProperty == "Width" || aProperty == "Height") {
                aElement.ResizeSettings[aProperty+"Type"] =  "*";
              }
              else {
                aElement.ResizeSettings["Update"+aProperty] = false;
              }
            }
            else if(zValue.toString().indexOf("%") == -1) {
              aElement.ResizeSettings[aProperty+"Type"] =  "pixels";
              aElement.ResizeSettings[aProperty+"Value"] = parseFloat(zValue);
            }
            else {
              aElement.ResizeSettings[aProperty+"Type"] =  "percent";
              aElement.ResizeSettings[aProperty+"Value"] = parseFloat(zValue) * 0.01;
            }
          }
        });
        aElement.ResizeInitialized = true;
      }
      return true;
    },
    updateElementDimensions: function(aElement){
      if(aElement) {
        DOM.Resize.initializeElement(aElement);
        DOM.Resize.updateDimension(aElement, "Left");
        DOM.Resize.updateDimension(aElement, "Top");
        DOM.Resize.updateDimension(aElement, "Width");
        DOM.Resize.updateDimension(aElement, "Height");
        if(aElement.ResizeSettings.OnResizeFunction) {
          aElement.ResizeSettings.OnResizeFunction(aElement);
        }
        if (!aElement.DisableResizeRecurse) {
          DOM.Resize.recurse(null, aElement)
        }
      }
      return true;
    },
    updateDimension: function(aElement,aProperty) {
      if(aElement.ResizeSettings["Update"+aProperty]) {
        var zNewDimension,
          zValue = aElement.ResizeSettings[aProperty+"Value"],
          zType = aElement.ResizeSettings[aProperty+"Type"],
          zAvailableSize = (aProperty == "Left" || aProperty == "Width") ? aElement.parentNode.offsetWidth : aElement.parentNode.offsetHeight,
          zAdjust = (aProperty == "Left" || aProperty == "Top") ? aElement.ResizeSettings.Padding : 0-(2*aElement.ResizeSettings.Padding);
        if(zType == "*") {
          zAdjust = 0 - aElement.ResizeSettings.Padding;
          if(aProperty == "Width") {
            zNewDimension = zAvailableSize - aElement.offsetLeft;
          }
          if(aProperty == "Height") {
            zNewDimension = zAvailableSize - aElement.offsetTop;
          }
        } else if(zType=="pixels") {
          if(zValue < 0)
            zNewDimension= zAvailableSize + zValue;
          else
            zNewDimension = zValue;
        } else {
          zNewDimension = zValue * zAvailableSize;
        }
        if(aElement.ResizeSettings[aProperty+"Adjust"]) {
          zNewDimension += aElement.ResizeSettings[aProperty+"Adjust"];
        }
        if(zAdjust) {
          zNewDimension += zAdjust;
        }
        zNewDimension = Math.max(Math.floor(zNewDimension),0);
        if(aElement.ResizeSettings.MakeEven) {
          zNewDimension -= (zNewDimension % 2);
        }
        aElement.style[aProperty.toLowerCase()] = zNewDimension + "px";
      }
      return true;
    }
  },
  openDialogBoxes: [],
  createCollapsibleDiv: function(aId,aTitle,aContent,aParams) {
    var zId      = aId || "";
    var zTitle   = aTitle || "";
    var zContent = aContent || "";
    var zParams  = aParams || {};
    var zWidth   = (zParams.Width) ? (zParams.Width.toString().indexOf("px")>=0) ? zParams.Width : zParams.Width + "px" : "";
    var zCollapsibleDiv = DOM.createElement("div", zId, "CollapsibleDiv");
    var zTitleBar       = DOM.createElement("div", zId + "_TitleBar", "CollapsibleDiv_TitleBar");
    var zContainerDiv   = DOM.createElement("div", zId + "_Container", "CollapsibleDiv_Container");
    var zToggleBtn      = DOM.createElement("div", zId + "_Toggle", "CollapsibleDiv_Open");
    var zTitleDiv       = DOM.createElement("div", zId + "_Title", "CollapsibleDiv_Title");
    zCollapsibleDiv.style.width = zWidth;
    zTitleDiv.innerHTML         = zTitle;
    zToggleBtn.style.cssFloat   = zToggleBtn.style.styleFloat = "left";
    DOM.addEvent(zToggleBtn, "onclick",
      function(e, aParams) {
        var zObject    = aParams.Div;
        var zToggleBtn = aParams.Toggle;
        if(zObject && zObject.style) {
          if(zObject.style.display == "" || zObject.style.display == "block") {
            zObject.style.display = "none";
            DOM.removeClass(zToggleBtn, "CollapsibleDiv_Open");
            DOM.addClass(zToggleBtn, "CollapsibleDiv_Closed");
          } else {
            zObject.style.display = "block";
            DOM.removeClass(zToggleBtn, "CollapsibleDiv_Closed");
            DOM.addClass(zToggleBtn, "CollapsibleDiv_Open");
          }
        }
        return true;
      },
      {Div: zContainerDiv, Toggle: zToggleBtn}
    );
    zTitleBar.appendChild(zToggleBtn);
    zTitleBar.appendChild(zTitleDiv);
    if(typeof(zContent) == "string") {
      zContainerDiv.innerHTML = zContent;
    } else {
      DOM.addClass(zContent, "clearfix");
      zContainerDiv.appendChild(zContent);
    }
    zCollapsibleDiv.appendChild(zTitleBar);
    zCollapsibleDiv.appendChild(zContainerDiv);
    zCollapsibleDiv.ContentDiv = zContent;
    zCollapsibleDiv.TitleDiv   = zTitleDiv;
    return zCollapsibleDiv;
  },
  createCollapseDiv: function(aContainerTitle, aId, aInitialContent) {
    var zId = aId || "";
    var zCollapseDiv = DOM.createElement("div", zId, "collapseDiv");
    var zCollapseDivTitle = DOM.createElement("div", zId+"_titleBar", "collapseDiv_titleBar");
    var zCollapseDivContent = DOM.createElement("div", zId+"_content");
    zCollapseDiv.appendChild(zCollapseDivTitle);
    zCollapseDiv.appendChild(zCollapseDivContent);
    var zToggleDiv = DOM.createElement("div", zId+"_toggle", "MenuArrowDown");
    var zTitleDiv = DOM.createElement("div", zId+"_title");
    zTitleDiv.innerHTML = aContainerTitle;
    zCollapseDivTitle.appendChild(zToggleDiv);
    zCollapseDivTitle.appendChild(zTitleDiv);
    DOM.addEvent(zToggleDiv, "onclick", function(e, aElement){
      if(zCollapseDivContent.style.display == "none") {
        zCollapseDivContent.style.display = "";
        DOM.removeClass(this, "MenuArrowUp");
        DOM.addClass(this, "MenuArrowDown");
      } else {
        zCollapseDivContent.style.display = "none";
        DOM.removeClass(this, "MenuArrowDown");
        DOM.addClass(this, "MenuArrowUp");
      }
      return true;
    }, zCollapseDivContent);
    if(aInitialContent){
      if(typeof(aInitialContent)=="string"){
        zCollapseDivContent.innerHTML = aInitialContent;
      } else {
        zCollapseDivContent.appendChild(aInitialContent);
      }
    }
    return zCollapseDiv;
  },
  XULNode: null,
  supportEllipsis: function( aElement ) {
    if( document.getBoxObjectFor && window.openDialog ) {
      var sNS     = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
    	DOM.XULNode = document.createElementNS( sNS , 'window' );
    	var label   = document.createElementNS( sNS, 'description' );
      label.setAttribute( 'crop', 'end' );
      DOM.XULNode.appendChild( label );
    }
    return true;
  },
  showEllipsisOnClip: function( aElement ) {
    if ( aElement.getAttribute( "ShowEllipsis" ) != "Y" ) {
      aElement.setAttribute( "ShowEllipsis", "Y" );
      DOM.addClass( aElement, "ellipsis" );
      if ( DOM.XULNode ) {
    		var zXULNode =  DOM.XULNode.cloneNode( true );
        var zContentNode = zXULNode.firstChild;
        if ( aElement.firstChild && aElement.firstChild.nodeType == 3 && aElement.childNodes.length == 1 ) {
    	  	zXULNode.firstChild.setAttribute( 'value', aElement.textContent );
      		zXULNode.firstChild.setAttribute( 'tooltiptext', aElement.title );
          DOM.replaceContent( aElement, zXULNode );
        }
  		}
    }
    return true;
  }
}
DOM.Browser = new DOM.browserDetect();
DOM.purgeDocument = function() {
  DOM.objectHousekeep(document.body);
   return true;
}
DOM.addEvent(window, "onunload", DOM.purgeDocument);
DOM.addEvent(window, "onload", DOM.Resize.recurse);
DOM.addEvent(window, "onresize", DOM.Resize.recurse);
DOM.addEvent(window, "onload", DOM.supportEllipsis )
DOM.Graphics = {
  createElements: function(aCoordsArray, aContainer, aColor){
    aContainer = aContainer || document.body;
    aColor = aColor || "#000";
    var zDivsContainer = DOM.createElement("span");
    aCoordsArray.forEach(function(aCoords){
      var zDiv = DOM.createElement("span","","GraphicsDiv");
      zDiv.style.position = "absolute";
      zDiv.style.overflow = "hidden";
      zDiv.style.left   = aCoords[0] + "px";
      zDiv.style.top    = aCoords[1] + "px";
      zDiv.style.width  = aCoords[2] + "px";
      zDiv.style.height = aCoords[3] + "px";
      zDiv.style.backgroundColor = aColor;
      zDivsContainer.appendChild(zDiv);
    });
    aContainer.appendChild(zDivsContainer);
    return zDivsContainer;
  },
  drawLine: function(x1, y1, x2, y2, aStroke, aContainer, aColor) {
    var zAllCoords = DOM.Graphics.makeLine(x1, y1, x2, y2, aStroke);
    var zLineContainer = DOM.Graphics.createElements(zAllCoords, aContainer, aColor);
    return zLineContainer;
  },
  makeLine: function(x1, y1, x2, y2, aStroke) {
    var zDivArray = [];
    if(x1 > x2) {
      var _x2 = x2;
      var _y2 = y2;
      x2 = x1;
      y2 = y1;
      x1 = _x2;
      y1 = _y2;
    }
    var _s,
        dx = x2-x1, 
        dy = Math.abs(y2-y1),
        x = x1, 
        y = y1,
        yIncr = (y1 > y2) ? -1 : 1,
        s = aStroke || 1;
    if(dx >= dy) {
      if(dx > 0 && s-3 > 0) {
        _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx;
        _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1;
      }
      else {
        _s = s;
      }
      var ad = Math.ceil(s/2),
          pr = dy<<1,
          pru = pr - (dx<<1),
          p = pr-dx,
          ox = x;
      while(dx > 0) {
        --dx;
        ++x;
        if(p > 0) {
          zDivArray.push([ox, y, x-ox+ad, _s]);
          y += yIncr;
          p += pru;
          ox = x;
        }
        else {
          p += pr;
        }
      }
      zDivArray.push([ox, y, x2-ox+ad+1, _s]);
    }
    else {
      if(s-3 > 0) {
        _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy;
        _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1;
      }
      else {
        _s = s;
      }
      var ad = Math.round(s/2),
          pr = dx<<1,
          pru = pr - (dy<<1),
          p = pr-dy,
          oy = y;
      if(y2 <= y1) {
        ++ad;
        while(dy > 0) {
          --dy;
          if(p > 0) {
            zDivArray.push([x++, y, _s, oy-y+ad]);
            y += yIncr;
            p += pru;
            oy = y;
          }
          else {
            y += yIncr;
            p += pr;
          }
        }
        zDivArray.push([x2, y2, _s, oy-y2+ad]);
      }
      else {
        while(dy > 0) {
          --dy;
          y += yIncr;
          if(p > 0) {
            zDivArray.push([x++, oy, _s, y-oy+ad]);
            p += pru;
            oy = y;
          }
          else {
            p += pr;
          }
        }
        zDivArray.push([x2, oy, _s, y2-oy+ad+1]);
      }
    }
    return zDivArray;
  },
  drawOval: function(aLeft, aTop, aWidth, aHeight, aStroke) {
    var zCreateOvalFunction = (!aStroke || aStroke == 1) ? DOM.Graphics.makeOvalThin : DOM.Graphics.makeOval;
    var zAllCoords = zCreateOvalFunction(aLeft, aTop, aWidth, aHeight, aStroke);
    var zContainer = DOM.Graphics.createElements(zAllCoords, aContainer, aColor);
    return zContainer;
  },
  makeOval: function(left, top, width, height, aStroke) {
    var zDivArray = [];
    var s = aStroke || 1;
    width += s+1;
    height += s+1;
    var a = width>>1, 
        b = height>>1,
        wod = width&1, 
        hod = height&1,
        cx = left+a, 
        cy = top+b,
        x = 0, 
        y = b,
        aa2 = (a*a)<<1, 
        aa4 = aa2<<1, 
        bb2 = (b*b)<<1, 
        bb4 = bb2<<1,
        st = (aa2>>1)*(1-(b<<1)) + bb2,
        tt = (bb2>>1) - aa2*((b<<1)-1);
    if(s-4 < 0 && (!(s-2) || width-51 > 0 && height-51 > 0))
    {
      var ox = 0, oy = b,
      w, h,
      pxw;
      while(y > 0)
      {
        if(st < 0)
        {
          st += bb2*((x<<1)+3);
          tt += bb4*(++x);
        }
        else if(tt < 0)
        {
          st += bb2*((x<<1)+3) - aa4*(y-1);
          tt += bb4*(++x) - aa2*(((y--)<<1)-3);
          w = x-ox;
          h = oy-y;
          if(w-1)
          {
            pxw = w+1+(s&1);
            h = s;
          }
          else if(h-1)
          {
            pxw = s;
            h += 1+(s&1);
          }
          else pxw = h = s;
          DOM.Graphics.makeOvalQuadrants(cx, cy, x-1, oy, pxw, h, wod, hod, zDivArray);
          ox = x;
          oy = y;
        }
        else
        {
          tt -= aa2*((y<<1)-3);
          st -= aa4*(--y);
        }
      }
      zDivArray.push([cx-a, cy-oy, s, (oy<<1)+hod]);
      zDivArray.push([cx+a+wod-s, cy-oy, s, (oy<<1)+hod]);
    }
    else
    {
      var _a = (width-(s<<1))>>1,
      _b = (height-(s<<1))>>1,
      _x = 0, _y = _b,
      _aa2 = (_a*_a)<<1, _aa4 = _aa2<<1, _bb2 = (_b*_b)<<1, _bb4 = _bb2<<1,
      _st = (_aa2>>1)*(1-(_b<<1)) + _bb2,
      _tt = (_bb2>>1) - _aa2*((_b<<1)-1),
      pxl = new Array(),
      pxt = new Array(),
      _pxb = new Array();
      pxl[0] = 0;
      pxt[0] = b;
      _pxb[0] = _b-1;
      while(y > 0)
      {
        if(st < 0)
        {
          pxl[pxl.length] = x;
          pxt[pxt.length] = y;
          st += bb2*((x<<1)+3);
          tt += bb4*(++x);
        }
        else if(tt < 0)
        {
          pxl[pxl.length] = x;
          st += bb2*((x<<1)+3) - aa4*(y-1);
          tt += bb4*(++x) - aa2*(((y--)<<1)-3);
          pxt[pxt.length] = y;
        }
        else
        {
          tt -= aa2*((y<<1)-3);
          st -= aa4*(--y);
        }
        if(_y > 0)
        {
          if(_st < 0)
          {
            _st += _bb2*((_x<<1)+3);
            _tt += _bb4*(++_x);
            _pxb[_pxb.length] = _y-1;
          }
          else if(_tt < 0)
          {
            _st += _bb2*((_x<<1)+3) - _aa4*(_y-1);
            _tt += _bb4*(++_x) - _aa2*(((_y--)<<1)-3);
            _pxb[_pxb.length] = _y-1;
          }
          else
          {
            _tt -= _aa2*((_y<<1)-3);
            _st -= _aa4*(--_y);
            _pxb[_pxb.length-1]--;
          }
        }
      }
      var ox = -wod, oy = b,
      _oy = _pxb[0],
      l = pxl.length,
      w, h;
      for(var i = 0; i < l; i++)
      {
        if(typeof _pxb[i] != "undefined")
        {
          if(_pxb[i] < _oy || pxt[i] < oy)
          {
            x = pxl[i];
            DOM.Graphics.makeOvalQuadrants(cx, cy, x, oy, x-ox, oy-_oy, wod, hod, zDivArray);
            ox = x;
            oy = pxt[i];
            _oy = _pxb[i];
          }
        }
        else
        {
          x = pxl[i];
          zDivArray.push([cx-x, cy-oy, 1, (oy<<1)+hod]);
          zDivArray.push([cx+ox+wod, cy-oy, 1, (oy<<1)+hod]);
          ox = x;
          oy = pxt[i];
        }
      }
      zDivArray.push([cx-a, cy-oy, 1, (oy<<1)+hod]);
      zDivArray.push([cx+ox+wod, cy-oy, 1, (oy<<1)+hod]);
    }
    return zDivArray;
  },  
  makeOvalThin: function(left, top, width, height) {
    var zDivArray = [];
    var a = (++width)>>1, b = (++height)>>1,
    wod = width&1, hod = height&1,
    cx = left+a, cy = top+b,
    x = 0, y = b,
    ox = 0, oy = b,
    aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1,
    st = (aa2>>1)*(1-(b<<1)) + bb2,
    tt = (bb2>>1) - aa2*((b<<1)-1),
    w, h;
    while(y > 0)
    {
      if(st < 0)
      {
        st += bb2*((x<<1)+3);
        tt += bb4*(++x);
      }
      else if(tt < 0)
      {
        st += bb2*((x<<1)+3) - aa4*(y-1);
        tt += bb4*(++x) - aa2*(((y--)<<1)-3);
        w = x-ox;
        h = oy-y;
        if((w&2) && (h&2))
        {
          DOM.Graphics.makeOvalQuadrants(cx, cy, x-2, y+2, 1, 1, wod, hod, zDivArray);
          DOM.Graphics.makeOvalQuadrants(cx, cy, x-1, y+1, 1, 1, wod, hod, zDivArray);
        }
        else {
          DOM.Graphics.makeOvalQuadrants(cx, cy, x-1, oy, w, h, wod, hod, zDivArray);
        }
        ox = x;
        oy = y;
      }
      else
      {
        tt -= aa2*((y<<1)-3);
        st -= aa4*(--y);
      }
    }
    w = a-ox+1;
    h = (oy<<1)+hod;
    y = cy-oy;
    zDivArray.push([cx-a, y, w, h]);
    zDivArray.push([cx+ox+wod-1, y, w, h]);
    return zDivArray;
  },
  makeOvalQuadrants: function(cx, cy, x, y, w, h, wod, hod, aDivArray) {
    var xl = cx - x, xr = cx + x + wod - w, yt = cy - y, yb = cy + y + hod - h;
    if(xr > xl+w)
    {
      aDivArray.push([xr, yt, w, h]);
      aDivArray.push([xr, yb, w, h]);
    }
    else {
      w = xr - xl + w;
    }
    aDivArray.push([xl, yt, w, h]);
    aDivArray.push([xl, yb, w, h]);
  }
};
    // ---------------------- End Action_Include_DOM ----------------- //
    // ---------------------- Begin Action_Include_Dialog --------------- //
 DialogBoxManager = function(aParams){
      this.id = aParams.aId ? aParams.aId : "";
      this.allowMultiple = aParams.aAllowMultiple ? aParams.aAllowMultiple : false;
      this.dragApproved = false;
      this.highestZIndex = 900;
      this.showMultiForm = function(aPosition, aDialogTitle, aWidth, aHeight, aFormType, aItemPath, aSelectionLabel, aAdditionalParams) {
        Ajax.makeRequest({
          URL: aItemPath.toPagePath() + ".GetOptionListasJson",
          Function: DOM.Dialog.receiveMultiForm,
          Params: { Position: aPosition, DialogTitle: aDialogTitle, Width: aWidth, Height: aHeight, FormType: aFormType, ItemPath: aItemPath, SelectionLabel: aSelectionLabel }
        });
        return true;
      };
      this.receiveMultiForm = function(aResult, aParams){
        var showMultiFormContainer = DOM.createElement("div");
        if (aResult && aResult[0]) {
          var zDialog = DOM.Dialog.showForm(showMultiFormContainer, aParams.Position, aParams.DialogTitle, aParams.Width, aParams.Height, aParams.FormType, aResult[0].ItemPath);
          var zItemSelectionContainer = DOM.createElement("div");
          var zForm = new FormUI.Form( aParams.ItemPath, 'ItemSelection', zItemSelectionContainer);
          var aSelectionParams = {
            Label: aParams.SelectionLabel,
            OptionsArray: aResult,
            OnBlurFunction: DOM.Dialog.fetchSelectedForm,
            ParentElement: showMultiFormContainer,
            FormType: aParams.FormType
          }
          var zSelectionField = zForm.createGeneralElement("Selection", null, null, aSelectionParams);
          zForm.appendChild(zSelectionField);
          $(zDialog.DialogBoxId+"_content").insertBefore(zItemSelectionContainer, showMultiFormContainer);
        } else {
          var zNoResult = DOM.createElement("div");
          zNoResult.innerHTML = "Sorry there were no items to display.";
          DOM.Dialog.show(zNoResult, aParams.Position, aParams.DialogTitle, aParams.Width, aParams.Height);
        }
        return true;
      };
      this.fetchSelectedForm = function(aParams){
        var aElement    = aParams.Element;
        var aHTMLSelect = aParams.Input;
        var zDisplaySelectedData = FormUI.Request.getForm(aHTMLSelect.value, aElement.FormType, aElement.ParentElement );
        return true;
      };
      this.show = function(aElement, aPosition, aTitle, aWidth, aHeight, aAdditionalParams, aShowModal) {
        if(!this.allowMultiple){
          this.hide();
        }
        aAdditionalParams = aAdditionalParams || {};
        aAdditionalParams.ShowModal = aShowModal ? aShowModal : false;
        aAdditionalParams.aDialogBoxTitle = aTitle ? aTitle : false;
        aAdditionalParams.aInitialWidth = aWidth ? aWidth : 0;
        aAdditionalParams.aInitialHeight = aHeight ? aHeight : 0;
        if ( DOM.Browser.isMac && DOM.Browser.isFirefox ) {
          aAdditionalParams.aInitialHeight = ( aAdditionalParams.aInitialHeight < 150 ) ? 150 :  aAdditionalParams.aInitialHeight;
        }
        aAdditionalParams.aManagerId = this.id;
        aPosition = aPosition || "center";
        switch(aPosition) {
          case "center":
            aAdditionalParams.aInitialLeft = ((document.body.offsetWidth - aAdditionalParams.aInitialWidth) / 2) + "px";
            aAdditionalParams.aInitialTop = ((document.body.offsetHeight - aAdditionalParams.aInitialHeight) / 2) + "px";
            break;
          case "cursor":
            var xPos = TrackMouse.Coords.x;
            var yPos = TrackMouse.Coords.y;
            if (xPos >= (document.body.offsetWidth - aAdditionalParams.aInitialWidth)) {
              xPos = (document.body.offsetWidth - aAdditionalParams.aInitialWidth - 30);
            }
            if (yPos >= (document.body.offsetHeight - aAdditionalParams.aInitialHeight)) {
              yPos = (document.body.offsetHeight - aAdditionalParams.aInitialHeight - 30);
            }
            aAdditionalParams.aInitialLeft = xPos + 10;
            aAdditionalParams.aInitialTop = yPos +10;
            break;
          default:
            if (aPosition) {
                if (aPosition.x != undefined && aPosition.y != undefined) {
                    if (aPosition.position == "absolute") {
                        var zleft = aPosition.x;
                        var ztop = aPosition.y;
                    } else {
                        var zleft = aPosition.x + 5;
                        var ztop = aPosition.y + 22;
                    }
                } else {
                    var zleft = aPosition.clientX + 5;
                    var ztop = aPosition.clientY + 22;
                }
            }
            aAdditionalParams.aInitialLeft = zleft;
            aAdditionalParams.aInitialTop = ztop;
            break;
        }
        var newDialogBox = new DialogBox_v2(aAdditionalParams);
        if(aElement){
          newDialogBox.appendContent(aElement);
        }
        if ( DOM.Browser.isMac && DOM.Browser.isFirefox ) {
          newDialogBox.ScrollingDiv = new LiveWebsite.Utils.ScrollingDiv( newDialogBox.Content );
          DOM.addClass( newDialogBox.ScrollingDiv.content, "Dialog-ScrollingContent" );
        }
        return newDialogBox;
      }
      this.showForm = function (aElement, aPosition, aTitle, aWidth, aHeight, aFormName, aItemPath, aAdditionalParams, aFormParams, aShowModal) {
        aAdditionalParams = aAdditionalParams || {};
        var newDialog = this.show(aElement, aPosition, aTitle, aWidth, aHeight, aAdditionalParams, aShowModal);
        newDialog.returnedForm = FormUI.Request.getForm(aItemPath, aFormName, aElement, aAdditionalParams.AdditionalUrlParams,aFormParams);
        return newDialog;
      }
      this.hide = function() {
        for(var dialogBox in DOM.openDialogBoxes){
          if(DOM.openDialogBoxes[dialogBox]){
           if(DOM.openDialogBoxes[dialogBox].DialogBoxId && (DOM.openDialogBoxes[dialogBox].ManagerId == this.id)){
             DOM.openDialogBoxes[dialogBox].killMe("", DOM.openDialogBoxes[dialogBox]);
           }
          }
        }
      }
      this.alert = function(aAlertText, aPosition, aTitle, aWidth, aHeight, aAdditionalParams) {
        aPosition = aPosition || "center";
        aTitle = aTitle || "Please Confirm";
        aWidth = aWidth || 300;
        aHeight = aHeight || 150;
        var tempDialog = DOM.Dialog.show(null, aPosition, aTitle, aWidth, aHeight, aAdditionalParams,true);
        tempDialog.setContent(aAlertText);
        return tempDialog;
      }
      this.confirm = function(aConfirmText, aTitle, aWidth, aHeight, aConfirmParams, aAdditionalParams) {
        aTitle = aTitle || "Please Confirm";
        aWidth = aWidth || 300;
        aHeight = aHeight || 150;
        var tempDialog = DOM.WidgitDialog.show(null, "center", aTitle, aWidth, aHeight, aAdditionalParams);
        tempDialog.setContent(aAlertText);
        return tempDialog;
      }
    }
//
//
//
//
    DialogBox_v2 = function(aParams) {
       this.DialogBoxId = aParams.aDialogBoxId || "NewDialog";
       if($(this.DialogBoxId) || $(this.DialogBoxId+"_container")){
         var i = 0;
         var origName = this.DialogBoxId;
         while($(this.DialogBoxId) || $(this.DialogBoxId+"_container")){
           this.DialogBoxId = origName + i;
           i++;
         }
       }
       this.ManagerId = aParams.aManagerId;
       this.ParentContainer = aParams.aAppendToContainer || document.getElementsByTagName('BODY')[0];
       DOM.openDialogBoxes[this.DialogBoxId] = this;
       this.allowResize = (aParams.aAllowResize==false) ? false : true;
       this.allowMove = (aParams.aAllowMove==false) ? false : true;
       this.DialogBoxTitle = aParams.aDialogBoxTitle || "";
       this.HideInitially = aParams.aHideInitially || false;
       this.InitialLeft = aParams.aInitialLeft ? parseInt(aParams.aInitialLeft) + 'px' : "0px";
       this.InitialTop = aParams.aInitialTop ? parseInt(aParams.aInitialTop) + 'px' : "0px";
       this.InitialWidth = parseInt(aParams.aInitialWidth) || 250;
       this.InitialHeight = parseInt(aParams.aInitialHeight) || 300;
       this.returnedForm = null;
       this.ShowModal = (aParams.ShowModal==true) ? true : false;
       this.dragApproved = false;
       this.xPos = 0;
       this.tempX = 0;
       this.yPos = 0;
       this.tempY = 0;
       this.maxLeft = 0;
       this.maxTop = 0;
       this.maxRight = document.body.clientWidth - 5;
       this.maxBot = document.body.clientHeight - 10;
       this.orgHeight = 0;
       this.orgWidth = 0;
       this.setDragBounds = function(aParams){
         this.maxLeft = aParams.maxLeft || this.maxLeft;
         this.maxTop = aParams.maxTop || this.maxTop;
         this.maxRight = aParams.maxRight || this.maxRight;
         this.maxBot = aParams.maxBot || this.maxBot;
       }
       this.moveMe = function(e, aParams){
         if(DOM.Browser.isIE) {
           var newXpos = aParams.xPos + event.clientX - aParams.tempMouseX;
           var newYpos = aParams.yPos + event.clientY - aParams.tempMouseY;
         } else {
           var newXpos = aParams.xPos + e.clientX - aParams.tempMouseX;
           var newYpos = aParams.yPos + e.clientY - aParams.tempMouseY;
         }
         if (aParams.dragApproved){
           var dialogBox = $(aParams.DialogBoxId+"_container");
           dialogBox.style.left = newXpos + 'px';
           dialogBox.style.top = newYpos + 'px';
           if(newXpos < aParams.maxLeft){
             dialogBox.style.left = aParams.maxLeft;
           }
           if(newXpos > aParams.maxRight){
             dialogBox.style.left = aParams.maxRight;
           }
           if(newYpos < aParams.maxTop){
             dialogBox.style.top = aParams.maxTop;
           }
           if(newYpos > aParams.maxBot){
             dialogBox.style.top = aParams.maxBot;
           }
           return true;
         } else {
           DOM.removeEvent(document, "onmousemove", DOM.openDialogBoxes[aParams.DialogBoxId].moveMe);
           DOM.openDialogBoxes[aParams.DialogBoxId].dragApproved = false;
           DOM.removeEvent(document, "onmouseup", DOM.openDialogBoxes[aParams.DialogBoxId].stopDrag);
           return false;
         }
       }
       this.dragMeMove = function(e, aParams){
         DOM.openDialogBoxes[aParams.DialogBoxId].dragMe(e, aParams);
         DOM.addEvent(document, "onmousemove", DOM.openDialogBoxes[aParams.DialogBoxId].moveMe, DOM.openDialogBoxes[aParams.DialogBoxId]);
         return true;
       }
       this.dragMeResize = function(e, aParams){
         DOM.openDialogBoxes[aParams.DialogBoxId].dragMe(e, aParams);
         DOM.addEvent(document, "onmousemove", DOM.openDialogBoxes[aParams.DialogBoxId].resizeMe, DOM.openDialogBoxes[aParams.DialogBoxId]);
         return true;
       }
       this.dragMe = function drags(e, aParams){
         aParams.dragApproved = true;
         aParams.xPos = parseInt($(aParams.DialogBoxId+"_container").style.left+0) ? parseInt($(aParams.DialogBoxId+"_container").style.left+0) : $(aParams.DialogBoxId+"_container").offsetLeft;
         aParams.yPos = parseInt($(aParams.DialogBoxId+"_container").style.top+0) ? parseInt($(aParams.DialogBoxId+"_container").style.top+0) : $(aParams.DialogBoxId+"_container").offsetTop;
         aParams.orgHeight = parseInt($(aParams.DialogBoxId+"_content").style.height+0);
         aParams.orgWidth = parseInt($(aParams.DialogBoxId+"_content").style.width+0);
         aParams.tempMouseX = (!DOM.Browser.isIE)? e.clientX : event.clientX;
         aParams.tempMouseY = (!DOM.Browser.isIE)? e.clientY : event.clientY;
         DOM.addEvent(document, "onmouseup", DOM.openDialogBoxes[aParams.DialogBoxId].stopDrag, DOM.openDialogBoxes[aParams.DialogBoxId]);
         return true;
       }
       this.showOnTop = function(e, aParams){
         DOM.Dialog.highestZIndex++;
         $(aParams.DialogBoxId+"_container").style.zIndex = DOM.Dialog.highestZIndex;
         return true;
       }
       this.resizeMe = function(e, aParams){
         if(DOM.Browser.isIE) {
           var newWidth = aParams.orgWidth + event.clientX - aParams.tempMouseX;
           var newHeight = aParams.orgHeight + event.clientY - aParams.tempMouseY;
         } else {
           var newWidth = aParams.orgWidth + e.clientX - aParams.tempMouseX;
           var newHeight = aParams.orgHeight + e.clientY - aParams.tempMouseY;
         }
         if (aParams.dragApproved){
           var dialogBox = $(aParams.DialogBoxId+"_content");
           dialogBox.style.height = (newHeight > 0) ? newHeight + 'px' : dialogBox.style.height;
           $(aParams.DialogBoxId+"_button").style.width = dialogBox.style.width = (newWidth > 0) ? newWidth + 'px' : dialogBox.style.width;
           $(aParams.DialogBoxId+"_title").style.width = (newWidth > 0) ? newWidth + 'px' : $(aParams.DialogBoxId+"_title").style.width;
           $(aParams.DialogBoxId+"_container").style.width = (newWidth > 0) ? (newWidth + 47) + 'px' : $(aParams.DialogBoxId+"_container").style.width;
           $(aParams.DialogBoxId+"_shadowRight").style.height = (newHeight > 0) ? (newHeight + 27) + 'px' : $(aParams.DialogBoxId+"_shadowRight").style.height;
           $(aParams.DialogBoxId+"_shadowBot").style.width = (newWidth > 0) ? (newWidth + 13) + 'px' : $(aParams.DialogBoxId+"_shadowBot").style.width;
           return true;
         } else { 
           DOM.removeEvent(document, "onmousemove", DOM.openDialogBoxes[aParams.DialogBoxId].resizeMe);
           DOM.openDialogBoxes[aParams.DialogBoxId].dragApproved = false;
           DOM.removeEvent(document, "onmouseup", DOM.openDialogBoxes[aParams.DialogBoxId].stopDrag);
           return false;
         }
       }
       this.killMe = function(e, aParams){
         var dialogBoxContainer = $(aParams.DialogBoxId+"_container");
         DOM.openDialogBoxes[aParams.DialogBoxId] = null;
         DOM.removeElement(dialogBoxContainer);
         if (aParams.ShowModal == true){
           aParams.removeModal();
         }
         return true;
       }
       this.hideMe = function(){
         var dialogBoxContainer = $(this.DialogBoxId+"_container");
         this.toggleHidden(dialogBoxContainer);
         return true;
       }
       this.stopDrag = function(e, aParams){
         DOM.openDialogBoxes[aParams.DialogBoxId].dragApproved = false;
         if ( aParams.ScrollingDiv ) {
           aParams.ScrollingDiv.refresh();
         }
         return true;
       }
       this.setContent = function(aNewContent){
         DOM.replaceContent($(this.DialogBoxId+"_content"), aNewContent);
         return true;
       }
       this.setTitle = function(aNewContent){
         DOM.replaceContent($(this.DialogBoxId+"_title"), aNewContent);
         return true;
       }
       this.setButtonRow = function(aNewContent){
         DOM.replaceContent($(this.DialogBoxId+"_header"), aNewContent);
         return true;
       }
       this.appendContent = function(aElement){
         if (typeof aElement === "string") {
           var zElement = DOM.createElement("span");
           zElement.innerHTML = aElement;
           aElement = zElement;
         }
         $(this.DialogBoxId+"_content").appendChild(aElement);
         return true;
       }
       this.toggleHidden = function(aElement, aToggleBool) {
         var zToggleBool = aToggleBool || true;
         if(zToggleBool == "visible") {
           zToggleBool = false;
         }
         aElement.style.visibility = zToggleBool ? 'hidden' : 'visible';
         return true;
       }
       this.appendButton = function(aElement){
         var buttonRow = $(this.DialogBoxId+"_button");
         var previousButtonRowHeight = buttonRow.offsetHeight;
         buttonRow.appendChild(aElement);
         if(previousButtonRowHeight != buttonRow.offsetHeight){
           var zDifference = buttonRow.offsetHeight - previousButtonRowHeight;
           var shadowRight = $(this.DialogBoxId+"_shadowRight");
           shadowRight.style.height = (parseInt(shadowRight.style.height)+zDifference)+"px";
         }
         return true;
       }
       this.unHide = function(){
         this.toggleHidden($(this.DialogBoxId+"_container"), 'visible');
         return true;
       }
     	 this.disableSelection = function(target) {
         return DOM.disableSelection( target );
       },
       this.drawInitial = function(){
         var freshDialogBoxDiv = DOM.createElement("div", this.DialogBoxId+"_container", "newDialogBoxContainer");
         freshDialogBoxDiv.style.width = this.InitialWidth ? (this.InitialWidth + 47) +'px' : '297px';
         var freshDialogBox = DOM.createElement("table", this.DialogBoxId, "newDialogBox");
         var zPageWidth = document.body.offsetWidth;
         var zPageHeight = document.body.offsetHeight;
         var zLeft = parseFloat(this.InitialLeft.replace(/px/g,''));
         var zTop = parseFloat(this.InitialTop.replace(/px/g,''));
         if (zPageWidth < this.InitialWidth + 47 + zLeft) {
           this.InitialLeft = zPageWidth - this.InitialWidth - 47 + 'px';
         }
         if (zPageHeight < this.InitialHeight + zTop) {
           this.InitialTop = zPageHeight - this.InitialHeight - 61 + 'px';
         }
         freshDialogBoxDiv.style.left = this.InitialLeft || '400px';
         freshDialogBoxDiv.style.top = this.InitialTop || '55px';
         freshDialogBoxDiv.style.zIndex = aParams.aInitialZIndex ||  DOM.Dialog.highestZIndex++;
         DOM.Dialog.highestZIndex = (freshDialogBoxDiv.style.zIndex > DOM.Dialog.highestZIndex) ? freshDialogBoxDiv.style.zIndex : DOM.Dialog.highestZIndex;
         var topRow = DOM.createElement("tr");
         topRow.className = 'newDialogBoxTopRow';
         var topLeft = DOM.createElement("td","","Image_DialogBox_TopLeftCorner");
         var topMid = DOM.createElement("td",this.DialogBoxId+"_header","Image_DialogBox_TopMidSide");
         var titleDiv = DOM.createElement("div",this.DialogBoxId+"_title", "dialogTitle");
         titleDiv.innerHTML = this.DialogBoxTitle;
         topMid.appendChild(titleDiv);
         if(this.allowMove){
           topMid.style.cursor = "move";
           this.disableSelection(topMid);
         }
         var topRight = DOM.createElement("td","","Image_DialogBox_TopRightCorner");
         var closeButton = DOM.createElement("span", this.DialogBoxId+"_closeBtn", "TextFilterResetIcon");
         closeButton.style.position = 'relative';
         closeButton.style.left = '-6px';
         closeButton.style.height = '16px';
         closeButton.style.top = '1px';
         closeButton.style.width = '14px';
         topRight.style.cursor = "pointer";
         topRight.appendChild(closeButton);
         topRow.appendChild(topLeft);
         topRow.appendChild(topMid);
         topRow.appendChild(topRight);
         var contentElementRow = DOM.createElement("tr");
         var tdLeft = DOM.createElement("td","","Image_DialogBox_MidLeftSide");
         var tdMid = DOM.createElement("td");
         var contentDiv = DOM.createElement("div", this.DialogBoxId+"_content");
         contentDiv.style.width = this.InitialWidth + 'px';
         contentDiv.style.height = this.InitialHeight + 'px';
         if ( !( DOM.Browser.isMac && DOM.Browser.isFirefox ) ) {
           contentDiv.style.overflow = "auto";
           contentDiv.style.position = "relative";
         }
         tdMid.appendChild(contentDiv);
         this.Content = contentDiv;
         var tdRight = DOM.createElement("td","","Image_DialogBox_MidRightSide");
         contentElementRow.appendChild(tdLeft);
         contentElementRow.appendChild(tdMid);
         contentElementRow.appendChild(tdRight);
         var buttonElementRow = DOM.createElement("tr", this.DialogBoxId+"_buttonRow");
         tdLeft = DOM.createElement("td","","Image_DialogBox_MidLeftSide");
         var tdMid = DOM.createElement("td");
         var buttonDiv = DOM.createElement("div",this.DialogBoxId+"_button");
         buttonDiv.style.overflow = "auto";
         buttonDiv.style.position = "relative";
         tdMid.appendChild(buttonDiv);
         tdMid.align = "center";
         var tdRight = DOM.createElement("td","","Image_DialogBox_MidRightSide");
         buttonElementRow.appendChild(tdLeft);
         buttonElementRow.appendChild(tdMid);
         buttonElementRow.appendChild(tdRight);
         var footerRow = DOM.createElement("tr");
         footerRow.style.height= "19px";
         var botLeft = DOM.createElement("td","","Image_DialogBox_BotLeftCorner");
         var botMid = DOM.createElement("td", this.DialogBoxId+"_footer","Image_DialogBox_BotMidSide");
         var botRight = DOM.createElement("td","","Image_DialogBox_BotRightCorner");
         var resizeIcon = DOM.createElement("div");
         resizeIcon.style.width = "10px";
         resizeIcon.style.height = "20px";
         if (this.allowResize){
           resizeIcon.className = "dialogDrag";
           resizeIcon.style.cursor = "nw-resize";
           this.disableSelection(resizeIcon);
           this.disableSelection(botRight);
         }
         botRight.appendChild(resizeIcon);
         footerRow.appendChild(botLeft);
         footerRow.appendChild(botMid);
         footerRow.appendChild(botRight);
         var newTableBody = DOM.createElement("tbody");
         freshDialogBox.appendChild(newTableBody);
         newTableBody.appendChild(topRow);
         newTableBody.appendChild(contentElementRow);
         newTableBody.appendChild(buttonElementRow);
         newTableBody.appendChild(footerRow);
         var rightSideShadow = DOM.createElement("div", "", "squarePieceTop");
         var topRightShadow = DOM.createElement("div", this.DialogBoxId+"_shadowTopRight", "shadowTopRight");
         topRightShadow.style.height = "17px";
         var midRightShadow = DOM.createElement("div", this.DialogBoxId+"_shadowRight", "shadowMidRight");
         rightSideShadow.appendChild(topRightShadow);
         rightSideShadow.appendChild(midRightShadow);
         var botShadow = DOM.createElement("div", "", "squarePieceBot");
         var botLeftShadow = DOM.createElement("div", this.DialogBoxId+"_shadowBotLeft", "shadowBotLeft");
         var botMidShadow = DOM.createElement("div", this.DialogBoxId+"_shadowBot", "shadowBotMid");
         botLeftShadow.style.width = "17px";
         botMidShadow.style.width = (this.InitialWidth + 13) + 'px';
         var botRightShadow = DOM.createElement("div", this.DialogBoxId+"_shadowBotRight", "shadowBotRight");
         botRightShadow.style.width = "17px";
         botShadow.appendChild(botLeftShadow);
         botShadow.appendChild(botMidShadow);
         botShadow.appendChild(botRightShadow);
         freshDialogBoxDiv.appendChild(freshDialogBox);
         freshDialogBoxDiv.appendChild(rightSideShadow);
         freshDialogBoxDiv.appendChild(botShadow);
         if (this.ShowModal == true){
           this.drawModal(freshDialogBoxDiv);
         } else {
           this.ParentContainer.appendChild(freshDialogBoxDiv);
         }
         DOM.addEvent(freshDialogBoxDiv, "onmousedown", DOM.openDialogBoxes[this.DialogBoxId].showOnTop, DOM.openDialogBoxes[this.DialogBoxId]);
         DOM.addEvent(closeButton, "onclick", DOM.openDialogBoxes[this.DialogBoxId].killMe, DOM.openDialogBoxes[this.DialogBoxId]);
         if(this.allowMove){
           DOM.addEvent(topMid, "onmousedown", DOM.openDialogBoxes[this.DialogBoxId].dragMeMove, DOM.openDialogBoxes[this.DialogBoxId]);
         }
         if (this.allowResize){
           DOM.addEvent(resizeIcon, "onmousedown",DOM.openDialogBoxes[this.DialogBoxId].dragMeResize, DOM.openDialogBoxes[this.DialogBoxId]);
         }
         midRightShadow.style.height = (this.InitialHeight + 25 + buttonElementRow.offsetHeight) + 'px';
         freshDialogBoxDiv.style.visibility = this.HideInitially ? 'hidden' : 'visible';
         if(DOM.Browser.isIE6x){
           freshDialogBoxDiv.style.background = '';
           rightSideShadow.style.display = "none";
           botShadow.style.display = "none";
         }
         return true;
       }
       this.drawModal = function(aElement) {
         this.Overlay = DOM.createElement('div', null, 'modalOverlay');
         document.body.appendChild(this.Overlay);
         Tween.Common.setOpacity(this.Overlay, 0.5);
         this.Overlay.style.visibility = 'visible';
         this.Overlay.style.height = document.body.offsetHeight + 'px';
         this.ModalContent = aElement;
         document.body.appendChild(this.ModalContent);
         DOM.addEvent(window,'onresize',this.resizeModal,this);
       }
       this.resizeModal = function(e,aParent) {
         var zOriginalTop = aParent.ModalContent.style.top;
         var zOriginalLeft = aParent.ModalContent.style.left;
         aParent.Overlay.style.width = document.body.offsetWidth + 'px';
         aParent.Overlay.style.height = document.body.offsetHeight + 'px';
         aParent.ModalContent.style.top = zOriginalTop;
         aParent.ModalContent.style.left = zOriginalLeft;
       }
       this.removeModal = function() {
         DOM.removeElement(this.Overlay);
         DOM.removeEvent(window, 'onresize', this.resizeModal);
         this.Overlay = null;
       }
       this.drawInitial();
    }
    DOM.Dialog = new DialogBoxManager({aId: "Dialog", aAllowMultiple: false});
    DOM.HintDialog = new DialogBoxManager({aId: "Help", aAllowMultiple: false});
    DOM.WidgitDialog = new DialogBoxManager({aId: "Widgit", aAllowMultiple: false});
    DOM.WaitingDialog = new DialogBoxManager({aId: "Waiting", aAllowMultiple: true});
    DOM.ErrorDialog = new DialogBoxManager({aId: "ErrorMessage", aAllowMultiple: false});
    function alertEvent(e, aParams) {
       aParams.aAlertText = aParams.aAlertText || aParams;
       return DOM.Dialog.alert(aParams.aAlertText, aParams.aPosition, aParams.aTitle, aParams.aWidth, aParams.aHeight, aParams.aAdditionalParams);
    }
DialogBoxManager.prototype.displayWaitingMessage = function() {
  if ($(this.aContainer.id)) {
    DOM.replaceContent(this.aContainer, this.aWaitingMessage);
  }
  return true;
}
DialogBoxManager.prototype.showWaiting = function(aElement, aPosition, aTitle, aWidth, aHeight, aMsgArray, aTimeout, aAdditionalParams) {
  var zDialogWaitingContainer = DOM.createElement('div', null, 'WaitingDialogContainer');
  var zLoadingIcon = DOM.createElement('div', null, 'WaitingDialogLoading');
  var zWaitingMessage = "Loading, please be patient...";
  zDialogWaitingContainer.appendChild(aElement);
  zDialogWaitingContainer.appendChild(zLoadingIcon);
  var zNewDialog = DOM.WaitingDialog.show(zDialogWaitingContainer, aPosition, aTitle, aWidth, aHeight, aAdditionalParams);
  if (aMsgArray) {
    var zDelay = aTimeout;
    DOM.replaceContent(aElement, aMsgArray[0].Message);
    for (var i=1; i<aMsgArray.length; i++) {
      Util.bindTimeout({
         aWaitingMessage: aMsgArray[i].Message,
         aContainer: aElement,
         aLoadingIcon: zLoadingIcon
        },
        DOM.WaitingDialog.displayWaitingMessage,
        zDelay
      );
      zDelay+=aTimeout;
    }
  } else {
      DOM.replaceContent(aElement, zWaitingMessage);
  }
  return zNewDialog;
};
DialogBoxManager.prototype.hideWaiting = function() {
  DOM.WaitingDialog.hide();
}
DialogBoxManager.prototype.completeWaiting = function(aMessageContainer, aCompleteMessage, aStyle, aTimeout) {
  if (aMessageContainer) {
    var zWaitingDivParent = aMessageContainer.parentNode;
    var zWaitingMessage = DOM.createTextElement("div", null, aMessageContainer.className, aStyle, aCompleteMessage);
    DOM.replaceContent(zWaitingDivParent, "");
    DOM.replaceContent(zWaitingDivParent, zWaitingMessage);
  }
  if (aTimeout) {
  DialogBoxId="NewDialog", ManagerId="Waiting"
    Util.bindTimeout({}, DOM.WaitingDialog.hideWaiting, aTimeout);
  }
};
    // ---------------------- End Action_Include_Dialog ----------------- //
    // ---------------------- Begin Action_Include_Event --------------- //
if(!window.Event) {
  var Event = new Object();
}
Util.copyProperties(Event, {
  add: function(aElement, aEvent, aFunction,aParamObject){
    return DOM.addEvent(aElement, aEvent, aFunction, aParamObject);
  },
  remove: function(aElement, aEvent, aFunction,aParamObject){
    return DOM.removeEvent(aElement, aEvent, aFunction, aParamObject);
  },
  fix: function(aEvent){
    return DOM.fixEvent(aEvent);
  }
});
    // ---------------------- End Action_Include_Event ----------------- //
    // ---------------------- Begin Action_Include_LOApi --------------- //
var LO = {}
LO.Exports = {
  action_new: function(aParamObject){
    return LiveAdMaker.createNewSectionItem(null, aParamObject);
  },
  action_duplicate: function(aParamObject){
    return LiveAdMaker.duplicateSectionItem(null, aParamObject);
  },
  action_archive: function(aParamObject){
    return LiveAdMaker.archiveSectionItem(null, aParamObject);
  },
  action_delete: function(aParamObject){
    return LiveAdMaker.archiveSectionItem(null, aParamObject);
  },
  action_addTo: function(aParamObject){
    return LiveAdMaker.addToSection(null, aParamObject);
  },
  action_import: function(aParamObject){
    return LiveAdMaker.importexportSectionItem(null, aParamObject);
  },
  action_export: function(aParamObject){
    return LiveAdMaker.exportSectionItem(null, aParamObject);
  },
  activity_undo: function(aParamObject){
    return FormUI.History.undo();
  },
  activity_redo: function(aParamObject){
    return FormUI.History.redo();
  },
  view_hierarchy: function(aParamObject){
    aParamObject = aParamObject || {};
    aParamObject.ViewName = "ActionsWithName";
    return LiveAdMaker.toggleView(null, aParamObject);
  },
  view_thumbnailList: function(aParamObject){
    aParamObject = aParamObject || {};
    aParamObject.ViewName = "ActionsWithThumbnail";
    return LiveAdMaker.toggleView(null, aParamObject);
  },
  view_lightbox: function(aParamObject){
    aParamObject = aParamObject || {};
    aParamObject.ViewName = "table";
    return LiveAdMaker.toggleView(null, aParamObject);
  },
  view_table: function(aParamObject){
    aParamObject = aParamObject || {};
    aParamObject.ViewName = "thumbnailAndName";
    return LiveAdMaker.toggleView(null, aParamObject);
  },
  view_zoomIn: function(aParamObject){
    return true;
  },
  view_zoomOut: function(aParamObject){
    return true;
  },
  handler: {
    run: function(aParams) {
      LO.Exports[aParams.CallName]();
    }
  }
}
var LOApi = LO.Exports;
LO.DOM = {
  Activity: {
    LastActivity: new Date(),
    TimoutLength: 3600000,
    reset: function() {
      this.LastActivity = new Date();
    },
    checkActivity: function() {
      var zCurrentTime =  new Date();
      if (this.LastActivity.getTime() < (zCurrentTime.getTime() - this.TimoutLength)) {
        document.location.reload();
      } else {
        this.TimeoutObject = this.updateTimeout();
      }
    },
    updateTimeout: function() {
      Util.bindTimeout(this, LO.DOM.Activity.checkActivity, this.TimoutLength);
    },
    init: function() {
      this.TimeoutObject = this.updateTimeout();
      return true;
    }
  }
}
DOM.addEvent(window, "onload", LO.DOM.Activity.init, null, {BindTo: LO.DOM.Activity});
LO.DOM.Elements = {
  create: DOM.createElement,
  table: function(aParentElement,aClassName) {
    var zElement = this.create("table", null, aClassName);
    if (aParentElement) aParentElement.appendChild(zElement);
    return zElement;
  },
  tbody: function(aParentElement,aClassName){
    var zElement = this.create("tbody",  null, aClassName);
    if (aParentElement) aParentElement.appendChild(zElement);
    return zElement;
  },
  tr: function(aParentElement,aClassName){
    var zElement = this.create("tr", null, aClassName);
    if (aParentElement) aParentElement.appendChild(zElement);
    return zElement;
  },
  td: function(aParentElement,aClassName,aContent){
    var zElement = this.create("td", null, aClassName);
    if (aParentElement) aParentElement.appendChild(zElement);
    if (aContent) zElement.innerHTML = aContent;
    return zElement;
  },
  div: function(aParentElement,aClassName, aContent){
    var zElement = this.create("div", null, aClassName);
    if (aParentElement) aParentElement.appendChild(zElement);
    if (aContent) zElement.innerHTML = aContent;
    return zElement;
  },
  h1: function(aParentElement,aClassName, aContent){
    var zElement = this.create("h1", null, aClassName);
    if (aParentElement) aParentElement.appendChild(zElement);
    if (aContent) zElement.innerHTML = aContent;
    return zElement;
  },
  h2: function(aParentElement,aClassName, aContent){
    var zElement = this.create("h2", null, aClassName);
    if (aParentElement) aParentElement.appendChild(zElement);
    if (aContent) zElement.innerHTML = aContent;
    return zElement;
  },
  img: function(aParentElement,aClassName, aURL){
    var zElement = this.create("img", null, aClassName);
    if (aParentElement) aParentElement.appendChild(zElement);
    if (aURL) zElement.src = aURL;
    return zElement;
  }
}
    // ---------------------- End Action_Include_LOApi ----------------- //
    // ---------------------- Begin Action_Include_Ajax --------------- //
if (!LO) var LO = {}
var Ajax = {
  TotalRequestsProcessed: 0,
  TotalResponseSize: 0,
  PageIsUnloading: false,
  ActiveRequests: [],
  requestIsComplete: function(aRequestObject,aReset){
    if (aRequestObject.HttpRequest && aRequestObject.HttpRequest.responseText) {  
      this.TotalResponseSize = this.TotalResponseSize + aRequestObject.HttpRequest.responseText.length;
    }
    this.ActiveRequests.remove(aRequestObject);
    if (aReset) {
      aRequestObject.reset()
    };
    return true;
  },
  makeRequest: function(aParams, aObjectToBindTo){
    var zParams = aParams.Params || aParams;
    var zCompleteParams = aParams.CompleteParams || zParams;
    var zCompleteFunction = aParams.CompleteFunction || null;
    if(aObjectToBindTo) {
      var zObjectToBindTo = aObjectToBindTo,
          zCallbackParams = zParams,
          zCallbackFunction = (typeof aParams.Function === "string") ? zObjectToBindTo[aParams.Function] : aParams.Function;
      aParams.Function =  function(aResult,aRequestParams,aRequestObject){
        zCallbackFunction.apply(zObjectToBindTo,[aResult,aRequestParams,aRequestObject]);
        return true;
      };
    }
    if (LO.DOM) LO.DOM.Activity.reset();
    var zRequestObject =  new Ajax.Request(zCompleteFunction, zCompleteParams);
    this.ActiveRequests.push(zRequestObject);
    this.TotalRequestsProcessed++;
    zRequestObject.Title = aParams.Title;
    Ajax.Ellipsis = (aParams.Title) ? '<img src="/l.c.bin/I/65462/AnimatedElipse.gif" width="12" height="2">' : '';
    zRequestObject.Asynchronous = (typeof(zParams.Asynchronous) == 'undefined' ? true : zParams.Asynchronous);
    if(aParams.TextOnly) {
      zRequestObject.TextOnly = isTrue(aParams.TextOnly);
    }
    if(aParams.PostValues) {
      zRequestObject.PostValues = aParams.PostValues;
    }
    if(aParams.Method) {
      zRequestObject.Method = aParams.Method;
    }
    zRequestObject.makeRequest(aParams.URL,aParams.Function,zParams,aParams);
    return zRequestObject;
  },
  initializeLoadingMessage: function(){
    Ajax.MessageArray = [];
    if(!Ajax.MessageContainer) {
      var zTable = DOM.createElement("table","","AjaxLoadingMessage"),
          zTBody = document.createElement("tbody"),
          zTopRow = document.createElement("tr"),
          zBottomRow = document.createElement("tr"),
          zTopLeft = DOM.createElement("td","","AjaxLoadingMessage_TopLeft"),
          zImage = new Image(),
          zImg = document.createElement("img"),
          zAllMessagesContainer = DOM.createElement("div","","AjaxLoadingMessage_AllMessagesContainer");
          var zEllipsisContainer = DOM.createElement("td","","AjaxLoadingMessage_EllipsisContainer");
      Ajax.MessageContainer = zTable;
      Ajax.AllMessagesContainer = zAllMessagesContainer
      Ajax.EllipsisContainer = zEllipsisContainer;
      zImage.src = '/l.c.bin/I/489/LoadingIcon_Small.gif';
      zImg.setAttribute("src",zImage.src);
      zImg.setAttribute("width",16);
      zImg.setAttribute("height",16);
      zTopLeft.appendChild(zImg);
      zTopLeft.appendChild(Ajax.AllMessagesContainer);
      zTopRow.appendChild(zTopLeft);
      zTopRow.appendChild(Ajax.EllipsisContainer);
      zTopRow.appendChild(DOM.createElement("td","","AjaxLoadingMessage_TopRight"));
      zBottomRow.appendChild(DOM.createElement("td","","AjaxLoadingMessage_BottomLeft"));
      zBottomRow.appendChild(DOM.createElement("td","","AjaxLoadingMessage_BottomRight"));
      zTBody.appendChild(zTopRow);
      zTBody.appendChild(zBottomRow);
      Ajax.MessageContainer.appendChild(zTBody);
      document.body.appendChild(Ajax.MessageContainer);
      TrackMouse.start({
        OffsetLeft: 8,
        OffsetTop: 20,
        Element: Ajax.MessageContainer
      });
    }
    return true;
  },
  addRequestMessage: function(aRequest){
    if(!Ajax.MessageArray) {
      Ajax.initializeLoadingMessage();
    }
    if(!aRequest.DisableLoadingMessage) {
      Ajax.MessageArray.push(aRequest);
      Ajax.updateLoadingMessage();
    }
    return true;
  },
  removeRequestMessage: function(aRequest){
    if(!aRequest.DisableLoadingMessage) {
      Ajax.MessageArray.splice(Ajax.MessageArray.indexOf(aRequest), 1);
      Ajax.updateLoadingMessage();
    }
    return true;
  },
  updateLoadingMessage: function(){
    if(Ajax.MessageArray.length) {
      DOM.replaceContent(Ajax.AllMessagesContainer, Ajax.MessageArray.last().Title||"");
      DOM.replaceContent(Ajax.EllipsisContainer, Ajax.Ellipsis || "");
      if(Ajax.MessageArray.last().Title) {
        DOM.removeClass(Ajax.MessageContainer, "AjaxLoadingMessage_NoText");
      } else {
        DOM.addClass(Ajax.MessageContainer, "AjaxLoadingMessage_NoText");
      }
      Ajax.MessageContainer.style.visibility = "visible";
    } else {
      Ajax.MessageContainer.style.visibility = "hidden";
    }
    return true;
  },
  makePollingRequest:function(aParams){
      var aPollingItem = {
        ExecuteQueueFunction:aParams.ExecuteQueueFunction,
        PollingErrorFunction:aParams.PollingErrorFunction,
        ThreadHandlerId:aParams.RequestingThreadHandlerId,
        ThreadHandlerParams:aParams.CompletedPollingParams,
        Function: Ajax.pollingRequestReceive,
        PollingParams: aParams.Params,
        TextOnly: aParams.PollingTextOnly,
        PostValues: aParams.PollingPostValues,
        Method: aParams.PollingMethod,
        PollingAction:aParams.PollingAction,
        PollingExtraParams:aParams.PollingExtraParams,
        PollingCompleteFunction:aParams.Function,
        MaxPolls:aParams.MaxPolls,
        PollingDelay:aParams.PollingDelay,
        Title: aParams.Title
      }
      var zRequestParams = {
        URL: aParams.URL,
        Function: Ajax.receivePollingRequest,
        Params: aPollingItem,
        TextOnly: aParams.TextOnly,
        PostValues: aParams.PostValues,
        Method: aParams.Method
      };
    Ajax.makeRequest(zRequestParams)
    return aPollingItem;
  },
  receivePollingRequest:function(aResult,aPollingItem){
    if (aResult&&aResult.InsertionPath){
      aResult.ItemPath=aResult.InsertionPath;
      aPollingItem.InsertionPath=aResult.InsertionPath;
    }
    if (aResult && aResult.Status=="Error"){
      aPollingItem.PollingErrorFunction(aResult,aPollingItem.PollingParams);
      return true;
    }
    if (aResult&&aResult.ItemPath){
      for (x in aResult){
        aPollingItem.PollingParams[x]=aResult[x];
      }
      aPollingItem.URL =URI.pageURL(aResult.ItemPath,aPollingItem.PollingAction,aPollingItem.PollingExtraParams,true);
      aPollingItem.ItemPath=aResult.ItemPath;
      Ajax.pollingRequest(aPollingItem);
    }
    return true;
  },
  pollingRequest:function(aPollingItem){
    if (!aPollingItem.Cancel) {
      aPollingItem.MaxPolls = (aPollingItem.MaxPolls ? aPollingItem.MaxPolls : 30);
      aPollingItem.PollingDelay = (aPollingItem.PollingDelay ? aPollingItem.PollingDelay : 2000);
      aPollingItem.PollingAttempts = (aPollingItem.PollingAttempts ? aPollingItem.PollingAttempts : 1);
      aPollingItem.Params = aPollingItem;
      setTimeout(function(){
        Ajax.makeRequest(aPollingItem);
      },aPollingItem.PollingDelay);
    }
    return true;
  },
  pollingRequestReceive:function(aResult,aPollingItem){
    if (aPollingItem.PollingAttempts==aPollingItem.MaxPolls){
      aResult.Status = "Error";
      aResult.Message = "Process has timed out";
    }
    if (aResult&&aResult.Status == "Complete"){
      if (aPollingItem.ThreadHandlerId){
        var zThisThreadHandler = fThreadHandlerList[aPollingItem.ThreadHandlerId];
        zThisThreadHandler.complete(aPollingItem.ThreadHandlerParams);
      }
      if (aPollingItem.PollingCompleteFunction){
        aPollingItem.PollingCompleteFunction(aResult,aPollingItem.PollingParams);
      }
    }else if(aResult&&(aResult.Status == "Building" || aResult.Status == "Processing")){
      aPollingItem.PollingAttempts++;
      if (aPollingItem.StopPollingOnChange&&aPollingItem.StopPollingOnChange=="Y"&&!LiveAdMaker.matchCurrentHashValues(aPollingItem.PollingParams.HashValues)){
      }else{
        Ajax.pollingRequest(aPollingItem);
      }
    }else if(aResult&&aResult.Status == "Error"){
      if (aPollingItem.PollingErrorFunction){
        aPollingItem.PollingErrorFunction(aResult,aPollingItem.PollingParams);
      }else{
        alert('Build Request Timed Out');
      }
      if (aPollingItem.ThreadHandlerId){
        var zThisThreadHandler = fThreadHandlerList[aPollingItem.ThreadHandlerId];
        zThisThreadHandler.complete(aPollingItem.ThreadHandlerParams);
      }
    }
    return true;
  }
}
Ajax.Request = function(aCompleteFunction,aCompleteParamObject){
  this.URLArray = [];
  this.LoadedURLArray = [];
  this.LoadFunctionArray = [];
  this.CompleteFunction = aCompleteFunction;
  this.CompleteParamObject = aCompleteParamObject;
  this.Method = 'GET';
  this.PostValues = null;
  this.Asynchronous = true;
  this.TextOnly = false;
  this.Id = "RequestObject_".makeUnique();
  this.RequestList = {};
  this.RequestIsAborted = false;
};
Ajax.Request.prototype = {
  addRequest: function(aURL,aOnLoadFunction,aOnLoadParamObject) {
    this.URLArray[this.URLArray.length] = aURL;
    this.LoadFunctionArray[this.LoadFunctionArray.length] = {Function: aOnLoadFunction, Params: aOnLoadParamObject, Loaded: false};
  },
  loadRequests: function() {
    for(var x = 0; x < this.URLArray.length; x++) {
      if(!this.LoadFunctionArray[x].Loaded) {
        this.makeRequest(this.URLArray[x],this.LoadFunctionArray[x].Function,this.LoadFunctionArray[x].Params,this.LoadFunctionArray[x]);
      }
    }
  },
  updateStatus: function(aLoadObject) {
    if(aLoadObject) {
      aLoadObject.Loaded = true;
      var zDone = true;
      if(this.CompleteFunction) {
        for(var x = 0; x < this.URLArray.length; x++) {
          if(!this.LoadFunctionArray[x].Loaded) {
            zDone = false;
          }
        }
        if(zDone) {
          this.CompleteFunction(this.CompleteParamObject);
        }
      }
    }
    return true;
  },
  reset: function() {
    this.HttpRequest.onreadystatechange = new Function();
    this.RequestIsAborted = false;
    return true;
  },
  abortRequest: function() {
    this.RequestIsAborted = true;
    this.HttpRequest.abort();
    this.HttpRequest.onreadystatechange = new Function();
    return true;
  },
  makeRequest: function(aURL,aOnLoadFunction,aOnLoadParamObject, aLoadObject) {
    Ajax.addRequestMessage(this);
    var zRequestId = "Request_".makeUnique();
    var zReq = false;
    if(window.XMLHttpRequest) {
      try {
        zReq = new XMLHttpRequest();
      }
      catch(e) {
        zReq = false;
      }
    } else if(window.ActiveXObject) {
      try {
        zReq = new ActiveXObject('Msxml2.XMLHTTP');
      }
      catch(e) {
        try {
          zReq = new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch(e) {
          zReq = false;
        }
      }
    }
    if(zReq) {
      this.HttpRequest = zReq;
      if(navigator.userAgent.toLowerCase().indexOf('safari') != - 1){
        aURL = aURL.setURLVariable("aCacheBust","".makeUnique(),false);
      }
      var zSendContent = null;
      zReq.open(this.Method, aURL, this.Asynchronous);
      zReq.setRequestHeader("x-LiveRequest","Y");
      if (aLoadObject && aLoadObject.ReceiveFunctionName) {
        zReq.setRequestHeader("x-ReceiveFunction",encodeURIComponent(aLoadObject.ReceiveFunctionName));
      }
      if (aLoadObject && aLoadObject.CallerFunctionName) {
        zReq.setRequestHeader("x-CallerFunction",encodeURIComponent(aLoadObject.CallerFunctionName));
      }
      if(this.Method=='POST'){
        zReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      }
      if(this.PostValues){
        var zPostVars = [];
        for(var zKey in this.PostValues){
          zPostVars.push(zKey +'='+ escape(this.PostValues[zKey]));
        }
        zSendContent = zPostVars.join('&').replace(/\+/g,'%2B');
      }
      var zLiveRequestObject = this;
      var zLoadObject = aLoadObject;
      var zProcessResponse = function () {
        if(zReq.readyState==4 && !zLiveRequestObject.RequestIsAborted) {
          var zRequestObject = zLiveRequestObject;
          var zRequest = zReq;
          var zFunc = aOnLoadFunction;
          var zParamObject = aOnLoadParamObject;
          var zUseLoadObject = zLoadObject;
          var zProcessError = "";
          var zProcessErrorDetail = "";
          Ajax.removeRequestMessage(zRequestObject);
          try {
            if (zRequest.responseText == "") {
              zProcessError = "Ajax response blank";
            } else if (zRequestObject.TextOnly) {
              var zObject = zRequest.responseText.trim();
            } else {
              eval("var zObject = "+zRequest.responseText);
            }
          }
          catch(e) {
              zProcessError = "Ajax response eval exception";
          }
          if (zProcessError != "" && !Ajax.PageIsUnloading) {
            var zErrorExtraDetail = "\n<br />URL: "+aURL
                                   +"\n<br />ReceiveFunctionName: "+(aLoadObject.ReceiveFunctionName?aLoadObject.ReceiveFunctionName:"not supplied")
                                   +"\n<br />CallerFunctionName: "+(aLoadObject.CallerFunctionName?aLoadObject.CallerFunctionName:"not supplied")
                                   +"\n<br />"+zProcessError
                                   +"\n<br />"+zProcessErrorDetail;
            zFunc = aLoadObject.OnErrorFunction ? aLoadObject.OnErrorFunction : Util.genericErrorHandler;
            return true;
          }
          else if (zObject && zObject.__SERVERINSTRUCTION__) {
            if (zObject.__SERVERINSTRUCTION__ == "REDIRECT_NOT_LOGGED_IN") {
              location.href = "/home.welcome?aReturnUrl="+encodeURIComponent(location.href)
                            + "&aError=You are not logged in please login to continue.";
              return true;
            }
          };
          var zStackItem = {
            ReceiveFunctionName: aLoadObject.ReceiveFunctionName,
            CallerFunctionName: aLoadObject.CallerFunctionName,
            Url: aURL,
            ResponseObject: zObject
          };
          Util.Stack.add(zStackItem);
          try {
            zFunc(zObject,zParamObject,zRequest);
          } finally {
            Util.Stack.remove(zStackItem);
            zStackItem.ResponseObject = null;
            zStackItem = null;
          }
          zRequestObject.updateStatus(zUseLoadObject);
          Ajax.requestIsComplete(zRequestObject, true);
        }
        return true;
      }
      if (this.Asynchronous ) {
        zReq.onreadystatechange = zProcessResponse;
        zReq.send(zSendContent);
      } else {
        zReq.send(zSendContent);
        zProcessResponse();
      }
    };
  }
};
var fThreadHandlerList = {};
Ajax.ThreadHandler = function(aQueuedItems, aMaxThreads, aThreadInterval, aFinishFunction, aFinishParams){
  this.Id = "ThreadHandler_".makeUnique();
  this.Total = 0;
  this.Completed = 0;
  this.Active = 0;
  this.Waiting = 0;
  this.Finished = true;
  this.QueuedItems = (aQueuedItems) ? aQueuedItems : [];
  this.ActiveList = [];
  this.CompletedList = [];
  this.Total = this.QueuedItems.length;
  this.ThreadInterval = (!isNaN(aThreadInterval)&&aThreadInterval>=0) ? aThreadInterval : 500;
  this.MaxThreads = (aMaxThreads) ? aMaxThreads : this.MaxThreads;
  this.FinishFunction = (aFinishFunction) ? aFinishFunction : null;
  this.FinishParams = (aFinishParams) ? aFinishParams : null;
  fThreadHandlerList[this.Id] = this;
};
Ajax.ThreadHandler.prototype = {
  queue: function (aQueuedItem) {
    if(!this.Canceled) {
      this.QueuedItems.push(aQueuedItem);
      this.Total++;
      if(this.Finished) {
        this.Finished = false;
        this.start();
      }
      return true;
    }
    return false;
  },
  start: function() {
    if(!this.Canceled&&!this.Paused) {
      if(this.QueuedItems.length>0) {
        if(this.ActiveList.length<this.MaxThreads) {
          var zQueuedItem = this.QueuedItems.shift();
          if(zQueuedItem&&!zQueuedItem.RequestSetTimeout) {
            if(this.ActiveList.length<this.MaxThreads) {
              this.run(zQueuedItem);
            }
          }
          this.start();
        }
        else {
          var zThisLiveRequest_ThreadHandler = this;
          setTimeout(function(){zThisLiveRequest_ThreadHandler.start();},zThisLiveRequest_ThreadHandler.ThreadInterval);
        }
      }
      else if(this.ActiveList.length<=0&&!this.Finished) {
        this.finish();
        return true;
      }
    }
    return true;
  },
  run: function (aQueuedItem) {
    this.ActiveList.push(aQueuedItem);
    this.Active = this.ActiveList.length;
    var zThisLiveRequest_ThreadHandler = this;
    aQueuedItem.RequestTimeout = setTimeout(function(){zThisLiveRequest_ThreadHandler.execute(aQueuedItem);},zThisLiveRequest_ThreadHandler.ThreadInterval);
    return true;
  },
  execute: function (aQueuedItem) {
    var zThisLiveRequest_ThreadHandler = this;
    if(!this.Canceled&&!this.Paused) {
      if (aQueuedItem.ExecuteQueueFunction){
        aQueuedItem.ExecuteQueueFunction(aQueuedItem.Params);
      }
      if (aQueuedItem.Polling){
        aQueuedItem.RequestingThreadHandlerId = zThisLiveRequest_ThreadHandler.Id;
        aQueuedItem.CompletedPollingParams = {QueuedItem: aQueuedItem, QueuedItemCompleteFunction: aQueuedItem.CompleteFunction, QueuedItemCompleteParams: aQueuedItem.CompleteParams};
        Ajax.makePollingRequest(aQueuedItem);
      }else{
        var zRequestParams = {
          URL: aQueuedItem.URL,
          Function: aQueuedItem.Function,
          Params: aQueuedItem.Params,
          CompleteFunction: function(){zThisLiveRequest_ThreadHandler.complete({QueuedItem: aQueuedItem, QueuedItemCompleteFunction: aQueuedItem.CompleteFunction, QueuedItemCompleteParams: aQueuedItem.CompleteParams});},
          CompleteParams: {QueuedItem: aQueuedItem, QueuedItemCompleteFunction: aQueuedItem.CompleteFunction, QueuedItemCompleteParams: aQueuedItem.CompleteParams},
          TextOnly: aQueuedItem.TextOnly,
          PostValues: aQueuedItem.PostValues,
          Method: aQueuedItem.Method
        };
        Ajax.makeRequest(zRequestParams);
      }
    }
    return true;
  },
  resume: function () {
    this.Paused = false;
    this.start();
    return true;
  },
  complete: function (aCompletedParams) {
    this.CompletedList.push(aCompletedParams.QueuedItem);
    this.Completed++;
    var zQueuedItemActiveIndex = this.ActiveList.indexOf(aCompletedParams.QueuedItem);
    this.ActiveList.splice(zQueuedItemActiveIndex,1);
    this.Active = this.ActiveList.length;
    this.start();
    if(aCompletedParams.QueuedItemCompleteFunction) {
      aCompletedParams.QueuedItemCompleteFunction(aCompletedParams.QueuedItemCompleteParams);
    }
    return true;
  },
  finish: function () {
    this.Finished = true;
    if(this.FinishFunction) {
     this.FinishFunction(this.FinishParams);
    }
    return true;
  },
  getStats: function () {
    return {Total: this.Total, Active: this.Active, Completed: this.Completed, PercentComplete: ((this.Completed/this.Total)*100), Paused: this.Paused, Canceled: this.Canceled, Finished: this.Finished};
  }
};
Ajax.ResetAllRequests = function() {
  Ajax.PageIsUnloading = true;
  try {
    Ajax.ActiveRequests.forEach(function(aRequest){
      aRequest.reset();
    });
  } catch(e) {}
  return true;
}
DOM.addEvent(window, "onunload", Ajax.ResetAllRequests);
    // ---------------------- End Action_Include_Ajax ----------------- //
    // ---------------------- Begin Action_Include_Drag --------------- //
var Drag = {
  obj : null,
  DoNothing: function(){},
  init: function(o, oRoot, minX, maxX, minY, maxY, aStartFunc, aDragFunc, aEndFunc, aDragTimeout){
		var zMouseDownFunc = aDragTimeout ? Drag.setTimeout : Drag.start;
    DOM.addEvent(o, "onmousedown", zMouseDownFunc, aDragTimeout);
    DOM.linkObject(o, "root", (oRoot && oRoot != null ? oRoot : o));
    if(!o.root.TriggerArray){
      DOM.linkObject(o.root, "TriggerArray", new Array());
    }
    o.root.TriggerArray.push(o);
    if (isNaN(parseInt(o.root.style.left  ))) o.root.style.left   = "0px";
    if (isNaN(parseInt(o.root.style.top   ))) o.root.style.top    = "0px";
    o.minX  = typeof minX != 'undefined' ? minX : null;
    o.minY  = typeof minY != 'undefined' ? minY : null;
    o.maxX  = typeof maxX != 'undefined' ? maxX : null;
    o.maxY  = typeof maxY != 'undefined' ? maxY : null;
    o.root.onDragStart  = aStartFunc || Drag.DoNothing;
    o.root.onDragEnd    = aEndFunc   || Drag.DoNothing;
    o.root.onDrag       = aDragFunc  || Drag.DoNothing;
  },
	setTimeout: function( e, aDragTimeout ) {
		var zDragData = Drag.setup(e);	
		var zMouseDownClearDrag = function(e) {
			clearTimeout( zDragData.o.root.DragTimeout );
			return false;
		}	
		DOM.addEvent( Drag.obj, "onmouseup", zMouseDownClearDrag );
		zDragData.o.root.DragTimeout = setTimeout( 
			function() {
				DOM.removeEvent( Drag.obj, "onmouseup", zMouseDownClearDrag );
				Drag.run( e, zDragData );
				return false;
			},
			aDragTimeout
		);
		return false;		
	},
	setup: function( e ) {
		e = Event.fix(e);
		var o = Drag.obj = (e.originalTarget.root ? e.originalTarget : e.currentTarget );
    DOM.disableSelection( o );
    var zRootY = parseInt(o.root.style.top);
    var zRootX = parseInt(o.root.style.left);
		var zClientX = e.clientX;
		var zClientY = e.clientY;		
		return {
			x: zRootX,
			y: zRootY,
			ClientX: e.clientX,
			ClientY: e.clientY,
			o: o,
			e: e		
		};		
	},
  run: function( e, aDragData ){
		var x = aDragData.x,
				y = aDragData.y,
				o = aDragData.o,
				zClientX = aDragData.ClientX,
				zClientY = aDragData.ClientY
		o.root.onDragStart( x, y );
		o.lastMouseX  = zClientX;
		o.lastMouseY  = zClientY;
		if (o.minX != null)  o.minMouseX  = zClientX - x + o.minX;
		if (o.maxX != null)  o.maxMouseX  = o.minMouseX + o.maxX - o.minX;
		if (o.minY != null)  o.minMouseY  = zClientY - y + o.minY;
		if (o.maxY != null)  o.maxMouseY  = o.minMouseY + o.maxY - o.minY;
		DOM.addEvent(document, "onmousemove", Drag.drag, Drag.obj);
		DOM.addEvent(document, "onmouseup", Drag.end, Drag.obj);					
    return false;
  },
	start: function( e ) {
		var zDragData = Drag.setup( e );	
		return Drag.run( e, zDragData );
	},
  drag: function(e){
    e = Event.fix(e);
    var o = Drag.obj;
    if ( !o ) return false
    var ey  = e.clientY;
    var ex  = e.clientX;
    var y = parseInt(o.root.style.top);
    var x = parseInt(o.root.style.left);
		var nx, ny;
    if (o.minX != null) ex = Math.max(ex, o.minMouseX);
    if (o.maxX != null) ex = Math.min(ex, o.maxMouseX);
    if (o.minY != null) ey = Math.max(ey, o.minMouseY);
    if (o.maxY != null) ey = Math.min(ey, o.maxMouseY);
    nx = x + (ex - o.lastMouseX);
    ny = y + (ey - o.lastMouseY);
    Drag.obj.root.style.left = nx + "px";
    Drag.obj.root.style.top = ny + "px";
		Drag.obj.lastMouseX  = ex;
    Drag.obj.lastMouseY  = ey;
    Drag.obj.root.onDrag(nx, ny);
		return false;
  },
	end: function(){
    Event.remove(document, "onmousemove", Drag.drag, Drag.obj);
    Event.remove(document, "onmouseup", Drag.end, Drag.obj);
    Drag.obj.root.onDragEnd(  parseInt(Drag.obj.root.style.left),parseInt(Drag.obj.root.style.top));
    Drag.obj = null;
  },
  disable: function(o){
    Event.remove(o, "onmousedown", Drag.start);
  },
  enableElement: function(aParamObject){
    if(typeof(aParamObject)=='string'){
      aParamObject = {Element:document.getElementById(aParamObject)};
    }else if(!aParamObject.Element){
      aParamObject = {Element:aParamObject};
    }
    Drag.init(
      (aParamObject.TriggerElement ? aParamObject.TriggerElement:aParamObject.Element),
      (aParamObject.TriggerElement ? aParamObject.Element:aParamObject.TriggerElement),
      aParamObject.MinX,
      aParamObject.MaxX,
      aParamObject.MinY,
      aParamObject.MaxY,
      aParamObject.StartFunction,
      aParamObject.DragFunction,
      aParamObject.EndFunction,
			aParamObject.DragTimeout
    );
    return true;
  },
  disableElement: function(aElement){
    if(typeof(aElement)=='string'){
      aElement = document.getElementById(aElement);
    }
    if(aElement.TriggerArray){
      for(var i=0;i<aElement.TriggerArray.length;i++){
        Drag.disable(aElement.TriggerArray[i]);
      }
    }else{
      Drag.disable(aElement);
    }
  }
};
Drag.Sort = {
  init: function(aParentElement, aParams){
    aParams = aParams || {};
    DOM.cleanWhitespace(aParentElement);
    if(aParentElement.nodeName == "TABLE") {
      aParams.EnableAllElements = true;
      aParentElement = aParentElement.childNodes[0];
      DOM.cleanWhitespace(aParentElement);
      if(DOM.Browser.isSafari) {
        aParams.EnableAllElements = false;
        Drag.Sort.Safari.initOutlineDrag(aParentElement);
      }
    }
    if(isTrue(aParams.EnableAllElements,true)) {
      var zRowLength = aParentElement.childNodes.length;
      for(var i = 0; i < zRowLength; i++) {
        Drag.Sort.enableElement(aParentElement.childNodes[i]);
      }
    }
    if(aParams.OnSortCompleteFunction) {
      DOM.linkObject(aParentElement, "Drag_OnSortCompleteFunction", aParams.OnSortCompleteFunction);
      if(aParams.OnSortCompleteParams) {
        DOM.linkObject(aParentElement, "Drag_OnSortCompleteParams", aParams.OnSortCompleteParams);
      }
    }
    return true;
  },
  enableElement: function(aElement){
    Drag.init(aElement, null, 0, 0, null, null, Drag.Sort.startDrag, Drag.Sort.testCollision, Drag.Sort.endDrag);
    return true;
  },
  startDrag: function(){
    var zCoords = DOM.getAbsolutePosition(this);
    this.Drag_ParentCoords = DOM.getAbsolutePosition(this.parentNode);
    var zClone = this.cloneNode(true);
    this.Drag_Clone = zClone;
    var zOriginalIndex = 0;
    for(var i = 0; i < this.parentNode.childNodes.length; i++) {
      if(this.parentNode.childNodes[i] == this) {
        this.Drag_OriginalIndex = i;
      }
    }
    this.parentNode.insertBefore(zClone,this);
    this.parentNode.appendChild(this);
    if(DOM.Browser.isIE6x && isNaN(parseInt(this.style.width))) {
      this.style.width = this.offsetWidth + "px";
      this.ResetWidth = true;
    }
    this.style.top = (zClone.offsetTop - this.parentNode.scrollTop) + "px";
    this.style.position = "absolute";
    return true;
  },
  testCollision: function(){
    var zTop = this.offsetTop - this.Drag_ParentCoords.y;
    var zOffsetTop = this.offsetTop + this.parentNode.scrollTop;
    var zPreviousSibling = this.Drag_Clone.previousSibling, zNextSibling = this.Drag_Clone.nextSibling;
    var zSiblingHeight, zHalfHeight;
    if(zOffsetTop < this.Drag_Clone.offsetTop && zPreviousSibling) {
      zSiblingHeight = zPreviousSibling.offsetHeight;
      zHalfHeight = zSiblingHeight / 2;
      if(zOffsetTop < zPreviousSibling.offsetTop + zHalfHeight) {
        this.parentNode.insertBefore(this.Drag_Clone,zPreviousSibling);
      }
    }
    if(zOffsetTop > this.Drag_Clone.offsetTop && zNextSibling && zNextSibling != this) {
      zSiblingHeight = zNextSibling.offsetHeight;
      zHalfHeight = zSiblingHeight / 2;
      if(zOffsetTop + this.offsetHeight > zNextSibling.offsetTop + zHalfHeight) {
        this.parentNode.insertBefore(zNextSibling,this.Drag_Clone);
      }
    }
    return true;
  },
  endDrag: function(){
    this.parentNode.insertBefore(this,this.Drag_Clone);
    this.parentNode.removeChild(this.Drag_Clone);
    this.style.position = "";
    this.style.left = "0px";
    this.style.top = "0px";
    if(this.ResetWidth) {
      this.style.width = "auto";
    }
    var zNewIndex = 0;
    for(var i = 0; i < this.parentNode.childNodes.length; i++) {
      if(this.parentNode.childNodes[i] == this) {
        zNewIndex = i;
      }
    }
    if(zNewIndex != this.Drag_OriginalIndex) {
      if(this.parentNode.Drag_OnSortCompleteFunction) {
        this.parentNode.Drag_OnSortCompleteFunction(this.parentNode, this.parentNode.Drag_OnSortCompleteParams);
      } else if(this.parentNode.List_ItemContainerElement.Drag_OnSortCompleteFunction) {
        this.parentNode.List_ItemContainerElement.Drag_OnSortCompleteFunction(this.parentNode.List_ItemContainerElement, this.parentNode.List_ItemContainerElement.Drag_OnSortCompleteParams);
      }
    }
    return true;
  },
  Safari: {
    initOutlineDrag: function(aParentElement){
      var zOutliner = Drag.Sort.Safari.createOutliner(aParentElement.parentNode);
      var zRowLength = aParentElement.childNodes.length;
      for(var i = 0; i < zRowLength; i++) {
        DOM.cleanWhitespace(aParentElement.childNodes[i]);
        aParentElement.childNodes[i].Drag_Outliner = zOutliner;
        DOM.addEvent(aParentElement.childNodes[i], "onmouseover", Drag.Sort.Safari.outlineElement, aParentElement.childNodes[i]);
      }
      Drag.init(zOutliner, null, null, null, null, null, Drag.Sort.Safari.startOutlineDrag, Drag.Sort.Safari.testOutlineCollision, Drag.Sort.Safari.endOutlineDrag);
    },
    createOutliner: function(aParentElement){
      var zOutliner = document.createElement("div");
      zOutliner.style.position = "absolute";
      zOutliner.style.borderWidth = "1px";
      zOutliner.style.borderStyle = "solid";
      zOutliner.style.borderColor = "#000";
      zOutliner.style.display = "none";
      aParentElement.Drag_Outliner = zOutliner;
      document.body.appendChild(zOutliner);
      return zOutliner;
    },
    outlineElement: function(e,aRowElement){
      if(!Drag.Sort.Safari.Dragging) {
        Drag.Sort.Safari.calculateRowDimensions(aRowElement);
        aRowElement.Drag_Outliner.style.left = aRowElement.Safari_offsetLeft + "px";
        aRowElement.Drag_Outliner.style.top = aRowElement.Safari_offsetTop + "px";
        aRowElement.Drag_Outliner.style.width = aRowElement.Safari_offsetWidth + "px";
        aRowElement.Drag_Outliner.style.height = aRowElement.Safari_offsetHeight + "px";
        aRowElement.Drag_Outliner.Drag_RowElement = aRowElement;
        aRowElement.Drag_Outliner.style.display = "block";
      }
      return true;
    },
    calculateRowDimensions: function(aRowElement){
      var zCell, zLeft = null, zTop, zHeight = 0, zWidth = 0, zLength = aRowElement.childNodes.length, zFirstTop;
      zCell = aRowElement.childNodes[0];
      var zFirstCellCoords = DOM.getAbsolutePosition(zCell);
      zFirstTop = zCell.offsetTop;
      zTop = zFirstTop;
      for(var i = 0; i < zLength; i++) {
        zCell = aRowElement.childNodes[i];
        zTop = (zCell.offsetTop < zTop) ? zCell.offsetTop : zTop;
        zHeight = (zHeight > zCell.offsetHeight) ? zHeight : zCell.offsetHeight;
        zWidth += zCell.offsetWidth;
      }
      zTop = zFirstCellCoords.y - (zFirstTop - zTop);
      aRowElement.Safari_offsetLeft = zFirstCellCoords.x;
      aRowElement.Safari_offsetTop = zTop;
      aRowElement.Safari_offsetWidth = zWidth;
      aRowElement.Safari_offsetHeight = zHeight;
      return true;
    },
    startOutlineDrag: function(){
      if(this.Drag_RowElement) {
        if(this.Drag_RowElement.previousSibling) {
          Drag.Sort.Safari.calculateRowDimensions(this.Drag_RowElement.previousSibling);
        }
        if(this.Drag_RowElement.nextSibling) {
          Drag.Sort.Safari.calculateRowDimensions(this.Drag_RowElement.nextSibling);
        }
        Drag.Sort.Safari.Dragging = true;
      }
      return true;
    },
    testOutlineCollision: function(){
      var zPreviousSibling = this.Drag_RowElement.previousSibling, zNextSibling = this.Drag_RowElement.nextSibling;
      var zSiblingHeight, zHalfHeight;
      if(this.offsetTop < this.Drag_RowElement.Safari_offsetTop && zPreviousSibling) {
        zSiblingHeight = zPreviousSibling.Safari_offsetHeight;
        zHalfHeight = zSiblingHeight / 2;
        if(this.offsetTop < zPreviousSibling.Safari_offsetTop + zHalfHeight) {
          this.Drag_RowElement.parentNode.insertBefore(this.Drag_RowElement,zPreviousSibling);
          if(this.Drag_RowElement.previousSibling) {
            Drag.Sort.Safari.calculateRowDimensions(this.Drag_RowElement.previousSibling);
          }
        }
      }
      if(this.offsetTop > this.Drag_RowElement.Safari_offsetTop && zNextSibling && zNextSibling != this) {
        zSiblingHeight = zNextSibling.Safari_offsetHeight;
        zHalfHeight = zSiblingHeight / 2;
        if(this.offsetTop + this.offsetHeight > zNextSibling.Safari_offsetTop + zHalfHeight) {
          this.Drag_RowElement.parentNode.insertBefore(zNextSibling,this.Drag_RowElement);
          if(this.Drag_RowElement.nextSibling) {
            Drag.Sort.Safari.calculateRowDimensions(this.Drag_RowElement.nextSibling);
          }
        }
      }
      return true;
    },
    endOutlineDrag: function(){
      Drag.Sort.Safari.Dragging = false;
      Drag.Sort.Safari.outlineElement(null,this.Drag_RowElement);
      if(this.parentNode.Drag_OnSortCompleteFunction) {
        this.parentNode.Drag_OnSortCompleteFunction(this.parentNode, this.parentNode.Drag_OnSortCompleteParams);
      }
      return true;
    }
  }
};
    // ---------------------- End Action_Include_Drag ----------------- //
    // ---------------------- Begin Action_Include_Data --------------- //
var Data = {
  Types: {},
  Batch: {
    fetchData: function( aItemArray, aFieldArray, aItemPath, aParams ) {
      var zFormType              = aParams.FormType;              
      var zItemType              = aParams.ItemType || "";        
      var zCallBackFunction      = aParams.OnBatchFetchComplete;  
      var zQueueCallBackFunction = aParams.OnQueueFetchComplete;  
      var zThreadCount           = aParams.ThreadCount || 4;      
      var zThreadHandler         = new Ajax.ThreadHandler( [], zThreadCount, null, zCallBackFunction, { ItemArray: aItemArray, Params: aParams } );
      var zBatchCount            = aParams.BatchCount || 8;      
      var zSubmitItemPathArray   = [];
      var zItem_TitleArray       = ["ItemPath"];
      var zField_TitleArray      = ["ID"];
      var zExtraParams;
      var zUserLanguage = (URI.User) ? URI.User.Language : '';
      for(var i = 0; i < aItemArray.length; i += zBatchCount) {
        zSubmitItemPathArray = aItemArray.slice(i, i + zBatchCount);
        zExtraParams = {
          aFormType      : zFormType,
          aItemType      : zItemType,
          inpItemPathCSV : unescape(CsvInput.getString({ Data: zSubmitItemPathArray, TitleArray: zItem_TitleArray  })),
          inpFieldCSV    : unescape(CsvInput.getString({ Data: aFieldArray,          TitleArray: zField_TitleArray })),
          aLanguage      : zUserLanguage
        }
        zThreadHandler.queue({
          URL: URI.pageURL( aItemPath, "FormUI_GetData", zExtraParams, true),
          Method:"GET",
          Function: zQueueCallBackFunction,
          Params: aParams
        });
      }
      zThreadHandler.start();
      return true;
    }
  }
};
    // ---------------------- End Action_Include_Data ----------------- //
    // ---------------------- Begin Action_Include_List --------------- //
var List = function(aParams){
  this.Id = aParams.Id || "List".makeUnique();
  this.Params = aParams;
  this.Type = aParams.ListType;
  this.Fields = aParams.Fields;
  this.View = aParams.View;
  this.Sortable = isTrue(aParams.Sortable);
  this.OnSortCompleteFunction = aParams.OnSortCompleteFunction;
  this.SearchObjectItemPath = aParams.SearchObjectItemPath || "intel\\ModuleList\\Search";
  this.SearchAction = aParams.SearchAction || "FilterListSearch";
  this.SearchParams = aParams.SearchParams || null;
  this.SearchCriteria = aParams.SearchCriteria || [];
  this.SearchCriteriaExtraParams = aParams.SearchCriteriaExtraParams || '';
  this.FetchedLightboxData = aParams.FetchedLightboxData || false;
  if(aParams.ItemArray) {
    this.ItemArray = aParams.ItemArray;
    this.OriginalItemArray = aParams.ItemArray.copy();
  }
  if(aParams.FilterListItemPath) {
    this.FilterListItemPath = aParams.FilterListItemPath;
  }
  this.SearchResults = [];
  this.SearchResultsCount = this.ItemArray.length || 0;
  if (aParams.onListDrawFunction) {
    this.onListDrawFunction = aParams.onDrawFunction;
  }
  else if(aParams.SubSection && LiveAdMaker[aParams.Section] && LiveAdMaker[aParams.Section][aParams.SubSection] && LiveAdMaker[aParams.Section][aParams.SubSection].onListDrawFunction) {
    this.onListDrawFunction = LiveAdMaker[aParams.Section][aParams.SubSection].onListDrawFunction;
  }
  else if(aParams.SubSection && LiveAdMaker[aParams.SubSection] && LiveAdMaker[aParams.SubSection].onListDrawFunction) {
    this.onListDrawFunction = LiveAdMaker[aParams.SubSection].onListDrawFunction;
  }
  else if(aParams.Section && LiveAdMaker[aParams.Section] && LiveAdMaker[aParams.Section].onListDrawFunction) {
    this.onListDrawFunction = LiveAdMaker[aParams.Section].onListDrawFunction;
  }
  else if (LiveAdMaker.SelectedSection && LiveAdMaker.SelectedSection.onListDrawFunction){
    this.onListDrawFunction = LiveAdMaker.SelectedSection.onListDrawFunction;
  }
  this.SearchResultsContainer = null;
  this.SearchInput = null;
  this.FilterOptionsArray = aParams.FilterOptionsArray || [];
  this.FilterOptionSelected = null;
  return this;
};
Util.copyProperties(List, {
  drawList: function(aItemArray,aParams){
    aParams = aParams || {};
    aParams.View = aParams.View || "property";
    aParams.CreateContainerFunction = aParams.CreateContainerFunction || List.createListSimple;
    aParams.CreateItemFunction = aParams.CreateItemFunction || List.createItemSimple;
    aParams.DisplayFunction = aParams.DisplayFunction || List.DisplayFunctions[aParams.View];
    return aParams.CreateContainerFunction(aItemArray,aParams);
  },
  drawActionUI: function(aItemArray,aParams, aList){
    aParams = aParams || {};
    aParams.Actions = aParams.Actions || [];
    var zContainerElement = document.createElement("div"),
        zDivArray = ["BottomRow","TopLeft","LeftBackground","LeftColumn","TopRow","BottomLeft","TopRight","RightColumn","BottomRight","InLineHelp","Content","ScrollHandle","ScrollUp","ScrollDown","ScrollLine","DragLeft"],
        zDivs = {};
    DOM.linkObject(zContainerElement, "List_ElementList", zDivs);
    DOM.addClass(zContainerElement,"ActionUI_Container");
    if(!aParams.ItemArray || !aParams.ItemArray.length) {
      DOM.addClass(zContainerElement,"ActionUI_SingleItemContainer");
    }
    zContainerElement.ResizeSettings = {
      Height: "100%",
      Width: "100%",
      MakeEven: true,
      OnResizeFunction: List.resizeContainer
    };
    zDivArray.forEach(function(aDivName){
      zDivs[aDivName] = document.createElement("div");
      zContainerElement.appendChild(zDivs[aDivName]);
      DOM.addClass(zDivs[aDivName], "ActionUI_"+aDivName);
    });
    var zItemsOutput = List.drawActionUI_Items(aItemArray, aParams, zContainerElement, aList);
    var zSelectedItemClass = (aParams.ListOptions && aParams.ListOptions.DisplayHierarchy=="Y") ? "ActionUI_HierarchySelectedItem" : zItemsOutput.SelectedItemClass;
    if(zDivs.DragLeft) {
      DOM.makeHoverable(zDivs.DragLeft, "ActionUI_DragLeft_Hover");
      zDivs.DragLeft.style.left = "163px";
      zDivs.DragLeft.style.top = "24px";
      Drag.init(zDivs.DragLeft, null, 163, 975, 24, 24, List.dragLeftColumnStart, List.dragLeftColumn, List.dragLeftColumnEnd);
    }
    DOM.linkObject(zContainerElement, "List_ItemArray", aItemArray);
    DOM.linkObject(zContainerElement, "List_ContentElement", zDivs["Content"]);
    DOM.linkObject(zContainerElement, "List_InLineHelpElement", zDivs["InLineHelp"]);
    DOM.linkObject(zContainerElement, "List_SelectedItemClass", zSelectedItemClass);
    DOM.linkObject(zContainerElement, "List_Params", aParams);
    zDivs["ScrollHandle"].appendChild(zDivs["ScrollLine"]);
    DOM.linkObject(zContainerElement, "List_ScrollLine", zDivs["ScrollLine"]);
    var zScrollHandle = DOM.createElement("span",null,"Icon_ScrollHandle");
    zDivs["ScrollHandle"].appendChild(zScrollHandle);
    DOM.linkObject(zContainerElement, "List_ScrollHandle", zScrollHandle);
    aList.ScrollHandle = zScrollHandle;
    zScrollHandle.List = aList;
    Drag.init(zScrollHandle, null, 0, 0, 0, null, List.startDragScrollHandle, List.dragScrollHandle);
    if(aList) {
      aList.Elements = zDivs;
    }
    ["Up","Down"].forEach(function(aDirection){
      var zScrollButton = DOM.createElement("span",null,"Icon_Scroll"+aDirection+"Arrow");
      zDivs["Scroll"+aDirection].appendChild(zScrollButton);
      DOM.linkObject(zContainerElement, "List_Scroll"+aDirection, zScrollButton);
      DOM.addEvent(zScrollButton, "onmousedown", List["startScroll"+aDirection], aList);
      DOM.addEvent(zScrollButton, "onmouseup", List["endScroll"+aDirection], aList);
    });
    if(aParams && aParams.ParentElement) {
      DOM.replaceContent(aParams.ParentElement, zContainerElement);
    }
    if(aParams.ItemArray && aParams.ItemArray.length && LiveAdMaker.SelectedSection && !LiveAdMaker.SelectedSection.HideQuickSearch) {
      if (aParams.Section) {
        if (aParams.SubSection) {
          var zSection = LiveAdMaker[aParams.Section][aParams.SubSection] || LiveAdMaker[aParams.SubSection]
        }
        else {
          var zSection = LiveAdMaker[aParams.Section];
        }
        if (zSection) {
          if (aParams.List && (!zSection.QuickSearch || aParams.OwnerItemPath!=zSection.QuickSearch.OwnerItemPath || aParams.RedrawQuickSearch)) {
            zSection.QuickSearch = new QuickSearch(aParams, zSection);
          }
          if (zSection.QuickSearch) {
            zSection.QuickSearch.drawSearchInput(aParams, zContainerElement, true);
          }
        }
      }
    }
    if (!aItemArray.length && aParams.ShowNavigation) {
      var zEmptyListVerbiage = DOM.createElement("div", "ActionUI_EmptyListVerbiage");
      zEmptyListVerbiage.innerHTML = unescape('%26nbsp%3BThis%20list%20is%20currently%20empty%2E%20Click%20\'New\'%20to%20add%20an%20item%2E');
      zContainerElement.appendChild(zEmptyListVerbiage);
      AutoHelp.getListHelpText();
    }
    if(aParams.ListOptions && aParams.ListOptions.DragLeftPosition) {
      List.setDragLeft(aParams.ListOptions.DragLeftPosition, zDivs, true);
    }
    return zContainerElement;
  },
  drawActionUI_Items: function(aItemArray, aParams, aContainerElement, aList){
    var zItemParams, zOutput = {};
    if(aParams.ItemArray) {
      zItemParams = Util.copyObject(aParams);
      zItemParams.ItemTagName = "a";
      zItemParams.ParentElement = null;
      var zSelectedItemClass;
      if(zItemParams.View == "property") {
        zItemParams.ItemField = "DisplayName";
        zItemParams.DisplayFunction = List.DisplayFunctions.selectItemLink;
        zSelectedItemClass = "ActionUI_SelectedItem";
      }
      else if(zItemParams.View == "subitem") {
        zItemParams.ItemField = "DisplayName";
        zItemParams.DisplayFunction = List.DisplayFunctions.selectSubItemLink;
        zSelectedItemClass = "ActionUI_SelectedItem";
      }
      else if(zItemParams.View == "subitemThumbnail") {
        zItemParams.ItemField = "DisplayName";
        zItemParams.DisplayFunction = List.DisplayFunctions.selectSubItemThumbnailLink;
        zSelectedItemClass = "ActionUI_SelectedItemThumbnail";
      }
      else if(zItemParams.View == "checkbox") {
        zItemParams.ItemField = "DisplayName";
        zSelectedItemClass = "ActionUI_SelectedItem";
      }
      else if (zItemParams.View == "subitemcheckbox") {
        zItemParams.ItemField = "DisplayName";
        zItemParams.DisplayFunction = List.DisplayFunctions.selectSubItemLink;
        zSelectedItemClass = "ActionUI_SelectedItem";
      }
      else {
        zItemParams.View = "thumbnailAndName";
        zItemParams.DisplayFunction = List.DisplayFunctions.selectItemThumbnailLink;
        zSelectedItemClass = "ActionUI_SelectedItemThumbnail";
      }
      zOutput.ItemContainer = List.drawList(aItemArray,zItemParams);
        if (DOM.Browser.isFirefox3){
           DOM.addClass(zOutput.ItemContainer, "ActionUI_ItemContainerFF3");
        }
        else{
           DOM.addClass(zOutput.ItemContainer, "ActionUI_ItemContainer");
        }
      if(isTrue(aParams.Sortable)) {
        Drag.Sort.init(zOutput.ItemContainer,{EnableAllElements: false, OnSortCompleteFunction: List.sortComplete, OnSortCompleteParams: aParams});
      }
      if(aContainerElement.List_ItemContainerElement) {
        DOM.removeElement(aContainerElement.List_ItemContainerElement);
      }
      DOM.linkObject(aContainerElement, "List_ItemContainerElement", zOutput.ItemContainer);
      aContainerElement.List_ElementList.LeftColumn.appendChild(zOutput.ItemContainer);
    }
    zOutput.ItemParams = zItemParams;
    zOutput.SelectedItemClass = zSelectedItemClass;
    return zOutput;
  },
  drawActionUI_Actions: function(aParams, aActions){
    var zActionNavParams = Util.copyProperties({
      ItemTagName: "a",
      ActionUI: {
          Params: aParams,
          ItemArray: aParams.ItemArray,
          Actions: aActions
        },
      DisplayFunction: (aParams.View == "subitem" || aParams.View == "subitemcheckbox") ? List.DisplayFunctions.selectSubActionLink : List.DisplayFunctions.selectActionLink
    }, aParams);
    zActionNavParams.ParentElement = null;
    zActionNavParams.CreateContainerFunction = List.createListSimple;
    return List.drawList(aActions,zActionNavParams);
  },
  dragLeftColumnStart: function(){
    DOM.addClass(this, "ActionUI_DragLeft_Dragging");
    return true;
  },
  dragLeftColumn: function(){
    var zLeft = this.offsetLeft;
    List.setDragLeft(zLeft, this.parentNode.List_ElementList);
    this.parentNode.List_Params.ListOptions.DragLeftPosition = zLeft;
    return true;
  },
  dragLeftColumnEnd: function(){
    DOM.removeClass(this, "ActionUI_DragLeft_Dragging");
    DOM.Resize.recurse();
    return true;
  },
  setDragLeft: function(aLeft, aDivs, aUpdateDragLeft){
    ["TopLeft","LeftBackground","BottomLeft"].forEach(function(aDivName){
      aDivs[aDivName].style.left = aLeft + "px";
    });
    aDivs["LeftColumn"].style.width = (aLeft + 5 - aDivs["LeftColumn"].offsetLeft) + "px";
    ["BottomRow","TopRow","Content","InLineHelp"].forEach(function(aDivName){
      var zCurrentLeft = aDivs[aDivName].offsetLeft;
      var zCurrentWidth = aDivs[aDivName].offsetWidth;
      aDivs[aDivName].style.left = (aLeft +5) + "px";
      aDivs[aDivName].style.width = Math.max(0, (zCurrentWidth + (zCurrentLeft - aDivs[aDivName].offsetLeft))) + "px";
    });
    aDivs.InLineHelp.style.width  = Math.max(0, aDivs.Content.offsetWidth - 4) + "px";
    if ( aDivs.InLineHelp.lastChild ) {
      aDivs.InLineHelp.lastChild.style.width = Math.max(0, aDivs.Content.offsetWidth - 41) + "px";
    }
    var zLightboxZoom = $( "Lightbox_Zoom" );
    if ( zLightboxZoom && zLightboxZoom.getAttribute( "DisableBubble" ) == "Y" ) {
      zLightboxZoom.style.left = aLeft + 5 + "px";
    }
    if(aUpdateDragLeft) {
      aDivs["DragLeft"].style.left = aLeft + "px";
    }
    return true;
  },
  createListSimple: function(aItemArray,aParams) {
    aParams = aParams || {};
    aParams.ContainerTagName = aParams.ContainerTagName || "div";
    var zContainerElement = DOM.createElement(aParams.ContainerTagName);
    if(aParams.ListOptions && aParams.ListOptions.DisplayCheckboxes=="Y" && !aParams.ActionUI) {
      var zForm = new FormUI.Form(aParams.OwnerItemPath, 'ListCheckbox', zContainerElement);
      zForm.Settings.DrawLabels = "N";
    }
    DOM.linkObject(zContainerElement, "List_ItemArray", aItemArray);
    aParams.List_LinkArray = [];
    aParams.List_ChildContainerArray = [];
    aParams.List_OrphanNodeArray = [];
    aParams.List_ChildContainerArray.set(zContainerElement, "Object" + aParams.OwnerObjectCode);
    aItemArray.forEach(function(aItem){
      if(aParams.ActionUI || !aParams.ListOptions || (aParams.ListOptions && aParams.ListOptions.DisplayHierarchy!="Y")) {
        var zElement = List.createItemSimple(aItem,zForm,aParams,zContainerElement);
      } else {
        if(!aItem.NodeParent||aItem.NodeParent=="") {
          aItem.NodeParent = "Object" + aParams.OwnerObjectCode;
        }
        var zElement = List.createItemComplex(aItem,zForm,aParams,zContainerElement);
      }
      aParams.List_LinkArray.push(zElement);
      if(aParams.ListOptions && aParams.ListOptions.DisplayHierarchy=="Y" && (aItem.NodeType=="LabelNode"||aItem.NodeType=="ParentNode")) {
        var zChildContainer = List.createItemChildContainer(aItem,aParams);
        DOM.linkObject(zChildContainer, "List_ItemContainerElement", zContainerElement);
        aParams.List_ChildContainerArray.set(zChildContainer, zChildContainer.List_Item.Id);
      }
      if(!aItem.NodeParent || aItem.NodeParent=="" || (aParams.ListOptions && aParams.ListOptions.DisplayHierarchy!="Y")) {
        var zParentContainer = aParams.List_ChildContainerArray[0];
      } else {
        var zParentContainer = aParams.List_ChildContainerArray.get(aItem.NodeParent);
      }
      if(zParentContainer) {
        zParentContainer.appendChild(zElement);
        if(zChildContainer) {
          zParentContainer.appendChild(zChildContainer);
        }
      } else {
        aParams.List_OrphanNodeArray.unshift(zElement);
        if(zChildContainer) {
          aParams.List_OrphanNodeArray.unshift(zChildContainer);
        }
      }
    });
    if(aParams.List_OrphanNodeArray.length) {
      List.placeOrphanNodes(aParams.List_OrphanNodeArray, aParams.List_ChildContainerArray, aParams, zContainerElement);
    }
    DOM.linkObject(zContainerElement, "List_ItemArray", aItemArray);
    DOM.linkObject(zContainerElement, "List_Params", aParams);
    if(aParams.ListOptions && aParams.ListOptions.DisplayCheckboxes=="Y" && aParams.ListOptions.DisplayTopBracket=="Y" && !aParams.ActionUI) {
      List.reclassCheckboxList(null, {aContainerElement: zContainerElement, aTopBracketCount: aParams.ListOptions.TopBracketCount});
    }
    if (aItemArray.length > 0) {
      if(zContainerElement.firstChild) {
        DOM.addClass(zContainerElement.firstChild, "first");
      }
      if(zContainerElement.lastChild) {
        DOM.addClass(zContainerElement.lastChild, "last");
      }
      aParams.List_ChildContainerArray.forEach(function(aChildContainer){
        var zLastChild = aChildContainer.lastChild;
        if(zLastChild && zLastChild.tagName == "DIV") {
          DOM.addClass(zLastChild, "ActionUI_SelectItemChildNodeContainer_last");
          zLastChild = zLastChild.previousSibling;
        }
        if(zLastChild) {
          DOM.addClass(zLastChild, "last");
          DOM.addClass(zLastChild, "ActionUI_HierarchySelectItemLink_last");
        }
        if(aChildContainer.firstChild) {
          DOM.addClass(aChildContainer.firstChild, "first");
          DOM.addClass(aChildContainer.firstChild, "ActionUI_HierarchySelectItemLink_first");
        }
        if(zLastChild && aChildContainer.firstChild && zLastChild == aChildContainer.firstChild) {
          DOM.addClass(aChildContainer.firstChild, "ActionUI_HierarchySelectItemLink_solo");
        }
      });
    }
    DOM.linkObject(zContainerElement, "List_ItemContainerElement", zContainerElement);
    return zContainerElement;
  },
  createItemSimple: function(aItem,aForm,aParams,aContainerElement){
    aParams = aParams || {};
    aParams.ItemTagName = aParams.ItemTagName || "div";
    var zElement = DOM.createElement(aParams.ItemTagName, aItem.Id + "_itemNode");
    zElement.List_ItemId = aItem.Id;
    DOM.linkObject(zElement, "List_Item", aItem);
    DOM.linkObject(zElement, "List_Params", aParams);
    if (aParams.ItemTagName=="a"){
      zElement.title=aItem.DisplayName;
    }
    aParams.DisplayFunction(aItem,zElement,aParams);
    if(aParams.OnClickFunction) {
      Event.add(zElement, "onclick", aParams.OnClickFunction, aItem);
    }
    if(aForm && aParams.ListOptions && aParams.ListOptions.DisplayCheckboxes && aParams.ListOptions.DisplayCheckboxes=="Y") {
      var zCheckbox = List.createListCheckbox(aItem,aForm,aParams,aContainerElement);
      if(zCheckbox) {
        zElement.insertBefore(zCheckbox, zElement.firstChild);
      }
    }
    if(!aParams.ActionUI && aParams.ListOptions && aParams.ListOptions.DisplayListIcons && aParams.ListOptions.DisplayListIcons=="Y") {
      var zIcon = List.createItemIcon(aItem,aParams);
      if(zIcon) {
        zElement.insertBefore(zIcon, zElement.lastChild);
      }
    }
    return zElement;
  },
  placeOrphanNodes: function(aOrphans,aParents,aParams,aContainer) {
    aOrphans.forEach(function(aOrphan){
      var zParentContainer = aParents.get(aOrphan.List_Item.NodeParent);
      if(!zParentContainer) {
        var zParentContainer = aParents[0];
      }
      if(zParentContainer) {
        var zChildNodes = zParentContainer.childNodes;
        if(zChildNodes.length == 0) {
          zParentContainer.appendChild(aOrphan);
        } else {
          zParentContainer.insertBefore(aOrphan, zParentContainer.firstChild);
        }
      }
    });
    return true;
  },
  createItemComplex: function(aItem,aForm,aParams,aContainerElement) {
    if(!aItem.NodeType||aItem.NodeType=="") {
      aItem.NodeType = "ChildNode";
    }
    var zElement = DOM.createElement("a", aItem.Id + "_" + aItem.NodeType, "ActionUI_HierarchySelectItemLink");
    zElement.List_ItemId = aItem.Id;
    DOM.linkObject(zElement, "List_Item", aItem);
    DOM.linkObject(zElement, "List_Params", aParams);
    if(aParams.ListOptions && aParams.ListOptions.DisplayHierarchy && aParams.ListOptions.DisplayHierarchy=="Y") {
      if(aItem.NodeType=="ParentNode") {
        var zArrow = List.createParentArrow(aItem,aParams);
        zElement.appendChild(zArrow);
      }
      else {
        zElement.appendChild(DOM.createElement("div", null, "ActionUI_SelectItemParentNodeJoin"));
      }
    }
    zElement.appendChild(DOM.createElement("div", null, "ActionUI_HierarchySelectItemConnector"));
    if (aItem.DisplayRemoveLink) {
      var zRemoveLink = List.createRemoveLink(aItem,aParams);
      if (zRemoveLink) {
        zElement.appendChild(zRemoveLink);
      }
    }
    if(aForm && aParams.ListOptions && aParams.ListOptions.DisplayCheckboxes && aParams.ListOptions.DisplayCheckboxes=="Y" && aItem.BaseType!="VirtualNode" && aItem.Type!="VirtualNode" && aItem.Type!="SearchResults") {
      var zCheckbox = List.createListCheckbox(aItem,aForm,aParams,aContainerElement);
      if(zCheckbox) {
        zElement.appendChild(zCheckbox);
      }
    }
    var zTextElement = DOM.createElement("a", aItem.Id + "_TextLink");
    zTextElement.innerHTML = aItem.DisplayName;
    zTextElement.title = aItem.DisplayName;
    if(aItem.Highlight) {
      DOM.addClass(zTextElement, "ActionUI_HierarchySelectItem_Highlight");
    }
    if(aParams.ListOptions && aParams.ListOptions.DisplayListIcons && aParams.ListOptions.DisplayListIcons=="Y") {
      var zIcon = List.createItemIcon(aItem,aParams);
      if(zIcon) {
        zTextElement.insertBefore(zIcon, zTextElement.firstChild);
      }
    }
    if(aItem.NodeType=="LabelNode") {
      DOM.addClass(zElement, "ActionUI_SelectItemLabel");
      DOM.addClass(zTextElement, "ActionUI_SelectItemLabelText");
      DOM.addEvent(zTextElement, "onclick", List.toggleChildNodeContainer, aItem.Id);
    } else if(aItem.ItemPath!="") {
      DOM.addClass(zTextElement, "ActionUI_HierarchyTextLink");
      if(!aParams.SubSection) {
        URI.setHashLink(zTextElement,"#Section="+aParams.Section+"&Item="+aItem.Id);
      } else {
        URI.setHashLink(zTextElement,"#Section="+aParams.Section+"&Item="+aParams.ItemId+"&Action="+aParams.Action+"&SubItem="+aItem.Id);
      }
    }
    zElement.appendChild(zTextElement);
    return zElement;
  },
  createParentArrow: function(aItem,aParams) {
    var zArrow = DOM.createElement("div", aItem.Id + "_ParentArrow", "ActionUI_SelectItemParentNodeArrow");
    if(!aItem.HasSubItems || aItem.HasSubItems=="N" || aItem.SubItemsLoaded=="Y") {
      if(aItem.OpenContainer=="Y" || aItem.SubItemsLoaded=="Y") {
        if(!aItem.SubItemsClosed) {
          DOM.addClass(zArrow, "ActionUI_SelectItemParentNodeSelected");
        }
      }
      DOM.addEvent(zArrow, "onclick", List.toggleChildNodeContainer, aItem.Id);
    } else if(aItem.HasSubItems == "Y" && aParams.ListOptions) {
      if(isTrue(aParams.ListOptions.DisplaySubHierarchy) && LiveAdMaker[aParams.Section][aParams.SubSection].requestChildNodes) {
        DOM.addEvent(zArrow, "onclick", LiveAdMaker[aParams.Section][aParams.SubSection].requestChildNodes, { ParentItem: aItem, Params: aParams });
      } else if(LiveAdMaker[aParams.Section].requestChildNodes) {
        DOM.addEvent(zArrow, "onclick", LiveAdMaker[aParams.Section].requestChildNodes, { ParentItem: aItem, Params: aParams });
      }
    }
    return zArrow;
  },
  createListCheckbox: function(aItem,aForm,aParams,aContainerElement) {
    if(aItem.NodeType=="LabelNode") {
      return false;
    }
    if(aItem.NodeType=="ParentNode" && aParams.ListOptions && aParams.ListOptions.UseHierarchy=="Y" && aParams.ListOptions.ParentsUseCheckboxes!="Y") {
      return false;
    }
    var zCheckboxParams = {
      Id: aItem.Id,
      Name: aItem.Id,
			Value: aItem.EnabledStatus,
      Text: '',
      LabelHeight: 0, LabelWidth: 0, FieldHeight: 0, FieldWidth: 0
    };
    var zCheckbox = aForm.createCheckbox(null,null,zCheckboxParams);
    zCheckbox.SaveFormItemPath = aItem.ItemPath;
    zCheckbox.setPath(".ObjectFlags.ListEnabled_" + aParams.OwnerObjectCode  + ".Flag1");
    zCheckbox.ListItemPath = aForm.ItemPath;
    var zCheckboxElement = aForm.getHTMLElement(zCheckbox, {});
    DOM.removeClass(zCheckboxElement, "CheckboxContainer");
    DOM.addClass(zCheckboxElement, "ActionUI_ListCheckbox");
    var zCheckboxInput = zCheckboxElement.firstChild;
    if(aItem.EnabledStatus!="N") {
      zCheckboxInput.defaultChecked = true;
    }
    var zCheckboxLabel = zCheckboxElement.lastChild;
    zCheckboxLabel.style.display = 'none';
    if(aParams.ListOptions && aParams.ListOptions.DisplayTopBracket=="Y" && aParams.ListOptions.TopBracketCount) {
      DOM.addEvent(zCheckboxInput, 'onclick', List.reclassCheckboxList, {aContainerElement: aContainerElement, aTopBracketCount: aParams.ListOptions.TopBracketCount});
      DOM.addEvent(zCheckboxInput, 'onmousedown', function(e){
        DOM.cancelBubble(e);
      });
    }
    return zCheckboxElement;
  },
  reclassCheckboxList: function(e,aParams) {
    var zContainerElement = aParams.aContainerElement;
    var zTopBracketCount = aParams.aTopBracketCount;
    var zParentElementArray = new Array();
    var zCheckedCount = 0;
    if(zContainerElement.hasChildNodes()) {
      var zElement = zContainerElement.firstChild;
      while(zElement) {
        if(zElement.tagName=="DIV" && zElement.hasChildNodes()) {
          zParentElementArray.push(zElement);
          zElement = zElement.firstChild;
        }
        if(zElement.tagName=="A") {
          var zInputs = zElement.getElementsByTagName("input");
          if(zInputs.length) {
            var zCheckboxInput = zInputs[0];
            if(!zCheckboxInput.checked) {
              DOM.addClass(zElement, "ActionUI_GrayedItem");
            } else if(zCheckedCount >= zTopBracketCount) {
              DOM.addClass(zElement, "ActionUI_GrayedItem");
              zCheckedCount++;
            } else {
              DOM.removeClass(zElement, "ActionUI_GrayedItem");
              zCheckedCount++;
            }
          }
        }
        zElement = zElement.nextSibling;
        if(!zElement && zParentElementArray.length) {
          zElement = zParentElementArray.pop().nextSibling;
        }
      }
    }
    return true;
  },
  createItemIcon: function(aItem,aParams) {
    if(aItem.NodeType=="LabelNode") {
      return false;
    }
    if(aItem.NodeType=="ParentNode" && aParams.ListOptions && aParams.ListOptions.ParentsUseIcons!="Y") {
      return false;
    }
    var zIcon = DOM.createElement("div", aItem.Id + "_Icon", "Icon_Base");
    if(aItem.Type) {
      DOM.addClass(zIcon, "Icon_" + aItem.Type);
    }
    return zIcon;
  },
  createRemoveLink: function(aItem, aParams) {
    var zRemoveLink = DOM.createElement("span", "", "ActionUI_HierarchyRemoveItemLink");
    zRemoveLink.title = "Click to remove this search";
    if (aParams.SubItem) {
      DOM.addEvent(zRemoveLink, "onclick", List.removeSubItemLink, {List:aParams.List, Item:aItem, Params:aParams});
    }
    else {
      DOM.addEvent(zRemoveLink, "onclick", List.removeLink, {Results:{Status:"Complete"}, Params:{Action:"", Item:aItem, ItemId:aItem.Id, PreviousItemId:"", Section:aParams.Section, SelectedItem:aItem, SubSection:aParams.SubSection, View:aParams.View}});
    }
    return zRemoveLink
  },
  removeSubItemLink: function(e, aParams) {
    var zList = aParams.List;
    var zItemArray = zList.ItemArray;
    var zItem = aParams.Item;
    var zChildNodeArray = zItemArray.get(zItem.Id,"NodeParent");
    zItemArray.remove(zItem);
    for (var i=0; i<zChildNodeArray.length; i++) {
      zItemArray.remove(zChildNodeArray[i]);
    }
    zList.Params.SubItem = zItemArray[0].Id;
    zList.Params.ReDrawSubSection = true;
    LiveAdMaker.selectSubItem(zList.Params);
    URI.goToHash("Section="+zList.Params.SectionId+"&Action="+zList.Params.ActionId+"&Item="+zList.Params.ItemId+"&SubAction="+zList.Params.SubAction+"&SubItem="+zItemArray[0].Id);
    return true
  },
  removeLink: function(e, aParams) {
    LiveAdMaker.receiveArchiveItem(aParams.Results, aParams.Params)
  },
  createItemChildContainer: function(aItem,aParams) {
    var zContainerElement = DOM.createElement("div", aItem.Id + "_ChildContainer", "ActionUI_SelectItemChildNodeContainer");
    if(aItem.OpenContainer=="Y" || aItem.SubItemsLoaded=="Y") {
      if(!aItem.SubItemsClosed) {
        zContainerElement.style.display = 'block';
      }
    }
    zContainerElement.List_ItemId = aItem.Id;
    DOM.linkObject(zContainerElement, "List_Item", aItem);
    DOM.linkObject(zContainerElement, "List_Params", aParams);
    return zContainerElement;
  },
  toggleChildNodeContainer: function(e, aObject) {
    var zContainer = $(aObject + "_ChildContainer");
    if(zContainer) {
      var zContainerDisplay = zContainer.style.display || "";
      if(zContainerDisplay=="none"||zContainerDisplay=="") {
        zContainer.style.display = "block";
        zContainer.List_Item.SubItemsClosed = false;
      }
      else {
        zContainer.style.display = "none";
        zContainer.List_Item.SubItemsClosed = true;
      }
    }
    var zParentArrow = $(aObject + "_ParentArrow");
    if(zParentArrow) {
      var zParentArrowClass = zParentArrow.className;
      if(zParentArrowClass.indexOf("ActionUI_SelectItemParentNodeSelected") == -1) {
        DOM.addClass(zParentArrow,"ActionUI_SelectItemParentNodeSelected");
      } else {
        DOM.removeClass(zParentArrow,"ActionUI_SelectItemParentNodeSelected");
      }
    }
    if(zContainer.List_ItemContainerElement && zContainer.List_ItemContainerElement.parentNode && zContainer.List_ItemContainerElement.parentNode.parentNode) {
      DOM.Resize.recurse(zContainer.List_ItemContainerElement.parentNode.parentNode)
    }
  },
  DisplayFunctions: {
    property: function(aItem,aContainerElement,aParams,aField){
      aParams = aParams || {};
      var zField = aField || aParams.ItemField || "DisplayName";
      aContainerElement.innerHTML = aItem[zField];
    },
    thumbnail: function(aItem,aContainerElement,aParams){
      var zImageContainer = document.createElement("div");
      var zImageURL = aItem.ImageURL || aParams.DefaultImageURL;
      var zImageWidth = aItem.ImageWidth || aParams.DefaultImageWidth;
      var zImageHeight = aItem.ImageHeight || aParams.DefaultImageHeight;
      if(zImageURL) {
        var zImage = new Image();
        zImage.src = zImageURL;
        var zImageElement = document.createElement("img");
        zImageElement.setAttribute("src",zImage.src);
        if(zImageWidth) {
          zImageElement.setAttribute("width",zImageWidth);
        }
        if(zImageHeight) {
          zImageElement.setAttribute("height",zImageHeight);
        }
        zImageContainer.appendChild(zImageElement);
      }
      else {
        zImageContainer.innerHTML = "";
      }
      aContainerElement.appendChild(zImageContainer);
      DOM.addClass(zImageContainer, "List_Thumbnail");
      DOM.addClass(aContainerElement, "List_ThumbnailContainer");
    },
    thumbnailAndName: function(aItem,aContainerElement,aParams){
      List.DisplayFunctions.thumbnail(aItem,aContainerElement,aParams);
      var zItemNameElement = document.createElement("div");
      zItemNameElement.innerHTML = aItem.DisplayName;
      aContainerElement.appendChild(zItemNameElement);
    },
    details: function(){
    },
    selectItemLink: function(aItem,aContainerElement,aParams){
      DOM.addClass(aContainerElement, "ActionUI_SelectItemLink");
      URI.setHashLink(aContainerElement,"#Section="+aParams.Section+"&Item="+aItem.Id);
      aContainerElement.appendChild(DOM.createElement("div", null, "ActionUI_SelectItemConnector"));
      var zName = DOM.createTextElement("span", null, null, null, aItem.DisplayName);
      aContainerElement.appendChild(zName);
    },
    selectSubItemLink: function(aItem,aContainerElement,aParams){
      var zHash = "#Section="+aParams.Section+"&Item="+aParams.ItemId+"&Action="+aParams.Action+"&SubItem="+aItem.Id;
      DOM.addClass(aContainerElement, "ActionUI_SelectItemLink");
      URI.setHashLink(aContainerElement,zHash);
      aContainerElement.appendChild(DOM.createElement("div", null, "ActionUI_SelectItemConnector"));
      var zName = DOM.createTextElement("span", null, null, null, aItem.DisplayName);
      aContainerElement.appendChild(zName);
    },
    selectSubItemThumbnailLink: function(aItem,aContainerElement,aParams){
      var zHash = "#Section="+aParams.Section+"&Item="+aParams.ItemId+"&Action="+aParams.Action+"&SubItem="+aItem.Id;
      List.DisplayFunctions.selectItemThumbnailLink(aItem,aContainerElement,aParams,zHash);
    },
    selectItemThumbnailLink: function(aItem,aContainerElement,aParams,aHash){
      var zHash = aHash || "#Section="+aParams.Section+"&Item="+aItem.Id;
      var zThumbContainer = document.createElement("div");
      DOM.addClass(zThumbContainer, "ActionUI_SelectItemThumbnail");
      List.DisplayFunctions.thumbnail(aItem,zThumbContainer,aParams);
      var zNameContainer = DOM.createElement("div", null, "ActionUI_SelectItemThumbnailName");
      zNameContainer.innerHTML = aItem.DisplayName;
      aContainerElement.appendChild(DOM.createElement("div", null, "ActionUI_SelectItemThumbnailConnector"));
      aContainerElement.appendChild(zThumbContainer);
      aContainerElement.appendChild(zNameContainer);
      DOM.addClass(aContainerElement, "ActionUI_SelectItemThumbnailLink");
      URI.setHashLink(aContainerElement,zHash);
    },
    selectActionLink: function(aItem,aContainerElement,aParams){
      var zHash = "#Section="+aParams.Section+"&Action="+aItem.Id;
      aContainerElement.innerHTML = aItem.DisplayName;
      DOM.addClass(aContainerElement, "ActionUI_SelectActionLink");
      DOM.addClass(aContainerElement, "ActionUI_" + aParams.Section + "_" + aItem.Id);
      URI.setHashLink(aContainerElement,zHash);
      aContainerElement.List_Action = aItem.Id;
    },
    selectSubActionLink: function(aItem,aContainerElement,aParams){
      var zHash = "#Section="+aParams.Section+"&Item="+aParams.ItemId+"&Action="+aParams.Action+"&SubAction="+aItem.Id;
      aContainerElement.innerHTML = aItem.DisplayName;
      DOM.addClass(aContainerElement, "ActionUI_SelectActionLink");
      DOM.addClass(aContainerElement, "ActionUI_" + aParams.SubSection + "_" + aItem.Id);
      URI.setHashLink(aContainerElement,zHash);
      aContainerElement.List_Action = aItem.Id;
    }
  },
  TableRowClasses: { Row_0: 'Even', Row_1: 'Odd' },
  createTable: function(aItemArray,aParams){
    aParams = aParams || {};
    var zTable, zTBody, zHeaderRow;
    var zTableViewFormType = aParams.TableViewFormType || "TableForm";
    var zTopNodeArray = aItemArray.filter(function(aItem){
      return (aItem.TopNode=='Y');
    });
    if (zTopNodeArray.length > 0){
      var zTopNode = zTopNodeArray[0];
      var zFilteredArray = aItemArray.filter(function(aItem){
        return (aItem.NodeParent==zTopNode.Id);
      });
    }else{
      var zFilteredArray = aItemArray;
    }
    var zItemPath = ( zFilteredArray[0] && zFilteredArray[0].ItemPath ) ? zFilteredArray[0].ItemPath : aParams.OwnerItemPath;
    var zTableForm = new FormUI.Form(zItemPath, zTableViewFormType, aParams.ParentElement);
    aParams.Asynchronous = false;
    var aFetchFieldsExtraParams = (LiveAdMaker[LiveAdMaker.SelectedSectionId][LiveAdMaker.SelectedSection.SelectedAction]&&LiveAdMaker[LiveAdMaker.SelectedSectionId][LiveAdMaker.SelectedSection.SelectedAction].SectionSetup && LiveAdMaker[LiveAdMaker.SelectedSectionId][LiveAdMaker.SelectedSection.SelectedAction].SectionSetup.FetchFieldsExtraParams) ? LiveAdMaker[LiveAdMaker.SelectedSectionId][LiveAdMaker.SelectedSection.SelectedAction].SectionSetup.FetchFieldsExtraParams : null;
    zTableForm.fetchFields( true, aFetchFieldsExtraParams, aParams );
    var aFetchInputsExtraParams = (LiveAdMaker[LiveAdMaker.SelectedSectionId][LiveAdMaker.SelectedSection.SelectedAction]&&LiveAdMaker[LiveAdMaker.SelectedSectionId][LiveAdMaker.SelectedSection.SelectedAction].SectionSetup && LiveAdMaker[LiveAdMaker.SelectedSectionId][LiveAdMaker.SelectedSection.SelectedAction].SectionSetup.FetchInputsExtraParams) ? LiveAdMaker[LiveAdMaker.SelectedSectionId][LiveAdMaker.SelectedSection.SelectedAction].SectionSetup.FetchInputsExtraParams : null;
    zTableForm.fetchInputs(true, aFetchInputsExtraParams, aParams );
    List.setTableFields( zTableForm );
    aParams.Fields     = zTableForm.FieldList || {DisplayName: {DisplayName: "Name", Type: "String"}};
    aParams.TableForm  = zTableForm;
    zTable             = document.createElement("table");
    zTable.width       = '100%';
    zTable.cellPadding = 0;
    zTable.cellSpacing = 0;
    zTable.className   = 'List_TableContainer';
    aParams.Table      = zTable;
    var zTHead = List.createTableHeader(zTableForm);
    if(aParams.DrawCheckboxes){
      var zSelectAll_th = DOM.createElement("th");
      var zTHead_tr = zTHead.childNodes[0];
      zTHead_tr.insertBefore(zSelectAll_th, zTHead_tr.childNodes[0]);
      var zSelectAll_checkbox = DOM.createElement("input");
      zSelectAll_checkbox.setAttribute("type","checkbox");
      zSelectAll_checkbox.setAttribute("title","Select All");
      zSelectAll_th.appendChild(zSelectAll_checkbox);
      DOM.addEvent(zSelectAll_checkbox, "onclick",
      function(e,zSelectAll_chkbox){
        var zTable = zSelectAll_chkbox.parentNode.parentNode.parentNode.parentNode;
        var chkbox_array = zTable.getElementsByTagName("input");
          for(var i = 0; i<chkbox_array.length; i++){
            if(chkbox_array[i].type == "checkbox") {
              chkbox_array[i].checked = zSelectAll_chkbox.checked;
            }
          }
          return true;
      }, zSelectAll_checkbox);
    }
    zTable.appendChild(zTHead);
    var zTBody = document.createElement("tbody");
    zTable.appendChild(zTBody);
    aParams.TBody      = zTBody
    var zTableContainer = DOM.createElement('div');
    var zSupportedViews = LiveAdMaker.hasSupportedViews( aParams );
    aParams.DoNotDrawInBubble = aParams.TripleBubble ? true : aParams.DoNotDrawInBubble;
    if(!aParams.DoNotDrawInBubble && zSupportedViews ){
      var zBubbleDivs = DOM.drawBubble(zTableContainer, aParams);
      if (aParams.SubItemTable) {
        zBubbleDivs.Content.ResizeSettings.Width        = "100%";
        zBubbleDivs.Content.ResizeSettings.Top          = (isTrue(aParams.ShowNavigation)) ? 57 : 25;
        zBubbleDivs.Content.ResizeSettings.WidthAdjust  = -5;
        zBubbleDivs.Content.ResizeSettings.HeightAdjust = -5;
      }
      List.TableView.QuickSearch.drawInput( aParams, zTableContainer );
      zBubbleDivs.Content.appendChild(zTable);
    } else {
      zTableContainer.appendChild(zTable);
    }
    aParams.TableContainer = zTableContainer;
    List.fetchTableData(zFilteredArray, aParams);
    if(aParams && aParams.ParentElement) {
      DOM.replaceContent(aParams.ParentElement, zTableContainer);
    }
    return zTableContainer;
  },
  sortTable: function(e, aParams){
    var zSortType = "Alphabetic";
    if (aParams.DisplayFormat == "Date"){
      zSortType = "Date";
    }
    if (aParams.DisplayFormat == "Currency" || aParams.DisplayFormat == "Duration" || aParams.DisplayFormat == "Time" || aParams.DisplayFormat == "SecondsInput" || aParams.DisplayFormat == "Numeric"){
      zSortType = "Numeric";
    }
    var zColNum = aParams.SeqNo - 1;
    var targ = (e.target) ? e.target : e.srcElement;
    var zTable = targ.parentNode.parentNode.parentNode;
    var zTBody = zTable.childNodes[1];
    var zTRs = zTBody.getElementsByTagName("tr");
    var zTRSortAry = [];
    if(!targ.isSorted){ 
      List.setSorted(targ);
      var zTRSortAry = [];
      for(var i = 0; i<zTRs.length; i++){
        var zColVal = zTRs[i].childNodes[zColNum].childNodes[0].innerHTML;
        if(zSortType=="Date"){
          zColVal = getDateFromFormat(zColVal, URI.User.DateFormat);
          zColVal = zColVal.getTime();
        }
        if(zSortType=="Numeric" || zSortType=="Date"){
          zColVal = parseInt(zColVal);
          if(isNaN(zColVal)){
            zColVal = 0;
          }
        }
        zTRSortAry[zTRSortAry.length] = {Row: zTRs[i], ColVal: zColVal}
      }
      if(zSortType=="Alphabetic"){
        zTRSortAry.sort(List.sortByTableColAlpha);
      } else {
        zTRSortAry.sort(List.sortByTableColNumeric);
      }
    } else { 
      for(var i = 0; i<zTRs.length; i++){
        zTRSortAry[zTRSortAry.length] = {Row: zTRs[i]}
      }
      zTRSortAry.reverse();
      if(targ.toggleDiv.className == "MenuArrowUpTable") {
        DOM.removeClass(targ.toggleDiv, "MenuArrowUpTable");
        DOM.addClass(targ.toggleDiv, "MenuArrowDownTable");
      } else {
        DOM.removeClass(targ.toggleDiv, "MenuArrowDownTable");
        DOM.addClass(targ.toggleDiv, "MenuArrowUpTable");
      }
    }
    for(var i = 0; i<zTRSortAry.length; i++){
      DOM.removeClass( zTRSortAry[i].Row, List.TableRowClasses['Row_0'] );
      DOM.removeClass( zTRSortAry[i].Row, List.TableRowClasses['Row_1'] );
      DOM.addClass( zTRSortAry[i].Row, List.TableRowClasses['Row_' + ( i % 2 )] );
      zTBody.appendChild(zTRSortAry[i].Row);
    }
    return true;
  },
  setSorted: function(aTH) {
    var zTR = aTH.parentNode;
    var zTHs = zTR.getElementsByTagName("th");
    for(var i=0;i<zTHs.length;i++){
      if(zTHs[i].toggleDiv){
        zTHs[i].isSorted = false;
        zTHs[i].removeChild(zTHs[i].toggleDiv);
        zTHs[i].toggleDiv = null;
      }
    }
    var zStoredText = aTH.innerHTML;
    aTH.innerHTML = "";
    var zToggleDiv = DOM.createElement("div", "", "MenuArrowUpTable");
    DOM.addEvent(zToggleDiv, "onclick", DOM.cancelBubble);
    aTH.appendChild(zToggleDiv);
    var zSpan = DOM.createElement("span");
    DOM.addEvent(zSpan, "onclick", DOM.cancelBubble);
    zSpan.innerHTML = zStoredText;
    aTH.appendChild(zSpan);
    aTH.toggleDiv = zToggleDiv;
    aTH.isSorted = true;
    return true;
  },
  sortByTableColAlpha: function(a,b){
    var x = a.ColVal.toLowerCase();
    var y = b.ColVal.toLowerCase();
    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
  },
  sortByTableColNumeric: function(a,b){
    var x = a.ColVal;
    var y = b.ColVal;
    return (x-y);
  },
  createTableHeader: function( aTableForm ) {
    var zTH, zLabelWidth;
    var zTHead     = document.createElement("thead");
    var zHeaderRow = document.createElement("tr");
    zTHead.appendChild(zHeaderRow);
    var zFieldCount = aTableForm.TableHeaderArray.length;
    aTableForm.TableHeaderArray.forEach(function(aLabelElement) {
      zTH = document.createElement("th");
      DOM.addEvent(zTH, "onclick", List.sortTable, aLabelElement);
      zTH.innerHTML = (aLabelElement.Label == "") ? aLabelElement.LabelDefaultText : aLabelElement.Label;
      if (aLabelElement.LabelSize == "Custom") {
        zLabelWidth = parseInt(aLabelElement.LabelWidth);
        if (zLabelWidth != "NaN" &&  zLabelWidth > 0) {
          zTH.width = zLabelWidth;
        }
      } else {
        zTH.width = ((1/zFieldCount) * 100) + "%";
      }
      zHeaderRow.appendChild(zTH);
    });
    return zTHead;
  },
  fetchTableData: function( aItemArray, aParams ) {
    aParams.ItemArray      = aItemArray;
    if ( aItemArray.length > 0 ) {
      var zTableForm         = aParams.TableForm,
          zTableViewFormType = zTableForm.FormType || "TableForm",
          aFormArray         = [],
          zFetchBatchCount   = 10,
          zFormContainer     = aParams.TBody,
          zForm              = {};
      aItemArray.forEach(function(aItem){
        zForm = new FormUI.Form(aItem.ItemPath, zTableViewFormType, zFormContainer, { ContentElementType: 'tr', Id: zTableViewFormType + aItem.Id, ItemId: aItem.Id } )
        aFormArray.push(zForm);
        zForm.Item = aItem;
        aItem.Form = zForm;
      });
      FormUI.Batch.fetchForm( aFormArray, zTableForm, zFetchBatchCount, { OnBatchFetchComplete: List.createTableContent, Params: aParams } );
    }
    else {
      var zNoItemElement       = DOM.createElement("div", "ActionUI_EmptyListVerbiage");
      zNoItemElement.style.paddingLeft = "5px";
      zNoItemElement.style.top         = "10px";
      zNoItemElement.innerHTML         = "&nbsp;This list is currently empty. Click 'New' to add an item.";
      zActionUIContent                 = aParams.Table.parentNode;
      zActionUIContent.innerHTML       = "";
      zActionUIContent.appendChild( zNoItemElement );
    }
    return true;
  },
  receiveTableData: function( aItemArray, aParams) {
    var zParams = aParams.Params;
    var zListItem, zItemArray = zParams.List.ItemArray;
    aResult.forEach(function(aItem) {
      zListItem = zItemArray.get(aItem.Id, "Id")
      for(var zField in aItem){
       zListItem[0][zField] = aItem[zField];
      }
    });
    return true;
  },
  createTableContent: function( aParams ) {
    var zFormArray    = aParams.FormArray;
    aParams           = aParams.Params;
    var zItemArray    = aParams.ItemArray,
        zTBody        = aParams.TBody;
    zFormArray.forEach(function(aForm){
      zTBody.appendChild(List.createRow( aForm, zTBody, aParams));
    });
    return true;
  },
  createRow: function( aItemForm, aContainerElement, aParams, aItemArray ){
    var zTR, zTD, zSetContentFunction, zElement, zValue;
    var zItem              = aItemForm.Item;
    var zMainForm          = aParams.TableForm;
    aItemArray         = aItemArray || aParams.ItemArray;
    zTR = aItemForm.ContentElement;
    DOM.addClass( zTR, List.TableRowClasses['Row_' + ( aItemArray.indexOf(zItem) % 2 )] );
    aItemForm.Settings.DrawLabels = 'N';
    if(aParams.DrawCheckboxes){
      zTD = document.createElement("td");
      zElement = DOM.createElement("input");
      zElement.setAttribute("type","checkbox");
      zTD.appendChild(zElement);
      zTR.appendChild(zTD);
      if(aParams.checkboxFunction){
        DOM.addEvent(zElement, "onclick", aParams.checkboxFunction, zElement);
      }
    }
    zMainForm.TableHeaderArray.forEach(function(aLabelElement) {
      zValue = aItemForm.ElementArray.get(aLabelElement.Field, 'Field');
      zTD = document.createElement("td");
      zElement = FormUI.Draw.element(aItemForm, zValue[0], zTD);
      zTD.appendChild(zElement);
      zTR.appendChild(zTD);
    });
    return zTR;
  },
  setTableFields: function(aForm) {
    var zForm = aForm;
    var zTableHeaderArray = [];
    var zInput;
    for (var zField in zForm.FieldList) {
      zInput = zForm.InputArray.get(zField, "Field");
      if (zInput[0] && zInput[0].Enabled != "N" ) {
        zTableHeaderArray.set( zInput[0], parseInt(zInput[0].SeqNo) );
      }
    }
    zTableHeaderArray.sort( function(a, b) {
      return (b.SeqNo < a.SeqNo) - (a.SeqNo < b.SeqNo);
    });
    zForm.TableHeaderArray = zTableHeaderArray;
    return true;
  },
   getUsableItem: function( aItemArray ) {
     var checkValidItemPath = function( aItemNumber ) {
       if (aItemArray[aItemNumber]) {
         var zItemPath = aItemArray[ aItemNumber ].ItemPath.toLowerCase();
         if ( zItemPath == "" || zItemPath == "new" || zItemPath == "all" ) {
           zItemPath = checkValidItemPath( ++aItemNumber );
         }
         return zItemPath
       }
       else {
         return ""
       }
     }
     return checkValidItemPath( 0 );
   },
  fetchLightboxData: function( aItemArray, aParams) {
    if (aParams.List.FetchedLightboxData) {
      List.createLightboxContent( { ItemArray: aItemArray, Params: aParams } );
      return true;
    }
    if ( aItemArray.length > 0 ) {
      var zFieldArray = aParams.LightboxFields ||
        [
          { ID: "Asset_URL" },
          { ID: "ImageURLHeight_Medium" },
          { ID: "ImageURLWidth_Medium" },
          { ID: "ImageURL_Medium" }
        ];
      if(aItemArray.first() && aItemArray.first().Type == "") {
        zFieldArray.push( { ID: "Type" } );
      }
      aParams.FormType             = aParams.LightboxFormType || "LightboxView";
      aParams.OnBatchFetchComplete = List.createLightboxContent;
      aParams.OnQueueFetchComplete = List.receivedLightboxData;
      aParams.ItemType             = aParams.ItemType || aItemArray[0].Id.replace( /\d/g , "");
      var zFetchItemPath = List.getUsableItem( aItemArray );
      Data.Batch.fetchData( aItemArray, zFieldArray, zFetchItemPath, aParams );
    } else {
      var zNoItemElement       = DOM.createElement("div", "ActionUI_EmptyListVerbiage");
      zNoItemElement.style.paddingLeft = "5px";
      zNoItemElement.style.top = "10px";
      zNoItemElement.innerHTML = "&nbsp;This list is currently empty. Click 'New' to add an item.";
      aParams.LightboxContainer.appendChild( zNoItemElement );
    }
    return true;
  },
  receivedLightboxData: function(aResult, aParams) {
    var zListItem, zItemArray = aParams.List.ItemArray;
    aResult.forEach(function(aItem) {
      zListItem = zItemArray.get(aItem.Id, "Id")
      if (zListItem[0]) {
        for(var zField in aItem){
         zListItem[0][zField] = (aItem[zField] != "") ? aItem[zField] : (zListItem[0][zField]) ? zListItem[0][zField] : "";
        }
      }
    });
    DOM.WaitingDialog.completeWaiting($("WaitingDialog"), "Complete", "font-weight:700;", 2000);
    return true;
  },
  updateLightboxTitle: function ( aParams ) {
    var zElement = aParams.Element
    var zForm    = aParams.Element.Form;
    zForm.Lightbox.TitleBar.childNodes[1].innerHTML = zElement.Value;
    return true;
  },
  displayAssetPreview: function( e, aParams ) {
    var zItem = aParams.Item;
    if ( zItem.Type == "LiveDigitalAsset_Video" || zItem.Type == "LiveDigitalAsset_Audio" || zItem.Type == "BaseVideo" || zItem.Type == "BaseAudio" ) {
      FormUI.AssetUtil.Handler.AssetOptionsVideoPreview( e, zItem );
    }
    else if ( zItem.Type == "LiveDigitalAsset_Flash" ||  zItem.Type == "LiveDigitalAsset_FlashVideo" || zItem.Type == "BaseFlash" ) {
      FormUI.AssetUtil.Handler.AssetOptionsFlashPreview( e, zItem );
    }
    else {
      FormUI.AssetUtil.Handler.AssetOptionsPreview( e, zItem );
    }
    return true;
  },
  lightboxAssetURLCheck: function( aItem, aParams ) {
    if ( aItem.HasAssetURL ) {
      return true;
    }
    if ( aItem.Asset_URL && aItem.Asset_URL != "" ) {
      aItem.HasAssetURL = true;
      return true;
    }
    return false;
  },
  lightboxAssetMediumCheck: function( aItem, aParams ) {
    if ( aItem.HasAssetMedium ) {
      return true;
    }
    if ( aItem.ImageURL_Medium && aItem.ImageURL_Medium != "" && ( aItem.ImageURLWidth_Medium != 0 || aItem.ImageURLHeight_Medium != 0 ) ) {
      aItem.HasAssetMedium = true;
      return true;
    }
    return false;
  },
  createLightboxItem: function( aItem, aParams ) {
    var zDisplayObject = aParams.LightboxDisplayObject;
    return aParams.LightboxDisplayObject.create( aItem );
  },
  createLightbox: function( aItemArray, aParams ){
    aParams = aParams || {};
    var zLightboxContent       = DOM.createElement('div');
    var zLightboxContainer     = DOM.createElement('div');
    aParams.LightboxContainer  = zLightboxContainer;
    var zLightboxItemPropertyList = {} || aParams.LightboxDisplayObjectParams;
    zLightboxItemPropertyList.PrimaryFunction              = aParams.LightboxPrimaryFunction
    zLightboxItemPropertyList.PrimaryText                  = aParams.LightboxPrimaryText
    zLightboxItemPropertyList.PrimaryDescription           = aParams.LightboxPrimaryDescription
    zLightboxItemPropertyList.SecondaryFunction            = aParams.LightboxSecondaryFunction
    zLightboxItemPropertyList.SecondaryText                = aParams.LightboxSecondaryText
    zLightboxItemPropertyList.SecondaryDescription         = aParams.LightboxSecondaryDescription
    zLightboxItemPropertyList.ThumbnailFunction            = aParams.LightboxThumbnailFunction
    zLightboxItemPropertyList.ThumbnailDescription         = aParams.LightboxThumbnailDescription;
    zLightboxItemPropertyList.FlipText                     = aParams.LightboxFlipText;
    zLightboxItemPropertyList.displayLightboxPrimaryLink   = aParams.displayLightboxPrimaryLink;
    zLightboxItemPropertyList.displayLightboxSecondaryLink = aParams.displayLightboxSecondaryLink;
    zLightboxItemPropertyList.Sortable                     = aParams.Sortable;
    zLightboxItemPropertyList.Name                         = ( aParams.SubSection ) ? aParams.Section + "_" + aParams.SubSection : aParams.Section;
    aParams.LightboxDisplayObject  = aParams.LightboxDisplayObject || Util.Object.create( List.LightboxView.DisplayObject, zLightboxItemPropertyList );
    List.LightboxView.CurrentDisplayObject = aParams.LightboxDisplayObject;
    var zZoomContainer = DOM.createElement( "div", "Lightbox_Zoom" );
    var zZoomOut       = DOM.createElement( "input", "Lightbox_Zoom_SMALL" );
    var zZoomIn        = DOM.createElement( "input", "Lightbox_Zoom_MEDIUM" );
    zZoomOut.setAttribute( "title", "Zoom Out" );
    zZoomIn.setAttribute( "title", "Zoom In" );
    zZoomOut.setAttribute( "SelectGroup", "Y" );
    zZoomIn.setAttribute( "SelectGroup", "Y" );
    zZoomOut.setAttribute( "type", "button" );
    zZoomIn.setAttribute( "type", "button" );
    DOM.addEvent( zZoomOut, "onclick", aParams.LightboxDisplayObject.zoom, { Zoom: "SMALL", Container: zLightboxContainer, Params: aParams }, { BindTo: aParams.LightboxDisplayObject } );
    DOM.addEvent( zZoomIn, "onclick", aParams.LightboxDisplayObject.zoom, { Zoom: "MEDIUM", Container: zLightboxContainer, Params: aParams }, { BindTo: aParams.LightboxDisplayObject } );
    if ( aParams.LightboxDisplayObject.Size == "SMALL" ) {
      DOM.addClass( zZoomOut, "Selected" );
    } else {
      DOM.addClass( zZoomIn, "Selected" );
    }
    zZoomContainer.appendChild( zZoomIn );
    zZoomContainer.appendChild( zZoomOut );
    var zSupportedViews = LiveAdMaker.hasSupportedViews( aParams );
    if ( !aParams.TripleBubble && zSupportedViews ) {
      var zBubbleDivs = DOM.drawBubble(zLightboxContent, aParams);
      if (aParams.SubItemTable) {
        zBubbleDivs.Content.ResizeSettings.Width        = "100%";
        zBubbleDivs.Content.ResizeSettings.Top          = (isTrue(aParams.ShowNavigation)) ? 57 : 25;
        zBubbleDivs.Content.ResizeSettings.WidthAdjust  = -5;
        zBubbleDivs.Content.ResizeSettings.HeightAdjust = -5;
      }
      zBubbleDivs.Content.appendChild( zLightboxContainer );
      zBubbleDivs.Content.style.overflowX = "hidden";
        zLightboxContent.appendChild( zZoomContainer );
    } else {
      var zDisableBubble = true;
      DOM.addClass( zZoomContainer, "DisableBubble" );
      zZoomContainer.setAttribute( "DisableBubble", "Y" );
      if ( !zSupportedViews ) {
        DOM.addClass( zZoomContainer, "DisableViews" );
        if ( aParams.ParentElement.style.left && aParams.ParentElement.style.left != "" ) {
          zZoomContainer.style.left = parseInt( aParams.ParentElement.style.left ) + "px";
        } else {
          zZoomContainer.style.left = "168px";
        }
      }
      zLightboxContent.appendChild( zLightboxContainer );
      zLightboxContent.appendChild( zZoomContainer );
    }
    var zItemArray = [];
    aItemArray.forEach(function(aItem){
      if (aItem.NodeType != "LabelNode") {
        zItemArray.push(aItem);
      }
    });
    List.fetchLightboxData( zItemArray, aParams );
    if( aParams && aParams.ParentElement ) {
        DOM.replaceContent( aParams.ParentElement, zLightboxContent );
      if ( zDisableBubble ) {
        zLightboxContent.parentNode.style.overflowX = "hidden";
        aParams.ParentElement.parentNode.appendChild( zZoomContainer );
      }
    }
    DOM.Resize.recurse();
    return zLightboxContent;
  },
  createLightboxContent: function( aParams ) {
    var zListItem, zItemArray = aParams.ItemArray;
    aParams = aParams.Params;
    var zLightboxContainer = aParams.LightboxContainer;
    aParams.List.FetchedLightboxData = true;
    DOM.linkObject(zLightboxContainer, "Drag_OnSortCompleteFunction", List.sortLightboxComplete);
    DOM.linkObject(zLightboxContainer, "Drag_OnSortCompleteParams", aParams);
    zLightboxContainer.ItemCount                   = aParams.ItemArray.length;
    zItemArray.forEach(function(aItem){
      zLightboxContainer.appendChild(List.createLightboxItem( aItem, aParams ));
    });
    var zLightboxFiller = DOM.createElement( "div" );
    zLightboxFiller.setAttribute( "lightboxfiller", "Y" );
    zLightboxFiller.style.width = "100%";
    zLightboxFiller.style.clear = "both";
    zLightboxContainer.appendChild( zLightboxFiller );
    var $d = aParams.LightboxDisplayObject.Dialog;
    if ( $d && $d.ScrollingDiv ) {
      $d.ScrollingDiv.refresh();
    }
    return true;
  },
  sortLightboxComplete: function(aContainerElement, aParams){
    var zNewItemArray = [];
    if(aContainerElement.hasChildNodes()) {
     var zElement;
     var zLightboxItemsLength = aContainerElement.childNodes.length;
      for ( var i = 0; i < zLightboxItemsLength; i++ ) {
        zElement = aContainerElement.childNodes[i];
        if( zElement.List_Item ) {
          zNewItemArray.push(zElement.List_Item);
        }
      }
    }
    if(aParams.OnSortCompleteFunction) {
      aParams.OnSortCompleteFunction(zNewItemArray, aParams)
    }
    return true;
  },
  startLightboxDrag: function() {
    Tween.Common.setOpacity( this, .8 );
    this.zIndex       = this.style.zIndex;
    this.style.zIndex = "799"
    this.position     = this.style.position;
		this.BoundingParent    = this.parentNode;
    this.Drag_ParentWidth  = this.BoundingParent.clientWidth;
    this.Drag_ParentHeight = this.BoundingParent.scrollHeight;
    var zClone = this.cloneNode(true);
    this.Drag_Clone = zClone;
    Drag.disable(zClone);
    Tween.Common.setOpacity( zClone, .4 );
    this.ItemCount = this.parentNode.ItemCount;
    this.lightBoxItem = [];
    var zOriginalIndex = 0;
    for(var i = 0; i < this.parentNode.childNodes.length; i++) {
      if ( this.parentNode.childNodes[i] == this ) {
        this.lightBoxItem[i] = this.Drag_Clone;
      } else {
        this.lightBoxItem[i] = this.parentNode.childNodes[i];
      }
    }
    this.lightBoxItem[ this.lightBoxItem.length ] = this;
		List.LightboxView.addDroppable( this, zClone );
    this.parentNode.insertBefore(zClone, this);
		document.body.appendChild( this );
		this.style.position = "absolute";
	  var zCoords = DOM.getAbsolutePosition( zClone );
    this.style.top = zCoords.y - this.BoundingParent.scrollTop + "px";
    this.style.left = zCoords.x - this.BoundingParent.scrollLeft + "px";
    return true;
  },
  endLightboxDrag: function() {
    this.style.zIndex = this.zIndex;
		if ( this != this.Drag_Bar ) {
			this.BoundingParent.insertBefore( this, this.Drag_Bar );
		}
    DOM.removeClass( this.Drag_Bar, "Droppable" );    
    DOM.removeElement( this.Drag_Clone );
    this.style.top  = "0px";
    this.style.left = "0px";
    Tween.Common.setOpacity( this, 1 );
    this.style.position = this.position;
    var zNewIndex = 0;
    for(var i = 0; i < this.BoundingParent.childNodes.length; i++) {
      if(this.BoundingParent.childNodes[i] == this) {
        zNewIndex = i;
      }
    }
    if( zNewIndex != this.Drag_OriginalIndex ) {
      this.BoundingParent.Drag_OnSortCompleteFunction( this.parentNode, this.parentNode.Drag_OnSortCompleteParams );
    }
    this.Drag_Clone        = null;
    this.Drag_Bar          = null;
    this.Drag_ParentWidth  = null;
    this.Drag_ParentHeight = null;
    this.lightBoxItem      = null;
    this.TriggerArray      = null;
		this.BoundingParent    = null;
    return true;
  },
  lightboxDrag: function( x, y ) {
    if ( isNaN( x ) || isNaN( y ) ) {
      return true;
    }
    x = ( x < 0 ) ? 0 : x;
    y = ( y < 0 ) ? 0 : y;
	  var zBoundingEl_Coords = DOM.getAbsolutePosition( this.BoundingParent );
		x = x - zBoundingEl_Coords.x;
		y = y - zBoundingEl_Coords.y + this.BoundingParent.scrollTop;
    var zLightboxWidth        = this.offsetWidth,
        zLightboxHeight       = this.offsetHeight,
        zContainerWidth       = this.Drag_ParentWidth,
        zContainerHeight      = this.Drag_ParentHeight,
        zTotalBoxes           = this.ItemCount,
        zBoxPerCol            = Math.floor( zContainerWidth / zLightboxWidth ),
        zBoxCol               = Math.floor( x / zLightboxWidth ),
        zBoxPerRow            = Math.floor( zContainerHeight / zLightboxHeight ),
        zBoxRow               = Math.floor( y / zLightboxHeight ),
        zBoxNum               = zBoxRow * zBoxPerCol + zBoxCol,
        zRealBox              = ( zBoxNum > zTotalBoxes ) ? zTotalBoxes : zBoxNum,
        zRelPosX              = Math.floor( x % zLightboxWidth ),
        zRelPosY              = Math.floor( y % zLightboxHeight );
		if ( this.Drag_Bar != this.lightBoxItem[zRealBox] ) {
			List.LightboxView.removeDroppable( this );
			List.LightboxView.addDroppable( this, this.lightBoxItem[zRealBox] );
    }
    List.lightboxDragIntoView( x, y, this );
    return true;
  },
  lightboxDragIntoView: function( x, y, aItem ) {
		if ( ( y - aItem.BoundingParent.scrollTop ) >= ( aItem.BoundingParent.offsetHeight / 2 ) ) {
			aItem.BoundingParent.scrollTop += 15 ;
		} else {
			aItem.BoundingParent.scrollTop = ( aItem.BoundingParent.scrollTop <= 0 ) ? 0 : aItem.BoundingParent.scrollTop - 15 ;
		}
    return true;
  },
  createCalendar: function(aItemArray, aParams){
    var zCalendarContent = DOM.createElement('div');
    var zCalendarContainer = DOM.createElement('div');
    aParams.CalendarContainer = zCalendarContainer;
    var zSupportedViews = LiveAdMaker.hasSupportedViews( aParams );
    if(zSupportedViews ){
      var zBubbleDivs = DOM.drawBubble(zCalendarContent, aParams);
      if (aParams.SubItemTable) {
        zBubbleDivs.Content.ResizeSettings.Width = "100%";
        zBubbleDivs.Content.ResizeSettings.Top = (isTrue(aParams.ShowNavigation)) ? 57 : 25;
        zBubbleDivs.Content.ResizeSettings.WidthAdjust = -5;
        zBubbleDivs.Content.ResizeSettings.HeightAdjust = -5;
      }
      zBubbleDivs.Content.appendChild(zCalendarContainer);
    } else {
      zCalendarContent.appendChild(zCalendarContainer);
    }
    if(aItemArray.length) {
      aParams.List.ItemArray = aItemArray;
      aItemArray.forEach(function(aItem) {
        zListItem = aItemArray.get(aItem.Id, "Id");
        zEventStartDate = Date.floatDate(aItem.StartDate,"N");
        zEventEndDate   = Date.floatDate(aItem.EndDate,"N");
        zListItem[0].EventStartDate = zEventStartDate ? zEventStartDate : "";
        zListItem[0].EventEndDate = zEventEndDate ? zEventEndDate : "";
        zListItem[0].EventDescription = aItem.EventDescription ? aItem.EventDescription : "";
        zListItem[0].NumericEventStartDate = zEventStartDate ? zEventStartDate.dateFormat('yyyymmdd') : "";
        zListItem[0].NumericEventEndDate =  zEventEndDate ? zEventEndDate.dateFormat('yyyymmdd') : "";
      });
      List.createCalendarContent({Params: aParams, ItemArray: aItemArray});
    }
    else {
      var zEnableEdit = "Y";
      if (aParams.Item.ItemPath) {
        var zCheckPath = aParams.Item.ItemPath.split("\\", 4).join("\\");
        if (zCheckPath=="intel\\ContentList\\CalendarLibrary\\CalendarList" && LiveAdMaker.SystemType=="LOCAL") {
          zEnableEdit = "N"
        }
      }
      zCalendarParams = {
        aParentContainer: zCalendarContainer,
        aStartCalendarOnSunday: true,
        aNewEventPath: aParams.OwnerItemPath,
        aEventArray: [],
        aViewType: aParams.ViewType,
        aEnableEdit: zEnableEdit
      };
      zMyCalendar = EventCalendar.create(zCalendarParams);
      zCalendarContainer.appendChild(zMyCalendar);
      DOM.WaitingDialog.completeWaiting(null, null, null, 100);
    }
    if(aParams && aParams.ParentElement) {
      DOM.replaceContent(aParams.ParentElement, zCalendarContent);
    }
    DOM.Resize.recurse();
    return zCalendarContent;
  },
  fetchCalendarData: function(aItemArray, aParams) {
    aParams.FormType             = "CalendarEventDetails"
    aParams.OnBatchFetchComplete = List.createCalendarContent;
    aParams.OnQueueFetchComplete = List.receivedCalendarData;
    aParams.ThreadCount = 10;
    var zFieldArray = [
      { ID: "EventStartDate" },
      { ID: "EventEndDate" },
      { ID: "Description" }
    ];
    Data.Batch.fetchData(aItemArray, zFieldArray, aParams.OwnerItemPath, aParams);
    return true;
  },
  createCalendarContent: function(aParams) {
    var zListItem, zItemArray = aParams.ItemArray;
    aParams = aParams.Params;
    var zEnableEdit = "Y";
    if (aParams.Item.ItemPath) {
      var zCheckPath = aParams.Item.ItemPath.split("\\", 4).join("\\");
      if (zCheckPath=="intel\\ContentList\\CalendarLibrary\\CalendarList" && LiveAdMaker.SystemType=="LOCAL") {
        zEnableEdit = "N"
      }
    }
    var zCalendarContainer = aParams.CalendarContainer;
    zCalendarParams = {
      aParentContainer: zCalendarContainer,
      aStartCalendarOnSunday: true,
      aNewEventPath: aParams.OwnerItemPath,
      aEventArray: zItemArray,
      aViewType: aParams.ViewType,
      aEnableEdit: zEnableEdit
    };
    if(aParams.initialFocusDate){
      zJumpToDate = new Date();
      zYear = aParams.initialFocusDate.split("/")[2];
      zMonth = (aParams.initialFocusDate.split("/")[0]-1);
      zDay = aParams.initialFocusDate.split("/")[1];
      zJumpToDate.setFullYear(zYear,zMonth,zDay);
      zCalendarParams.aDate_Obj = zJumpToDate;
    }
    zMyCalendar = EventCalendar.create(zCalendarParams);
    zCalendarContainer.appendChild(zMyCalendar);
    DOM.WaitingDialog.completeWaiting(null, null, null, 100);
    return true;
  },
  receivedCalendarData: function(aResult, aParams) {
    var zListItem, zItemArray = aParams.List.ItemArray;
    if(aResult){
      aResult.forEach(function(aItem) {
        zListItem = zItemArray.get(aItem.Id, "Id");
        zListItem[0].EventStartDate = aItem.EventStartDate;
        zListItem[0].EventEndDate = aItem.EventEndDate;
        zListItem[0].EventDescription = aItem.EventDescription;
        var zEventStartDate = getDateFromFormat(aItem.EventStartDate, URI.User.DateFormat);
        var zEventEndDate = getDateFromFormat(aItem.EventEndDate, URI.User.DateFormat);
        zListItem[0].NumericEventStartDate = zEventStartDate ? zEventStartDate.dateFormat('yyyymmdd') : "";
        zListItem[0].NumericEventEndDate =  zEventEndDate ? zEventEndDate.dateFormat('yyyymmdd') : "";
      });
    }
    return true;
  },
  startScrollUp: function(e,aList){
    List.endScrollUp(e,aList);
    aList.ScrollInterval = setInterval(function(){
      List.scrollUp(aList);
    }, 50);
    return true;
  },
  startScrollDown: function(e,aList){
    List.endScrollDown(e,aList);
    aList.ScrollInterval = setInterval(function(){
      List.scrollDown(aList);
    }, 50);
    return true;
  },
  scrollUp: function(aList){
    aList.ItemContainerElement.scrollTop -= 10;
    List.updateScrollHandlePosition(aList);
    return true;
  },
  scrollDown: function(aList){
    aList.ItemContainerElement.scrollTop += 10;
    List.updateScrollHandlePosition(aList);
    return true;
  },
  scrollToSelectedItem: function(aList){
    if (!aList.SelectedDOMItem || !aList.SelectedDOMItem.offsetTop) {return true};
    aList.ItemContainerElement.scrollTop = aList.SelectedDOMItem.offsetTop;
    List.updateScrollHandlePosition(aList);
    return true;
  },
  endScrollUp: function(e,aList){
    if(aList.ScrollInterval) {
      clearInterval(aList.ScrollInterval);
      aList.ScrollInterval = null;
    }
    return true;
  },
  endScrollDown: function(e,aList){
    if(aList.ScrollInterval) {
      clearInterval(aList.ScrollInterval);
      aList.ScrollInterval = null;
    }
    return true;
  },
  startDragScrollHandle: function(){
    return true;
  },
  dragScrollHandle: function(){
    var zItemContainer = this.List.ItemContainerElement;
    var zAvailableScroll= zItemContainer.scrollHeight - zItemContainer.offsetHeight;
    if(zAvailableScroll > 0) {
      zItemContainer.scrollTop = zAvailableScroll * (this.offsetTop/this.maxY);
    }
    else {
      this.style.top = "0px";
    }
    return true;
  },
  endDragScrollHandle: function(){
    return true;
  },
  updateScrollHandlePosition: function(aList){
    var zItemContainer = aList.ItemContainerElement;
    var zAvailableScroll = zItemContainer.scrollHeight - zItemContainer.offsetHeight;
    var zCurrentScrollPercent = zItemContainer.scrollTop / zAvailableScroll;
    aList.ScrollHandle.style.top = (aList.ScrollHandle.maxY * zCurrentScrollPercent) + "px";
    return true;
  },
  sortComplete: function(aContainerElement, aParams){
    if(aParams.ListOptions && aParams.ListOptions.DisplayHierarchy=="Y") {
        var zSelectedItem = aParams.List.SelectedDOMItem;
        var zParentItem   = zSelectedItem.parentNode;
        var zParentItemPath, zSelectedItemPath = zSelectedItem.List_Item.ItemPath || "";
        if(zParentItem.List_Item) {
          zParentItemPath   = zParentItem.List_Item.ItemPath;
        } else if (aParams.OwnerItemPath) {
          zParentItemPath = aParams.OwnerItemPath;
        }
        if(zSelectedItemPath && zParentItemPath) {
          var zPreceedingItemPath = (zSelectedItem.previousSibling) ? zSelectedItem.previousSibling.List_Item.ItemPath : "";
          var zFollowingItemPath  = (zSelectedItem.nextSibling)     ? zSelectedItem.nextSibling.List_Item.ItemPath     : "";
          if(zPreceedingItemPath) {
            aParams.ItemArray.moveAfter(zSelectedItem.List_Item, zSelectedItem.previousSibling.List_Item);
          }
          else {
            if(zFollowingItemPath) {
              aParams.ItemArray.moveBefore(zSelectedItem.List_Item, zSelectedItem.nextSibling.List_Item);
            }
          }
          Ajax.makeRequest({
            URL: URI.pageURL(zParentItemPath, "UpdateItemSort", null, true),
            Function: function(){return true;},
            ReceiveFunctionName: "NONE",
            CallerFunctionName: "List.sortComplete",
            Method: "POST",
            PostValues: {
              aSortingItemPath: zSelectedItemPath,
              aPreceedingItemPath: zPreceedingItemPath,
              aFollowingItemPath: zFollowingItemPath
            },
            Params: aParams
          });
        }
    } else {
      var zLength = aContainerElement.List_ItemContainerElement.childNodes.length, zNewItemArray = [];
      for(var i = 0; i < zLength; i++) {
        zNewItemArray.push(aContainerElement.List_ItemContainerElement.childNodes[i].List_Item);
      }
      if(aParams.OnSortCompleteFunction) {
        aParams.OnSortCompleteFunction(zNewItemArray, aParams)
      }
    }
    if(aParams.ListOptions && aParams.ListOptions.DisplayCheckboxes=="Y" && aParams.ListOptions.DisplayTopBracket=="Y") {
      List.reclassCheckboxList(null, {aContainerElement: aContainerElement, aTopBracketCount: aParams.ListOptions.TopBracketCount});
    }
    return true;
  },
  resizeContainer: function(aContainerElement){
    var zAdjust = (aContainerElement.parentNode.id !="Content") ? 10 : 5;
    if(aContainerElement.List_ContentElement && aContainerElement.List_ContentElement.parentNode.offsetHeight != 0) {
      aContainerElement.List_ContentElement.style.width = (aContainerElement.List_ContentElement.parentNode.offsetWidth - (aContainerElement.List_ContentElement.offsetLeft + zAdjust)) + "px";
      aContainerElement.List_ContentElement.style.height = (aContainerElement.List_ContentElement.parentNode.offsetHeight - (aContainerElement.List_ContentElement.offsetTop + zAdjust)) + "px";
      if(aContainerElement.List_InLineHelpElement) {
        var zInLineHelpElementAdjust = 4;
        aContainerElement.List_InLineHelpElement.style.width = parseInt(aContainerElement.List_ContentElement.style.width) - zInLineHelpElementAdjust + 'px';
        if ( aContainerElement.List_InLineHelpElement.lastChild ) {
          aContainerElement.List_InLineHelpElement.lastChild.style.width = parseInt(aContainerElement.List_ContentElement.style.width) - 41 + "px";
        }
      }
    }
    if(aContainerElement.List_ScrollHandle) {
      var zAvailableScroll = aContainerElement.List_ItemContainerElement.scrollHeight - aContainerElement.List_ItemContainerElement.offsetHeight;
        var zScrollDisplay;
         if (zAvailableScroll <= 0) {
           zScrollDisplay = "none"
           aContainerElement.List_ItemContainerElement.scrollTop = 0;
         }
         else {
           zScrollDisplay = "block";
         }
      ["Handle","Up","Down","Line"].forEach(function(aScrollItem){
        aContainerElement["List_Scroll"+aScrollItem].style.display = zScrollDisplay;
      });
      var zNewScrollHandleHeight = aContainerElement.offsetHeight - aContainerElement.List_ScrollHandle.parentNode.offsetTop - 20;
      if (zNewScrollHandleHeight > 0){
        aContainerElement.List_ScrollHandle.parentNode.style.height = zNewScrollHandleHeight + "px";
        aContainerElement.List_ScrollHandle.maxY = zNewScrollHandleHeight - aContainerElement.List_ScrollHandle.offsetHeight;
      }
    }
  }
});
List.prototype = {
  draw: function(aParams){
    if(this.Type == "ActionUI") {
      this.ContainerElement = List.drawActionUI(this.ItemArray, aParams, this);
      this.Actions = aParams.Actions;
    } else {
      this.ContainerElement = List.drawList(this.ItemArray, aParams);
      if(aParams.View == "thumbnailAndName") {
        DOM.addClass(this.ContainerElement, "List_LightboxContainer");
      } else {
        DOM.addClass(this.ContainerElement, "List_TableContainer");
      }
    }
    this.ItemContainerElement = this.ContainerElement.List_ItemContainerElement;
    this.ActionNavContainerElement = this.ContainerElement.List_ActionNavContainerElement;
    this.ContentElement = this.ContainerElement.List_ContentElement;
    this.SelectedItemClass = this.ContainerElement.List_SelectedItemClass;
    if(isTrue(aParams.ShowNavigation)) {
      this.drawNavigation(aParams);
    }
    DOM.addEvent( this.ContainerElement, "onunload", List.houseKeep, { List: this } );
    if (this.onListDrawFunction && this.ItemArray.length>0) this.onListDrawFunction(this.Params);
    return this.ContainerElement;
  },
  selectItem: function(aItemId,aIsSubItem){
    Util.Trace.log("List.selectItem top");
    if(this.SelectedItemId == aItemId) {
      return false;
    }
    else if (this.SelectedItemId) {
      this.deSelectItem(this.SelectedItemId);
    }
    this.SelectedItemId = aItemId;
    this.drawActions(aIsSubItem);
    if(this.ItemContainerElement) {
      var zItemsList = this.ItemContainerElement.List_Params.List_LinkArray;
      var zItemLength = zItemsList.length;
      for(var i = 0; i < zItemLength; i++) {
        if(zItemsList[i].List_ItemId == aItemId) {
          if(zItemsList[i].List_Item.NodeType=="ChildNode") {
            var zChildNode = zItemsList[i];
            var zChildContainer = zChildNode.parentNode;
            while(zChildContainer && zChildContainer.List_Item && zChildContainer.style.display!="block") {
              List.toggleChildNodeContainer(null, zChildNode.List_Item.NodeParent);
              zChildContainer = zChildContainer.parentNode;
            }
          }
          Util.Trace.log("List.selectItem before DOM.selectElement");
          DOM.selectElement(zItemsList[i], this.SelectedItemClass);
          Util.Trace.log("List.selectItem after DOM.selectElement");
          this.SelectedItem = zItemsList[i].List_Item;
          this.SelectedDOMItem = zItemsList[i];
          if(this.Sortable && !this.IsFiltered && zItemsList[i].List_Item.NodeType!="ParentNode") {
            Drag.Sort.enableElement(zItemsList[i]);
          }
          Util.Trace.log("List.selectItem bottom 2");
          return true;
        }
      }
    }
    Util.Trace.log("List.selectItem bottom");
    return true;
  },
  deSelectItem: function(aItemId){
    Util.Trace.log("List.deSelectItem top");
    if (this.SelectedDOMItem && this.SelectedDOMItem.List_ItemId && this.SelectedDOMItem.List_ItemId == aItemId) {
      DOM.deSelectElement(this.SelectedDOMItem, this.SelectedItemClass);
      if(this.Sortable) {
        Drag.disableElement(this.SelectedDOMItem);
      }
      this.SelectedDOMItem = null;
      this.SelectedItemId = null;
      this.SelectedItem = null;
      Util.Trace.log("List.deSelectItem fast exit");
      return true;
    }
    this.SelectedDOMItem = null;
    this.SelectedItemId = null;
    this.SelectedItem = null;
    if(this.ItemContainerElement && this.ItemContainerElement.childNodes) {
      var zItemLength = this.ItemContainerElement.childNodes.length;
      for(var i = 0; i < zItemLength; i++) {
        if(this.ItemContainerElement.childNodes[i].List_ItemId == aItemId) {
          DOM.deSelectElement(this.ItemContainerElement.childNodes[i], this.SelectedItemClass);
          if(this.Sortable) {
            Drag.disableElement(this.ItemContainerElement.childNodes[i]);
          }
          Util.Trace.log("List.deSelectItem bottom 2");
          return true;
        }
      }
    }
    Util.Trace.log("List.deSelectItem bottom");
    return true;
  },
  drawActions: function(aIsSubItem){
    if(this.Type == "ActionUI") {
      var zSection = (isTrue(aIsSubItem)) ? LiveAdMaker[this.Params.Section][this.Params.SubSection] : LiveAdMaker[this.Params.Section],
          zItem = this.ItemArray.getFirst(this.SelectedItemId, "Id");
      var zGetActions = LiveAdMaker.getActionsByType(zSection, (zItem ? zItem.Type : null));
      var zActionNavContainer = List.drawActionUI_Actions(this.Params, zGetActions);
      if(this.ActionNavContainerElement) {
        this.ContainerElement.List_ActionNavContainerElement = null;
        DOM.removeElement(this.ActionNavContainerElement);
      }
      this.ActionNavContainerElement = zActionNavContainer;
      DOM.linkObject(this.ContainerElement, "List_ActionNavContainerElement", zActionNavContainer);
      this.Elements.TopRow.appendChild(zActionNavContainer);
      this.SelectedAction = null;
    }
    this.updateActionLinks(aIsSubItem);
    return true;
  },
  updateActionLinks: function(aIsSubItem){
    var zHashVarName = (aIsSubItem) ? "SubItem" : "Item";
    if(this.ActionNavContainerElement) {
      var zActionsLength = this.ActionNavContainerElement.childNodes.length;
      for(var i = 0; i < zActionsLength; i++) {
        URI.setHashLink(this.ActionNavContainerElement.childNodes[i], this.ActionNavContainerElement.childNodes[i].getAttribute("href").setHashVariable(zHashVarName,this.SelectedItemId));
      }
    }
    return true;
  },
  selectAction: function(aParams){
    if(this.SelectedAction == aParams.Action && !aParams.ForceReDraw) {
      return false;
    } else {
      this.deSelectAction(this.SelectedAction);
    }
    if(this.ActionNavContainerElement && this.ActionNavContainerElement.childNodes) {
      var zActionsLength = this.ActionNavContainerElement.childNodes.length;
      for(var i = 0; i < zActionsLength; i++) {
        if(this.ActionNavContainerElement.childNodes[i].List_Action == aParams.Action) {
          this.SelectedAction = aParams.Action;
          DOM.selectElement(this.ActionNavContainerElement.childNodes[i], "ActionUI_SelectedAction");
          return true;
        }
      }
    } else {
      return false;
    }
    return true;
  },
  deSelectAction: function(aAction){
    this.SelectedAction = null;
    if(this.ActionNavContainerElement && this.ActionNavContainerElement.childNodes) {
      var zActionsLength = this.ActionNavContainerElement.childNodes.length;
      for(var i = 0; i < zActionsLength; i++) {
        if(this.ActionNavContainerElement.childNodes[i].List_Action == aAction) {
          DOM.deSelectElement(this.ActionNavContainerElement.childNodes[i], "ActionUI_SelectedAction");
          return true;
        }
      }
    }
    else {
      return false;
    }
    return true;
  },
  reDrawItems: function(){
    List.drawActionUI_Items(this.ItemArray, this.Params, this.ContainerElement, this);
    return true;
  },
  updateDisplayName: function(aNewDisplayName, aOldValue) {
    if (!this.SelectedDOMItem) { return true };
    var zItem = this.SelectedDOMItem;
    if (zItem.title && zItem.title == aOldValue) { zItem.title = aNewDisplayName; }
    if (zItem.List_Item) { zItem.List_Item.DisplayName = aNewDisplayName }
    if (zItem.innerHTML == aOldValue) {
      try {
        zItem.innerHTML = aNewDisplayName;
      } catch(e) {
        try {
          zItem.innerText = aNewDisplayName;
        } catch(e) { }
      }
    }
    if (zItem.childNodes) {
      var zLen = zItem.childNodes.length;
      for (var i = 0; i < zLen; i++) {
        zItemSub = zItem.childNodes[i];
        if (zItemSub.title && zItemSub.title == aOldValue) { zItemSub.title = aNewDisplayName; }
        if(zItemSub.innerHTML == aOldValue) {
          try {
            zItemSub.innerHTML = aNewDisplayName;
          } catch(e) {
            try {
              zItemSub.innerText = aNewDisplayName;
            } catch(e) { }
          }
        }
      }
    }
    return true;
  }
};
List.prototype.drawGrouped = function(e, aParams) {
  aParams.Section.ListOptions.DisplayHierarchy = "Y";
  if (this.ViewDropdown) {
    this.ViewDropdown.selectItem(null, { Index: 0, Programmatic: true });
  }
  if (aParams.PropertyList) {
    if(isTrue(aParams.SubSectionView)) {
      Ajax.makeRequest({
        URL: URI.pageURL(aParams.Section.StartItemPath, "GetHierarchyGroups", "aSubSectionHierarchy=Y&aGroupProperties=" + aParams.PropertyList),
        Function: LiveAdMaker.receiveSubItems,
        Params: {
          Section          : aParams.Section,
          SectionId        : aParams.Params.SectionId,
          ActionId         : aParams.Params.ActionId,
          Item             : aParams.Params.Item,
          ItemId           : aParams.Params.ItemId,
          List             : aParams.Params.List,
          ContentElement   : aParams.Params.ContentElement,
          NavigationArray  : aParams.Params.NavigationArray,
          SubSectionView   : true,
          RedrawQuickSearch: true
        },
        Method: "GET"
      }, this);
    } else {
      Ajax.makeRequest({
        URL: URI.pageURL(aParams.Section.StartItemPath, "GetHierarchyGroups", "&aGroupProperties=" + aParams.PropertyList),
        Function: LiveAdMaker.receiveSectionData,
        Params: { Params: { Redraw: true, Section: aParams.Section.Name, RedrawQuickSearch: true }, Section: aParams.Section.Name, Function: LiveAdMaker.drawSection, RedrawQuickSearch: true },
        Method: "GET"
      }, this);
    }
  } else {
    var zResetParams = {};
    if(isTrue(aParams.SubSectionView)) {
      Util.copyProperties(zResetParams, {
        Section         : aParams.Section,
        SectionId       : aParams.Params.SectionId,
        ActionId        : aParams.Params.ActionId,
        Item            : aParams.Params.Item,
        ItemId          : aParams.Params.ItemId,
        List            : aParams.Params.List,
        ContentElement  : aParams.Params.ContentElement,
        NavigationArray : aParams.Params.NavigationArray,
        SubSectionView  : true
      }, true);
    }
    aParams.Section.reset(zResetParams);
  }
  return true;
};
List.prototype.switchView = function(e, aParams) {
  aParams.Section.Items = null;
  aParams.Section.resetListOptions();
  aParams.Section.SelectedView = aParams.ViewName;
  LiveAdMaker.toggleSubItemView(null, { List: aParams.List, ViewName: aParams.ViewName });
  var zLoadParams = {
    Section: aParams.Section.Name,
    Redraw: true,
    ViewName: "ActionsWithThumbnail"
  };
  if(aParams.SubSectionView) {
    Util.copyProperties(zLoadParams, {
      Section         : aParams.Section,
      SectionId       : aParams.SectionId,
      ActionId        : aParams.ActionId,
      Item            : aParams.Item,
      ItemId          : aParams.ItemId,
      List            : aParams.List,
      ContentElement  : aParams.ContentElement,
      NavigationArray : aParams.NavigationArray,
      SubSectionView  : true
    }, true);
  }
  aParams.Section.Load(zLoadParams);
  return true;
};
List.prototype.receiveGroupAndSort = function(aData, aParams) {
  var c               = aParams.Container;
  var zSecObj = (!aParams.Params.SubSection) ?  LiveAdMaker[aParams.Params.Section] : LiveAdMaker[aParams.Params.Section][aParams.Params.SubSection];
  var zSubSectionView = (aParams.Params && aParams.Params.SubSection) ? true : false;
  var zViewParams     = {
    List    : this,
    Section : aParams.Section
  };
  if (zSecObj.NavigationOptions) {
    var zShowViewDropdown = zSecObj.NavigationOptions.ShowViewDropdown || "Y";
    var zShowNotGrouped = zSecObj.NavigationOptions.ShowNotGrouped || "Y";
  }
  else {
    var zShowViewDropdown = "Y";
    var zShowNotGrouped = "Y";
  }
  if(isTrue(zSubSectionView)) {
    Util.copyProperties(zViewParams, {
      SectionId       : aParams.Params.SectionId,
      ActionId        : aParams.Params.ActionId,
      Item            : aParams.Params.Item,
      ItemId          : aParams.Params.ItemId,
      ContentElement  : aParams.Params.ContentElement,
      NavigationArray : aParams.Params.NavigationArray,
      SubSectionView  : zSubSectionView
    }, true);
  }
  var zViewElements = [
    { DisplayName: "List", IconClass: "ElementIcon_ViewList", Enabled: true, Function: this.switchView, Params: Util.copyProperties(Util.copyObject(zViewParams), { ViewName: "ActionsWithName" }) },
    { DisplayName: "Thumbnail", IconClass: "ElementIcon_ViewThumbnails", Function: this.switchView, Params: Util.copyProperties(Util.copyObject(zViewParams), { ViewName: "ActionsWithThumbnail" }) },
    { DisplayName: "Lightbox", IconClass: "ElementIcon_ViewLightbox", Function: this.switchView, Params: Util.copyProperties(Util.copyObject(zViewParams), { ViewName: "thumbnailAndName" }) },
    { DisplayName: "Table", IconClass: "ElementIcon_ViewTable", Function: this.switchView, Params: Util.copyProperties(Util.copyObject(zViewParams), { ViewName: "table" }) }
  ];
  if (!aParams.Section.viewNavData) {
    if (zShowNotGrouped=="Y") {
      aData.Groups.unshift({ DisplayName: "Not grouped", Enabled: true });
    }
    else if (aData.Groups[0]) {
      aData.Groups[0].Enabled = true
    }
    aData.SortElements.unshift({ DisplayName: "Not sorted", Enabled: true });
    aData.ViewElements          = zViewElements;
    aParams.Section.viewNavData = aData;
  }
  for (var i = 0; i < aData.Groups.length; i++) {
    aData.Groups[i].Function = this.drawGrouped;
    aData.Groups[i].BindTo = this;
    if(isTrue(zSubSectionView)) {
      aData.Groups[i].Params = { Section: aParams.Section, SubSectionView: zSubSectionView, Params: aParams.Params, PropertyList: aData.Groups[i].PropertyList };
    } else {
      aData.Groups[i].Params = { Section: aParams.Section, PropertyList: aData.Groups[i].PropertyList };
    }
  }
  this.GroupDropdown = new List.ViewDropdown({
    Container: c,
    Tooltip: "Click here to change the group",
    ClassPrefix: (isTrue(zSubSectionView)) ? "ViewSubNavigation_Group" : "ViewNavigation_Group",
    Elements: aData.Groups
  });
  if (zShowViewDropdown=="Y") {
    this.ViewDropdown = new List.ViewDropdown({
      Container: c,
      Tooltip: "Click here to change the view",
      ClassPrefix: (isTrue(zSubSectionView)) ? "ViewSubNavigation_View" : "ViewNavigation_View",
      Elements: aData.ViewElements
    });
  }
}
List.prototype.drawViewNavigation = function(aContainer, aSection, aParams) {
  var zDropdownContainerClass = (!aParams.SubSection) ? "ViewNavigation_Container" : "ViewSubNavigation_Container";
  var zDropdownContainer = DOM.createElement("div", null, zDropdownContainerClass);
  aContainer.appendChild(zDropdownContainer);
  if (aSection.NavigationOptions) {
    var zGetGroupAndSort_ExtraParams = aSection.NavigationOptions.GetGroupAndSort_ExtraParams || "";
    var zGetGroupAndSort_IncludeLSAccessID = aSection.NavigationOptions.GetGroupAndSort_IncludeLSAccessID || "";
  }
  else {
    var zGetGroupAndSort_ExtraParams = "";
    var zGetGroupAndSort_IncludeLSAccessID = "";
  }
  if (aSection.viewNavData) {
    this.receiveGroupAndSort(aSection.viewNavData, { Container: zDropdownContainer, Section: aSection, Params: aParams  });
  } else {
    Ajax.makeRequest({
      URL: URI.pageURL(aSection.getBaseTypePath(), "GetGroupAndSortAsJSON", zGetGroupAndSort_ExtraParams, zGetGroupAndSort_IncludeLSAccessID),
      Function: this.receiveGroupAndSort,
      Params: { Container: zDropdownContainer, Section: aSection, Params: aParams },
      Method: "GET"
    }, this);
  }
}
List.prototype.drawNavigation = function(aParams, aSection) {
  if (aSection) {
    var zSecObj = aSection
  }
  else {
    var zSecObj = (!aParams.SubSection) ?  LiveAdMaker[aParams.Section] : LiveAdMaker[aParams.Section][aParams.SubSection];
  }
  var zViewNav = zSecObj.DisplayViewNavigation;
  var zNavDiv = aParams.NavDiv ? aParams.NavDiv : DOM.createElement("div",null,"ActionUI_Navigation");
  this.ContainerElement.insertBefore(zNavDiv,this.ContainerElement.firstChild);
  this.NavigationElement = zNavDiv;
  var zNavigationArray = aParams.NavigationArray || [
    {Title: "List View", Id: "ViewList", IconId: "Icon_ViewList", Function: LiveAdMaker.toggleSubItemView, Params: {List: this, Params: aParams, ViewName: "ActionsWithName"}, Attributes: {SelectGroup: "ToggleSubItemViewButton", SubViewType: "ActionsWithName"}},
    {Title: "New", Id: "NewButton", IconId: "Icon_New", Label: "New", Function: LiveAdMaker.createNewSectionItem},
    {Title: "Add To", Id: "AddToButton", IconId: "Icon_AddToIcon", Label: "Add To", Function: LiveAdMaker.addToSection},
    {Title: "Duplicate", Id: "DuplicateButton", IconId: "Icon_Duplicate", Label: "Duplicate", Function: LiveAdMaker.duplicateSectionItem},
    {Title: "Archive", Id: "ArchiveButton", IconId: "Icon_Archive", Label: "Archive", Function: LiveAdMaker.archiveSectionItem},
    {Title: "Import", Id: "ImportExportButton", IconId: "Icon_ImportExport", Label: "Import", Function: LiveAdMaker.importexportSectionItem},
    {Title: "Export", Id: "ExportButton", IconId: "Icon_ImportExport", Label: "Export", Function: LiveAdMaker.exportSectionItem}
  ];
  var zDisabledNavigationArray = aParams.DisabledNavigationArray;
  if (zDisabledNavigationArray) {
    this.DisabledNavigationArray = zDisabledNavigationArray;
  } else if (this.Params.DisabledNavigationArray) {
    zDisabledNavigationArray = this.Params.DisabledNavigationArray;
  } else if (zSecObj.getDisabledNavigationArray) {
    zDisabledNavigationArray = zSecObj.getDisabledNavigationArray(this);
  } else {
    zDisabledNavigationArray = this.DisabledNavigationArray;
  }
  if ( !zDisabledNavigationArray || zDisabledNavigationArray.length < zNavigationArray.length ) {
    zNavigationArray.forEach(function(aNavItem){
      var zShowNavItem = true;
      if (zDisabledNavigationArray) {
        var zDisabledNavItem = zDisabledNavigationArray.get(aNavItem.Id,"Id")[0];
        if (zDisabledNavItem && zDisabledNavItem.Disabled == "Y") {
          zShowNavItem = false;
        }
      }
      if (zShowNavItem && (!zViewNav || aNavItem.Id.match("View") != 0)) {
        var zNavItemElement = DOM.createElement("a",null,aNavItem.Id);
        zNavItemElement.setAttribute("href","javascript: void(0);");
        zNavItemElement.setAttribute("title",aNavItem.Title);
        DOM.addClass(zNavItemElement, "navButton");
        DOM.addClass(zNavItemElement, "topNav");
        zNavItemElement.appendChild(DOM.createElement("span", null, aNavItem.IconId));
        if(aNavItem.Label) {
          var zLabelElement = DOM.createElement("span");
          zLabelElement.innerHTML = aNavItem.Label;
          zNavItemElement.appendChild(zLabelElement);
        }
        if (aNavItem.Attributes) {
          for(var i in aNavItem.Attributes) {
            zNavItemElement.setAttribute(i,aNavItem.Attributes[i]);
          }
        }
        if (aNavItem.Function) {
          var zParams = {};
          if (!aParams.NavigationArray)
            zParams = aParams;
          if(aNavItem.Params)
            zParams = aNavItem.Params;
          DOM.addEvent(zNavItemElement, "onclick", aNavItem.Function, zParams);
        }
        zNavDiv.appendChild(zNavItemElement);
      }
    });
    DOM.addClass(this.ContainerElement,"ActionUI_HasNavigation");
    if (zViewNav)
      this.drawViewNavigation(zNavDiv, zSecObj, aParams);
    }
  return true;
};
List.ViewDropdown = function(aParams) {
  this.ClassPrefix = aParams.ClassPrefix;
  this.ElementSrc = aParams.Elements || [ ];
  this.DOMElements = [ ];
  if (aParams.Elements.length == 0) return alert("[ViewDropdown] No Elements!");
  var zElement = DOM.createElement("div", null, this.ClassPrefix + "Trigger");
  aParams.Container.appendChild(zElement);
  if (aParams.Tooltip) zElement.title = aParams.Tooltip;
  DOM.addEvent(zElement, "onclick", this.showMenu, null, { BindTo: this });
}
List.ViewDropdown.prototype = {
  selectItem: function(e, aParams) {
    for (var i = 0; i < this.ElementSrc.length; i++) {
      this.ElementSrc[i].Enabled = (aParams.Index == i ? true : false);
    }
    var s = this.ElementSrc[aParams.Index];
    if (typeof s.Function === "function" && !aParams.Programmatic) {
      if (s.BindTo)
        s.Function.call(s.BindTo, null, s.Params);
      else
        s.Function(null, s.Params);
    }
    return false;
  },
  showMenu: function(e) {
    if (this.Menu) return true;
    this.Menu = DOM.createElement("div", null, this.ClassPrefix + "Menu")
    document.body.appendChild(this.Menu);
    e.justBuilt = this.Menu;
    for (var i = 0; i < this.ElementSrc.length; i++) {
      var zElement = DOM.createElement("div", null, " Element" + (this.ElementSrc[i].Enabled ? " ElementChecked" : ""));
      zElement.innerHTML += this.ElementSrc[i].DisplayName;
      this.Menu.appendChild(zElement);
      DOM.makeHoverable(zElement, "ElementHover");
      DOM.addEvent(zElement, "onclick", this.selectItem, { Index: i }, { BindTo: this });
      this.DOMElements.push(zElement);
    }
    Util.bindTimeout(DOM, DOM.addEvent, 50, document.body, "onclick", this.closeMenu, null, { BindTo: this });
    return true;
  },
  closeMenu: function(e) {
    if (e.justBuilt == this.Menu) return true;
    DOM.removeElement(this.Menu);
    DOM.removeEvent(document.body, "onclick", this.closeMenu, null, { BindTo: this });
    this.Menu = null;
    return false;
  }
};
List.houseKeep = function( e, aParams ) {
  aParams.ItemContainerElement      = null;
  aParams.ActionNavContainerElement = null;
  aParams.ContentElement            = null;
  aParams.SelectedItemClass         = null;
  return true;
}
List.TableView = {
  removeRowClass: function( aRow, i ) {
    DOM.removeClass( aRow, List.TableRowClasses['Row_0'] );
    DOM.removeClass( aRow, List.TableRowClasses['Row_1'] );
    return true;
  },
  reDraw: function( aItemArray, aParams ) {
    zTBody = aParams.TBody;
    DOM.replaceContent( zTBody );
    var i = 0;
    aItemArray.forEach(function( aItem ){
      var aForm = aItem.Form;
      DOM.replaceContent( aForm.ContentElement );
      List.TableView.removeRowClass( aForm.ContentElement, i );
      zTBody.appendChild( List.createRow( aForm, zTBody, aParams, aItemArray ) );
      i++;
    });
    return true;
  },
  QuickSearch: {
    drawInput: function( aParams, aContainer ) {
      var zSearchContainer = DOM.createElement( "div", null, "Icon_SearchBar" );
      var zSearchInput     = DOM.createElement( "input", null, "TextFilterInput" );
      zSearchInput.setAttribute("type","text");
      zSearchInput.setAttribute("value","");
      zSearchContainer.appendChild( zSearchInput );
      aContainer.appendChild( zSearchContainer );
      DOM.addEvent( zSearchInput, "onkeyup", List.TableView.QuickSearch.setTimeout, aParams );
      DOM.addEvent( zSearchInput, "onkeydown", List.TableView.QuickSearch.clearTimeout, aParams );
      DOM.addEvent( zSearchInput, "onfocus", List.TableView.QuickSearch.resetInput, { List: aParams.List, TextInput: zSearchInput, TextValue:"", FilterType:"Focus" } );
      DOM.addEvent( zSearchInput, "onblur", List.TableView.QuickSearch.resetInput, { List: aParams.List, TextInput: zSearchInput, TextValue:"", FilterType:"Blur" } );
      return true;
    },
    setTimeout: function( e, aParams ) {
      if ( aParams.QuickSearchLastCriteria != this.value.toUpperCase() ) {
          aParams.QuickSearchCriteria = this.value.toUpperCase();
          aParams.QuickSearchTimeout = Util.bindTimeout( aParams, List.TableView.QuickSearch.run, 300 );
      }
      return true;
    },
    clearTimeout: function( e, aParams ) {
      if ( aParams.QuickSearchTimeout ) {
        clearTimeout( aParams.QuickSearchTimeout );
        aParams.QuickSearchTimeout = false;
      }
      return true;
    },
    run: function() {
      var aParams = this;
      aParams.OriginalList = aParams.ItemArray;
      var zFilteredArray = aParams.ItemArray.filter( function(aItem) {
         for ( var i = 0; i < aItem.Form.ElementArray.length; i++ ) {
           if (  aItem.Form.ElementArray[ i ].DisplayValue.toUpperCase().indexOf( aParams.QuickSearchCriteria ) > -1 ) return true;
         }
         return false;
      });
      this.List.SearchResults = zFilteredArray;
      List.TableView.reDraw( zFilteredArray, this );
      return true;
    },
    resetInput: function( e, aParams ) {
      if( aParams.TextInput ) {
        if( aParams.FilterType == 'Blur' ) {
          if( aParams.List.SearchResults.length < 1 || aParams.TextInput.value == "" ) {
            aParams.TextValue = "";
          } else {
            return true;
          }
        } else if ( aParams.TextInput.value != "" ) {
           aParams.TextInput.value = "";
           return true;
        }
        aParams.TextInput.value = aParams.TextValue;
      }
      return true;
    }
  }
}
List.LightboxView = {
  LANDSCAPE             : 4/3,
  PORTRAIT              : 3/4,
  SMALL                 : 100,
  MEDIUM                : 200,
	HTMLDISPLAY_SMALL     : 200,  
	HTMLDISPLAY_LANDSCAPE : 10/1,
  ITEMPADDING           :   2,
  TOOLBAR_DENOMINATOR   :   8,
  TNPADDING_DENOMINATOR :  40,
  BORDER                :   1,
  SelectedViewListener  : {},
  ConfigMatrix: {
    SMALL: {},
    MEDIUM: {}
  },
  removeZoom: function(){
    var zLightboxZoom = $( "Lightbox_Zoom" );
    if ( zLightboxZoom ) {
      DOM.removeElement( zLightboxZoom );
    }
    return true;
  },
	addDroppable: function( aItem, aDroppableElement ) {
	  aItem.Drag_Bar = aDroppableElement;
  	DOM.addClass( aItem.Drag_Bar, "Droppable" );
	  return true;	
	},
	removeDroppable: function( aItem ) {
		DOM.removeClass( aItem.Drag_Bar, "Droppable" );
		return true;
	},
  DisplayObject: {
    construct: function( aItemProperties ) {
      for ( var zProp in aItemProperties ) {
        if ( typeof( aItemProperties[zProp] ) != "undefined" ) {
            this[zProp] = aItemProperties[zProp];
        }
      }
      this.Size  = aItemProperties.SelectedSize
                 || List.LightboxView.SelectedViewListener[ this.Name + "_SelectedLightboxSize" ]
                 || Util.getCookieValue( this.Name + "_SelectedLightboxSize" )
                 || "MEDIUM";
      return this;
    },
		LIGHTBOX_MARGIN								: null,
    PrimaryFunction              : List.displayAssetPreview,
    PrimaryText                  : "Preview",
    PrimaryDescription           : "Click Here To Preview Asset",
    SecondaryText                : "Download",
    SecondaryDescription         : "Click Here To Download Asset",
    ThumbnailFunction            : List.displayAssetPreview,
    ThumbnailDescription         : "Click Here To Preview Asset",
    PrimaryFunction              : List.displayAssetPreview,
    PrimaryText                  : "Preview",
    PrimaryDescription           : "Click Here To Preview Asset",
    SecondaryText                : "Download",
    SecondaryDescription         : "Click Here To Download Asset",
    ThumbnailFunction            : List.displayAssetPreview,
    ThumbnailDescription         : "Click Here To Preview Asset",
    FlipText                     : "Click To Edit",
    Size                         : "MEDIUM",
    Ratio                        : "LANDSCAPE",
    Name                         : "LightboxView",
    DisableFlip                  : false,
		DragTimeout									 : null,		
    _createDOMObjects: function( aItem ) {
      var zLightboxItem       = document.createElement("div");
      zLightboxItem.style.backgroundColor = "#fff";
      var zTitleBar           = document.createElement("h2");
      var zTitleName          = document.createElement("div");
      var zToolbarContainer   = document.createElement("div");
      var zThumbnailContainer = this.drawThumbnail( aItem );
      DOM.linkObject( zLightboxItem, "List_Item", aItem );
      zTitleName.title     = aItem.DisplayName.HTMLDecode();
      zTitleName.innerHTML = aItem.DisplayName.HTMLDecode();
      var zDOMObjects =  {
        LightboxItem      : zLightboxItem,
        TitleBar          : zTitleBar,
        TitleName         : zTitleName,
        ToolbarContainer  : zToolbarContainer,
        ThumbnailContainer: zThumbnailContainer
      };
      var zToolbarFlip, zTitleIcon;
      if ( List.LightboxView[ this.Size ] > List.LightboxView.SMALL ) {
        zTitleIcon          = document.createElement("div");
        zDOMObjects.TitleIcon  = zTitleIcon;
        zToolbarFlip        = document.createElement("div");
        if ( !this.DisableFlip ) {
          zToolbarFlip.title   = this.FlipText.HTMLDecode();
          DOM.addEvent( zToolbarFlip, "onclick", this.flipLightbox, { Item: aItem, Lightbox: zLightboxItem, DOMObjects: zDOMObjects }, { BindTo: this } );
          DOM.addEvent( zToolbarFlip, "onmousedown", DOM.cancelBubble, {} );
        } else {
          zToolbarFlip.style.visibility = "hidden";
        }
        zDOMObjects.ToolbarFlip = zToolbarFlip;
      }
      this.drawPrimaryLink( zDOMObjects, aItem );
      this.drawSecondaryLink( zDOMObjects, aItem );
      return zDOMObjects;
    },
    _appendToDOM: function( aDOMObjects, aItem ) {
      if ( aDOMObjects.TitleIcon ) {
        aDOMObjects.TitleBar.appendChild( aDOMObjects.TitleIcon );
      }
      aDOMObjects.TitleBar.appendChild( aDOMObjects.TitleName );
      if ( aDOMObjects.ToolbarFlip ) {
        aDOMObjects.TitleBar.appendChild( aDOMObjects.ToolbarFlip );
      }
      aDOMObjects.LightboxItem.appendChild( aDOMObjects.TitleBar );
      aDOMObjects.LightboxItem.appendChild( aDOMObjects.ThumbnailContainer );
      aDOMObjects.LightboxItem.appendChild( aDOMObjects.ToolbarContainer );
      return aDOMObjects;
    },
    _calculateCoordinates: function( aItem ) {
      var zConfig = List.LightboxView.ConfigMatrix[this.Size][this.Ratio];
      if ( zConfig ) {
        this.Config = zConfig;
        return true;
      }
      var zMaxWidth = 0, zMaxHeight = 0;
      var zSize     = List.LightboxView[ this.Size ];
      var zRatio    = List.LightboxView[ this.Ratio ];
      if ( zRatio > 1 ) {
        zMaxWidth  = zSize;
        zMaxHeight = zMaxWidth / zRatio;
      } else {
        zMaxHeight = zSize;
        zMaxWidth  = zMaxHeight * zRatio;
      }
			var zItemPadding           = this.ITEMPADDING || List.LightboxView.ITEMPADDING;
			var zToolbar_Denominator   = this.TOOLBAR_DENOMINATOR || List.LightboxView.TOOLBAR_DENOMINATOR;
			var zTNPadding_Denominator = this.TNPADDING_DENOMINATOR || List.LightboxView.TNPADDING_DENOMINATOR;
			zConfig = {
        MaxWidth         : zMaxWidth - zItemPadding,
        MaxHeight        : zMaxHeight - zItemPadding,
        ToolBar          : zSize / zToolbar_Denominator,
        ThumbnailPadding : zSize / zTNPadding_Denominator
      }
      zConfig.ItemWidth  = zConfig.MaxWidth + List.LightboxView.ITEMPADDING + ( zConfig.ThumbnailPadding * 2 );
      zConfig.ItemHeight = zConfig.MaxHeight + List.LightboxView.ITEMPADDING + ( zConfig.ToolBar * 2 ) + ( zConfig.ThumbnailPadding * 2 );
      List.LightboxView.ConfigMatrix[this.Size][this.Ratio] = zConfig;
      this.Config = zConfig;
      return true;
    },
    _calculateFitInPlace: function( aThumbnail, aItem ) {
      var zWidth                 = aItem.ImageURLWidth_Medium;
      var zHeight                = aItem.ImageURLHeight_Medium;
      var zFitFactor             = this.Config.MaxWidth / zWidth;
      var zHeightFitFactor       = this.Config.MaxHeight / zHeight;
      zFitFactor                 = ( zHeightFitFactor < zFitFactor ) ? zHeightFitFactor : zFitFactor;
      zWidth                     = zWidth * zFitFactor;
      zHeight                    = zHeight * zFitFactor;
      aThumbnail.style.marginTop = Math.round( ( this.Config.MaxHeight - zHeight ) / 2 ) + "px";
      DOM.addClass( aThumbnail, "MediaImage" );
      aItem[ "Lightbox_" + this.Size + "_Width" ]   = zWidth;
      aItem[ "Lightbox_" + this.Size + "_Height" ]  = zHeight;
      return true;
    },
    _addClasses: function( aDOMObjects, aItem ) {
      DOM.addClass( aDOMObjects.LightboxItem, "Lightbox_Item" );
      DOM.addClass( aDOMObjects.LightboxItem, this.Size.toLowerCase() );
      DOM.addClass( aDOMObjects.LightboxItem, this.Ratio.toLowerCase() );
      DOM.addClass( aDOMObjects.ToolbarContainer, "Lightbox_Toolbar" );
      DOM.addClass( aDOMObjects.TitleName, "Lightbox_Name" );
      DOM.showEllipsisOnClip( aDOMObjects.TitleName );
      if ( aDOMObjects.ToolbarFlip && aDOMObjects.TitleName ) {
        DOM.addClass(aDOMObjects.ToolbarFlip, "Lightbox_Flip");
        if ( aItem.Type ) {
          DOM.addClass( aDOMObjects.TitleIcon, "Icon_" + aItem.Type );
        }
        DOM.addClass( aDOMObjects.TitleIcon, "Icon_Base");
      }
      return true;
    },
    _updateItemStyles: function( aDOMObjects, aItem ){
      this._addClasses( aDOMObjects, aItem );
      aDOMObjects.LightboxItem.style.width        = this.Config.ItemWidth + "px";
      aDOMObjects.LightboxItem.style.height       = this.Config.ItemHeight + "px";
      aDOMObjects.ThumbnailContainer.style.left   = this.Config.ThumbnailPadding + "px";
      aDOMObjects.ThumbnailContainer.style.width  = this.Config.MaxWidth + List.LightboxView.ITEMPADDING + "px";
      aDOMObjects.ThumbnailContainer.style.height = this.Config.MaxHeight + List.LightboxView.ITEMPADDING + "px";
      aDOMObjects.ThumbnailContainer.style.top    = this.Config.ToolBar + this.Config.ThumbnailPadding + "px";
      aDOMObjects.TitleBar.style.width            = this.Config.ItemWidth + "px";
      aDOMObjects.TitleBar.style.height           = this.Config.ToolBar + "px";
      aDOMObjects.ToolbarContainer.style.width    = this.Config.ItemWidth + "px";
      aDOMObjects.ToolbarContainer.style.height   = this.Config.ToolBar + "px";
      aDOMObjects.ToolbarContainer.style.top      = this.Config.ItemHeight - this.Config.ToolBar - List.LightboxView.BORDER + "px";
      return true;
    },
    displayLightboxPrimaryLink:   List.lightboxAssetURLCheck,
    displayLightboxSecondaryLink: List.lightboxAssetMediumCheck,
    drawThumbnail: function( aItem ) {
      var zThumbnailContainer = document.createElement("div");
      DOM.addClass(zThumbnailContainer, "Lightbox_ThumbnailContainer");
      if ( aItem.ImageURL_Medium && aItem.ImageURL_Medium != "" && ( aItem.ImageURLWidth_Medium != 0 || aItem.ImageURLHeight_Medium != 0 ) ) {
        var zTN_Image           = document.createElement("img");
        zTN_Image.src           = aItem.ImageURL_Medium;
        this._calculateFitInPlace( zTN_Image, aItem );
        zTN_Image.width         = aItem[ "Lightbox_" + this.Size + "_Width" ];
        zTN_Image.height        = aItem[ "Lightbox_" + this.Size + "_Height" ];
        if ( aItem.Asset_URL != "") {
          DOM.addClass( zTN_Image, "Clickable" );
          DOM.addEvent( zTN_Image, "onclick", this.ThumbnailFunction,  { Item: aItem, Params: this.ThumbnailParams }, { BindTo: this } );
          zTN_Image.title = this.ThumbnailDescription;
        }
        zThumbnailContainer.appendChild(zTN_Image);
      } else {
        zThumbnailContainer.appendChild( DOM.createElement("span") );
      }
      return zThumbnailContainer;
    },
    drawPrimaryLink: function( aDOMObjects, aItem ) {
      if ( this.displayLightboxPrimaryLink( aItem, this ) ) {
        var zToolbar_PrimaryLink       = document.createElement("a");
        DOM.addClass( zToolbar_PrimaryLink, "Lightbox_OptionLink" );
        zToolbar_PrimaryLink.href      = "javascript: void(0);";
        zToolbar_PrimaryLink.innerHTML = this.PrimaryText;
        zToolbar_PrimaryLink.title     = this.PrimaryDescription;
        DOM.addEvent( zToolbar_PrimaryLink, "onclick", this.PrimaryFunction,  { Item: aItem, Params: this.PrimaryParams }, { BindTo: this } );
        aDOMObjects.ToolbarContainer.appendChild( zToolbar_PrimaryLink );
        aDOMObjects.Toolbar_PrimaryLink = zToolbar_PrimaryLink;
      }
      return true;
    },
    drawSecondaryLink: function( aDOMObjects, aItem ) {
      if ( this.displayLightboxSecondaryLink( aItem, this ) && ( this.SecondaryFunction || aItem.Asset_URL ) ) {
        var zToolbar_SecondaryLink       = document.createElement("a");
        DOM.addClass( zToolbar_SecondaryLink, "Lightbox_SecondaryOptionLink" );
        zToolbar_SecondaryLink.innerHTML = this.SecondaryText;
        zToolbar_SecondaryLink.title     = this.SecondaryDescription;
        if ( !this.SecondaryFunction ) {
          zToolbar_SecondaryLink.href = "/l.a/get/?cid=Live-intel&ru=" + URI.Track.LastPage + "&sr=" +URI.Track.ScreenRes + "&tu=" + escape(aItem.Asset_URL) + "?_LCforcesave=Y";
          zToolbar_SecondaryLink.target = "_blank";
        } else {
          zToolbar_SecondaryLink.href = "javascript: void(0);";
          DOM.addEvent(zToolbar_SecondaryLink, "onclick", this.SecondaryFunction, { Item: aItem, Params: this.SecondaryParams } );
        }
        aDOMObjects.ToolbarContainer.appendChild( zToolbar_SecondaryLink );
        aDOMObjects.Toolbar_SecondaryLink = zToolbar_SecondaryLink;
      }
      return true;
    },
    flipLightbox: function ( e, aParams ) {
      DOM.cancelBubble(e);
      var zDOMObjects   = aParams.DOMObjects,
          zLightbox     = zDOMObjects.LightboxItem,
          zContent      = zDOMObjects.ThumbnailContainer,
          zTitlebar     = zDOMObjects.TitleBar,
          zItem         = aParams.Item;
      if ( !zItem.Flipped ) {
        var zThumbnailImg = zContent.firstChild;
        var zLightboxForm = new FormUI.Form( zItem.ItemPath, "LightboxDetails", zContent );
        zLightboxForm.Lightbox = zLightbox;
        zLightboxForm.fetchForm( true, null, {
          Asynchronous: true,
          DrawForm:false,
          OnDisplayFunction: function( aParams ) {
            Tween.fadeOut( aParams.Thumbnail , {
              OnCompleteFunction: function() {
                aParams.Thumbnail.parentNode.removeChild( aParams.Thumbnail );
                zLightboxForm.Settings.AutoLabelResize = "Y";
                zLightboxForm.drawForm();
                return true;
              }
            });
            return true;
          },
          OnDisplayParams: {
            Item: zItem,
            Thumbnail: zThumbnailImg
          }
        });
        zItem.Flipped = true;
      }
      else {
        zLightbox.removeChild( zContent );
        zDOMObjects.ThumbnailContainer =  this.drawThumbnail( zItem );
        this._updateItemStyles( zDOMObjects, zItem );
        DOM.insertAfter( zDOMObjects.ThumbnailContainer, zTitlebar );
        Tween.fadeIn( zDOMObjects.ThumbnailContainer, {
          OnCompleteFunction: function() {
            zDOMObjects.ThumbnailContainer.style.filter = "";
            return true;
          }
        });
        zItem.Flipped = false;
      }
      return true;
    },
    zoom: function( e, aParams ) {
      if ( this.Size != aParams.Zoom ) {
        this.Size = aParams.Zoom;
        Util.setCookie( this.Name + "_SelectedLightboxSize", this.Size )
        List.LightboxView.SelectedViewListener[ this.Name + "_SelectedLightboxSize" ] = this.Size;
        DOM.selectElement( $( "Lightbox_Zoom_" + this.Size ), "Selected", $( "Lightbox_Zoom" ) );
        DOM.replaceContent( aParams.Container );
        aParams = aParams.Params;
        List.createLightboxContent( { ItemArray: aParams.ItemArray, Params: aParams } );
      }
      return true;
    },
		startDrag: function() {		
			Tween.Common.setOpacity( this, .8 );
			this.zIndex       = this.style.zIndex;
			this.style.zIndex = "999"
			this.position     = this.style.position;
			this.BoundingParent    = this.parentNode;
			this.Drag_ParentWidth  = this.BoundingParent.clientWidth;
			this.Drag_ParentHeight = this.BoundingParent.scrollHeight;
			var zClone = this.cloneNode(true);
			this.Drag_Clone = zClone;
			Drag.disable(zClone);
			Tween.Common.setOpacity( zClone, .4 );
			this.ItemCount = this.parentNode.ItemCount;
			this.lightBoxItem = [];
			var zOriginalIndex = 0;
			for(var i = 0; i < this.parentNode.childNodes.length; i++) {
				if ( this.parentNode.childNodes[i] == this ) {
					this.lightBoxItem[i] = this.Drag_Clone;
				} else {
					this.lightBoxItem[i] = this.parentNode.childNodes[i];
				}
			}
			this.lightBoxItem[ this.lightBoxItem.length ] = this;
			List.LightboxView.addDroppable( this, zClone );
			this.parentNode.insertBefore(zClone, this);
			document.body.appendChild( this );
			this.style.position = "absolute";
			this.style.zIndex = "999";
			var zCoords = DOM.getAbsolutePosition( zClone );
			this.style.top = zCoords.y - this.BoundingParent.scrollTop + "px";
			this.style.left = zCoords.x - this.BoundingParent.scrollLeft + "px";
			return false;
		},
		endDrag: function() {
			this.style.zIndex = this.zIndex;
			if ( this.Drag_Bar && this != this.Drag_Bar ) {
				this.BoundingParent.insertBefore( this, this.Drag_Bar );
			} else {
        DOM.insertAfter( this, this.BoundingParent.childNodes[ this.BoundingParent.childNodes.length - 1] );
      }
			DOM.removeClass( this.Drag_Bar, "Droppable" );    
			DOM.removeElement( this.Drag_Clone );
			this.style.top  = "0px";
			this.style.left = "0px";
			Tween.Common.setOpacity( this, 1 );
			this.style.position = this.position;
			var zNewIndex = 0;
			for(var i = 0; i < this.BoundingParent.childNodes.length; i++) {
				if(this.BoundingParent.childNodes[i] == this) {
					zNewIndex = i;
				}
			}
			if( zNewIndex != this.Drag_OriginalIndex && this.BoundingParent.Drag_OnSortCompleteFunction ) {
        this.BoundingParent.Drag_OnSortCompleteFunction( this.BoundingParent, this.BoundingParent.Drag_OnSortCompleteParams );
			}
			this.ItemDragged 			 = true;
			this.zIndex            = null;
			this.position          = null;
			this.Drag_Clone        = null;
			this.Drag_Bar          = null;
			this.Drag_ParentWidth  = null;
			this.Drag_ParentHeight = null;
			this.lightBoxItem      = null;
			this.TriggerArray      = null;
			this.BoundingParent    = null;
			return false;
		},
		drag: function( x, y ) {
			if ( isNaN( x ) || isNaN( y ) ) {
				return true;
			}
			var zBoundingEl_Coords = DOM.getAbsolutePosition( this.BoundingParent );
			x = x - zBoundingEl_Coords.x;	
			y = y - zBoundingEl_Coords.y + this.BoundingParent.scrollTop;
			x = ( x < 0 ) ? 0 : x;
			y = ( y < 0 ) ? 0 : y;
			var zLightboxWidth        = this.DisplayObject.LIGHTBOX_MARGIN ? this.offsetWidth + ( this.DisplayObject.LIGHTBOX_MARGIN * 2 ): this.offsetWidth,
					zLightboxHeight       = this.DisplayObject.LIGHTBOX_MARGIN ? this.offsetHeight + ( this.DisplayObject.LIGHTBOX_MARGIN * 2 ): this.offsetHeight,
					zContainerWidth       = this.Drag_ParentWidth,
					zContainerHeight      = this.Drag_ParentHeight,
					zTotalBoxes           = this.ItemCount,
					zBoxPerCol            = Math.floor( zContainerWidth / zLightboxWidth ),
					zBoxCol               = Math.floor( x / zLightboxWidth ),
					zBoxPerRow            = Math.floor( zContainerHeight / zLightboxHeight ),
					zBoxRow               = Math.floor( y / zLightboxHeight ),
					zBoxNum               = zBoxRow * zBoxPerCol + zBoxCol,
					zRealBox              = ( zBoxNum > zTotalBoxes ) ? zTotalBoxes : zBoxNum,
					zRelPosX              = Math.floor( x % zLightboxWidth ),
					zRelPosY              = Math.floor( y % zLightboxHeight );
			if ( this.Drag_Bar != this.lightBoxItem[zRealBox] ) {
				List.LightboxView.removeDroppable( this );
				List.LightboxView.addDroppable( this, this.lightBoxItem[zRealBox] );
			}
			this.DisplayObject.dragIntoView( x, y, this );
	  	return false;
		},
		dragIntoView: function( x, y, aItem ) {
			if ( ( y - aItem.BoundingParent.scrollTop ) >= ( aItem.BoundingParent.offsetHeight / 2 ) ) {
				aItem.BoundingParent.scrollTop += 15 ;
			} else {
				aItem.BoundingParent.scrollTop = ( aItem.BoundingParent.scrollTop <= 0 ) ? 0 : aItem.BoundingParent.scrollTop - 15 ;
			}
			return true;
		},
		updateSectionList: function( aNewItemArray, aSortParams ) {
			var zAreaTypeMapping = {
				"PersonList"    : { Section: LiveAdMaker.PeopleV2,   SubSection: LiveAdMaker.CreateAd.PeopleV2   },
				"ProductList"   : { Section: LiveAdMaker.ProductsV2, SubSection: LiveAdMaker.CreateAd.ProductsV2 },
				"ServiceList"   : { Section: LiveAdMaker.Services,   SubSection: LiveAdMaker.CreateAd.Services   },
				"Dealer"        : { Section: LiveAdMaker.Dealers,    SubSection: LiveAdMaker.CreateAd.Dealers    },
			  "DealerCompany" : { Section: LiveAdMaker.Dealers, SubSection: LiveAdMaker.CreateAd.Dealers    },
        "Company"       : { Section: LiveAdMaker.Dealers, SubSection: LiveAdMaker.CreateAd.Dealers    }        
      }
			if ( aSortParams.AreaType ) {
        if ( zAreaTypeMapping[ aSortParams.AreaType ].Section.List ) {
				  zAreaTypeMapping[ aSortParams.AreaType ].Section.List.ItemArray    = aNewItemArray;
					zAreaTypeMapping[ aSortParams.AreaType ].Section.Items             = null
				}
				if ( zAreaTypeMapping[ aSortParams.AreaType ].SubSection && zAreaTypeMapping[ aSortParams.AreaType ].SubSection.List ) {
          zAreaTypeMapping[ aSortParams.AreaType ].SubSection.List.ItemArray = aNewItemArray;
					zAreaTypeMapping[ aSortParams.AreaType ].SubSection.Items          = null
				}
			}
		},
		sortComplete: function( aNewItemArray, aSortParams ) {
			var zSortAction = aSortParams.SortAction || "SortItems";
			if ( aSortParams.List ) {
				aSortParams.List.ItemArray = aNewItemArray;
			}
			aSortParams.DisplayObject.updateSectionList( aNewItemArray, aSortParams );
			var zItemPathsArray = [];
			aNewItemArray.forEach( function (aItem) {zItemPathsArray.push( aItem.ItemPath );} );
			if ( aSortParams.ItemPath ) {
			  Ajax.makeRequest( {
				  URL        : URI.pageURL( aSortParams.ItemPath, zSortAction ), 
				  Function   : function () {return true;},
				  Method     : "POST", 
				  PostValues : { 
				    aItems : zItemPathsArray.join(";")
				  }
			 });
			}
			return true;
		},
    create: function( aItem ) {
      this._calculateCoordinates( aItem );
      var zDOMObjects = this._createDOMObjects( aItem );
      this._updateItemStyles( zDOMObjects, aItem );
      this._appendToDOM( zDOMObjects, aItem );
      if( isTrue( this.Sortable ) ) {
       DOM.addClass( zDOMObjects.TitleBar, "Draggable");
       Drag.enableElement({
         Element: zDOMObjects.LightboxItem,
         TriggerElement: zDOMObjects.TitleBar,
         MinX: -1000,
         MaxX: 5000,
         MinY: -1000,
         MaxY: 5000,
         StartFunction: this.startDrag,
         DragFunction: this.drag,
         EndFunction:  this.endDrag,
				 DragTimeout: this.DragTimeout
       });
      }
			DOM.linkObject( zDOMObjects.LightboxItem, "ItemDragged", false );
      DOM.linkObject( zDOMObjects.LightboxItem, "DisplayObject", this );
			DOM.linkDOMObject( zDOMObjects.LightboxItem, "LightboxElements", zDOMObjects );
      DOM.addEvent( zDOMObjects.LightboxItem, "onunload", List.LightboxView.houseKeep, zDOMObjects );
      return zDOMObjects.LightboxItem;
    }
  },
  AdditionalDisplayObjectList: {}
}
List.LightboxView.AdditionalDisplayObjectList.SelectPopUp = function() {
  var zLightboxDisplayObjectParams = {
    ThumbnailDescription : "Select This Item",
    PrimaryText          : "Select",
    PrimaryDescription   : "Select This Item",
    SecondaryFunction    : List.displayAssetPreview,
    SecondaryText        : "Preview",
    SecondaryDescription : "Click Here To Preview Asset",
    Sortable             : false
  }
  var $this = Util.Object.create( List.LightboxView.DisplayObject, zLightboxDisplayObjectParams );
  $this.InitParams = zLightboxDisplayObjectParams;
  $this.ThumbnailFunction = function( e, aParams ) {
    var zItem    = aParams.Item;
    var aElement = this.FormElement;
    var zInput   =  { value: zItem.ItemPath, type: "lightbox", DisplayValue: zItem.DisplayName };
    FormUI.Save.timeoutFormInput( e, { Container: aElement.ElementId, Element: aElement, Input: zInput } );
    DOM.Dialog.hide();
    return true;
  };
  $this.PrimaryFunction = $this.ThumbnailFunction;
  $this.displayLightboxPrimaryLink   = function( aItem ) {
    this.PrimaryDescription   = this.PrimaryText + " " + aItem.DisplayName;
    return true;
  };
  $this.displayLightboxSecondaryLink = function() { return true; }
  $this.drawThumbnail = function( aItem ) {
    this.ThumbnailDescription = this.PrimaryText + " " + aItem.DisplayName;
    return $this.parent.drawThumbnail.call( this, aItem );
  };
  return $this;
}();
List.LightboxView.AdditionalDisplayObjectList.SupportUpload = function() {
  $selectPopup = List.LightboxView.AdditionalDisplayObjectList.SelectPopUp;
  var $this = Util.Object.create( $selectPopup , $selectPopup.InitParams );
  $this.create = function( aItem ) {
    this.DisableFlip = ( aItem.Id == "OptionUploadNew" ) ? true : false;
    return this.parent.create.call( this, aItem );
  };
  $this.displayLightboxPrimaryLink = function( aItem ) {
    return ( aItem.Id != "OptionUploadNew" ) ? true : false;
  };
  $this.displayLightboxSecondaryLink = function( aItem ) {
    return ( aItem.Id != "OptionUploadNew" ) ? true : false;
  };
  $this.drawThumbnail = function( aItem ) {
    if ( aItem.Id != "OptionUploadNew" ) {
      return $this.parent.drawThumbnail.call( this, aItem );
    } else {
      return $this.drawFileUpload( aItem );
    }
  };
  $this.drawFileUpload = function( aItem ) {
    var zThumbnailContainer = document.createElement("div");
    DOM.addClass(zThumbnailContainer, "Lightbox_ThumbnailContainer");
    var zButtonClass, zButtonValue;
    if ( List.LightboxView[ this.Size ] > List.LightboxView.SMALL  ) {
      zButtonClass  = "Button";
      zButtonMargin = "35px";
    } else {
      zButtonClass  = "Button_Medium";
      zButtonMargin = "10px";
    }
    var btnUpload           = DOM.createElement( "div", null, zButtonClass );
    btnUpload.style.margin  = zButtonMargin;
    DOM.replaceContent( btnUpload, "Upload Image" );
    DOM.addEvent( btnUpload, "onclick", this.showFileUploadDialog, aItem, { BindTo: this } );
    zThumbnailContainer.appendChild( btnUpload );
    return zThumbnailContainer;
  }
  $this.showFileUploadDialog = function( e, aItem ) {
    var zUploadContainer    = DOM.createElement( "div", "SupportUpload-LightboxContainer" );
    zUploadContainer.style.margin = "10px";
    var zUploadHeader       = DOM.createElement( "h2" );
    zUploadHeader.innerHTML = "Click below to upload your own image. This image will automatically be saved for you for later use.";
    zUploadContainer.appendChild( zUploadHeader );
    var zElement     = this.FormElement;
    var zForm        = zElement.Form;
    var zFileElement = zForm.getElement( "Support_" + zElement.FieldId, "FieldId" );
    zFileElement.IFrameContainer = this.FormElement.Form.ContentElement;
    zFileElement.OnChangeFunction = this.hideFileUploadDialog;
    zFileElement.BindOnChangeTo= this;
    zForm.replaceContent( zFileElement.FieldId, "FieldId", "Upload Image", { IsLabel: true  } );
    zForm.show( zFileElement.FieldId, "FieldId", { IsRelativeContainer: true  } );
    zForm.move( zFileElement, zUploadContainer, { IsRelativeContainer: true } );
    var zDialog = DOM.WidgitDialog.show( zUploadContainer, "center", aItem.DisplayName, 550, 150);
    zElement.SupportedElement = zFileElement;
    zFileElement.SupportFor   = zElement;
    DOM.addEvent( $( zDialog.DialogBoxId ), "onclick", FormUI.cancelBubble, { Element: zElement } );
    var zDialogCloseButton = $( zDialog.DialogBoxId + "_closeBtn" );
    var zPreviousOnClickFunc = zDialogCloseButton.onclick;
    $that = this;
    zDialogCloseButton.onclick = function(e) {
      $that.onCloseFileUploadDialog.call( $that, aItem );
      return zPreviousOnClickFunc.call( this, e );
    };
    return true;
  },
  $this.hideFileUploadDialog = function( aParams ) {
    var zElement = aParams.Element.SupportFor;
    var $self = aParams.Element.SupportFor.LightboxDisplayObject;
    zElement.CancelSave = true;
    var zInput   =  { value: zElement.Value, type: "lightbox", DisplayValue: aParams.Element.DisplayValue };
    FormUI.Save.timeoutFormInput( { type: "onclick", target: document.body }, { Container: zElement.ElementId, Element: zElement, Input: zInput } );
    $self.onCloseFileUploadDialog( null, null );
    DOM.Dialog.hide();
    DOM.WidgitDialog.hide();
    return true;
  };
  $this.onCloseFileUploadDialog = function( e, aItem ) {
    var zElement  = this.FormElement;
    var zForm     = zElement.Form;
    zForm.move( zElement.SupportedElement, zForm.ContentElement, { IsRelativeContainer: true } );
    zForm.hide( zElement.SupportedElement.FieldId, "FieldId", { IsRelativeContainer: true  } );
    return true;
  }
  return $this;
}();
List.LightboxView.AdditionalDisplayObjectList.CopySelectPopUp = function() {
  var zLightboxDisplayObjectParams = {
    DisableFlip          : true,
    PrimaryText          : "Select",
    PrimaryDescription   : "Select This Item",
    ThumbnailDescription : "Select This Item",
    Sortable             : false
  };
  var $this = Util.Object.create( List.LightboxView.DisplayObject, zLightboxDisplayObjectParams );
  $this.displayLightboxPrimaryLink = function( aItem ) { return true; };
  $this._calculateCoordinates = function( aItem ) {
    List.LightboxView.TOOLBAR_DENOMINATOR   = 22;
    zConfig = {
      MaxWidth         : 512,
      MaxHeight        : 22,
      ToolBar          : 512 / List.LightboxView.TOOLBAR_DENOMINATOR,
      ThumbnailPadding : 512 / List.LightboxView.TNPADDING_DENOMINATOR
    }
    zConfig.ItemWidth  = zConfig.MaxWidth + List.LightboxView.ITEMPADDING + ( zConfig.ThumbnailPadding * 2 );
    zConfig.ItemHeight = zConfig.MaxHeight + List.LightboxView.ITEMPADDING + ( zConfig.ToolBar * 2 ) + ( zConfig.ThumbnailPadding * 2 );
    List.LightboxView.ConfigMatrix[this.Size][this.Ratio] = zConfig;
    this.Config = zConfig;
    return true;
  };
   $this.drawThumbnail = function( aItem ) {
      var zThumbnailContainer = document.createElement("div");
      DOM.addClass(zThumbnailContainer, "Lightbox_ThumbnailContainer");
      if ( aItem.ImageURL_Medium && aItem.ImageURL_Medium != "" && ( aItem.ImageURLWidth_Medium != 0 || aItem.ImageURLHeight_Medium != 0 ) ) {
        var zTN_Image           = document.createElement("img");
        zTN_Image.src           = aItem.ImageURL_Medium;
        this._calculateFitInPlace( zTN_Image, aItem );
        zTN_Image.width         = 512;
        zTN_Image.height        = 22;
        DOM.addClass( zTN_Image, "Clickable" );
        DOM.addEvent( zTN_Image, "onclick", this.ThumbnailFunction,  { Item: aItem, Params: this.ThumbnailParams }, { BindTo: this } );
        zThumbnailContainer.appendChild(zTN_Image);
      } else {
        zThumbnailContainer.appendChild( DOM.createElement("span") );
      }
      List.LightboxView.removeZoom();
      return zThumbnailContainer;
    };
  $this.InitParams = zLightboxDisplayObjectParams;
  $this.ThumbnailFunction = function( e, aParams ) {
    var zItem    = aParams.Item;
    var aElement = this.FormElement;
    var zInput   =  { value: zItem.ItemPath, type: "lightbox", DisplayValue: zItem.DisplayName };
    FormUI.Save.timeoutFormInput( e, { Container: aElement.ElementId, Element: aElement, Input: zInput } );
    DOM.Dialog.hide();
    return true;
  };
  $this.PrimaryFunction = $this.ThumbnailFunction;
  return $this;
}();
List.LightboxView.AdditionalDisplayObjectList.FormLightBox = function() {
  var zLightboxDisplayObjectParams = {
    DisableFlip          : true,
    PrimaryText          : "Select",
    PrimaryDescription   : "Select This Item",
    ThumbnailDescription : "Select This Item",
    Sortable             : false
  };
  var $this = Util.Object.create( List.LightboxView.DisplayObject, zLightboxDisplayObjectParams );
  $this.displayLightboxPrimaryLink = function( aItem ) { return true; };
  $this._calculateCoordinates = function( aItem ) {
    List.LightboxView.TOOLBAR_DENOMINATOR   = 12;
    zConfig = {
      MaxWidth         : 220,
      MaxHeight        : 240,
      ToolBar          : 240 / List.LightboxView.TOOLBAR_DENOMINATOR,
      ThumbnailPadding : 240 / List.LightboxView.TNPADDING_DENOMINATOR
    }
    zConfig.ItemWidth  = zConfig.MaxWidth + List.LightboxView.ITEMPADDING + ( zConfig.ThumbnailPadding * 2 );
    zConfig.ItemHeight = zConfig.MaxHeight + List.LightboxView.ITEMPADDING + ( zConfig.ToolBar * 2 ) + ( zConfig.ThumbnailPadding * 2 );
    List.LightboxView.ConfigMatrix[this.Size][this.Ratio] = zConfig;
    this.Config = zConfig;
    return true;
  };
  $this.drawThumbnail = function( aItem ) {
     var zThumbnailContainer = document.createElement("div");
     DOM.addClass(zThumbnailContainer, "Lightbox_ThumbnailContainer");
     zThumbnailContainer.style.textAlign = "left";
     aFormParams = {OnDisplayFunction: $this.LightBoxOnDisplayFunction};
     FormUI.Request.getForm(aItem.ItemPath, $this.FormLightBoxType, zThumbnailContainer, null, aFormParams);
     return zThumbnailContainer;
  };
  $this.InitParams = zLightboxDisplayObjectParams;
  $this.ThumbnailFunction = function( e, aParams ) {
    var zItem    = aParams.Item;
    var aElement = this.FormElement;
    var zInput   =  { value: zItem.ItemPath, type: "lightbox", DisplayValue: zItem.DisplayName };
    FormUI.Save.timeoutFormInput( e, { Container: aElement.ElementId, Element: aElement, Input: zInput } );
    DOM.Dialog.hide();
    return true;
  };
  $this.PrimaryFunction = $this.ThumbnailFunction;
  return $this;
}();
List.LightboxView.AdditionalDisplayObjectList.AspectRatioOptions = function() {
  var zLightboxDisplayObjectParams = {
    DisableFlip          : true,
    PrimaryText          : "Select",
    PrimaryDescription   : "Select This Item",
    ThumbnailDescription : "Select This Item",
    Sortable             : false
  };
  var $this = Util.Object.create( List.LightboxView.DisplayObject, zLightboxDisplayObjectParams );
  $this.displayLightboxPrimaryLink = function( aItem ) { return true; };
  $this.ThumbnailFunction = function( e, aParams ) {
    var zItem    = aParams.Item;
    var aElement = this.FormElement;
    var zInput   =  { value: zItem.ItemPath, type: "lightbox", DisplayValue: zItem.DisplayName };
    FormUI.Save.timeoutFormInput( e, { Container: aElement.ElementId, Element: aElement, Input: zInput } );
    DOM.Dialog.hide();
    return true;
  };
  $this.PrimaryFunction = $this.ThumbnailFunction;
  $this.drawThumbnail = function( aItem ) {
    var zThumbnailContainer = document.createElement("div");
    DOM.addClass(zThumbnailContainer, "Lightbox_ThumbnailContainer");
    aItem.AspectRatio = this.calculateAspectRatio( aItem );
    zThumbnailContainer.appendChild(this.createAspectRatioDiv( aItem ));
    DOM.addClass( zThumbnailContainer, "Clickable" );
    DOM.addEvent( zThumbnailContainer, "onclick", this.ThumbnailFunction,  { Item: aItem, Params: this.ThumbnailParams }, { BindTo: this } );
    return zThumbnailContainer;
  };
  $this.calculateAspectRatio = function( aItem ) {
    var zAspectRatio = null;
    if(aItem.Height && aItem.Width) {
      if(parseFloat(aItem.Height) > 0 && parseFloat(aItem.Width) > 0) {
        var zHeight       = parseFloat(aItem.Height);
        var zWidth        = parseFloat(aItem.Width);
        var zHigherValue  = Math.max(zHeight, zWidth);
        zAspectRatio      = ((zHeight / zHigherValue).toFixed(2)) + ":" + ((zWidth / zHigherValue).toFixed(2));
      }
    }
    return zAspectRatio;
  };
  $this.createAspectRatioDiv = function( aItem ) {
    var zAspectRatioDiv          = DOM.createElement("div");
    var zAspectRatio             = aItem.AspectRatio;
    var zMaxBoxSize              = Math.min($this.Config.MaxHeight, $this.Config.MaxWidth) - 15;
    var zDisplayHeight           = 0;
    var zDisplayWidth            = 0;
    if(zAspectRatio && zAspectRatio.split(":").length == 2) {
      DOM.addClass(zAspectRatioDiv, "AspectRatioDiv");
      var zAspectRatioArray = zAspectRatio.split(":");
      for( var i = 0; i < 2; i++) {
        zAspectRatioArray[i] = parseFloat(zAspectRatioArray[i]);
      }
      zDisplayHeight = Math.floor(zMaxBoxSize * zAspectRatioArray[0]);
      zDisplayWidth  = Math.floor(zMaxBoxSize * zAspectRatioArray[1]);
    } else {
      var zAspectRatioImg = DOM.createElement("img");
      zAspectRatioImg.src = "\/l.c.bin\/I\/72063\/BoxWidthHeight.png";
      zAspectRatioDiv.appendChild(zAspectRatioImg);
      zDisplayHeight = 123;
      zDisplayWidth  = 142;
      if($this.Size == "SMALL") {
        zAspectRatioImg.src = "\/l.c.bin\/I\/72064\/BoxWidthHeight_small_noborder-1.png";
        zDisplayHeight = 61;
        zDisplayWidth  = 70;
      }
    }
    zAspectRatioDiv.style.height = zDisplayHeight + "px";
    zAspectRatioDiv.style.width  = zDisplayWidth + "px";
    var zVerticalMargin   = Math.floor(($this.Config.MaxHeight - zDisplayHeight) / 2);
    var zHorizontalMargin = Math.floor(($this.Config.MaxWidth - zDisplayWidth) / 2);
    zAspectRatioDiv.style.margin = zVerticalMargin +  "px " + zHorizontalMargin + "px";
    return zAspectRatioDiv;
  };
  return $this;
}();
List.LightboxView.AdditionalDisplayObjectList.HTMLDisplay = function() {
	var zLightboxDisplayObjectParams = {
		LIGHTBOX_MARGIN	: 2,
		DragTimeout     : 250,
		Sortable        : true,
		Size            : "HTMLDISPLAY_SMALL",
		Ratio           : "HTMLDISPLAY_LANDSCAPE"
	}
	var $this = Util.Object.create( List.LightboxView.DisplayObject, zLightboxDisplayObjectParams );
	$this.HTMLDisplayId = "HTMLDisplay";
	$this.TOOLBAR_DENOMINATOR   = 200;
	$this.TNPADDING_DENOMINATOR = 200;
	$this._createDOMObjects = function( aItem ) {
		var zLightboxItem       = document.createElement( "div" );
		zLightboxItem.style.backgroundColor = "#fff";
		var zDOMObjects = {
			LightboxItem : zLightboxItem
		};
		var zDisplayContainer = this.drawHTMLDisplay( aItem, zDOMObjects  );
		Util.Object.extend( zDOMObjects, {
			ThumbnailContainer : zDisplayContainer,
			DisplayContainer   : zDisplayContainer,
			TitleBar           : zLightboxItem
		});
		DOM.linkObject( zLightboxItem, "List_Item", aItem );				
		return zDOMObjects;
	};
	$this._addClasses = function( aDOMObjects, aItem ) {
		DOM.addClass( aDOMObjects.LightboxItem, "Lightbox_Item"  );
		DOM.addClass( aDOMObjects.LightboxItem, this.HTMLDisplayId  );
		DOM.addClass( aDOMObjects.LightboxItem, this.Size.toLowerCase() );
		DOM.addClass( aDOMObjects.LightboxItem, this.Ratio.toLowerCase() );
		return true;
	};
	$this._updateItemStyles = function( aDOMObjects, aItem ){
		this._addClasses( aDOMObjects, aItem );
		aDOMObjects.LightboxItem.style.width  = this.Config.ItemWidth + "px";
		aDOMObjects.LightboxItem.style.height = this.Config.ItemHeight + "px";	
		return true;
	};
	$this._appendToDOM = function( aDOMObjects, aItem ) { 
		aDOMObjects.LightboxItem.appendChild( aDOMObjects.DisplayContainer );
		return true; 
	}
	$this.InitParams = zLightboxDisplayObjectParams;
	$this.drawHTMLDisplay = function( aItem, aDOMObjs ) {
		var box = DOM.createElement( "div", null, "Content" );
		box.innerHTML = aItem.DisplayName;
		return box;
	}
	$this.setSelectClass = function( aLightboxItem, aSelectedValue ) {
		if ( aSelectedValue != "Y" ) {
			DOM.addClass( aLightboxItem, "selected" );
			aSelectedValue = "Y";
		} else {
			DOM.removeClass( aLightboxItem, "selected" );
			aSelectedValue = "N";			
		}		
		return aSelectedValue;
	}
	$this.select = function( e, aLightboxItem ) {
		if ( !aLightboxItem.ItemDragged ) {
			var aSelectedValue = aLightboxItem.getAttribute( "selected" );
			var $self = aLightboxItem.DisplayObject;
			aSelectedValue = $self.setSelectClass( aLightboxItem, aSelectedValue );
			if ( aLightboxItem.DragTimeout ) {
				clearTimeout( aLightboxItem.DragTimeout );              
			}
		}
		aLightboxItem.ItemDragged = false;
		aLightboxItem.setAttribute( "selected", aSelectedValue );
		return aSelectedValue;
	}
	$this.create = function( aItem ) {
		var zLightboxItem = $this.parent.create.call( this, aItem );
		DOM.addEvent( zLightboxItem, "onclick", this.select, zLightboxItem );
		return zLightboxItem;
	}
	return $this;
}();			
List.LightboxView.houseKeep = function( e, aDOMObjects ) {
  aDOMObjects.LightboxItem          = null;
  aDOMObjects.ThumbnailContainer    = null;
  aDOMObjects.TitleBar              = null;
  aDOMObjects.TitleIcon             = null;
  aDOMObjects.TitleName             = null;
  aDOMObjects.ToolbarContainer      = null;
  aDOMObjects.ToolbarFlip           = null;
  aDOMObjects.Toolbar_PrimaryLink   = null;
  aDOMObjects.Toolbar_SecondaryLink = null;
  aDOMObjects.ToolbarFlip           = null;
  aDOMObjects                       = null;
  return true;
}
    // ---------------------- End Action_Include_List ----------------- //
    // ---------------------- Begin Action_Include_CsvInput --------------- //
var CsvInput = {
  set: function(aParams){
    var zInput = $(aParams.Input);
    if(!aParams.Data){
      try{
        eval("aParams.Data = "+ zInput.getAttribute("csvdata"));
      }catch(e){
      }
    }
    if(!aParams.TitleArray && zInput.getAttribute("csvtitlearray")) {
      aParams.TitleArray = zInput.getAttribute("csvtitlearray").split(",");
    }
    zInput.value = CsvInput.getString(aParams);
  },
  getString: function(aParams){
    var zItem,zColumn,
        zCsv = [],
        zTitleList = {},
        zDataArray = [],
        zTitleArray = aParams.TitleArray || [];
    if(aParams.Data){
      if(aParams.Data.length>=0){
        zDataArray = aParams.Data;
      }else{
        zDataArray = [];
        for(zItem in aParams.Data){
          zDataArray.push(aParams.Data[zItem]);
        }
      }
    }
    if(!zTitleArray || zTitleArray.length == 0){
      zDataArray.forEach(function(aItem){
        for(zColumn in aItem){
          if(!zTitleList[zColumn] && (typeof aItem[zColumn] == "number" || typeof aItem[zColumn] == "string")){
            zTitleArray.push(zColumn);
            zTitleList[zColumn] = zColumn;
          }
        }
      });
    }else{
      zTitleArray.forEach(function(aColumn){
        zTitleList[aColumn] = aColumn;
      });
    }
    zCsv.push(zTitleArray.join(","));
    zDataArray.forEach(function(aItem){
      zCsv.push(encodeItem(aItem));
    });
    function encodeItem(aItem){
      var zReturn = [];
      zTitleArray.forEach(function(aColumn){
        if(typeof aItem[aColumn] == "number" || typeof aItem[aColumn] == "string"){
          zReturn.push(encodeURIComponent(aItem[aColumn]));
        }else{
          zReturn.push("");
        }
      });
      return zReturn.join(",");
    };
    return zCsv.join("\n");
  },
  setSubmit: function(aParams){
    DOM.addEvent($(aParams.Input).form,"onsubmit",function(e,aParams){ CsvInput.set(aParams); return true; },aParams);
  },
  getElements: function(aStartElement){
    var zResults = [].concat(
      DOM.getElementsWithAttribute("csvdata",null,"input",aStartElement),
      DOM.getElementsWithAttribute("csvdata",null,"textarea",aStartElement)
    );
    return zResults;
  },
  initializeInput: function(aElement){
    CsvInput.setSubmit({
      Input:aElement
    });
  }
};
    // ---------------------- End Action_Include_CsvInput ----------------- //
    // ---------------------- Begin Action_Include_Modal --------------- //
function getPageSize(){
  var xScroll,yScroll,windowWidth,windowHeight,pageWidth,pageHeight;
  var zSize;
  if (window.innerHeight && window.scrollMaxY) {
    xScroll = document.body.scrollWidth;
    yScroll = window.innerHeight + window.scrollMaxY;
  } else if (document.body.scrollHeight > document.body.offsetHeight){ 
    xScroll = document.body.scrollWidth;
    yScroll = document.body.scrollHeight;
  } else { 
    xScroll = document.body.offsetWidth;
    yScroll = document.body.offsetHeight;
  }
  if (self.innerHeight) {  
    windowWidth = self.innerWidth;
    windowHeight = self.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight) { 
    windowWidth = document.documentElement.clientWidth;
    windowHeight = document.documentElement.clientHeight;
  } else if (document.body) { 
    windowWidth = document.body.clientWidth;
    windowHeight = document.body.clientHeight;
  }
  if(yScroll < windowHeight){
    pageHeight = windowHeight;
  } else {
    pageHeight = yScroll;
  }
  if(xScroll < windowWidth){
    pageWidth = windowWidth;
  } else {
    pageWidth = xScroll;
  }
  zSize = {
    pageWidth:pageWidth,
    pageHeight:pageHeight,
    windowWidth:windowWidth,
    windowHeight:windowHeight,
    xScroll:xScroll,
    yScroll:yScroll
  };
  return zSize;
}
var Modal = {
  Current:{
    Element:null,
    Parent:null
  },
  Overlay:null,
  Show:function(aElement,aModalType,aYesFunc,aNoFunc,aParams){
    var zPageSize = getPageSize();
    if(!Modal.Overlay){
      Modal.Body = document.getElementsByTagName('BODY')[0];
      Modal.Overlay = DOM.createElement('div','ModalOverlay');
      Modal.Body.appendChild(Modal.Overlay);
      $('ModalOverlay').style.height = zPageSize.pageHeight +'px';
      $('ModalOverlay').style.width = zPageSize.pageWidth +'px';
    }
    if(aElement){
      Modal.Current.Element = aElement;
      Modal.Current.Parent = Modal.Current.Element.parentNode;
      DOM.addClass(Modal.Current.Element,'Modal');
      var zCoords = {
        x:(zPageSize.pageWidth-(Modal.Current.Element.clientWidth ? Modal.Current.Element.clientWidth:0))/2,
        y:(zPageSize.pageHeight-(Modal.Current.Element.clientHeight ? Modal.Current.Element.clientHeight:0))/2
      };
      Modal.Current.Element.style.left = zCoords.x + 'px';
      Modal.Current.Element.style.top = zCoords.y + 'px';
      Modal.Body.appendChild(Modal.Current.Element);
      if(aModalType == 'alert'){
        var zAlertButtonContainer = DOM.createElement('div','ModalAlertButtonContainer','ModalButtonContainer');
        Modal.Current.Element.appendChild(zAlertButtonContainer);
        var zAlertButton = DOM.createElement('span','ModalAlertButton','Button ModalButton');
        zAlertButton.innerHTML = 'OK';
        zAlertButton.href = 'javascript:void(0);';
        zAlertButtonContainer.appendChild(zAlertButton);
        DOM.addEvent(zAlertButton, "onclick", Modal.Hide);
      }
      if(aModalType == 'confirm'){
        var zConfirmButtonContainer = DOM.createElement('div','ModalConfirmButtonContainer','ModalButtonContainer');
        Modal.Current.Element.appendChild(zConfirmButtonContainer);
        var zYesButton = DOM.createElement('span','ModalYesButton','Button ModalButton');
        zYesButton.innerHTML = 'Yes';
        zYesButton.href = 'javascript:void(0);';
        zConfirmButtonContainer.appendChild(zYesButton);
        DOM.addEvent(zYesButton, "onclick", aYesFunc, aParams);
        var zNoButton = DOM.createElement('span','ModalNoButton','Button ModalButton');
        zNoButton.innerHTML = 'No';
        zNoButton.href = 'javascript:void(0);';
        zConfirmButtonContainer.appendChild(zNoButton);
        DOM.addEvent(zNoButton, "onclick", aNoFunc, aParams);
      }
    }
    DOM.addClass(Modal.Overlay,'Show');
  },
  Hide:function(){
    if(Modal.Current.Element){
      Modal.Body.removeChild(Modal.Current.Element);
      Modal.Current.Element = null;
      Modal.Current.ElementParent = null;
    }
    if(Modal.Overlay){
      DOM.removeClass(Modal.Overlay,'Show');
    }
  },
  Alert: function(aText){
    if(aText) {
      var zModalAlertContainer = DOM.createElement("div","ModalAlertContainer");
      zModalAlertContainer.innerHTML = aText;
      Modal.Show(zModalAlertContainer,'alert');
    }
    return true;
  },
  Confirm: function(aText,aYesFunc,aNoFunc,aParams){
    if(aText) {
      var zModalConfirmContainer = DOM.createElement("div","ModalConfirmContainer");
      zModalConfirmContainer.innerHTML = aText;
      Modal.Show(zModalConfirmContainer,'confirm',aYesFunc,aNoFunc,aParams);
    }
    return true;
  }
};
    // ---------------------- End Action_Include_Modal ----------------- //
    // ---------------------- Begin Action_Include_TrackMouse --------------- //
var TrackMouse = {
  Coords: {x: 0, y: 0},
  getMouseX: function(e){if (e.pageX) return e.pageX; else if (e.clientX)return e.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return 0;},
  getMouseY: function(e) {if (e.pageY) return e.pageY; else if (e.clientY)return e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return 0;},
  updateCoords: function(e){
    try {
      if (!e) e = window.event;
      if (!e) {return true};
      TrackMouse.Coords.x = TrackMouse.getMouseX(e);
      TrackMouse.Coords.y = TrackMouse.getMouseY(e);
      if(TrackMouse.Settings) {
        if(TrackMouse.Settings.Element) {
          TrackMouse.Settings.Element.style.left = TrackMouse.Coords.x + TrackMouse.Settings.OffsetLeft + "px";
          TrackMouse.Settings.Element.style.top = TrackMouse.Coords.y + TrackMouse.Settings.OffsetTop + "px";
        }
        if(TrackMouse.Settings.OnMoveFunction) {
          TrackMouse.Settings.OnMoveFunction(e,TrackMouse.Coords);
        }
      }
    } catch(e) {};
    return true;
  },
  start: function(aSettings){
    if(!aSettings) {
      TrackMouse.Settings = null;
      return false;
    }
    TrackMouse.Settings = aSettings;
    if (!TrackMouse.Settings.OffsetLeft) {
      TrackMouse.Settings.OffsetLeft = 0;
    }
    if (!TrackMouse.Settings.OffsetTop) {
      TrackMouse.Settings.OffsetTop = 0;
    }
    return true;
  },
  stop: function(){
    if (!TrackMouse) {return true};
    TrackMouse.Settings = null;
    return true;
  },
  stopListening: function(){
    if (!TrackMouse) {return true};
    DOM.removeEvent(document, 'onmousemove', TrackMouse.updateCoords);
    return true;
  }
}
DOM.addEvent(document, 'onmousemove', TrackMouse.updateCoords);
DOM.addEvent(document, 'onunload', TrackMouse.stopListening);
DOM.addEvent(document, 'onunload', TrackMouse.stop);
DOM.addEvent(document, 'onbeforeunload', TrackMouse.stopListening);
DOM.addEvent(document, 'onbeforeunload', TrackMouse.stop);
    // ---------------------- End Action_Include_TrackMouse ----------------- //
    // ---------------------- Begin Action_Include_Tween --------------- //
var Tween = {
  run: function(aParams){
    aParams.Duration           = (typeof aParams.Duration != 'undefined' ? aParams.Duration:400);
    aParams.StartValue         = (typeof aParams.StartValue != 'undefined' ? aParams.StartValue:0);
    aParams.Increment          = (typeof aParams.Increment != 'undefined' ? aParams.Increment:16);
    aParams.EndValue           = (typeof aParams.EndValue != 'undefined' ? aParams.EndValue:1);
    aParams.Method             = aParams.Method || "linear";
    aParams.OnCompleteFunction = aParams.OnCompleteFunction || null;
    aParams.CurrentValue       = aParams.StartValue;
    aParams.StartTime          = new Date().getTime();
    aParams.EndTime            = aParams.StartTime + aParams.Duration;
    aParams.Transition         = Tween.Transition[aParams.Method];
    aParams.PercentComplete    = 0;
    aParams.Timer = setInterval(function(){
      Tween.step(aParams);
    },aParams.Increment);
    return aParams;
  },
  step: function(aParams){
    var zNow  = new Date().getTime();
    if (zNow >= aParams.StartTime+aParams.Duration) {
      clearInterval (aParams.Timer);
      aParams.Timer = null;
      aParams.CurrentValue = aParams.EndValue;
      aParams.PercentComplete = 1;
      if (aParams.OnCompleteFunction) {
        aParams.OnCompleteFunction(aParams);
      }
      return true;
    } else {
      aParams.PercentComplete = (zNow - aParams.StartTime) / (aParams.Duration);
      aParams.CurrentValue = aParams.Transition(aParams.PercentComplete) * (aParams.EndValue - aParams.StartValue) + aParams.StartValue;
    }
    aParams.Function(aParams);
  },
  to: function(aElement,aCoords){
  },
  fadeIn: function(aElement,aParams){
    aParams = aParams || {};
    aParams.StartValue = (typeof(aParams.StartValue)=='undefined' ? 0:aParams.StartValue);
    aParams.EndValue = (typeof(aParams.EndValue)=='undefined' ? 1:aParams.EndValue);
    Tween.Common.setTween(aElement,aParams);
  },
  fadeOut: function(aElement,aParams){
    aParams = aParams || {};
    aParams.StartValue = (typeof(aParams.StartValue)=='undefined' ? 1:aParams.StartValue);
    aParams.EndValue = (typeof(aParams.EndValue)=='undefined' ? 0:aParams.EndValue);
    Tween.Common.setTween(aElement,aParams);
  },
  Common: {
    setOpacity:function(aElement,aValue){
    	aElement.style.opacity = aValue;
    	aElement.style.filter = 'alpha(opacity=' + aValue*100 + ')';
    },
    setTween:function(aElement,aParams){
      aParams.Element  = $(aElement);
      aParams.Function = function(aParams){
        Tween.Common.setOpacity(aParams.Element,aParams.CurrentValue);
      }
      Tween.Common.setOpacity(aParams.Element,aParams.StartValue);
      Tween.run(aParams);
    }
  },
  Transition: {
    sinoidal:function(pos){
      return ((-Math.cos(pos*Math.PI)/2) + 0.5);
    },
    linear:function(pos){
      return pos;
    },
    cubic:function(pos){
      return Math.pow(pos, 3);
    },
    circ:function(pos){
      return Math.sqrt(pos);
    },
    expoIn:function(pos){
      return Math.pow(2, 10 * (pos - 1));
    },
    expoOut:function(pos){
      return (-Math.pow(2, -10 * pos) + 1);
    },
    quadIn:function(pos){
      return Math.pow(pos, 2);
    },
    quadOut:function(pos){
      return -(pos)*(pos-2);
    },
    circOut:function(pos){
      return Math.sqrt(1 - Math.pow(pos-1,2));
    },
    circIn:function(pos){
      return -(Math.sqrt(1 - Math.pow(pos, 2)) - 1);
    },
    backIn:function(pos){
      return (pos)*pos*((2.7)*pos - 1.7);
    },
    backOut:function(pos){
      return ((pos-1)*(pos-1)*((2.7)*(pos-1) + 1.7) + 1);
    },
    sineOut:function(pos){
      return Math.sin(pos * (Math.PI/2));
    },
    sineIn:function(pos){
      return -Math.cos(pos * (Math.PI/2)) + 1;
    },
    sineInOut:function(pos){
      return -(Math.cos(Math.PI*pos) - 1)/2;
    }
  }
};
    // ---------------------- End Action_Include_Tween ----------------- //
    // ---------------------- Begin Action_Include_URI --------------- //
if (!URI) {var URI = {};}
Util.copyProperties(URI, {
  CurrentHashValues: {},
  HashCheckIntervalValue: 50,
  IframeHashCounter: 0,
  startHashCheck: function(aOnHashUpdateFunction){
    URI.UseHashIframe = (navigator.userAgent.toLowerCase().indexOf("msie")>-1);
    if(aOnHashUpdateFunction) {
      URI.OnHashUpdateFunction = aOnHashUpdateFunction;
    }
    if(URI.UseHashIframe) {
      URI.HashIframeElement = document.createElement("iframe");
      URI.HashIframeElement.src = "/home.blank";
      URI.HashIframeElement.id = "HashIframeElement";
      URI.HashIframeElement.style.display = "none";
      document.body.appendChild(URI.HashIframeElement);
      URI.fixLinks();
      URI.setIframeHashLocation(URI.stripHash(window.location.hash));
      URI.HashCheckIntervalValue = 500;
    }
    var zHashParam = URI.getQueryValue("aHash");
    if (zHashParam != "" && URI.getHash() == "") {
      URI.setHashLocation(decodeURIComponent(zHashParam));
      if(URI.UseHashIframe) {
        URI.setIframeHashLocation(decodeURIComponent(zHashParam));
      }
    }
    URI.CheckHashInterval = setInterval(URI.checkIfHashChanged, URI.HashCheckIntervalValue);
    URI.checkIfHashChanged();
    return true;
  },
  goToHash: function(aHash){
    URI.setHashLocation(aHash);
    if(URI.UseHashIframe) {
      URI.setIframeHashLocation(aHash);
    }
    URI.checkIfHashChanged();
    return true;
  },
  checkIfHashChanged: function(){
    if(URI.getHash() != URI.LastHash) {
      var zHash = URI.getHash();
      URI.handleUpdatedHash(zHash);
      if(URI.UseHashIframe) {
        URI.setHashLocation(zHash);
      }
    }
    return true;
  },
  getHash: function(){
    if(URI.UseHashIframe && document.frames && document.frames["HashIframeElement"] && document.frames["HashIframeElement"].getHash) {
      return URI.stripHash(document.frames["HashIframeElement"].getHash());
    } else {
      return URI.stripHash(window.location.hash);
    }
  },
  handleUpdatedHash: function(aHashString){
    if (aHashString.indexOf("#") == 0) {
      aHashString = aHashString.substring(1, aHashString.length);
    }
    URI.LastHash = aHashString;
    var zPairSplit;
    URI.CurrentHashValues = {};
    aHashString.split("&").forEach(function(aPair){
      zPairSplit = aPair.split("=");
      if(zPairSplit[0]) {
        URI.CurrentHashValues[zPairSplit[0]] = zPairSplit[1] ? decodeURIComponent(zPairSplit[1]) : undefined;
      }
    });
    if(URI.OnHashUpdateFunction) {
      URI.OnHashUpdateFunction(URI.CurrentHashValues);
    }
    return true;
  },
  replaceHashValue: function(aParam, aValue, aNavigateToNewHash){
    URI.CurrentHashValues[aParam] = aValue;
    if (!URI.UseHashIframe) {
      URI.LastHash = URI.LastHash.setHashVariable(aParam, aValue);
      URI.setHashLocation(URI.LastHash);
    }
    if (aNavigateToNewHash && URI.OnHashUpdateFunction) {
      return URI.OnHashUpdateFunction(URI.CurrentHashValues);
    }
    return true;
  },
  setIframeHashLocation: function(aHashString){
    URI.IframeHashCounter++;
    URI.HashIframeElement.setAttribute("src", "/JavaScript.URILocationHandler?_noLiveCache=Y&"+(URI.IframeHashCounter % 5)+"#"+aHashString);
    return true;
  },
  handleIframeHash: function(e){
    URI.setIframeHashLocation(e.srcElement.getAttribute("href").split("#")[1]);
    return false;
  },
  stripHash: function(aHashString){
    if(aHashString && aHashString.indexOf("#")>-1) {
      var zHashSplit = aHashString.split("#");
      aHashString = zHashSplit[zHashSplit.length-1];
    }
    return aHashString;
  },
  setHashLocation: function(aHashString){
    if(aHashString) {
      var zLocation = "" + window.location;
      window.location = zLocation.split("#")[0] + "#" + aHashString;
    }
    return false;
  },
  fixLinks: function(aNode){
    if(URI.UseHashIframe) {
      if (aNode) {
        var zLinks = aNode.getElementsByTagName("A");
      } else {
        var zLinks = document.getElementsByTagName("A");
      }
      var zHash;
      for(var i=0; i<zLinks.length; i++) {
        zHash = zLinks[i].getAttribute("href").split("#")[1];
        if (zHash) {
          URI.setHashLink(zLinks[i], "#"+zHash);
        }
      }
    }
    return true;
  },
  trackLinks: function(aNode) {
    var zHash;
    if (aNode) {
      var zLinks = aNode.getElementsByTagName("A");
    }
    for(var i=0; i < zLinks.length; i++) {
      zURL = zLinks[i].getAttribute("href");
      if (zURL.indexOf("http") != -1) {
        zURL = "/l.a/goo/?cid=Live-intel&ru=" + URI.Track.LastPage + "&sr=" + "&u=" + zURL + URI.Track.ScreenRes + "&tu=" + zURL;
      }
      zLinks[i].href = zURL;
    }
    return true;  
  },
  setHashLink: function(aElement,aHash){
    if(aHash) {
      aElement.setAttribute("href",aHash);
      if(URI.UseHashIframe) {
        if (aElement.onclick) {aElement.onclick = null};
        aElement.onclick = function(aHashString){
          return function(){
            URI.performIEHashUpdate(aHashString);
            return false;
          }
        }(aHash);
      }
    }
    return true;
  },
  performIEHashUpdate: function(aHashString){ 
    clearInterval(URI.CheckHashInterval);
    URI.handleUpdatedHash(aHashString);
    URI.setIframeHashLocation(aHashString);
    URI.CheckHashInterval = setInterval(URI.checkIfHashChanged, URI.HashCheckIntervalValue);
    return false;
  },
  setURLVariable: function(aVarName,aValue,aURL,aBeforeNoLiveCache){
    aURL = ((!aURL||aURL=='') ? document.location.href:aURL);
    return aURL.setURLVariable(aVarName,aValue,aBeforeNoLiveCache);
  },
  appendToURL: function(aUrl,aExtraParams) {
    if(!aExtraParams) {
      return aUrl;
    }
    if(typeof(aExtraParams)=="object") {
      var zStringParams = "";
      for(aParam in aExtraParams) {
        if(zStringParams.length) {
          zStringParams += "&";
        }
        zStringParams += aParam + "=" + encodeURIComponent(aExtraParams[aParam]);
      }
      aExtraParams = zStringParams;
    }
    if(aUrl.split("?").length>1){
      if (aUrl.split("#").length>1) {
        zUrlParts = aUrl.split("#");
        var zUrl = zUrlParts[0]+"&"+aExtraParams;
        for (var i = 1; i < aUrl.split("#").length; i++) {
          zUrl += '#'+zUrlParts[i];
        }
        return zUrl;
      }
      else {
        return aUrl+"&"+aExtraParams;
      }
    }
    else {
      return aUrl+"?"+aExtraParams;
    }
  },
  getQueryVars: function() {
    URI.getQueryVars.Values = {};
    var zQueryString = document.location.search.substring(1, document.location.search.length);
    var zParamPairs = zQueryString.split("&");
    var zSplitPair;
    for(var i = 0; i < zParamPairs.length; i++) {
      zSplitPair = zParamPairs[i].split("=");
      if (zSplitPair.length == 2) {
        URI.getQueryVars.Values[zSplitPair[0]] = {Name: zSplitPair[0], Value: zSplitPair[1]};
      }
    };
    URI.getQueryVars.Loaded = true;
    return true;
  },
  getQueryValue: function(aParameterName) {
    if (!URI.getQueryVars.Loaded) {
      URI.getQueryVars();
    }
    return (URI.getQueryVars.Values[aParameterName]) ? URI.getQueryVars.Values[aParameterName].Value : "";
  },
  pageURL: function(aItemPath, aAction, aExtraParams, aIncludeLSAccessID){
    var zURL = URI.appendToURL(aItemPath.toPagePath() + "." + aAction, aExtraParams);
    if(isTrue(aIncludeLSAccessID)) {
      zURL = URI.appendToURL(zURL, "LSAccessID="+(URI.User ? URI.User.LsAccessId : ""));
    }
    return zURL;
  },
  Track: {
    BaseURL: "",
    LastPage: "",
    ScreenRes: window.screen.width+'x'+window.screen.height,
    send: function(aPage,aCount,aValue,aCost,aRevenue) {
      var zI = new Image();
      zI.src = URI.Track.BaseURL
             + '\/l.a\/cnt\/'+Math.random()+Math.random()
             + '?cid=Live-intel'
             + '&u='+aPage
             + '&ru='+URI.Track.LastPage
             + '&bt='
             + '&bv='
             + '&sr='+URI.Track.ScreenRes
             + '&cnt='+(aCount?aCount:'')
             + '&val='+(aValue?aValue:'')
             + '&cst='+(aCost?aCost:'')
             + '&rev='+(aRevenue?aRevenue:'')
             + '&0=0';
      URI.Track.LastPage = aPage;
      return true;
     }
  }
});
    // ---------------------- End Action_Include_URI ----------------- //
    // ---------------------- Begin Action_Include_FormUI --------------- //
;
var FormUI = {
  ElementType: {
    LABEL              : 0,
    INPUT              : 1,
    RELATIVE_CONTAINER : 2,
    CONTAINER          : 3
  },
  FormType: null,               
  ElementArray:[],              
  SubmitElementArray:[],
  FormItemPath:null,            
  ContentElement:null,          
  FormList: [],                 
  GridMultiplier: 5,
  FieldBackground: "HoverOn",  
  FieldBorder: "", 
  InputUndoList:{},
  InputRedoList:{},
  CancelSave: false,
  Settings: null,
  ThreadHandler: new Ajax.ThreadHandler([],1,100,null,null),
  FormUIInputCount: 0,
  escapeCarriages: function(aDisplayValue,aReplaceWith) {
    var zDisplayValue = (aDisplayValue) ? aDisplayValue.toString() : '';
    if (zDisplayValue) {
      zDisplayValue = escape(zDisplayValue);
      for(var i=0; i<zDisplayValue.length; i++) {
        if (zDisplayValue.indexOf("%0D%0A") > -1){
          zDisplayValue = zDisplayValue.replace("%0D%0A",aReplaceWith);
        }
        else if (zDisplayValue.indexOf("%0A") > -1) {
          zDisplayValue = zDisplayValue.replace("%0A",aReplaceWith);
        }
        else if (zDisplayValue.indexOf("%0D") > -1) {
          zDisplayValue = zDisplayValue.replace("%0D",aReplaceWith);
        }
      }
      zDisplayValue = unescape(zDisplayValue);
    }
    return zDisplayValue;
  },
  escapeHTMLBreaks: function(aDisplayValue,aReplaceWith) {
    var zDisplayValue = aDisplayValue.toString();
    if (zDisplayValue) {
      zDisplayValue = escape(zDisplayValue);
      for(var i=0; i<zDisplayValue.length; i++) {
        if (zDisplayValue.indexOf("%3CBR%3E") > -1 && DOM.Browser.isIE){
          zDisplayValue = zDisplayValue.replace("%3CBR%3E","%0D%0A");
        }
        else if (zDisplayValue.indexOf("%3CBR%3E") > -1){
          zDisplayValue = zDisplayValue.replace("%3CBR%3E","%0A");
        }
        else if (zDisplayValue.indexOf("%3Cbr%3E") > -1){
          zDisplayValue = zDisplayValue.replace("%3Cbr%3E","%0A");
        }
      }
      zDisplayValue = unescape(zDisplayValue);
    }
    return zDisplayValue;
  },
  getElementDimension: function(aDimension, aType, aFormElement) {
    if (FormUI.ElementArray.length>0) {
      aType = aType || 'Field';
      aFormElement = aFormElement || FormUI.ElementArray[FormUI.ElementArray.length-1]
      return FormUI.ElementDimension['get' + aDimension](aType, aFormElement);
    } else {
      return 0;
    }
  },
  ElementDimension: {
    getTop: function(aType, aFormElement) {
      return aFormElement[aType + 'Top'] * FormUI.GridMultiplier;
    },
    getBottom: function(aType, aFormElement) {
      var zFormTop = aFormElement[aType + 'Top'] * FormUI.GridMultiplier;
      var zFormHeight = aFormElement[aType + 'Height'] * FormUI.GridMultiplier;
      return zFormTop + zFormHeight;
    },
    getLeft: function(aType, aFormElement) {
      return aFormElement[aType + 'Left'] * FormUI.GridMultiplier;
    },
    getRight: function(aType, aFormElement) {
      var zFormLeft = aFormElement[aType + 'Left'] * FormUI.GridMultiplier;
      var zFormWidth = aFormElement[aType + 'Width'] * FormUI.GridMultiplier;
      return zFormLeft + zFormWidth;
    },
    set: function( aInput, aDimension) {
      aInput.style.width  = aDimension.Width + 'px';
      aInput.style.height = aDimension.Height + 'px';
      if (aDimension.Position) aInput.style.position = aDimension.Position;
      return true;
    },
    get: function(aInputType, aFormElement, isLabel) {
      var zStandardSize;
      var zWidth, zHeight;
      if (!isLabel && aFormElement.RelativeContainer && aFormElement.Form && aFormElement.Form.ContentElementType == 'tr') {
        if (aFormElement.DisplayFormat != "LongText") {
          zWidth        = aFormElement.RelativeContainer.clientWidth - 20;
          zHeight       = aFormElement.RelativeContainer.clientHeight - 4;
        }
        else {
          zStandardSize = FormUI.ElementDimension.Standard.get(aInputType);
          zWidth        = zStandardSize.Width;
          zHeight       = zStandardSize.Height;
        }
        return { Width: zWidth, Height: zHeight, Position: 'absolute' }
      }
      var zFieldSize = "";
      if (typeof(aFormElement.FieldSize)=="string" && typeof(aFormElement.LabelSize)=="string") {
        zFieldSize = (isLabel) ? aFormElement.LabelSize : aFormElement.FieldSize;
      }
      if (zFieldSize == 'Standard') {
        zStandardSize = FormUI.ElementDimension.Standard.get(aInputType);
        zWidth  = zStandardSize.Width;
        zHeight = zStandardSize.Height;
        if ( !isLabel ) {
          aFormElement.FieldWidth = zWidth / FormUI.GridMultiplier;
          aFormElement.FieldHeight = zHeight / FormUI.GridMultiplier;
        }
      } else {
        zWidth = (isLabel) ? aFormElement.LabelWidth * FormUI.GridMultiplier : aFormElement.FieldWidth * FormUI.GridMultiplier;
        zHeight = (isLabel) ? aFormElement.LabelHeight * FormUI.GridMultiplier : aFormElement.FieldHeight * FormUI.GridMultiplier;
      }
      zWidth = (isNaN(zWidth)) ? 0 : zWidth;
      zHeight = (isNaN(zHeight)) ? 0 : zHeight;
      if (aFormElement.MaxLabelWidth && isLabel) {
        return { Width: aFormElement.MaxLabelWidth, Height: zHeight }
      } else {
        return { Width: zWidth, Height: zHeight }
      }
    },
    Standard: {
      get: function(aInputType) {
        var zDimension = (FormUI.ElementDimension.Standard[aInputType]) ? FormUI.ElementDimension.Standard[aInputType] : FormUI.ElementDimension.Standard.General;
        return { Width: zDimension.Width * FormUI.GridMultiplier, Height: zDimension.Height * FormUI.GridMultiplier };
      },
      General:      { Width: 80, Height: 3   },
      Currency:     { Width: 30, Height: 3   },
      LongText:     { Width: 80, Height: 11  },
      StylizedText: { Width: 80, Height: 20  },
      Label:        { Width: 20, Height: 3   },
      Checkbox:     { Width: 15, Height: 15  },
      Button:       { Width: 20, Height: 3   },
      Asset:        { Width: 80, Height: 3.8 },
      File:         { Width: 44, Height: 3.8 },
      Date:         { Width: 18, Height: 3   },
      OptionGroup:  { Width: 25, Height: 4   },
      MessageBox:   { Width: 80, Height: 30  },
      Message:      { Width: 80, Height: 3   }
    }
  },
  Batch: {
    fetchForm: function(aFormArray, aExampleForm, aBatchCount, aBatchParams) {
      var zCallBackFunction      = aBatchParams.OnBatchFetchComplete;   
      var aThreadCount           = aBatchParams.aThreadCount || 10;
      var zThreadHandler         = new Ajax.ThreadHandler( [], aThreadCount, null, zCallBackFunction, { FormArray: aFormArray, ExampleForm: aExampleForm, Params: aBatchParams.Params } );
      aFormArray.forEach( function(aForm) {
        zThreadHandler.queue( aForm.fetchForm( null, null, { GetRequestObject: true, Asynchronous: true } ) );
      });
      zThreadHandler.start();
      return true;
    },
    fetchData: function(aFormArray, aExampleForm, aBatchCount, aBatchParams) {
      var zFieldArray = [],
          zItemArray  = [];
      for (zField in aExampleForm.FieldList) {
        zFieldArray.push( aExampleForm.FieldList[zField] );
      }
      aBatchParams.FormType = aExampleForm.FormType;
      aFormArray.forEach( function(aForm) {
        zItemArray.push( aForm.ItemPath );
        return true;
      });
      Data.Batch.fetchData( zItemArray, zFieldArray, aExampleForm.ItemPath, aBatchParams );
      return true;
    },
    receive: function() {
      return true;
    }
  },
  Request:{
    GetForm: function(aItemPath,aFormType,aContentElement) {
      return FormUI.Request.getForm(aItemPath,aFormType,aContentElement);
    },
    getBaseTypeForm :function(aItemPath, aFormType, aParentElement, aAdditionalUrlParams, aFormParams){
      aFormParams = aFormParams || {};
      aFormParams.FetchFormAction = "FormUI_GetBaseTypeForm";
      return FormUI.Request.getForm(aItemPath, aFormType, aParentElement, aAdditionalUrlParams, aFormParams);
    },
    getForm:function(aItemPath, aFormType, aParentElement, aAdditionalUrlParams, aFormParams){
      DOM.replaceContent(aParentElement);
      FormUI.FormType = aFormType;
      var zForm = new FormUI.Form(aItemPath, aFormType, aParentElement);
      aFormParams               = aFormParams || {};
      aFormParams.DrawForm      = true;
      aFormParams.Asynchronous  = true;
      zForm.fetchForm(true, aAdditionalUrlParams, aFormParams)
      return zForm;
    }
  },
  Receive:{
    set: function(aResult, aFormParams) {
      if ( typeof(aFormParams.FetchCallBack) == "string" ) {
        aFormParams.Form[aFormParams.FetchCallBack](aResult, aFormParams);
      } else {
        aFormParams.FetchCallBack(aResult, aFormParams);
      }
      return true;
    },
    receiveForm:function(aResult,aFormParams){
      var zForm = aFormParams.Form;
      if(aResult && (!aFormParams.CurrentHashValues.length || LiveAdMaker.matchCurrentHashValues(aFormParams.CurrentHashValues ))){
        DOM.addEventSimple(document.body, 'click', FormUI.Listener);
        zForm.Settings = aResult.FormSettings;
        if (aFormParams.OverWriteElements) {
          zForm.ElementArray = [];
        }
        aResult.FormItemList.forEach(function(aFormItem){
          if (aFormItem.Enabled != "N"){
            aFormItem.SeqNo     = parseFloat(aFormItem.SeqNo) + (zForm.FetchCount * 1000);
            aFormItem.Form      = zForm;
            aFormItem.ElementId = aFormItem.FieldId + '_' + zForm.ItemId;
            zForm.ElementArray.set(aFormItem, aFormItem.SeqNo);
          }
        });
        FormUI.ElementArray = [];
        FormUI.ElementArray = zForm.ElementArray;
        zForm.FetchCount++;
        if (aFormParams.DrawForm) {
          zForm.drawForm();
        }
        if(aFormParams.OnDisplayFunction){
          aFormParams.OnDisplayParams              = aFormParams.OnDisplayParams || {};
          aFormParams.OnDisplayParams.Form         = zForm;
          aFormParams.OnDisplayParams.FetchResult  = aResult;
          aFormParams.OnDisplayFunction(aFormParams.OnDisplayParams);
        }
      }
      FormUI.InputUndoList.ElementList = [];
      FormUI.InputRedoList.ElementList = [];
      zForm.ElementArray.forEach(function(aFormElement) {
        FormUI.InputUndoList[aFormElement.ElementId] = [];
        FormUI.InputRedoList[aFormElement.ElementId] = [];
      });
      return true;
    },
    saved:function(aResult,aParams){
      if (aParams.CompleteParams.QueuedItemCompleteParams) {
        aParams = aParams.CompleteParams.QueuedItemCompleteParams;
        var aElement = aParams.Element;
        if ( aElement.OnChangeFunction ) {
          if ( typeof( aElement.OnChangeFunction ) == "function" ) {
            return aElement.OnChangeFunction( aParams, aResult, aElement.OnChangeExtraParams);
          } else {
            return eval( aElement.OnChangeFunction )( aParams, aResult, aElement.OnChangeExtraParams );
          }
        }
      }
      return true;
    }
  },
  Listener: function(e, aParams) {
    if (FormUI.ElementArray.CurrentItem) {
      FormUI.ElementArray.CurrentItem.SaveFunc(e, FormUI.ElementArray.CurrentItem.Params);
    }
    if (FormUI.AssetUtil.AssetOptionsEnabled == true){
      FormUI.AssetUtil.hideAssetOptions();
    }
    return true;
  },
  cancelBubble: function(e, aParams) {
    if (FormUI.ElementArray.CurrentItem && FormUI.ElementArray.CurrentItem.Params.Element != aParams.Element) {
      return true;
    } else {
      return DOM.cancelBubble(e);
    }
  },
  addFieldClasses: function( aElement, aFormElement ) {
    if ( aFormElement.CanEdit != "N" && aFormElement.Form.ContentElementType != "tr" ) {
      if ( FormUI.FieldBackground == "AlwaysOn" ) {
        DOM.addClass(aElement,'Hover');
      }
      if ( FormUI.FieldBorder == "AlwaysOn" ) {
        DOM.addClass(aElement,'Border');
      }
    }
    return true;
  },
  checkFieldClasses: function( aHTMLElement, aFormUIElement ) {
    if ( aFormUIElement.CanEdit != "N" ) {
      if ( FormUI.FieldBorder == "AlwaysOn" ) {
        DOM.addClass( aHTMLElement, "Border" );
      } else if ( FormUI.FieldBorder == "HoverOn" ) {
        DOM.removeClass( aHTMLElement, "Border" );
      }
      if ( FormUI.FieldBackground == "AlwaysOn" ) {
        DOM.addClass( aHTMLElement, "Hover" );
      } else if ( FormUI.FieldBackground == "HoverOn" ) {
         DOM.removeClass( aHTMLElement, "Hover" );
      }
    }
    return true;
  },
  Hover: {
    mouseOver: function(e, aElement) {
      if (FormUI && FormUI.FieldBackground == "HoverOn"){
        DOM.addClass(aElement, "Hover");
      }
      if (FormUI && FormUI.FieldBorder == "HoverOn"){
        DOM.addClass(aElement, "Border");
      }
      return true;
    },
    mouseOut: function(e, aElement) {
      if (FormUI && FormUI.FieldBackground == "HoverOn") {
        DOM.removeClass(aElement,'Hover');
      }
      if (FormUI && FormUI.FieldBorder == "HoverOn") {
        DOM.removeClass(aElement,'Border');
      }
      return true;
    }
  },
  setSizeAndPosition:function(aLabelElement, aFieldElement, aReferenceObject, aRelativeOnly){
    var zPosition;
    if (aReferenceObject.Position == '') {
      zPosition = 'absolute';
    } else {
      zPosition = 'relative';
      aRelativeOnly = true;
    }
    if (aLabelElement) {
      aLabelElement.style.position = zPosition;
      if (!aRelativeOnly) {
        aLabelElement.style.left   = (aReferenceObject.LabelLeft * FormUI.GridMultiplier)+'px';
        aLabelElement.style.top    = (aReferenceObject.LabelTop * FormUI.GridMultiplier)+'px';
      } else {
        aLabelElement.style.left   = '0px';
        aLabelElement.style.top    = '0px';
        aLabelElement.style.styleFloat  = 'left';
        aLabelElement.style.cssFloat    = 'left';
      }
      var zLabelDimension = FormUI.ElementDimension.get('Label', aReferenceObject, true);
      var zLabelWidth = zLabelDimension.Width;
      var zLabelHeight = zLabelDimension.Height;
      if (aReferenceObject.MaxLabelWidth) {
        aLabelElement.style.width  = aReferenceObject.MaxLabelWidth + 'px';
      } else {
        aLabelElement.style.width  = zLabelWidth + 'px';
      }
      if(zLabelHeight) {
        aLabelElement.style.height = zLabelHeight + 'px';
      }
    }
    if (aFieldElement) {
      aFieldElement.style.position = zPosition;
      if (!aRelativeOnly) {
        aFieldElement.style.left   = (aReferenceObject.FieldLeft * FormUI.GridMultiplier)+'px';
        aFieldElement.style.top    = (aReferenceObject.FieldTop * FormUI.GridMultiplier)+'px';
        var zFieldWidth_Padding = 19
        var zFieldHeight_Padding = 1;
      } else {
        aFieldElement.style.left       = '0px';
        aFieldElement.style.top        = '0px';
        aFieldElement.style.styleFloat = 'left';
        aFieldElement.style.cssFloat   = 'left';
        var zFieldWidth_Padding = 0;
        var zFieldHeight_Padding = 0;
      }
      if ( aReferenceObject.DisplayFormat != "Button" ) {
        var zFieldWidth;
        var zFieldHeight;
        var zElementDimension = FormUI.ElementDimension.get(aReferenceObject.DisplayFormat, aReferenceObject);
        if ( zElementDimension.Height / FormUI.GridMultiplier <= 3 && aReferenceObject.DisplayFormat != "Date" && aReferenceObject.DisplayFormat != "StylizedText") {
          DOM.showEllipsisOnClip( aFieldElement );
        }
        zFieldWidth = zElementDimension.Width;
        zFieldHeight = zElementDimension.Height;
        aFieldElement.style.width  = (zFieldWidth + zFieldWidth_Padding) + 'px';
        if ( !( aReferenceObject.CanEdit == "N" && aReferenceObject.DisplayFormat == "LongText" && ( aReferenceObject.FieldSize == "Standard" || aReferenceObject.Form.FormType == "LightboxDetails" ) ) ) {
          aFieldElement.style.height = (zFieldHeight + zFieldHeight_Padding) + 'px';
        }
      }
    }
    return true;
  },
  History: {
    undo: function() {
      if (!FormUI.InputUndoList.ElementList) {return true};
      if (FormUI.InputUndoList.ElementList.length>0) {
        var zElementId = FormUI.InputUndoList.ElementList.pop();
        var zFieldUndoData = FormUI.InputUndoList[zElementId].pop();
        var zFieldRedoData = { Value: zFieldUndoData.Element.NewValue, Container:  zFieldUndoData.Container, Element: zFieldUndoData.Element };
        FormUI.InputRedoList.ElementList.push(zElementId);
        FormUI.InputRedoList[zElementId].push(zFieldRedoData);
        if (FormUI.History.Save['save'+zFieldUndoData.Element.DisplayFormat]) {
          FormUI.History.Save['save'+zFieldUndoData.Element.DisplayFormat](zFieldUndoData);
        }
        else {
          FormUI.History.Save.saveGeneral(zFieldUndoData);
        }
      }
    },
    redo: function() {
      if (!FormUI.InputRedoList.ElementList) {return true};
      if (FormUI.InputRedoList.ElementList.length>0) {
        var zElementId = FormUI.InputRedoList.ElementList.pop();
        var zFieldRedoData = FormUI.InputRedoList[zElementId].pop();
        var zFieldUndoData = { Value: zFieldRedoData.Element.OldValue, Container:  zFieldRedoData.Container, Element: zFieldRedoData.Element };
        FormUI.InputUndoList.ElementList.push(zElementId);
        FormUI.InputUndoList[zElementId].push(zFieldUndoData);
        if (FormUI.History.Save['save'+zFieldRedoData.Element.DisplayFormat]) {
          FormUI.History.Save['save'+zFieldRedoData.Element.DisplayFormat](zFieldRedoData);
        }
        else {
          FormUI.History.Save.saveGeneral(zFieldRedoData);
        }
      }
    },
    Save: {
      saveGeneral: function(aParams) {
        var zSubmitElement = Util.copyObject(aParams.Element);
        aParams.Element.OriginalDisplay = aParams.Container.innerHTML;
        DOM.replaceContent(aParams.Container, zSubmitElement.OriginalDisplay);
        zSubmitElement.NewValue = aParams.Value;
        FormUI.SubmitElementArray.set(zSubmitElement,zSubmitElement.SeqNo);
        FormUI.Save.submitFormInput(null, aParams);
        return true;
      }
    }
  },
  show: function( aValue, aElementProperty, aForm, aParams ) {
    aForm = aForm || FormUI.FormList.last();
    return aForm.show( aValue, aElementProperty, aParams );
  },
  hide: function( aValue, aElementProperty, aForm, aParams ) {
    aForm = aForm || FormUI.FormList.last();
    return aForm.hide( aValue, aElementProperty, aParams );
  },
  focus: function( aValue, aElementProperty, aForm, aParams ) {
    return true;
  },
  createElement: function(aElement, aContainer, aFormType, aIncludeDisplay, aFieldContainer) {
    var zForm = aElement.Form || FormUI.FormList.last();
    aContainer = aContainer || zForm.ParentElement;
    if (!zForm || ( aContainer != zForm.ParentElement && aFormType != zForm.FormType )) {
      zForm = new FormUI.Form('', aFormType, aContainer);
    }
    aElement.Form = aElement.Form || zForm;
    zForm.ElementArray.push(aElement);
    if (!FormUI.InputUndoList.ElementList)
      FormUI.InputUndoList.ElementList = [];
    if (!FormUI.InputRedoList.ElementList)
      FormUI.InputRedoList.ElementList = [];
    FormUI.InputUndoList[aElement.ElementId] = [];
    FormUI.InputRedoList[aElement.ElementId] = [];
    if (zForm.Id) {
      if ( !$( 'form-' + zForm.Id ) ) {
        zForm.ContentElement = DOM.createElement('div', 'form-' + zForm.Id, 'FormUI-Content');
        aContainer.appendChild(zForm.ContentElement);
      }
    }
    if (aIncludeDisplay) {
      return FormUI.Draw.element(zForm, aElement,aFieldContainer);
    } else if (FormUI.Draw.EditFunctions['create'+aElement.DisplayFormat]) {
      aDisplayElement = FormUI.Draw.element(zForm, aElement, aFieldContainer);
      var zOriginalContent = aDisplayElement.innerHTML;
      DOM.replaceContent(aDisplayElement);
      Event.remove(aDisplayElement,"onclick",FormUI.Draw.timeoutEditElement);
      Event.remove(aDisplayElement, "onmouseover", FormUI.Hover.mouseOver, aDisplayElement);
      Event.remove(aDisplayElement, "onmouseout", FormUI.Hover.mouseOut, aDisplayElement);
      return FormUI.Draw.EditFunctions['create'+aElement.DisplayFormat]({OriginalContent: zOriginalContent, Container: aDisplayElement, Element:aElement});
    }
    return false;
  },
  Element: function(aDisplayFormat, aFieldId, aElementPosition, aLabelPosition, aElementProperties, aPushIntoElementArray) {
    this.Form                 = null;
    this.SeqNo                = 0;                          
    this.ElementId            = aFieldId + Math.RandomNumber(1, 999999);  
    this.FieldId              = aFieldId;                   
    this.DisplayFormat        = aDisplayFormat;             
    this.FieldType            = 'Default';                  
    this.Position             = '';
    this.MaxLength            = '';
    this.Value                = '';                         
    this.ValueArray           = null;                       
    this.DisplayValue         = '';                         
    this.DisplayValueArray    = null;                       
    this.DefaultValue         = '';                         
    this.CancelSave           = false;                      
    this.CanEdit              = '';                         
    this.GroupId              = 'Main';                     
    this.FieldLeft            = aElementPosition.Left;      
    this.FieldTop             = aElementPosition.Top;       
    this.FieldHeight          = aElementPosition.Height;    
    this.FieldWidth           = aElementPosition.Width;     
    this.Label                = '';                         
    this.LabelId              = '';                         
    this.LabelTextAlign       = '';                         
    if (!aLabelPosition) {
     aLabelPosition = {Left: '', Top: '', Height: '', Width: ''};
    }
    this.LabelLeft            = aLabelPosition.Left;        
    this.LabelTop             = aLabelPosition.Top;         
    this.LabelHeight          = aLabelPosition.Height;      
    this.LabelWidth           = aLabelPosition.Width;       
    this.MaxLabelWidth        = '';
    this.DisplayAllChoices    = '';                         
    this.Enabled              = 'Y';                        
    this.IndexType            = '';                         
    this.IndexCategory        = '';                         
    this.JSValidation         = '';                         
    this.LSMLValidation       = '';                         
    this.OnChangeFunction     = '';                         
    this.OnRemoveFunction     = '';                         
    this.OnBlurFunction       = '';                         
    this.OnClickFunction      = '';                         
    this.OnCancelSaveFunction = '';                         
    this.OnRemoveFunction     = '';                         
    this.OnBlurFunction       = '';                         
    this.OnClickFunction      = '';                         
    this.Options              = '';                         
    this.OptionsArray         = [];                         
    this.ReadPropertyPath     = '';                         
    this.WritePropertyPath    = '';                         
    this.SelectPathLinkAlias  = '';                         
    this.DoNotUseSeparator    = '';                         
    this.CSVColumnId          = '';                         
    this.CSVRowId             = '';                         
    this.CSVValue             = '';                         
    this.CSVEncoding          = '';                         
    this.CSVDisplayTitleList  = '';                         
    this.ParentElement        = false;                      
    this.ChildElements        = [];                         
    this.DynElement           = true;
    Util.copyProperties(this, aElementProperties, true);
    this.DisplayValue = (this.DisplayValue == '') ? this.Value : this.DisplayValue;
    this.setPath = function(aWritePropertyPath, aReadPropertyPath) {
      this.WritePropertyPath = aWritePropertyPath;
      if (aReadPropertyPath) {
        this.ReadPropertyPath = aReadPropertyPath;
      } else {
        this.ReadPropertyPath = aWritePropertyPath;
      }
      return true;
    }
    if (aPushIntoElementArray == true ) {
      FormUI.ElementArray.push(this);
    }
    this.focusElement = function() {
      FormUI.Draw.timeoutEditElement(null, {Container:this.ElementId,Element: this});
      return true;
    }
    return this;
  },
  Validation: {
    maxLength: function(e, aCharCntElement) {
      if (aCharCntElement) {
       	var zMaxLength = this.getAttribute('maxlength');
       	var zCurrentLength = this.value.length;
       	var zContainerElement = aCharCntElement.parentNode;
        if (!zContainerElement.oldColor) {
          zContainerElement.oldColor = zContainerElement.style.color || "#000";
        }
       	if (zCurrentLength > zMaxLength) {
       	  zCurrentLength = zMaxLength;
          this.value = this.value.substr(0,zMaxLength);
          var zHex = 'fedcba9876543210123456789abcdef';
          zContainerElement.style.color = '#f00';
          Tween.run({
            Element: zContainerElement,
            Function: function(aParams) {
              var zX = zHex.substr(aParams.CurrentValue, 1);
              aParams.Element.style.backgroundColor = '#f' + zX + zX;
            },
            OnCompleteFunction: function(aParams) {
              aParams.Element.style.backgroundColor = '#fff';
            },
            StartValue: 0, EndValue: 30, Duration: 500
          });
        }
        else {
         	if (zContainerElement.style.color!=zContainerElement.oldColor) {
         	  zContainerElement.style.color = zContainerElement.oldColor;
         	}
        }
       	aCharCntElement.innerHTML = ""+zCurrentLength
      }
      return true;
    },
    maxLines: function(e, aElement){
      var textAreaElement = $('inp_' + aElement.ElementId);
      var textAreaArray = textAreaElement.value.split('\n');
      var currentLineCount = textAreaArray.length;
      var maxLines = textAreaElement.getAttribute('maxrows');
      if (currentLineCount > maxLines) {
        var newTextArray =  textAreaArray.splice(0, maxLines);
        textAreaElement.value = newTextArray.join('\n');
      }
      return true;
    }
  },
  Save:{
    field: function( aNewValue, aElementValue, aElementProperty, aForm, aParams ) {
      aForm = aForm || FormUI.FormList.last();
      return aForm.save( aNewValue, aElementValue, aElementProperty, aParams );
    },
    timeoutFormInput: function (e,aParams) {
      if ( aParams.Input && aParams.Input.parentNode && aParams.Input.parentNode.style.overflow == "visible" ) {
        aParams.Input.parentNode.style.overflow = "";
      }
      FormUI.cancelBubble(e, aParams);
      return setTimeout(function(){if(!FormUI.CancelSave){FormUI.Save.formInput(e,aParams);}FormUI.CancelSave = false;},0);
    },
    formInput:function(e,aParams) {
      if($(aParams.Container)) {
        var zContainer = $(aParams.Container)
        DOM.addClass(zContainer, 'FormUI-Editable');
        zContainer.style.zIndex = 100;
      }
      if (aParams.Element.OnBlurFunction) {
        var zBlurResult;
        if ( typeof( aParams.Element.OnBlurFunction ) == "function" ) {
          zBlurResult = aParams.Element.OnBlurFunction(aParams, aParams.Element.OnBlurExtraParams);
        } else {
          zBlurResult = eval(aParams.Element.OnBlurFunction)(aParams, aParams.Element.OnBlurExtraParams);
        }
        if (!zBlurResult) {
          if($('inp_'+aParams.Element.ElementId)) {
            $('inp_'+aParams.Element.ElementId).focus();
          }
          return false;
        }
      }
      if ( FormUI.ElementArray.CurrentItem ) FormUI.ElementArray.CurrentItem = null;
      if(FormUI.Save.Input['save'+aParams.Element.DisplayFormat]) {
        return FormUI.Save.Input['save'+aParams.Element.DisplayFormat](e,aParams);
      }
      else {
        return FormUI.Save.Input.saveGeneral(e,aParams);
      }
      FormUI.removeUndoRedoEvent();
      return true;
    },
    autoSave: function(e,aParams) {
      if(FormUI.Save.AutoSaveFunctions['autoSave'+aParams.DisplayFormat]) {
        FormUI.Save.AutoSaveFunctions['autoSave'+aParams.DisplayFormat](e,aParams);
      }
      else {
        FormUI.Save.AutoSaveFunctions.autoSaveGeneral(e,aParams);
      }
    },
    AutoSaveFunctions: {
      autoSaveGeneral: function(e,aParams) {
        var zFieldContainer = $(aParams.ElementId);
        var zElement=null;
        var zOriginalValue;
        FormUI.ElementArray.forEach(function (aElement) {
          if(aElement.ElementId==aParams.ElementId) {
            zElement = aElement;
          }
        });
        if(zElement&&zFieldContainer) {
          zOriginalValue = zElement.Value;
          zNewValue = zFieldContainer.innerHTML;
          if(zOriginalValue!=zNewValue) {
            FormUI.SubmitElementArray = new Array();
            FormUI.InputUndoList[zElement.ElementId].push(zOriginalValue);
            FormUI.InputRedoList[zElement.ElementId] = [];
            zElement.Value = zNewValue;
            var zSubmitElement = Util.copyObject(zElement);
            zSubmitElement.NewValue = zNewValue;
            zSubmitElement.OldValue = zOriginalValue;
            FormUI.SubmitElementArray.set(zSubmitElement,zSubmitElement.SeqNo);
            FormUI.Save.submitFormInput(null, aParams);
          }
        }
      },
      autoSaveDimension: function (e,aParams) {
        var zFieldContainer = $( aParams.FieldId ),
            zElementArray   = FormUI.ElementArray.get( aParams.FieldId, "FieldId" ),
            zElement        = zElementArray[0];
        if( zElement && zFieldContainer) {
          aParams.Element   = zElement;
          var zOriginalValue;
          if(zElement.Unit) {
            var zSplitValue = zFieldContainer.innerHTML.split(zElement.Unit);
            zNewValue = zSplitValue[0];
          }
          else {
            zNewValue = zFieldContainer.value;
          }
          zOriginalValue = zElement.Value;
          if(zOriginalValue!=zNewValue) {
            FormUI.SubmitElementArray = new Array();
            FormUI.InputUndoList[zElement.ElementId].push(zOriginalValue);
            FormUI.InputRedoList[zElement.ElementId] = [];
            zElement.Value = zNewValue;
            var zSubmitElement = Util.copyObject(zElement);
            zSubmitElement.NewValue = zNewValue;
            zSubmitElement.OldValue = zOriginalValue;
            FormUI.SubmitElementArray.set(zSubmitElement,zSubmitElement.SeqNo);
            FormUI.Save.submitFormInput(null, aParams);
          }
        }
        return true;
      }
    },
    Input: {
      getDisplayValue: function(aParams) {
        switch (aParams.Input.type) {
          case "select-one":
            var selIndexText = aParams.Input.options[aParams.Input.selectedIndex].text;
            aParams.Element.DisplayValue = selIndexText;
            zDisplayValue = selIndexText;
            break;
          case "checkbox":
          case "radio":
            if (!aParams.Input.checked) {
              zDisplayValue = '';
            }
            else {
              zDisplayValue = $(aParams.Input.getAttribute("id")+'Label').innerHTML;
            }
            break;
          case "lightbox":
            zDisplayValue = aParams.Input.DisplayValue;
            break;
          default:
            zDisplayValue = aParams.Input.value;
        }
        if (aParams.Element.FieldType == 'CreditCardNumber') {
          if (zDisplayValue) {
            zNumberLength = zDisplayValue.length;
            zStartFromPos = (zNumberLength - 5);
            zLast5Numbers = zDisplayValue.substr(zStartFromPos,5);
            zDisplayValue = '**** - ' + zLast5Numbers;
          }
        }
        return zDisplayValue;
      },
      saveGeneral:function(e,aParams){
        FormUI.SubmitElementArray = new Array();
        var zContainer = $(aParams.Container);
        var aElement = aParams.Element;
        var zLabel = $('label-'+aElement.ElementId);
        var zNewValueInput = aParams.Input;
        var zNewValue = zNewValueInput.value;
        var zFormUI = (aElement.Form) ? aElement.Form : FormUI;
        DOM.removeEvent(zNewValueInput, "onblur", FormUI.Save.timeoutFormInput);
        if(aElement.DisplayFormat=="Date"){
          DOM.WidgitDialog.hide();
        }
        var zDisplayValue;
        zDisplayValue = FormUI.Save.Input.getDisplayValue(aParams);
        FormUI.checkFieldClasses( zContainer, aElement );
        if (aParams.Original!=zNewValue){
          var zSubmitElement = Util.copyObject(aElement);
          aElement.Value = zNewValue;
          zSubmitElement.NewValue = zNewValue;
          zSubmitElement.OldValue = aParams.Original;
          if (aParams.OriginalDisplay) {
            zSubmitElement.OriginalDisplay = aParams.OriginalDisplay;
          }
          else {
            zSubmitElement.OriginalDisplay = aParams.Original;
          }
          FormUI.SubmitElementArray.set(zSubmitElement,zSubmitElement.SeqNo);
          FormUI.Save.submitFormInput(null, aParams);
          FormUI.InputUndoList.ElementList.push(aElement.ElementId);
          FormUI.InputUndoList[aElement.ElementId].push( {Value: aParams.Original, Container: zContainer, Element: zSubmitElement});
          FormUI.InputRedoList[aElement.ElementId] = [];
          if ( aElement.CanEdit != "N" ) {
            DOM.addEvent(zContainer,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
            if (zLabel) {
              DOM.addEvent(zLabel,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
            }
          }
        } else{
          if ( aElement.CanEdit != "N" ) {
            DOM.addEvent(zContainer,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
          }
        }
        if (zDisplayValue == '' && aElement.DefaultValue != '' && zContainer) {
          DOM.addClass(zContainer,'FormUI-DefaultValue');
          zDisplayValue = aElement.DefaultValue;
        } else {
          DOM.removeClass(zContainer,'FormUI-DefaultValue');
        }
        if (aElement.DisplayValueArray) {
          if (zDisplayValue == '') {
            zOptionId = aParams.Input.getAttribute('optionarrayid');
            zOptionDisplayName = aElement.OptionsArray[zOptionId].DisplayName;
            zOptionValue = aElement.OptionsArray[zOptionId].ItemPath;
            aElement.DisplayValueArray.remove(zOptionDisplayName);
            aElement.ValueArray.remove(zOptionValue);
          }
          else {
            aElement.DisplayValueArray.push(zDisplayValue);
            aElement.ValueArray.push(zNewValue);
          }
          aElement.DisplayValueArray.alphaSort();
          zDisplayValue = aElement.DisplayValueArray.join(", ");
        }
        if ( zContainer ) {
          if (aElement.DisplayFormat != "StylizedText") {
            zDisplayValue = FormUI.escapeCarriages(zDisplayValue,"<br />");
          }
          aElement.DisplayValue = zDisplayValue;
          zContainer.innerHTML  = zDisplayValue;
          if ( aElement.FieldHeight <= 3 && aElement.DisplayFormat != "Date" && aElement.DisplayFormat != "StylizedText") {
            zContainer.setAttribute( "ShowEllipsis", "" );
            DOM.showEllipsisOnClip( zContainer );
          }
          if ( aElement.CanEdit != "N" ) {
            DOM.addEvent(zContainer, "onmouseover", FormUI.Hover.mouseOver, zContainer);
            DOM.addEvent(zContainer, "onmouseout", FormUI.Hover.mouseOut, zContainer);
            if (zLabel) {
              DOM.addEvent(zLabel, "onmouseover", FormUI.Hover.mouseOver, zContainer);
              DOM.addEvent(zLabel, "onmouseout", FormUI.Hover.mouseOut, zContainer);
            }
          }
        }
        if (aParams.Element.Field == "DisplayName" && zSubmitElement && zSubmitElement.OldValue) {
          if (LiveAdMaker.SelectedSubSection) {
            LiveAdMaker.SelectedSubSection.List.updateDisplayName(aParams.Element.Value, zSubmitElement.OldValue);
          } else if (LiveAdMaker.SelectedSection) {
            LiveAdMaker.SelectedSection.List.updateDisplayName(aParams.Element.Value, zSubmitElement.OldValue);
          }
        }
        return true;
      },
      saveSelection: function(e,aParams) {
     if ( typeof(aParams.Original) == "undefined" ) {
    aParams.Original = aParams.Element.DefaultValue;
     }
        FormUI.Save.Input.saveGeneral(e,aParams);
        if ( aParams.Element.StylizedSelect == "Y" ) {
          DOM.removeClass( aParams.Element.RelativeContainer, "FormUI-FieldEdit-StylizedSelection-Container" );
        }
        return true;
      },
      saveCurrency: function (e,aParams) {
        zNewValueInput = aParams.Input;
        zNewValueInput.value = FormUI.Number.formatNumberSimple(zNewValueInput.value,'2');
        if (zNewValueInput.value == 'NaN') {
          zNewValueInput.value = "Please enter a number";
        }
        else {
          FormUI.Save.Input.saveGeneral(e,aParams);
          var aElement = aParams.Element;
          var zContainer = $(aParams.Container);
          aElement.Value = FormUI.Number.formatCurrency(aElement.Value,'Y');
          DOM.replaceContent(zContainer, aElement.Value);
        }
        FormUI.checkFieldClasses( zContainer, aElement );
        return true;
      },
      saveSecondsInput: function (e,aParams) {
        zNewValueInput = aParams.Input;
        zNewValueInput.value = FormUI.Number.formatNumberSimple(zNewValueInput.value,'3');
        if (zNewValueInput.value == 'NaN') {
          zNewValueInput.value = "Please enter a number";
        }
        else {
          zNewValueInput.value = FormUI.Number.convertUp(zNewValueInput.value,'1000');
          aParams.Original = FormUI.Number.convertUp(aParams.Original,'1000');
          FormUI.Save.Input.saveGeneral(e,aParams);
          var aElement = aParams.Element;
          var zContainer = $(aParams.Container);
          aElement.Value = FormUI.Number.convertDown(aElement.Value,'1000');
          DOM.replaceContent(zContainer, FormUI.Number.formatSecondsInput(aElement.Value,'N','Y'));
          aElement.Value = aElement.Value.toString();
        }
        FormUI.checkFieldClasses( zContainer, aElement );
        return true;
      },
      saveCheckbox: function (e, aParams) {
        var zContainer = aParams.Container;
        var zContainer = $(aParams.Container);
        var aElement = aParams.Element;
        if (aElement.EditStateOnly == false) {
          FormUI.Save.Input.saveGeneral("",aParams);
        } else {
          FormUI.SubmitElementArray = new Array;
          if (!aParams.Input.checked) {
            var zNewValue = (aElement.CheckboxFalseValue) ? aElement.CheckboxFalseValue : "N";
          } else {
            var zNewValue = (aElement.CheckboxTrueValue) ? aElement.CheckboxTrueValue : "Y";
          }
          if (aParams.Original != zNewValue) {
            var zSubmitElement = Util.copyObject(aElement);
            aElement.Value = zNewValue;
            zSubmitElement.NewValue = zNewValue;
            zSubmitElement.OldValue = aParams.Original;
            FormUI.SubmitElementArray.set(zSubmitElement, zSubmitElement.SeqNo);
            FormUI.Save.submitFormInput(null, aParams);
          }
        }
        return true;
      },
      saveCheckboxV2: function (e, aParams) {
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        if (aElement.EditStateOnly == false) {
          FormUI.Save.Input.saveGeneral("",aParams);
        } else {
          FormUI.SubmitElementArray = new Array;
          if (!aParams.Input.checked) {
            var zNewValue = (aElement.CheckboxFalseValue) ? aElement.CheckboxFalseValue : "N";
          } else {
            var zNewValue = (aElement.CheckboxTrueValue) ? aElement.CheckboxTrueValue : "Y";
          }
          if (aParams.Original != zNewValue) {
            var zSubmitElement = Util.copyObject(aElement);
            aElement.Value = zNewValue;
            zSubmitElement.NewValue = zNewValue;
            zSubmitElement.OldValue = aParams.Original;
            FormUI.SubmitElementArray.set(zSubmitElement, zSubmitElement.SeqNo);
            FormUI.Save.submitFormInput(null, aParams);
          }
        }
        FormUI.checkFieldClasses( zContainer, aElement );
      },
      saveMultiSelectCheckbox: function(e,aParams) {
        FormUI.SubmitElementArray = new Array();
        var aElement = aParams.Element;
        if(aElement.SupportElement != "Yes" || !isTrue(aElement.MultiSelectSelectPopup)) {
          aElement.DisplayValueArray.alphaSort();
        }
        var zDisplayValue = aElement.DisplayValueArray.join(", ");
        var zContainer = $(aParams.Container);
        var zLabel = $('label-'+aElement.ElementId);
        if (zContainer) {
          DOM.replaceContent(zContainer, zDisplayValue);
          DOM.addEvent(zContainer, "onmouseover", FormUI.Hover.mouseOver, zContainer);
          DOM.addEvent(zContainer, "onmouseout", FormUI.Hover.mouseOut, zContainer);
          DOM.addEvent(zContainer,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
          if (zLabel) {
            DOM.addEvent(zLabel, "onmouseover", FormUI.Hover.mouseOver, zContainer);
            DOM.addEvent(zLabel, "onmouseout", FormUI.Hover.mouseOut, zContainer);
            DOM.addEvent(zLabel,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
          }
        }
        if (aParams.Original.toString() != aElement.ValueArray.toString()) {
          var zSubmitElement = Util.copyObject(aElement);
          zSubmitElement.NewValue = aElement.ValueArray.toString();
          zSubmitElement.OldValue = aParams.Original.toString();
          FormUI.SubmitElementArray.set(zSubmitElement,zSubmitElement.SeqNo);
          FormUI.Save.submitFormInput(null, aParams);
        }
        FormUI.checkFieldClasses( zContainer, aElement );
        return true;
      },
      saveHierarchyMultiSelectCheckbox: function(e,aParams) {
        FormUI.Save.Input.saveMultiSelectCheckbox(e,aParams);
      },
      saveSingleSelectRadio: function (e,aParams) {
        FormUI.SubmitElementArray = new Array();
        var zContainer = $(aParams.Container);
        var aElement = aParams.Element;
        var zLabel = $('label-'+aElement.ElementId);
        var zNewValue = aElement.Value;
        var zDisplayValue = aElement.DisplayValue;
        if(!zDisplayValue) {
          zDisplayValue = zNewValue;
        }
        if (aParams.Original!=zNewValue){
          var zSubmitElement = Util.copyObject(aElement);
          zSubmitElement.NewValue = zNewValue;
          zSubmitElement.OldValue = aParams.Original;
          if (aParams.OriginalDisplay) {
            zSubmitElement.OriginalDisplay = aParams.OriginalDisplay;
          }
          else {
            zSubmitElement.OriginalDisplay = aParams.Original;
          }
          FormUI.SubmitElementArray.set(zSubmitElement,zSubmitElement.SeqNo);
          FormUI.Save.submitFormInput(null, aParams);
          FormUI.InputUndoList.ElementList.push(aElement.ElementId);
          FormUI.InputUndoList[aElement.ElementId].push( {Value: aParams.Original, Container: zContainer, Element: zSubmitElement});
          FormUI.InputRedoList[aElement.ElementId] = [];
          if(zContainer) {
            DOM.addEvent(zContainer,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
          }
          if (zLabel) {
            DOM.addEvent(zLabel,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
          }
        } else {
          if(zContainer) {
            DOM.addEvent(zContainer,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
          }
        }
        if (zContainer) {
          DOM.replaceContent(zContainer, zDisplayValue);
          DOM.addEvent(zContainer, "onmouseover", FormUI.Hover.mouseOver, zContainer);
          DOM.addEvent(zContainer, "onmouseout", FormUI.Hover.mouseOut, zContainer);
          if (zLabel) {
            DOM.addEvent(zLabel, "onmouseover", FormUI.Hover.mouseOver, zContainer);
            DOM.addEvent(zLabel, "onmouseout", FormUI.Hover.mouseOut, zContainer);
          }
        }
        FormUI.checkFieldClasses( zContainer, aElement );
        return true;
      },
      savePassword: function (e,aParams) {
        FormUI.SubmitElementArray = new Array();
        var zContainer = $(aParams.Container);
        var aElement = aParams.Element;
        var zLabel = $('label-'+aElement.ElementId);
        var zNewValueInput = aParams.Input;
        var zNewValue = zNewValueInput.value;
        Event.remove(zNewValueInput,"onblur",FormUI.Save.timeoutFormInput);
        DOM.addEvent(zContainer,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
        DOM.addEvent(zLabel,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
        DOM.addEvent(zContainer, "onmouseover", FormUI.Hover.mouseOver, zContainer);
        DOM.addEvent(zContainer, "onmouseout", FormUI.Hover.mouseOut, zContainer);
        DOM.addEvent(zLabel, "onmouseover", FormUI.Hover.mouseOver, zContainer);
        DOM.addEvent(zLabel, "onmouseout", FormUI.Hover.mouseOut, zContainer);
        if (aParams.Original!=zNewValue){
          FormUI.InputUndoList[aElement.ElementId].push(aParams.Original);
          FormUI.InputRedoList[aElement.ElementId] = [];
          aElement.Value=zNewValue;
          var zSubmitElement = Util.copyObject(aElement);
          zSubmitElement.NewValue = zNewValue;
          zSubmitElement.OldValue = aParams.Original;
          FormUI.SubmitElementArray.set(zSubmitElement,zSubmitElement.SeqNo);
          FormUI.Save.submitFormInput(null, aParams);
        }
        DOM.replaceContent(zContainer, '**********');
        FormUI.checkFieldClasses( zContainer, aElement );
        return true;
      },
      saveDimension: function (e,aParams) {
        FormUI.SubmitElementArray = new Array();
        var zContainer = $(aParams.Container);
        var aElement = aParams.Element;
        var zLabel = $('label-'+aElement.ElementId);
        var zNewValueInput = aParams.Input;
        var zNewValue = zNewValueInput.value;
        DOM.removeEvent(zNewValueInput,"onblur",FormUI.Save.timeoutFormInput);
        DOM.addEvent(zContainer,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
        DOM.addEvent(zLabel,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
        DOM.addEvent(zContainer, "onmouseover", FormUI.Hover.mouseOver, zContainer);
        DOM.addEvent(zContainer, "onmouseout", FormUI.Hover.mouseOut, zContainer);
        DOM.addEvent(zLabel, "onmouseover", FormUI.Hover.mouseOver, zContainer);
        DOM.addEvent(zLabel, "onmouseout", FormUI.Hover.mouseOut, zContainer);
        if (aParams.Original!=zNewValue){
          FormUI.InputUndoList[aElement.ElementId].push(aParams.Original);
          FormUI.InputRedoList[aElement.ElementId] = [];
          aElement.Value=zNewValue;
          var zSubmitElement = Util.copyObject(aElement);
          zSubmitElement.NewValue = zNewValue;
          zSubmitElement.OldValue = aParams.Original;
          FormUI.SubmitElementArray.set(zSubmitElement,zSubmitElement.SeqNo);
          FormUI.Save.submitFormInput(null, aParams);
          DOM.replaceContent(zContainer.innerHTML, zNewValue+((aElement.Unit) ? aElement.Unit : ''));
        }
        else {
          DOM.replaceContent(zContainer, aParams.Original+((aElement.Unit) ? aElement.Unit : ''));
        }
        FormUI.checkFieldClasses( zContainer, aElement );
        return true;
      },
      saveOptionGroup: function(e, aParams) {
        var zSaveParams = Util.copyObject(aParams);
        if (aParams.Element.SaveType=="CSV") {
          zSaveParams.Element.FieldType = "CSVVALUE";
        }
        else {
          zSaveParams.Element.FieldType = aParams.Element.SaveType
        }
        if (zSaveParams.Element.SelectType=="checkbox" || zSaveParams.Element.SelectType=="searchinput") {
          FormUI.Save.Input.saveMultiSelectCheckbox(e, zSaveParams);
          return true
        }
        else if (zSaveParams.Element.SelectType=="radio") {
          FormUI.Save.Input.saveSingleSelectRadio(e, zSaveParams);
          return true
        }
        else if (zSaveParams.Element.SelectType=="hierarchycheckbox") {
          FormUI.Save.Input.saveMultiSelectCheckbox(e, zSaveParams);
          return true
        }
      },
      resetLink: function(aDisplayValue, aParams) {
        var zElement = aParams.Element;
        var zContainer = $(aParams.Container);
        var zLabel = $('label-'+zElement.ElementId);
        var zDisplayValue = aDisplayValue || zElement.DisplayValue;
        DOM.addClass($(zElement.ElementId),'FormUI-Editable');
        FormUI.addFieldClasses($(zElement.ElementId),zElement);
        DOM.addEvent(zContainer,"onclick",FormUI.Draw.timeoutEditElement,{Container:zElement.ElementId,Element:zElement});
        DOM.addEvent(zLabel,"onclick",FormUI.Draw.timeoutEditElement,{Container:zElement.ElementId,Element:zElement});
        DOM.addEvent(zContainer,"onmouseover",FormUI.Hover.mouseOver,zContainer);
        DOM.addEvent(zContainer,"onmouseout",FormUI.Hover.mouseOut,zContainer);
        DOM.addEvent(zLabel,"onmouseover",FormUI.Hover.mouseOver,zContainer);
        DOM.addEvent(zLabel,"onmouseout",FormUI.Hover.mouseOut,zContainer);
        FormUI.Draw.drawLinkInputDisplay(zElement);
        return true
      },
      saveLink: function(e, aParams) {
        setTimeout(function(){FormUI.Save.Input.setTimeoutSaveLink(aParams)},200);
        return true
      },
      setTimeoutSaveLink: function(aParams) {
        var zSaveButtonElement = aParams.Element;
        var zPopupForm = zSaveButtonElement.Form;
        var zLinkInputParams = zPopupForm.LinkParams;
        var zLinkInputElement = zLinkInputParams.Element;
        var zLinkType = zPopupForm.getElement("LinkType","FieldId").Value;
        var zDisplayType = zPopupForm.getElement("DisplayType","FieldId").Value;
        var zLinkText = zPopupForm.getElement("LinkText","FieldId").Value;
        var zLinkURL = zPopupForm.getElement("LinkURL","FieldId").Value;
        var zLinkTarget = zPopupForm.getElement("LinkTarget","FieldId").Value;
        var zNewValue = zLinkType+"^"+zDisplayType+"^"+zLinkText+"^"+zLinkURL+"^"+zLinkTarget;
        var zNewDisplayValue = zLinkText;
        if (zLinkInputParams.Original!=zNewValue){
          zLinkInputElement.Value = zNewValue;
          zLinkInputElement.DisplayValue = zNewDisplayValue;
          var zSubmitElement = Util.copyObject(zLinkInputElement);
          zSubmitElement.NewValue = zNewValue;
          zSubmitElement.OldValue = zLinkInputParams.Original;
          FormUI.SubmitElementArray = new Array();
          FormUI.SubmitElementArray.set(zSubmitElement,zSubmitElement.SeqNo);
          FormUI.Save.submitFormInput(null, zLinkInputParams);
        }
        FormUI.Save.Input.resetLink(zNewDisplayValue, zLinkInputParams)
        DOM.Dialog.hide();
        return true;
      },
      cancelSaveLink: function(e, aParams) {
        FormUI.Save.Input.resetLink("", aParams);
        return true
      },
      saveLongText: function(e,aParams) {
        var zContainer = $(aParams.Container);
        var aElement = aParams.Element;
        if(aElement.ShowCharacterCount == "Y" && aElement.Position == "FlowsUnder") {
          var zFieldHeight = parseFloat(aElement.FieldHeight) || 3;
          var zFieldWidth  = parseFloat(aElement.FieldWidth)  || 80;
          zContainer.style.height = (zFieldHeight * FormUI.GridMultiplier) + "px";
          zContainer.style.width  = (zFieldWidth * FormUI.GridMultiplier) + "px";
        }
        FormUI.Save.Input.saveGeneral(e, aParams);
        return true;
      }
    },
    submitFormInput:function(e, aParams){
      var aElementCancelSave = (aParams.Element) ? aParams.Element.CancelSave : false ;
      var aElement = aParams.Element;
      var zFormUI = (aElement.Form) ? aElement.Form : FormUI;
      if (!FormUI.CancelSave && !aElementCancelSave) {
        if (aParams.Element) {
          var zElementSaveFormItemPath = aParams.Element.SaveFormItemPath;
          var zElementSaveFormType = aParams.Element.SaveFormType;
        }
        var zSaveFormItemPath = zElementSaveFormItemPath || zFormUI.ItemPath;
        var zSaveFormType = zElementSaveFormType || zFormUI.FormType;
        var zUserLanguage = (URI.User) ? URI.User.Language : '';
        var zAjaxRequest = {
          URL:zSaveFormItemPath.toPagePath() + ".SaveForm",
          Method:"POST",
          Function:FormUI.Receive.saved,
          CompleteParams: aParams,
          PostValues:{
            aFormElementsCsv: CsvInput.getString({Data: FormUI.SubmitElementArray}),
            aLanguage: zUserLanguage,
            aFormType: zSaveFormType
          }
        }
				if ( !aParams.DoNotMakeRequest ) {
          FormUI.ThreadHandler.queue( zAjaxRequest );							
				}
        return zAjaxRequest;
      } else if (aElement.OnCancelSaveFunction) {
        eval(aParams.Element.OnCancelSaveFunction)(aParams, aElement.OnCancelSaveExtraParams);
      }
      FormUI.CancelSave = false;
      return true;
    },
    undo: function(e,aUndoParams) {
      FormUI.CancelSave = true;
      if(FormUI.InputUndoList[aUndoParams.FormItem.ElementId].length>0) {
        var zValue = FormUI.InputUndoList[aUndoParams.FormItem.ElementId].pop();
        FormUI.InputRedoList[aUndoParams.FormItem.ElementId].push($(aUndoParams.InputElement.id).value);
        $(aUndoParams.InputElement.id).value = zValue;
      }
      $(aUndoParams.InputElement.id).focus();
    },
    redo: function(e,aRedoParams) {
      FormUI.CancelSave = true;
      if(FormUI.InputRedoList[aRedoParams.FormItem.ElementId].length>0) {
        var zValue = FormUI.InputRedoList[aRedoParams.FormItem.ElementId].pop();
        FormUI.InputUndoList[aRedoParams.FormItem.ElementId].push($(aRedoParams.InputElement.id).value);
        $(aRedoParams.InputElement.id).value = zValue;
      }
      $(aRedoParams.InputElement.id).focus();
    }
  },
  DisplayFunctions:{
    standard:function(aForm){
      DOM.replaceContent(FormUI.ContentElement);
      if (FormUI.Settings.AutoLabelResize == "Y")
        FormUI.Draw.resizeElementLabels(aForm);
      aForm.FormItemList.forEach(function(aFormElement){
        if (aFormElement.Enabled != 'N') FormUI.Draw.element(aFormElement);
      });
    },
    customForm:function(aParams){
      return true;
    },
    customHTML:function(aForm){
      FormUI.Draw.customHTML(aForm.DisplayHTML);
      return true;
    },
    listForm:function(){
      return true;
    }
  },
  Draw:{
    runInputFocus:function(e,aParams,aInputElement) {
      var aElementParams = {
        Container: aParams.Container,
        Element: aParams.Element,
        Input: aInputElement
      }
      if (aParams.Element.OnInputFocusFunction) {
        if ( typeof( aParams.Element.OnInputFocusFunction ) == "function" ) {
          aParams.Element.OnInputFocusFunction(aElementParams,aParams.Element.OnInputFocusExtraParams);
        } else {
          eval(aParams.Element.OnInputFocusFunction)(aElementParams,aParams.Element.OnInputFocusExtraParams);
        }
      }
    },
    resizeElementLabels: function (aForm) {
      var zGetLabelElementWidthContainer = $('dvGetLabelElementWidthContainer');
      var zContentContainer              = DOM.getElementsWithClassName("div","ActionUI_Content")[0];
      var zElementLabel, zElementLabelContainer;
      if (zContentContainer) {
        if (!zGetLabelElementWidthContainer) {
          zGetLabelElementWidthContainer               = DOM.createElement("div","dvGetLabelElementWidthContainer");
          zGetLabelElementWidthContainer.style.cssText = "visibility: hidden; left: -10000px; position: absolute;";
          zContentContainer.appendChild(zGetLabelElementWidthContainer);
        }
        var zMaxWidth = 0;
        aForm.ElementArray.forEach(function(aFormElement){
          if ( aFormElement.DrawLabel != "N" && aFormElement.Hidden != "Y" ) {
            zElementLabelContainer  = DOM.createElement("div");
            zElementLabel           = DOM.createElement("label",null,"FormUI-Label");
            zElementLabel.innerHTML = aFormElement.Label;
            zElementLabelContainer.appendChild(zElementLabel);
            zGetLabelElementWidthContainer.appendChild(zElementLabelContainer);
            var zLabelDisplayWidth = zElementLabel.offsetWidth;
            if (zLabelDisplayWidth > zMaxWidth)
              zMaxWidth = zLabelDisplayWidth;
            aFormElement.LabelDisplayWidth = zElementLabel.offsetWidth;
          }
        });
        DOM.removeElement(zGetLabelElementWidthContainer);
        zMaxWidth += 10;
        if (zMaxWidth == 10 && aForm.AutoLabelResizeWidth != ''){
          zMaxWidth = aForm.AutoLabelResizeWidth;
        }
        aForm.ElementArray.forEach(function(aFormElement){
          aFormElement.MaxLabelWidth = zMaxWidth;
          aFormElement.LabelWidth    = zMaxWidth;
        });
        aForm.AutoLabelResizeWidth   = zMaxWidth;
      }
      return true;
    },
    label: function (aElement,aFieldContainer) {
      var zLabelElement = DOM.createElement('label','label-'+aElement.ElementId, 'FormUI-Label');
      zLabelElement.setAttribute('for',aElement.ElementId);
      var zSeparator = (!isTrue(aElement.DoNotUseSeparator)) ? ': ' : '';
      zLabelElement.innerHTML = (aElement.Label&&aElement.Label.length>0) ? aElement.Label+zSeparator : '';
      aFieldContainer.appendChild(zLabelElement);
      return zLabelElement;
    },
    element: function(aForm, aElement, aFieldContainer) {
      if (aElement && aElement.DisableAllFields == 'Y') {
        aElement.CanEdit = 'N';
      }
      if (!aForm.ContentElement) {
        return true;
      }
      if(!aFieldContainer) {
        if (aElement.Position != '') {
          var zRelativeContainer = DOM.createElement('div', "FormUI-RelativeContainer-" + aElement.ElementId , "FormUI-RelativeContainer");
          var zClear = (aElement.Position == "FlowsUnder") ? 'both' : 'none';
          if(aElement.DisplayFormat != "Checkbox") {
            zRelativeContainer.style.width = (FormUI.ElementDimension.get('Label', aElement, true).Width + FormUI.ElementDimension.get(aElement.DisplayFormat, aElement).Width + 5) + 'px';
          }
          if ( !aElement.DynElement || aElement.SeqNo == "") {
            aForm.ContentElement.appendChild(zRelativeContainer);
          }
          else {
            var x = aForm.ElementArray.length - 1;
            var zElementFound = false;
            while (x>=0 && zElementFound != true) {
              if (parseFloat(aElement.SeqNo) > parseFloat(aForm.ElementArray[x].SeqNo)) {
                zElementFound = true;
              } else {
                x--;
              }
            }
            if (zElementFound) {
              DOM.insertAfter(zRelativeContainer, aForm.ElementArray[x].RelativeContainer);
            }
            else {
              aForm.ContentElement.appendChild(zRelativeContainer);
            }
          }
          zRelativeContainer.style.clear = zClear;
          aFieldContainer                = zRelativeContainer;
          aElement.RelativeContainer     = zRelativeContainer;
          DOM.linkObject( aElement.RelativeContainer, "Element", aElement ); 
        } else {
          aFieldContainer = aForm.ContentElement;
        }
        if ( aElement.Hidden == "Y" && aElement.RelativeContainer) {
          aElement.RelativeContainer.style.display = "none";
        }
      } else {
        aElement.RelativeContainer = aFieldContainer;
      }
      if ( aElement && aElement.OnBeforeDrawFunction ) {
        var zBeforeDraw;
        if ( typeof( aElement.OnBeforeDrawFunction ) == "function" ) {
          zBeforeDraw = aElement.OnBeforeDrawFunction( aElement );
        } else {
          zBeforeDraw = eval( aElement.OnBeforeDrawFunction )( aElement );
        }
        if ( !zBeforeDraw ) return;
      }
      if (aElement.DisplayFormat && FormUI.Draw.ElementFunctions['element'+aElement.DisplayFormat]) {
        var zHTMLElement = FormUI.Draw.ElementFunctions['element'+aElement.DisplayFormat](aElement,aFieldContainer, aForm);
      } else {
        var zHTMLElement = FormUI.Draw.ElementFunctions.elementGeneral(aElement,aFieldContainer, aForm);
      }
      if (aElement.CanEdit != 'N') {
        DOM.addClass(zHTMLElement,'FormUI-Editable');
      } else {
        DOM.addClass(zHTMLElement,'FormUI-ReadOnly');
      }
      zHTMLElement.style.zIndex = 100;
      FormUI.addFieldClasses( zHTMLElement, aElement );
      return zHTMLElement;
    },
    ElementFunctions: {
      elementGeneral:function(aElement,aFieldContainer){
        var zDisplayContainer = aFieldContainer;
        var zDrawLabel = ((aElement.DrawLabel && aElement.DrawLabel == "N") || (aElement.Form && aElement.Form.Settings && aElement.Form.Settings.DrawLabels && aElement.Form.Settings.DrawLabels == 'N')) ? false : true;
        if (zDrawLabel) {
          var zLabelElement = DOM.createElement('label','label-'+aElement.ElementId, 'FormUI-Label');
          DOM.addClass(zLabelElement,'FormUI-Label-' + aElement.DisplayFormat);
          zLabelElement.setAttribute('for', aElement.ElementId);
          var zSeparator = ( !isTrue( aElement.DoNotUseSeparator ) ) ? ': ' : '';
          zLabelElement.innerHTML = ( aElement.Label && aElement.Label.length > 0 ) ? aElement.Label+zSeparator : '';
          zDisplayContainer.appendChild(zLabelElement);
        }
        var zElementField = DOM.createElement('div',aElement.ElementId, 'FormUI-Field FormUI-Field-'+aElement.DisplayFormat);
        if (aElement.ElementClassName) {
          DOM.addClass(zElementField,aElement.ElementClassName);
        }
        if ( aElement.DisplayValueArray && aElement.DisplayValueArray.length > 0 ){
          if(!isTrue(aElement.MultiSelectSelectPopup)) {
            aElement.DisplayValueArray.alphaSort();
          }
          var zDisplayValueArrayCombined = aElement.DisplayValueArray.join(", ");
          if (aElement.DisplayFormat != "StylizedText") {
            zDisplayValueArrayCombined = FormUI.escapeCarriages(zDisplayValueArrayCombined,"<br />");
          }
          zDisplayValueArrayCombined = zDisplayValueArrayCombined.HTMLDecode();
          zElementField.innerHTML =  zDisplayValueArrayCombined;
        } else {
          if (aElement.Value != "" && aElement.Value == aElement.DefaultValue && aElement.CanEdit != 'N') {
            DOM.addClass(zElementField,'FormUI-DefaultValue');
            if (aElement.DisplayFormat != "StylizedText") {
              aElement.DefaultValue = FormUI.escapeCarriages(aElement.DefaultValue,"<br />");
            }
            zElementField.innerHTML =  aElement.DefaultValue.HTMLDecode();
          }
          else {
            if (aElement.DisplayValue) {
              if (aElement.DisplayFormat != "StylizedText") {
                aElement.DisplayValue = FormUI.escapeCarriages(aElement.DisplayValue,"<br />");
              }
              zElementField.innerHTML = aElement.DisplayValue.HTMLDecode();
            } else {
              zElementField.innerHTML = "";
            }
          }
        }
        zDisplayContainer.appendChild(zElementField);
        if (aElement.Form && aElement.Form.ContentElementType != 'tr') {
          FormUI.setSizeAndPosition(zLabelElement, zElementField, aElement);
        }
        if (aElement.DisplayFormat == "File" && aElement.EnableAssetRemoval == "Y" && aElement.CanEdit != "N"){
          var zRemoveAsset = DOM.createElement('a', null, 'RemoveInputFile');
          zRemoveAsset.innerHTML = 'remove';
          zRemoveAsset.title = 'Remove File';
          zRemoveAsset.href = 'javascript:void(0);';
          zDisplayContainer.appendChild(zRemoveAsset);
          if (aElement.RemoveAssetFunction)
            var zRemoveFunction = eval(aElement.RemoveAssetFunction);
          else
            var zRemoveFunction = FormUI.Draw.FileInput.removeAsset;
          DOM.addEvent(zRemoveAsset, "onclick", zRemoveFunction, { Container: aElement.ElementId, Element: aElement });
        }
        if ((aElement.DisplayFormat != 'HTML') && (!aElement.CanEdit || aElement.CanEdit != 'N')) {
          DOM.addEvent(zElementField,"onclick",FormUI.Draw.timeoutEditElement,{ Container: aElement.ElementId, Element: aElement });
          DOM.addEvent(zElementField,"onmouseover", FormUI.Hover.mouseOver, zElementField);
          DOM.addEvent(zElementField,"onmouseout", FormUI.Hover.mouseOut, zElementField);
          if (zDrawLabel) {
            DOM.addEvent(zLabelElement,"onclick",FormUI.Draw.timeoutEditElement,{ Container: aElement.ElementId, Element: aElement });
            DOM.addEvent(zLabelElement, "onmouseover", FormUI.Hover.mouseOver, zElementField);
            DOM.addEvent(zLabelElement, "onmouseout", FormUI.Hover.mouseOut, zElementField);
          }
        }
        return zElementField;
      },
      elementSelection: function( aElement, aFieldContainer ) {
        var zValue, zDisplayValue, zOption;
        if(!aElement.CanEditOriginal) {
          aElement.CanEditOriginal = aElement.CanEdit;
        }
        if ( aElement.Options.length == 1 || aElement.OptionsArray.length == 1 ) {
          if ( aElement.Options.length > aElement.OptionsArray.length ) {
            zOption = aElement.Options[0];
            zValue = zDisplayValue = zOption;
          } else {
            zOption = aElement.OptionsArray[0];
            zValue = zOption.ItemPath;
            zDisplayValue = zOption.DisplayName;
          }
          aElement.CanEdit = "N";
        }
        if ( aElement.StylizedSelect == "Y" && aElement.OnOptionMouseOverFunction ) {
          if ( aElement.OnOptionMouseOverFunction && typeof( aElement.OnOptionMouseOverFunction ) == "string" ) {
            aElement.OnOptionMouseOverFunction = eval( aElement.OnOptionMouseOverFunction );
          }
          if ( aElement.OnOptionMouseOutFunction && typeof( aElement.OnOptionMouseOutFunction ) == "string" ) {
            aElement.OnOptionMouseOutFunction = eval( aElement.OnOptionMouseOutFunction );
          }
        }
        var zElement = FormUI.Draw.ElementFunctions.elementGeneral( aElement, aFieldContainer );
        if ( zOption ) {
          if (!FormUI.InputUndoList.ElementList)
            FormUI.InputUndoList.ElementList = [];
          if (!FormUI.InputRedoList.ElementList)
            FormUI.InputRedoList.ElementList = [];
          FormUI.InputUndoList[aElement.ElementId] = [];
          FormUI.InputRedoList[aElement.ElementId] = [];
          var fauxInput= {
            value: zValue,
            type: "lightbox",   
            DisplayValue: zDisplayValue
          }
          aElement.OnBlurParams =  { Original: aElement.Value, Input: fauxInput, Container: aElement.ElementId, Element: aElement };
          aElement.DisplayValue = zDisplayValue;
          aElement.Value        = zValue;
          DOM.replaceContent( zElement, zDisplayValue );         
          if ( aElement.FieldHeight <= 3 ) {
            zElement.setAttribute( "ShowEllipsis", "" );
            DOM.showEllipsisOnClip( zElement );
          }                  
          FormUI.Save.formInput( {}, aElement.OnBlurParams );
        }
        return zElement;
      },
      elementButton: function(aElement,aFieldContainer) {
        aElement.CanEdit = 'N';
        var zDisplayContainer = aFieldContainer;
        var zElementField = DOM.createElement('span', 'btn-'+aElement.ElementId, 'Button button FormUI-Field FormUI-Field-'+aElement.DisplayFormat);
        zElementField.innerHTML = (aElement.Label&&aElement.Label.length>0) ? aElement.Label : '';
        if (aElement.OnClickFunction != '') {
          DOM.addEvent(zElementField,"onclick",eval(aElement.OnClickFunction),{Container:aElement.ElementId,Element:aElement});
        }
        zDisplayContainer.appendChild(zElementField);
        FormUI.setSizeAndPosition(null, zElementField, aElement);
        return zElementField;
      },
      elementDimension: function(aElement,aFieldContainer) {
        var zDisplayContainer = aFieldContainer;
        var zLabelElement = DOM.createElement('label','label-'+aElement.ElementId, 'FormUI-Label');
        zLabelElement.setAttribute('for',aElement.ElementId);
        var zSeparator = (!isTrue(aElement.DoNotUseSeparator)) ? ': ' : '';
        zLabelElement.innerHTML = (aElement.Label&&aElement.Label.length>0) ? aElement.Label+zSeparator : '';
        zDisplayContainer.appendChild(zLabelElement);
        var zElementField = DOM.createElement('div',aElement.ElementId, 'FormUI-Field FormUI-Field-'+aElement.DisplayFormat);
        zElementField.innerHTML = (aElement.Value=='' ? aElement.DefaultValue : aElement.Value) + ((aElement.Unit) ? aElement.Unit : '');
        zDisplayContainer.appendChild(zElementField);
        FormUI.setSizeAndPosition(zLabelElement, zElementField, aElement);
        if (aElement.Unit) {
          var zElementWidth = parseInt(zElementField.style.width)+(aElement.Unit.length*FormUI.GridMultiplier)+'px';
          zElementField.style.width = zElementWidth;
        }
        if ((aElement.DisplayFormat != 'HTML') && (!aElement.CanEdit || aElement.CanEdit != 'N')) {
          DOM.addEvent(zLabelElement,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
          DOM.addEvent(zElementField,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
        }
        return zElementField;
      },
      elementCurrency: function (aElement,aFieldContainer) {
        var zElementField = FormUI.Draw.ElementFunctions.elementGeneral(aElement,aFieldContainer);
        aElement.Value = FormUI.Number.formatCurrency(aElement.Value,'Y');
        zElementField.innerHTML = (aElement.Value=='' ? aElement.DefaultValue : aElement.Value);
        return zElementField;
      },
      elementSecondsInput: function (aElement,aFieldContainer) {
        var zElementField = FormUI.Draw.ElementFunctions.elementGeneral(aElement,aFieldContainer);
        if ((aElement.FieldId == 'RequiredStartTime' || aElement.FieldId == 'RequiredEndTime') && aElement.Value < 30){
        }
        else{
          aElement.Value = FormUI.Number.convertDown(aElement.Value,'1000');
        }
        aElement.Value = FormUI.Number.formatSecondsInput(aElement.Value,'N','Y');
        zElementField.innerHTML = (aElement.Value=='' ? aElement.DefaultValue : aElement.Value);
        aElement.Value = FormUI.Number.formatSecondsInput(aElement.Value,'N','N');
        return zElementField;
      },
      elementHeading2: function (aElement,aFieldContainer) {
        var zDisplayContainer = aFieldContainer;
        var zElementField = DOM.createElement('h2','h2-'+aElement.ElementId, 'FormUI-H2');
        zElementField.innerHTML = aElement.Label;
        zDisplayContainer.appendChild(zElementField);
        return zElementField;
      },
      elementPassword: function(aElement,aFieldContainer) {
        var zDisplayContainer = aFieldContainer;
        var zLabelElement = DOM.createElement('label','label-'+aElement.ElementId, 'FormUI-Label');
        zLabelElement.setAttribute('for',aElement.ElementId);
        var zSeparator = (!isTrue(aElement.DoNotUseSeparator)) ? ': ' : '';
        zLabelElement.innerHTML = (aElement.Label&&aElement.Label.length>0) ? aElement.Label+zSeparator : '';
        zDisplayContainer.appendChild(zLabelElement);
        var zElementField = DOM.createElement('div',aElement.ElementId, 'FormUI-Field FormUI-Field-'+aElement.DisplayFormat);
        zElementField.innerHTML = '**********';
        zDisplayContainer.appendChild(zElementField);
        FormUI.setSizeAndPosition(zLabelElement, zElementField, aElement);
        if ((aElement.DisplayFormat != 'HTML') && (!aElement.CanEdit || aElement.CanEdit != 'N')) {
          DOM.addEvent(zLabelElement,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
          DOM.addEvent(zElementField,"onclick",FormUI.Draw.timeoutEditElement,{Container:aElement.ElementId,Element:aElement});
          DOM.addEvent(zElementField, "onmouseover", FormUI.Hover.mouseOver, zElementField);
          DOM.addEvent(zElementField, "onmouseout", FormUI.Hover.mouseOut, zElementField);
          DOM.addEvent(zLabelElement, "onmouseover", FormUI.Hover.mouseOver, zElementField);
          DOM.addEvent(zLabelElement, "onmouseout", FormUI.Hover.mouseOut, zElementField);
        }
        return zElementField;
      },
      elementCSVInput: function(aElement,aFieldContainer) {
        var DisplayContainer = aFieldContainer;
        var CSVTable = DOM.createElement('table','CSVTable','CSVTable','');
        CSVTable.cellPadding = '3px';
        CSVTable.cellSpacing = '0px';
        CSVTable.style.position= 'absolute';
        CSVTable.style.top = (parseFloat(aElement.FieldTop) * FormUI.GridMultiplier)+'px';
        CSVTable.style.left=  (parseFloat(aElement.FieldLeft) * FormUI.GridMultiplier)+'px';
        var CSVTableHead = DOM.createElement('thead','','','');
        var TitleRow = DOM.createElement('tr','','CSVTitleRow','');
        var ActionTitle = DOM.createActionElement('th',FormUI.Draw.AddFunctions.elementCSVInput,'','');
        TitleRow.appendChild(ActionTitle);
        for (var i = 0; i < aElement.ValueArray.DisplayTitle.length; i++) {
          var Title = DOM.createTextElement('th','','','',aElement.ValueArray.DisplayTitle[i]);
          TitleRow.appendChild(Title);
        }
        CSVTableHead.appendChild(TitleRow);
        CSVTable.appendChild(CSVTableHead);
        var Seq = 0;
        var CSVTableBody = DOM.createElement('tbody','','','');
        for (var j = 0; j < aElement.ValueArray.Rows.length; j++) {
          var Row = DOM.createElement('tr','','','');
          var RowData = DOM.createElement('td','','','');
          Row.appendChild(RowData);
          for (var k = 0; k < aElement.ValueArray.Rows[j].length; k++) {
            Seq++;
            var ItemId = aElement.ValueArray.DisplayTitle[k]+'_'+[j];
            var RowDataContainer = DOM.createElement('td','','','','');
            RowDataContainer.setAttribute('height',(parseFloat(aElement.FieldHeight) * FormUI.GridMultiplier)+'px');
            RowDataContainer.setAttribute('width',(parseFloat(aElement.FieldWidth) * FormUI.GridMultiplier)+20+'px');
            Row.appendChild(RowDataContainer);
            var zPosition = { Top: "-1", Left: "0", Height: aElement.FieldHeight, Width: aElement.FieldWidth}
            var aElementProperties = {
              FieldId: ItemId,
              FieldType: "Text",
              CSVColumnId: aElement.ValueArray.DisplayTitle[k],
              CSVRowNumber: (j+1),
              CSVSaveValue: 'Y',
              CSVEncoding:  aElement.CSVEncoding,
              Value: unescape(aElement.ValueArray.Rows[j][k]),
              GroupId: aElement.FieldId,
              OnChangeFunction: aElement.OnChangeFunction,
              JSValidation: aElement.JSValidation,
              LSMLValidation: aElement.LSMLValidation,
              CanEdit: aElement.CanEdit,
              SeqNo: aElement.ElementId+Seq,
              KeepTitleCase: aElement.KeepTitleCase,
              Form: aElement.Form
            }
            var zElement = new FormUI.Element('Text', ItemId, zPosition, '', aElementProperties);
            zElement.setPath(aElement.WritePropertyPath);
            var FieldElement = FormUI.createElement(zElement, RowDataContainer, 'CSVInput-'+aElement.ElementId + Seq, true);
            DOM.addClass(FieldElement.parentNode,'InputCellContainer');
            FormUI.ElementArray.push(zElement);
          }
          CSVTableBody.appendChild(Row);
        }
        CSVTable.appendChild(CSVTableBody);
        DisplayContainer.appendChild(CSVTable);
        return CSVTable;
      },
      elementSubForm: function (aElement,aFieldContainer,aForm) {
        var BackupFormUIContentElement = FormUI.ContentElement;
        var DisplayContainer = aFieldContainer;
        var SubFormTable = DOM.createElement('table','SubFormTable','SubFormTable','');
        SubFormTable.cellPadding = '3px';
        SubFormTable.cellSpacing = '0px';
        SubFormTable.style.position= 'absolute';
        SubFormTable.style.top = (parseFloat(aElement.FieldTop) * FormUI.GridMultiplier)+'px';
        SubFormTable.style.left=  (parseFloat(aElement.FieldLeft) * FormUI.GridMultiplier)+'px';
        var SubFormTableHead = DOM.createElement('thead','','','');
        var TitleRow = DOM.createElement('tr','','SubFormTitleRow','');
        var SubFormTableBody = DOM.createElement('tbody','','','');
        if(aElement.SubForm.length>0){
          var zTitleListArray = aElement.SubForm[0].CSVDisplayTitleList.split(',');
          for (var i = 0; i < zTitleListArray.length; i++) {
            var Title = DOM.createTextElement('th','','','',zTitleListArray[i]);
            TitleRow.appendChild(Title);
          }
          SubFormTableHead.appendChild(TitleRow);
          SubFormTable.appendChild(SubFormTableHead);
          var zElementCounter = 1;
          aElement.SubForm.forEach(function(aItem){
            FormUI.ElementArray.set(aItem,aItem.SeqNo);
            if (aItem.Enabled != 'N')
              if (zElementCounter == 1) {
                var Row = DOM.createElement('tr','','','');
                SubFormTableBody.appendChild(Row);
              } else {
                var Row = SubFormTableBody.lastChild;
              }
              var RowDataContainer = DOM.createElement('td','','','','');
              RowDataContainer.setAttribute('height',(parseFloat(aItem.FieldHeight) * FormUI.GridMultiplier)+3+'px');
              RowDataContainer.setAttribute('width',(parseFloat(aItem.FieldWidth) * FormUI.GridMultiplier)+20+'px');
              Row.appendChild(RowDataContainer);
              if (!aItem.LabelWidth)
                aItem.Label = "";
              if (!aItem.ElementId) {
                aItem.ElementId = aItem.FieldId + '_' + aForm.ItemId;
              }
              var zElement = new FormUI.Element(aItem.DisplayFormat, aItem.ElementId, '', '', aItem);
              var FieldElement = FormUI.createElement(zElement, RowDataContainer, 'SubForm-'+aItem.ElementId, true);
              DOM.addClass(FieldElement.parentNode,'InputCellContainer');
              if (zElementCounter == zTitleListArray.length){
                zElementCounter = 1;
              } else {
                zElementCounter++;
              }
            FormUI.InputUndoList[aItem.ElementId] = [];
            FormUI.InputRedoList[aItem.ElementId] = [];
          });
        }
        SubFormTable.appendChild(SubFormTableBody);
        DisplayContainer.appendChild(SubFormTable);
        FormUI.ContentElement = BackupFormUIContentElement;
        return SubFormTable;
      },
      elementCheckbox: function (aElement,aFieldContainer) {
        var zBackupLabel = aElement.Label;
        aElement.Label = "";
        var CheckboxElement = FormUI.Draw.ElementFunctions.elementGeneral(aElement,aFieldContainer);
        aElement.Label = zBackupLabel;
        FormUI.Draw.timeoutEditElement("",{Container: aElement.ElementId, Element: aElement});
        FormUI.InputUndoList[aElement.ElementId] = [];
        return CheckboxElement;
      },
      elementCheckboxV2: function(aElement, aFieldContainer) {
        var zContainer = aFieldContainer;
        var zLabel     = aElement.Label ? aElement.Label : "";
        var zValue     = aElement.CheckboxTrueValue ? aElement.CheckboxTrueValue : "Y";
        var aOption    = { Id:aElement.ElementId, Text:zLabel, Name:aElement.ElementId, Value:zValue };
        var zCheckbox_Obj = FormUI.Draw.Checkbox.create( aOption );
        DOM.addEvent(zCheckbox_Obj.Input, "onclick", FormUI.Save.timeoutFormInput, {Input: zCheckbox_Obj.Input, Container: zContainer, Element: aElement});
				if ( aElement.Value == zValue ) {
				  zCheckbox_Obj.Input.checked = true;
				}
				if ( aElement.CanEdit == "N" ) {
					zCheckbox_Obj.Input.disabled = true;
				}
				aFieldContainer.appendChild( zCheckbox_Obj.Container );
        return zCheckbox_Obj.Container;
      },
      elementAsset: function(aElement,aFieldContainer) {
        var elementUniqueId = aElement.ElementId;
        zElementField = FormUI.Draw.ElementFunctions.elementGeneral(aElement,aFieldContainer);
        var zDisplayContainer = aFieldContainer;
        var zAssetDiv = DOM.createElement('div','AssetDiv-'+elementUniqueId+FormUI.Draw.FileInput.UploadCount,"FormUI-AssetContainer");
        zDisplayContainer.appendChild(zAssetDiv);
        aElement.AssetOwnerContainerId = 'AssetDiv-'+elementUniqueId+FormUI.Draw.FileInput.UploadCount;
        aElement.AssetOwnerContainer = zAssetDiv;
        var zItem = aElement.SaveFormItemPath || aElement.Form.ItemPath;
        FormUI.AssetUtil.getAssetData({ItemPath:zItem,AssetOwnerContainerId:aElement.AssetOwnerContainerId,AssetOwnerContainer:aElement.AssetOwnerContainer,Element: aElement,FormType: aElement.Form.FormType,FieldId: aElement.FieldId});
        return zElementField;
      },
      elementColorInput: function(aElement,aFieldContainer){
        var zElementField = FormUI.Draw.ElementFunctions.elementGeneral(aElement,aFieldContainer);
        var zDisplayContainer = aFieldContainer;
        var zPreviewDiv = DOM.createElement('div',aElement.ElementId +'PreviewDiv',"ColorInputDiv");
        zDisplayContainer.appendChild(zPreviewDiv);
        FormUI.Draw.updateColor("",{Element: aElement});
        return zElementField;
      },
      elementMultipleAsset: function(aElement,aFieldContainer) {
        var zDisplayContainer = aFieldContainer;
        var zFormBottomPosition = FormUI.getElementDimension('Bottom', 'Label');
        var zNewTopPosition = (zFormBottomPosition+10);
        var zFormLeftPosition = FormUI.getElementDimension('Left', 'Label');
        var zNewLeftPosition = zFormLeftPosition;
        var zAssetDiv = DOM.createElement('div','AssetDiv-'+aElement.ElementId,"FormUI-AssetContainer");
        zAssetDiv.style.position = 'absolute';
        zAssetDiv.style.top = zNewTopPosition+'px';
        zAssetDiv.style.left = zNewLeftPosition+'px';
        zDisplayContainer.appendChild(zAssetDiv);
        aElement.AssetOwnerContainerId = 'AssetDiv-'+aElement.ElementId;
        aElement.AssetOwnerContainer = zAssetDiv;
        zElementField = FormUI.Draw.ElementFunctions.elementGeneral(aElement,aFieldContainer);
        return zElementField;
      },
      elementOptionGroup: function(aElement, aContainer) {
        var aTitleElement_Pos = {Left: 5, Top: 1, Height: 3, Width: 33}
        var aElement_Pos = {Left: 0, Top: 0, Height: 3, Width: 37}
        var zOptionGroupContainer = DOM.createElement('div','OptionGroup_'+aElement.FieldId,'OptionGroup','');
        var zOptionGroupHeader = DOM.createElement('div','OptionGroup_'+aElement.FieldId+'_TitleBar','action-element','');
        if (aElement.GroupItemPath) {
          var zCanEdit = (LiveAdMaker.SystemType=="BRAND") ? "Y" : "N";
          var aTitleElementProperties = {
            FieldId: aElement.FieldId+"_Title",
            Value: aElement.Label,
            DisplayValue: aElement.Label,
            CanEdit: zCanEdit,
            ReadPropertyPath: ".ObjectName",
            WritePropertyPath: ".ObjectName",
            SaveFormItemPath: aElement.GroupItemPath
          }
          zElement = new FormUI.Element('Text', aElement.FieldId, aTitleElement_Pos, "", aTitleElementProperties);
          var zTitleFieldElement = FormUI.createElement(zElement, "", FormUI.FormType, true, zOptionGroupHeader);
        }
        else {
          var zGroupTitle = document.createTextNode(aElement.Label);
          zOptionGroupHeader.appendChild(zGroupTitle);
        }
        zOptionGroupContainer.appendChild(zOptionGroupHeader);
        if (aContainer) {
          aContainer.appendChild(zOptionGroupContainer);
        }
        if(aElement.ClearOptionGroup == 'Y') {
          DOM.addClass(zOptionGroupContainer,"ClearOptionGroup");
        }
        var aElementProperties = {
          FieldType: aElement.FieldType,
          SelectPathLinkAlias: aElement.SelectPathLinkAlias,
          SelectType: aElement.SelectType,
          SaveType: aElement.SaveType,
          OptionsArray: aElement.OptionsArray,
          Value: aElement.Value,
          ValueArray: aElement.ValueArray,
          DisplayValue: aElement.DisplayValue,
          DisplayValueArray: aElement.DisplayValueArray,
          CSVColumnID: aElement.CSVColumnId,
          CSVRowId: aElement.CSVRowId,
          CSVValue: aElement.CSVValue,
          CSVEncoding: aElement.CSVEncoding,
          AddOptionType: aElement.AddOptionType,
          AddOptionOwnerReference: aElement.AddOptionOwnerReference,
          AddGroupType: aElement.AddGroupType,
          AddGroupOwnerReference: aElement.AddGroupOwnerReference,
          AddGroupCollectionType: aElement.AddGroupCollectionType,
          AddGroupCollectionOwnerReference: aElement.AddGroupCollectionOwnerReference,
          AddOptionCollectionType: aElement.AddOptionCollectionType,
          AddOptionCollectionOwnerReference: aElement.AddOptionCollectionOwnerReference,
          SearchInputText: aElement.SearchInputText,
          NoSelectionsText: aElement.NoSelectionsText,
          SearchAction: aElement.SearchAction,
          SearchRequestPath: aElement.SearchRequestPath || aElement.SearchStartPath,
          SearchStartPath: aElement.SearchStartPath,
          Form: aElement.Form,
          IsRestriction: aElement.IsRestriction,
          ProperHierarchySelect: aElement.ProperHierarchySelect,
          IncludeSelectAll: aElement.IncludeSelectAll,
          SearchInputElementWidth: aElement.SearchInputElementWidth,
          SearchInputElementHeight: aElement.SearchInputElementHeight,
          SearchInputContainerWidth: aElement.SearchInputContainerWidth,
          SearchInputContainerHeight: aElement.SearchInputContainerHeight,
          Original: []
        }
        if (aElement.SelectType=="checkbox") {
          var zElement = new FormUI.Element('MultiSelectCheckbox', aElement.FieldId, aElement_Pos, "", aElementProperties);
          zElement.FieldType = "MultiSelect"
        }
        else if (aElement.SelectType=="radio") {
          var zElement = new FormUI.Element('SingleSelectRadio', aElement.FieldId, aElement_Pos, "", aElementProperties);
          zElement.FieldType = "SelectPath"
        }
        else if (aElement.SelectType=="hierarchycheckbox") {
          if (aElement.ShowNoRestrictionsOption!="N") {
            aElementProperties.OptionsArray.splice(0,0,{DisplayName: 'No Restrictions', ItemPath: 'NoRestrictions',Id: 'NoRestrictions_' +aElement.FieldId,SubItems: []});
          }
          var zElement = new FormUI.Element('HierarchyMultiSelectCheckbox', aElement.FieldId, aElement_Pos, "", aElementProperties);
        }
        else if (aElement.SelectType == "searchinput"){
          var zNoSelectionsText = aElement.NoSelectionsText || ' No Restrictions';
          if (aElement.IsRestriction == 'Y'){
            var aElementRestrictins_Pos = {Left: 0, Top: 0, Height: 3, Width: 35};
            var aElementRestrictinsCheckBox = {
              FieldType: aElement.FieldType,
              FieldId: 'Div_NoRestrictions_' +aElement.FieldId,
              SelectType: 'checkbox',
              SaveType: aElement.SaveType,
              OptionsArray: [{DisplayName: zNoSelectionsText,ItemPath: 'NoRestrictions',Id: 'NoRestrictions_' +aElement.FieldId}],
              CheckboxTrueValue: 'NoRestrictions',
              ValueArray: [],
              Original: [],
              DisplayValue: '',
              DisplayValueArray: [],
              CSVColumnID: aElement.CSVColumnId,
              CSVRowId: aElement.CSVRowId,
              CSVValue: aElement.CSVValue,
              CSVEncoding: aElement.CSVEncoding
            }
           var zRestrictionElement = new FormUI.Element('MultiSelectCheckbox', aElementRestrictinsCheckBox.FieldId+ '_Container', aElementRestrictins_Pos, "", aElementRestrictinsCheckBox);
          }
          var aElementSearch_Pos = {Left: 2, Top: 0, Height: 3, Width: 35}
          var zElement = new FormUI.Element('SearchInput', aElement.FieldId, aElementSearch_Pos, "", aElementProperties);
          if (aElement.ValueArray && aElement.ValueArray.length > 0){
            var aElementCheckBox_Pos = {Left: 0, Top: 5, Height: 3, Width: 34}
            var aElementPropertiesCheckBox = {
              FieldType: aElement.FieldType,
              FieldId: aElement.FieldId +'_Disabled',
              SelectType: 'checkbox',
              SaveType: aElement.SaveType,
              OptionsArray: aElement.OptionsArray,
              Value: aElement.Value,
              ValueArray: aElement.ValueArray,
              Original: [],
              DisplayValue: aElement.DisplayValue,
              DisplayValueArray: aElement.DisplayValueArray,
              CSVColumnID: aElement.CSVColumnId,
              CSVRowId: aElement.CSVRowId,
              CSVValue: aElement.CSVValue,
              Form: aElement.Form,
              CSVEncoding: aElement.CSVEncoding
            }
            var zElementCheckBox = new FormUI.Element('MultiSelectCheckbox', aElement.FieldId, aElementCheckBox_Pos, "", aElementPropertiesCheckBox);
            zElementCheckBox.setPath(aElement.WritePropertyPath);
            zElementCheckBox.Original = aElement.ValueArray.copy();
          }
        }
        else if (aElement.SelectType == "SingleSelectSearchInput"){
          var zNoSelectionsText = aElement.NoSelectionsText || '  No Selections';
          var aElementSearch_Pos = {Left: 2, Top: 0, Height: 3, Width: 35}
          var zElement = new FormUI.Element('SearchInput', aElement.FieldId, aElementSearch_Pos, "", aElementProperties);
          if (aElement.ValueArray && aElement.ValueArray.length > 0){
            var aElementRadio_Pos = {Left: 0, Top: 5, Height: 3, Width: 34}
            var aElementPropertiesRadio = {
              FieldType: aElement.FieldType,
              FieldId: aElement.FieldId +'_Disabled',
              SelectType: 'radio',
              SaveType: aElement.SaveType,
              OptionsArray: aElement.OptionsArray,
              Value: aElement.Value,
              ValueArray: aElement.ValueArray,
              Original: [],
              DisplayValue: aElement.DisplayValue,
              DisplayValueArray: aElement.DisplayValueArray,
              CSVColumnID: aElement.CSVColumnId,
              CSVRowId: aElement.CSVRowId,
              CSVValue: aElement.CSVValue,
              Form: aElement.Form,
              CSVEncoding: aElement.CSVEncoding,
              CancelSave: aElement.CancelSave,
              OnCancelSaveFunction: aElement.OnCancelSaveFunction,
              DialogWidth: aElement.DialogWidth,
              DialogHeight: aElement.DialogHeight,
              CloseDialogOnSave: aElement.CloseDialogOnSave,
              OriginalContainer: aElement.OriginalContainer,
              RemoveCloseText: true
            }
            var zElementRadio = new FormUI.Element('SingleSelectRadio', aElement.FieldId, aElementRadio_Pos, "", aElementPropertiesRadio);
            zElementRadio.FieldType = "SelectPath"
            zElementRadio.setPath(aElement.WritePropertyPath);
            zElementRadio.Original = aElement.ValueArray.copy();
          }
        }
        if(LiveAdMaker.SystemType=="BRAND") {
          if (aElement.AddOptionType) {
            var zClickAbleElement = document.createElement("span");
            DOM.addClass(zClickAbleElement, "action-container");
            DOM.addEvent(zClickAbleElement, "onclick", FormUI.OptionGroup.addOption, {AddOptionType: aElement.AddOptionType, AddOptionOwnerReference: aElement.AddOptionOwnerReference, AddOptionCollectionType: aElement.AddOptionCollectionType, AddOptionCollectionOwnerReference: aElement.AddOptionCollectionOwnerReference,Element: zElement});
            zOptionGroupHeader.appendChild(zClickAbleElement);
          }
        }
        zElement.setPath(aElement.WritePropertyPath);
        aElement.Original = aElement.ValueArray.copy();
        var fieldContainer = DOM.createElement('div', 'field-container_'+aElement.FieldId);
        fieldContainer.style.position = "static";
        zOptionGroupContainer.appendChild(fieldContainer);
        var zFieldElement = FormUI.createElement(zElement, "", aElement.Form.Id, false, fieldContainer);
        zFieldElement.parentNode.style.position = "relative";
        zFieldElement.parentNode.style.height = "auto";
        if (aElement.SelectType=="searchinput"){
          var zFieldElementNoRestriction = FormUI.createElement(zRestrictionElement, "", aElement.Form.Id, false, zFieldElement.parentNode.parentNode);
          zFieldElementNoRestriction.parentNode.style.position = "relative";
          zFieldElementNoRestriction.className = 'selection-containerplain';
          zFieldElementNoRestriction.style.height = 'auto';
          DOM.addClass(zFieldElementNoRestriction.parentNode.parentNode,'selection-container');
          zFieldElement.style.width = '120px';
          zFieldElement.style.height ='11px';
          $(zElement.ElementId).style.position = 'relative';
          zFieldElement.parentNode.style.height = "20px";
          zFieldElement.parentNode.parentNode.style.height = "auto";
          if (aElement.ValueArray && aElement.ValueArray.length > 0){
            var zFieldElementCheckbox = FormUI.createElement(zElementCheckBox, "", aElement.Form.Id, false, zFieldElement.parentNode.parentNode);
            zFieldElementCheckbox.className = 'selection-containerplain';
            zFieldElementCheckbox.style.height = 'auto';
            zInputs = zFieldElementCheckbox.parentNode.getElementsByTagName('input');
            for (x=0; x<zInputs.length; x++) {
              if (aElement.IsRestriction == 'Y'){
                DOM.addEvent(zInputs[x], "onclick", FormUI.OptionGroup.uncheckAll, {Original:["NOVALUEFORNOW"], Input:zFieldElementCheckbox.parentNode.parentNode, Container:null, Element:zElementCheckBox, Value:zInputs[x].value});
              }
              DOM.addEvent(zInputs[x], "onclick", FormUI.OptionGroup.saveMultiSelectCheckbox, {Original:["NOVALUEFORNOW"], Input:zFieldElementCheckbox.parentNode, Container:null, Element:zElementCheckBox});
            }
            zFieldElementCheckbox.parentNode.style.position = "";
            zFieldElementCheckbox.parentNode.style.height = "auto";
            zFieldElementCheckbox.parentNode.parentNode.style.position = "relative";
            zFieldElementCheckbox.parentNode.parentNode.style.height = "auto";
          }
        }
        zInputs = fieldContainer.getElementsByTagName('input');
        if (zInputs.length){
          if (aElement.SelectType=="checkbox") {
            for (x=0; x<zInputs.length; x++) {
              if (zInputs[x].type == 'checkbox'){
                if (aElement.IsRestriction == 'Y'){
                  if (aElement.CanEdit!="N") {
                    DOM.addEvent(zInputs[x], "onclick", FormUI.OptionGroup.uncheckAll, {Original:["NOVALUEFORNOW"], Input:fieldContainer, Container:null, Element:aElement, Value:zInputs[x].value});
                  }
                  else {
                    zInputs[x].disabled = true;
                  }
                }
                if (aElement.CanEdit!="N") {
                  DOM.addEvent(zInputs[x], "onclick", FormUI.OptionGroup.saveMultiSelectCheckbox, {Original:["NOVALUEFORNOW"], Input:fieldContainer, Container:null, Element:aElement});
                }
                else {
                  zInputs[x].disabled = true;
                }
              }
            }
          }
          else if (aElement.SelectType=="radio") {
            for (x=0; x<zInputs.length; x++) {
              if (aElement.CanEdit!="N") {
                DOM.addEvent(zInputs[x], "onclick", FormUI.OptionGroup.saveSingleSelectRadio, {NewValue:zInputs[x].value, Input:fieldContainer, Element:aElement});
              }
              else {
                zInputs[x].disabled = true;
              }
            }
          }
          else if (aElement.SelectType=="hierarchycheckbox") {
            for (x=0; x<zInputs.length; x++) {
              if (aElement.IsRestriction == 'Y'){
                if (aElement.CanEdit!="N") {
                  DOM.addEvent(zInputs[x], "onclick", FormUI.OptionGroup.uncheckAll, {Original:["NOVALUEFORNOW"], Input:fieldContainer, Container:null, Element:aElement, Value:zInputs[x].value});
                }
                else {
                  zInputs[x].disabled = true;
                }
              }
              if (aElement.CanEdit!="N") {
                DOM.addEvent(zInputs[x], "onclick", FormUI.OptionGroup.saveMultiSelectCheckbox, {Original:["NOVALUEFORNOW"], Input:fieldContainer, Container:null, Element:aElement});
              }
              else {
                zInputs[x].disabled = true;
              }
            }
          }
          else if (aElement.SelectType=="searchinput") {
            for (x=0; x<zInputs.length; x++) {
              if (aElement.IsRestriction == 'Y' && zInputs[x].value == 'NoRestrictions'){
                Event.remove(zInputs[x], "onclick", FormUI.Save.timeoutFormInput);
                DOM.addEvent(zInputs[x], "onclick", FormUI.OptionGroup.uncheckAll, {Original:["NOVALUEFORNOW"], Input:fieldContainer, Container:null, Element:aElement, Value:zInputs[x].value});
                DOM.addEvent(zInputs[x], "onclick", FormUI.OptionGroup.saveMultiSelectCheckbox, {Original:["NOVALUEFORNOW"], Input:fieldContainer, Container:null, Element:aElement});
              }
            }
          }
        }
        else {
          zFieldElement.innerHTML = '[ ' +aElement.DefaultValue +' ]';
        }
        if(LiveAdMaker.SystemType=="BRAND") {
          if (aElement.AddGroupType&&aElement.AddGroupOwnerReference&&aContainer&&aElement.AddGroupCollectionType&&aElement.AddGroupCollectionOwnerReference&&aElement.AddOptionCollectionType&&aElement.AddOptionCollectionOwnerReference) {
            var zAddOptionGroupContainer = DOM.createElement('div', 'addoptiongroup-container');
            var zAddOptionGroupLink = DOM.createElement('a', 'addoptiongroup-link');
            zAddOptionGroupContainer.appendChild(zAddOptionGroupLink);
            aContainer.appendChild(zAddOptionGroupContainer)
            zAddOptionGroupLink.innerHTML = "New Group";
            zAddOptionGroupLink.href = "javascript:void(0);"
            DOM.addEvent(zAddOptionGroupLink, "onclick", FormUI.OptionGroup.addGroup, {AddGroupType:aElement.AddGroupType, AddGroupOwnerReference:aElement.AddGroupOwnerReference,AddGroupCollectionType:aElement.AddGroupCollectionType, AddGroupCollectionOwnerReference:aElement.AddGroupCollectionOwnerReference, AddOptionCollectionType: aElement.AddOptionCollectionType, AddOptionCollectionOwnerReference: aElement.AddOptionCollectionOwnerReference});
          }
        }
        if (aElement.IsRestriction == 'Y' && $('inp_NoRestrictions_' +aElement.FieldId+'_Container') && (aElement.SelectType=="hierarchycheckbox" || aElement.SelectType=="checkbox")){
            var zInputToMove = $('inp_NoRestrictions_' +aElement.FieldId+'_Container');
            zInputToMove.parentNode.insertBefore(zInputToMove,zInputToMove.parentNode.childNodes[0]);
        }
        if (aElement.IsRestriction == 'Y' && aElement.ValueArray.length <= 0 && $('inp_NoRestrictions_' +aElement.FieldId)){
          if ( aElement.AllRestrictionsDisabled == 'Y'){
            $('inp_NoRestrictions_' +aElement.FieldId).checked = false;
          } else {
            $('inp_NoRestrictions_' +aElement.FieldId).checked = true;
          }
        }
        if (aElement.IsRestriction == 'Y' && $('inp_NoRestrictions_' +aElement.FieldId) && aElement.AllRestrictionsDisabled == 'Y'){
          $('inp_NoRestrictions_' +aElement.FieldId).checked = false;
        }
        FormUI.ElementArray.CurrentItem = null;
        return zOptionGroupContainer;
      }, 
      elementMessageBox: function(aElement, aContainer) {
        var zOptionGroupContainer = DOM.createElement('div','OptionGroup_'+aElement.FieldId,'OptionGroup','');
        var zOptionGroupContent = DOM.createElement('div','OptionGroup_'+aElement.FieldId+'_Content', 'MessageBoxContent');
        zOptionGroupContent.style.padding = '2px';
        var zOptionGroupHeader = DOM.createElement('div','OptionGroup_'+aElement.FieldId+'_TitleBar','action-element','');
        var zElementDimension = FormUI.ElementDimension.get(aElement.DisplayFormat, aElement);
        zOptionGroupContainer.style.width = zElementDimension.Width + "px";
        zOptionGroupContainer.style.height = zElementDimension.Height + "px";
        zOptionGroupContainer.appendChild(zOptionGroupHeader);
        zOptionGroupContainer.appendChild(zOptionGroupContent);
        if (aContainer) {
          aContainer.appendChild(zOptionGroupContainer);
        }
        if(aElement.ClearOptionGroup == 'Y') {
          DOM.addClass(zOptionGroupContainer,"ClearOptionGroup");
        }
        FormUI.ElementArray.CurrentItem = null;
        zOptionGroupHeader.innerHTML = aElement.Label;
        zOptionGroupContent.innerHTML = aElement.DisplayValue;
        return zOptionGroupContainer;
      },
      elementMessage: function(aElement, aContainer) {
        var zMessageContainer = DOM.createElement('div','Message_'+aElement.FieldId,'OptionGroup','');
        zMessageContainer.style.padding = '3px 5px';
        var zElementDimension = FormUI.ElementDimension.get(aElement.DisplayFormat, aElement);
        zMessageContainer.style.width = zElementDimension.Width + "px";
        if (aContainer) {
          aContainer.appendChild(zMessageContainer);
        }
        FormUI.ElementArray.CurrentItem = null;
        zMessageContainer.innerHTML = aElement.DisplayValue;
        return zMessageContainer;
      },
      elementLink: function(aElement, aFieldContainer) {
        var zElementField = FormUI.Draw.ElementFunctions.elementGeneral(aElement, aFieldContainer);
        FormUI.Draw.drawLinkInputDisplay(aElement);
        return zElementField
      },
      elementLongText: function(aElement, aContainer) {
        if(aElement.ValuePrompt) {
          var zElementValue = aElement.Value.HTMLDecode();
          if(aElement.ValuePrompt == zElementValue) {
            aElement.Value = "";
          }
        }
        var zElementField = FormUI.Draw.ElementFunctions.elementGeneral(aElement, aContainer);
        if(aElement.ValuePrompt) {
          var zElementDisplayValue = aElement.DisplayValue.HTMLDecode();
          if(aElement.ValuePrompt == zElementDisplayValue) {
            DOM.addClass(zElementField, "FormUI-DefaultValue");
          }
        }
        return zElementField;
      }
    },
    drawLinkInputDisplay: function(aElement) {
      var zElementField = $(aElement.ElementId);
      var zLinkValueArray = aElement.Value.split("^");
      var zLinkType = zLinkValueArray[0];
      var zDisplayType = zLinkValueArray[1];
      var zLinkText = zLinkValueArray[2];
      var zLinkURL = zLinkValueArray[3];
      var zLinkTarget = zLinkValueArray[4];
      if (zLinkText) {
        DOM.removeClass(zElementField,"FormUI-DefaultValue");
        DOM.replaceContent(zElementField, '<span class="FormUI-LinkInput">' + zLinkText + '</u>');
      }
      if (zLinkURL) {
        var zElementFieldParent = zElementField.parentNode;
        var zGoToLink = DOM.createElement('a','goToLink-'+aElement.ElementId, 'FormUI-GoToLink');
        zGoToLink.href = zLinkURL;
        zGoToLink.innerHTML = "[go to link]";
        if (zLinkTarget=="New Window") {
          zGoToLink.target = "_blank"
        }
        zGoToLink.style.position = "relative";
        zGoToLink.style.clear = "left";
        zGoToLink.style.left = zElementFieldParent.getElementsByTagName('label')[0].style.width;
        zElementFieldParent.appendChild(zGoToLink);
      }
      if (!zLinkText&&!zLinkURL) {
        DOM.addClass(zElementField,"FormUI-DefaultValue");
        DOM.replaceContent(zElementField, aElement.DefaultValue);
      }
      return true
    },
    timeoutEditElement: function(e,aParams) {
      if(FormUI.Draw["timeoutEdit" + aParams.Element.DisplayFormat]) {
        FormUI.Draw["timeoutEdit" + aParams.Element.DisplayFormat](e, aParams);
        return true;
      }
      if (e) {
        FormUI.cancelBubble(e, aParams);
      }
      if (aParams.Element.CanEdit != 'N') {
        if (aParams.Element.OnFocusFunction) {
          eval(aParams.Element.OnFocusFunction)(aParams);
        }
        return setTimeout(function(){FormUI.Draw.editElement(e,aParams);},0);
      } else {
        return true;
      }
    },
    editElement:function(e,aParams){
      var zContainer = $(aParams.Container);
      if (!zContainer) {return true};
      var zLabel = $('label-'+aParams.Container);
      FormUI.Hover.mouseOut(e, zContainer);
      Event.remove(zContainer,"onclick",FormUI.Draw.timeoutEditElement);
      Event.remove(zContainer, "onmouseover", FormUI.Hover.mouseOver, zContainer);
      Event.remove(zContainer, "onmouseout", FormUI.Hover.mouseOut, zContainer);
      DOM.removeClass(zContainer,'FormUI-Editable');
      DOM.removeClass( $(aParams.Element.ElementId) ,'Border');
      DOM.removeClass( $(aParams.Element.ElementId),'Hover');
      if ( aParams.Element.FieldHeight <= 3 && aParams.Element.DisplayFormat != "Date") {
        DOM.removeClass( $(aParams.Element.ElementId), 'ellipsis');
      }
      if (zLabel) {
        Event.remove(zLabel,"onclick",FormUI.Draw.timeoutEditElement);
        Event.remove(zLabel, "onmouseover", FormUI.Hover.mouseOver, zContainer);
        Event.remove(zLabel, "onmouseout", FormUI.Hover.mouseOut, zContainer);
      }
      var aElement = aParams.Element;
      var zOriginalContent = aParams.Element.Value;
      zContainer.innerHTML = "";
      FormUI.CancelSave=false;
      FormUI.removeUndoRedoEvent();
      if(FormUI.Draw.EditFunctions['create'+aElement.DisplayFormat]) {
        zContainer.style.zIndex = 200;
        return FormUI.Draw.EditFunctions['create'+aElement.DisplayFormat]({OriginalContent: zOriginalContent, Container:zContainer, Element:aElement});
      }
      return true;
    },
    EditFunctions: {
      getValue: function(aOriginalContent, aDefaultValue, aInput) {
        if (aOriginalContent == aDefaultValue) {
          DOM.removeClass(aInput, 'FormUI-DefaultValue');
          return '';
        }
        else {
          return aOriginalContent;
        }
      },
      createHeading2: function(aParams) {
      },
      createText: function(aParams) {
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zInputElement = DOM.createElement('input','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        zInputElement.setAttribute("type","text");
        var zOriginalContent = '';
        if (aElement.Value && aElement.Value != aElement.DefaultValue) {
          zOriginalContent =  aElement.Value.HTMLDecode();
        }
        zInputElement.setAttribute("value",zOriginalContent);
        zInputElement.setAttribute("autocomplete","off");
        if (aElement.MaxLength) {
          zInputElement.setAttribute("maxlength", aElement.MaxLength);
        }
        zContainer.appendChild(zInputElement);
        aElement.OnBlurParams = {Original:zOriginalContent, Input:zInputElement, Container:aElement.ElementId, Element:aElement};
        DOM.addEvent(zInputElement,"onkeydown", FormUI.keyHandler, {InputElement: zInputElement, OriginalContent: zOriginalContent, Element:aElement});
        DOM.addEvent(zInputElement,"onblur", FormUI.Save.timeoutFormInput, aElement.OnBlurParams );
        var zElementDimension  = FormUI.ElementDimension.get('Text', aElement);
        FormUI.ElementDimension.set(zInputElement, zElementDimension);
        zInputElement.focus();
        zInputElement.select();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        FormUI.addUndoRedoEvent({InputElement: zInputElement, Element: aElement});
        if(aElement.OnRemoveFunction)
          FormUI.Draw.RemoveElementFunction('',aParams);
        return zInputElement;
      },
      createDate: function(aParams) {
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zInputElement = DOM.createElement('input','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        zInputElement.setAttribute("type","text");
        var zOriginalContent =  FormUI.Draw.EditFunctions.getValue(aParams.OriginalContent, aElement.DefaultValue, zInputElement);
        if (aParams.OriginalContent == "" || aParams.OriginalContent == aElement.DefaultValue) {
          zInputElement.setAttribute("value", (new Date()).dateFormat(URI.User.DateFormat));
        } else if (zOriginalContent.length > 5) {
          zInputElement.setAttribute("value", zOriginalContent);
        } else {
          zInputElement.setAttribute("value", (Date.floatDate(zOriginalContent)).dateFormat(URI.User.DateFormat));
        }
        closeBtnParams = {Original:zOriginalContent, Input:zInputElement, Container:aElement.ElementId, Element:aElement};
        FormUI.ElementArray.CurrentItem = {SaveFunc: FormUI.Save.timeoutFormInput, Params: closeBtnParams};
        DOM.addEvent(zContainer,"onclick",FormUI.cancelBubble,closeBtnParams);
        DOM.addEvent(zInputElement,"onclick",FormUI.cancelBubble,closeBtnParams);
        EventCalendar.showDatePopUp(null, {aDialogBoxTitle: aElement.Label, closeBtnParams: closeBtnParams, saveInputParams: {Original:zOriginalContent, Input:zInputElement, Container:aElement.ElementId, Element:aElement}});
        zContainer.appendChild(zInputElement);
        DOM.addEvent(zInputElement,"onkeydown", FormUI.keyHandler, {InputElement: zInputElement, OriginalContent: zOriginalContent, Element:aElement});
        var zElementDimension  = FormUI.ElementDimension.get(aElement.DisplayFormat, aElement);
        zInputElement.style.width  = zElementDimension.Width + 'px';
        zInputElement.style.height = zElementDimension.Height + 'px';
        zInputElement.focus();
        zInputElement.select();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        FormUI.addUndoRedoEvent({InputElement: zInputElement, Element: aElement});
        return zInputElement;
      },
      createLongText: function(aParams) {
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zInputElement = DOM.createElement('textarea','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        var zOriginalContent =  FormUI.Draw.EditFunctions.getValue(aParams.OriginalContent, aElement.DefaultValue, zInputElement);
        zOriginalContent = FormUI.escapeHTMLBreaks(zOriginalContent);
        zContainer.appendChild(zInputElement);
        if (DOM.Browser.isIE || DOM.Browser.isSafari) {
          zInputElement.innerText = zOriginalContent;
        }
        else {
          zInputElement.innerHTML = zOriginalContent;
        }
        DOM.addEvent(zInputElement,"onkeydown", FormUI.keyHandler, {InputElement: zInputElement, OriginalContent: zOriginalContent, Element:aElement});
        DOM.addEvent(zInputElement,"onblur", FormUI.Save.timeoutFormInput, {Original:zOriginalContent, Input:zInputElement, Container:aElement.ElementId, Element:aElement});
        var zElementDimension  = FormUI.ElementDimension.get(aElement.DisplayFormat, aElement);
        FormUI.ElementDimension.set(zInputElement, zElementDimension);
        if (aElement.MaxLength && aElement.MaxLength != "") {
          var zCurrentCharacterCountContainer;
          if (aElement.ShowCharacterCount == "Y") {
            var zCharacterCountContainer = DOM.createElement('div','inp_'+aElement.ElementId+'_CharCnt', 'FormUI-CharacterCount');
            var zUsedCharacterCount = zOriginalContent.length || 0;
            zCurrentCharacterCountContainer = DOM.createElement('span','inp_'+aElement.ElementId+'_CurrentCharCnt', 'FormUI-CurrentCharacterCount');
            zCurrentCharacterCountContainer.innerHTML = ""+zUsedCharacterCount;
            var zMaxCharacterCountContainer = DOM.createElement('span','inp_'+aElement.ElementId+'_MaxCharCnt', 'FormUI-MaxCharacterCount');
            zMaxCharacterCountContainer.innerHTML = " of "+aElement.MaxLength;
            zCharacterCountContainer.appendChild(zCurrentCharacterCountContainer);
            zCharacterCountContainer.appendChild(zMaxCharacterCountContainer);
            var zFieldHeight = parseFloat(aElement.FieldHeight) || 3;
            var zFieldWidth = parseFloat(aElement.FieldWidth) || 80;
            if (aElement.Position=="") {
              zCharacterCountContainer.style.position = "absolute";
              zCharacterCountContainer.style.top = ((zFieldHeight*5)+2)+"px";
              zCharacterCountContainer.style.left = "1px"
              zCharacterCountContainer.style.width = (zFieldWidth*5)+"px"
            } else if (aElement.Position == "FlowsUnder") {
              zCharacterCountContainer.style.position = "absolute";
              zCharacterCountContainer.style.top = ((zFieldHeight*5)+5)+"px";
              zCharacterCountContainer.style.width = (zFieldWidth*5)+"px"
              zContainer.style.height = ((zFieldHeight*5)+15) + "px";
            }
            zContainer.appendChild(zCharacterCountContainer);
          }
          zInputElement.setAttribute("maxlength", aElement.MaxLength);
          DOM.addEvent(zInputElement,"onchange", FormUI.Validation.maxLength, zCurrentCharacterCountContainer);
          DOM.addEvent(zInputElement,"onkeyup", FormUI.Validation.maxLength, zCurrentCharacterCountContainer);
        }
        if (aElement.MaxRows && aElement.MaxRows != "") {
          zInputElement.setAttribute("maxrows", aElement.MaxRows);
          DOM.addEvent(zInputElement,"onchange", FormUI.Validation.maxLines, aElement);
          DOM.addEvent(zInputElement,"onkeyup", FormUI.Validation.maxLines, aElement);
        }
        zInputElement.focus();
        zInputElement.select();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        FormUI.addUndoRedoEvent({InputElement: zInputElement, Element: aElement});
        if(aElement.OnRemoveFunction)
          FormUI.Draw.RemoveElementFunction('',aParams);
        return zInputElement;
      },
      createStylizedText: function(aParams) {
        RTE.Params = aParams;
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zInputElement = DOM.createElement('textarea','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        var zOriginalContent =  FormUI.Draw.EditFunctions.getValue(aParams.OriginalContent, aElement.DefaultValue, zInputElement).replace(/<br>/gi,'<br />');
        zOriginalContent = zOriginalContent.HTMLDecode();
        if (DOM.Browser.isIE) {
          zInputElement.innerText = zOriginalContent;
        }
        else {
          zInputElement.innerHTML = zOriginalContent;
        }
        zContainer.appendChild(zInputElement);
        var zElementDimension  = FormUI.ElementDimension.get(aElement.DisplayFormat, aElement);
        zInputElement.style.width  = zElementDimension.Width + 'px';
        zInputElement.style.height = zElementDimension.Height + 'px';
        zInputElement.setAttribute("ClassNamesCsv",FormUI.CustomStyles_ClassNames);
        zInputElement.setAttribute("ClassDisplayNamesCsv",FormUI.CustomStyles_DisplayNames);
        zInputElement.focus();
        zInputElement.select();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        if (typeof(document.designMode) == "string" && (document.all || document.designMode == "off")) {
          if(zInputElement.value == "" && DOM && DOM.Browser && DOM.Browser.isGecko) {
            zInputElement.value = "<br />"; 
          }
          setTimeout("new RTE.widgEditor('" + zInputElement.id + "', RTE.Params)", 1)
        }
        var zContainerWidth = parseInt(zContainer.style.width.replace("px", ""));
        if(!isNaN(zContainerWidth) && zContainerWidth < 275) {
          var zContainerHeight = parseInt(zContainer.style.height.replace("px", ""));
          if(!isNaN(zContainerHeight)) {
            zContainer.style.height = (zContainerHeight + 30) + "px";
            aElement.Heightened     = "Y";
          }
        }
        return zInputElement;
      },
      createLightbox: function(aParams) {
        LiveAdMaker.LocalCampaigns.Customize.displayLightBoxView(aParams);
      },
      createCopySelection: function(aParams) {
        aParams.Element.LightboxDisplayObject = List.LightboxView.AdditionalDisplayObjectList.CopySelectPopUp;
        aParams.Element.LightBoxDialogWidth = 550;
        aParams.FormType = 'CopySelectForm';
        return FormUI.Draw.LightBox.create( aParams );
      },
      createAspectRatioSelection: function(aParams) {
        aParams.Element.LightboxDisplayObject = List.LightboxView.AdditionalDisplayObjectList.AspectRatioOptions;
        return FormUI.Draw.LightBox.create( aParams );
      },
      createItemFormSelection: function(aParams) {
        aParams.Element.LightboxDisplayObject = List.LightboxView.AdditionalDisplayObjectList.FormLightBox;
        aParams.Element.LightBoxDialogWidth = 760;
        aParams.Element.Label = aParams.Label;
        aParams.FormType = 'FormLightBox';
        return FormUI.Draw.FormLightBox.create( aParams );
      },
      createSelection: function(aParams) {
        var zOriginalDisplay;
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zOriginalContent = aParams.OriginalContent;
        if (aParams.Element.LightBoxOptions == "Y" ) {
          if(aParams.Element.FormLightBoxOptions == "Y"){
            return FormUI.Draw.EditFunctions.createItemFormSelection(aParams);
          }
          if (aParams.Element.CopyLightBoxOptions == "Y") {
            return FormUI.Draw.EditFunctions.createCopySelection(aParams);
          } else if(aParams.Element.AspectRatioOptions == "Y") {
            return FormUI.Draw.EditFunctions.createAspectRatioSelection(aParams);
          } else {
            return FormUI.Draw.LightBox.create( aParams );
          }
        } else if (aParams.Element.StylizedSelect == "Y" ) {
          return FormUI.Draw.StylizedSelect.create( aParams );
        }
        var zInputElement = DOM.createElement('select','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        if (aElement.IncludeBlankOption == 'Y') {
          var zBlankOption = DOM.createElement('option');
          zBlankOption.text = "";
          zBlankOption.value = "";
          zInputElement.options[0] = zBlankOption;
        }
        if (aElement.OptionsArray.length>0){
         var zOriginalContent = aElement.Value;
          var i=zInputElement.options.length;
          aElement.OptionsArray.forEach(function(aOption){
            var zOptionElement = DOM.createElement('option');
            zOptionElement.value = aOption.ItemPath;
            zOptionElement.text = aOption.DisplayName.HTMLDecode();
            zInputElement.options[i] = zOptionElement;
            if (zOriginalContent==aOption.ItemPath){
              zInputElement.selectedIndex = i;
              zOriginalDisplay = zOptionElement.text
            }
            i++;
          });
        } else {
          var zOptionsList = aElement.Options.split(',');
          var j;
          for (var i=0; i<zOptionsList.length; i++){
            j = i;
            var zOptionElement   = DOM.createElement('option');
            zOptionElement.value = zOptionsList[i];
            zOptionElement.text  = zOptionsList[i];
            if (aElement.IncludeBlankOption == 'Y')
              j++;
            zInputElement.options[j] = zOptionElement;
            if (zOriginalContent==zOptionsList[i]){
              zInputElement.selectedIndex = j;
              zOriginalDisplay = zOptionElement.textl;
            }
          }
        }
        zContainer.appendChild(zInputElement);
        DOM.addEvent(zInputElement,"onkeydown", FormUI.keyHandler, {InputElement: zInputElement, OriginalContent: zOriginalContent, Element:aElement});
        DOM.addEvent(zInputElement,"onblur", FormUI.Save.timeoutFormInput, {Original:zOriginalContent, OriginalDisplay: zOriginalDisplay, Input:zInputElement, Container:aElement.ElementId, Element:aElement});
        DOM.addEvent(zInputElement,"onchange", FormUI.Save.timeoutFormInput, {Original:zOriginalContent, OriginalDisplay: zOriginalDisplay, Input:zInputElement, Container:aElement.ElementId, Element:aElement});
        zInputElement.style.width  = FormUI.ElementDimension.get('Selection', aElement).Width + 'px';
        zInputElement.focus();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        FormUI.addUndoRedoEvent({InputElement: zInputElement, Element: aElement});
        if(aElement.OnRemoveFunction)
          FormUI.Draw.RemoveElementFunction('',aParams);
        return zContainer;
      },
      createCurrency: function (aParams) {
        aParams.OriginalContent = FormUI.Number.formatNumber(aParams.OriginalContent,'N','2');
        zInputElement = FormUI.Draw.EditFunctions.createText(aParams);
      },
      createSecondsInput: function (aParams){
        aParams.OriginalContent = FormUI.Number.formatNumber(aParams.OriginalContent,'N','3');
        zInputElement = FormUI.Draw.EditFunctions.createText(aParams);
      },
      createColorInput: function (aParams){
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zColorInputContainer = DOM.createElement('div',aParams.Element.ElementId +'container');
        var zInputElement = DOM.createElement('input','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        zInputElement.setAttribute("type","text");
        var zOriginalContent = '';
        if (aElement.Value && aElement.Value != aElement.DefaultValue) {
          zOriginalContent =  aElement.Value.HTMLDecode();
        }
        zInputElement.setAttribute("value",zOriginalContent);
        zContainer.appendChild(zColorInputContainer);
        zColorInputContainer.appendChild(zInputElement);
        DOM.addEvent(zInputElement,"onkeyup", FormUI.Draw.updateColor, {InputElement: zInputElement, OriginalContent: zOriginalContent, Element:aElement});
        DOM.addEvent(zInputElement,"onblur", FormUI.Save.timeoutFormInput, {Original:zOriginalContent, Input:zInputElement, Container:aElement.ElementId, Element:aElement});
        var zElementDimension  = FormUI.ElementDimension.get('Text', aElement);
        zInputElement.style.width  = zElementDimension.Width + 'px';
        zInputElement.style.height = zElementDimension.Height + 'px';
        zInputElement.focus();
        zInputElement.select();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        FormUI.addUndoRedoEvent({InputElement: zInputElement, Element: aElement});
        if(aElement.OnRemoveFunction)
          FormUI.Draw.RemoveElementFunction('',aParams);
        return zInputElement;
      },
      createMultiSelectCheckbox: function(aParams) {
        if(isTrue(aParams.Element.MultiSelectSelectPopup)) {
          return FormUI.Draw.MultiSelectPopUp.create(aParams);
        }
        var zOriginalDisplay;
        var zContainer = aParams.Container;
        var zMasterContainer = zContainer.parentNode.parentNode;
        for(i=0;i<zMasterContainer.childNodes.length;i++) {
          zMasterContainer.childNodes[i].style.zIndex = '';
        }
        var zCheckboxContainer = DOM.createElement('div', 'inp_' + aParams.Element.ElementId, 'selection-container');
        zContainer.appendChild(zCheckboxContainer);
        var aElement = aParams.Element;
        var zOriginalContent = aParams.OriginalContent;
        if (aElement.IncludeSelectAll == 'Y') {
          var zSelectAllCheckbox = FormUI.Draw.Checkbox.create( {Value: '' , Name: 'SelectAll_'+aParams.Element.ElementId, Id: 'SelectAll_'+aParams.Element.ElementId, Text: 'Select All' } );
          DOM.addEvent(zSelectAllCheckbox.Input,"onclick",FormUI.Draw.Checkbox.selectAll,{Original:zOriginalContent,Input:zSelectAllCheckbox.Input,Container:aElement.ElementId,Element:aElement});
          DOM.addEvent(zSelectAllCheckbox.Container,"onclick",FormUI.cancelBubble,{Original:zOriginalContent,Input:zSelectAllCheckbox.Input,Container:aElement.ElementId,Element:aElement});
          DOM.addEvent(zSelectAllCheckbox.Label,"onclick",FormUI.cancelBubble,{Original:zOriginalContent,Input:zSelectAllCheckbox.Input,Container:aElement.ElementId,Element:aElement});
          if (aElement.OptionsArray.length <= aElement.ValueArray.length)
            zSelectAllCheckbox.Input.checked =  true;
          zCheckboxContainer.appendChild(zSelectAllCheckbox.Container);
          aElement.MultiSelectCheckboxElementArray = [];
        }
        if (aElement.HasOptionAll == 'Y') {
          aElement.MultiSelectCheckboxElementArray = [];
        }
        if (aElement.OptionsArray.length>0){
          var zOriginalContent = aElement.Value;
          var i=0;
          var zCheckbox;
          aElement.OptionsArray.forEach(function(aOption){
            if (aOption.IsOptionGroup&&isTrue(aOption.IsOptionGroup)){
              zCheckbox = DOM.createTextElement("div",aOption.Id,"Label","font-weight:bold;color:#000000;margin-top:6px;",aOption.DisplayName);
              zCheckboxContainer.appendChild(zCheckbox);
              zCheckbox.setAttribute('optionarrayid', i);
            }else{
              zCheckbox = FormUI.Draw.Checkbox.create( {Value: aOption.ItemPath , Name: aParams.Element.ElementId, Id: aOption.Id, Text: aOption.DisplayName, IsOptionAll: aOption.IsOptionAll } );
              if (aElement.HasOptionAll == 'Y') {
                DOM.addEvent(zCheckbox.Input,"onclick",FormUI.Draw.Checkbox.checkIsAllOption,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement, Checkbox: zCheckbox});
              } else {
                DOM.addEvent(zCheckbox.Input,"onclick",FormUI.Draw.Checkbox.addValueToList,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
              }
              DOM.addEvent(zCheckbox.Container,"onclick",FormUI.cancelBubble,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
              DOM.addEvent(zCheckbox.Label,"onclick",FormUI.cancelBubble,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
              zCheckboxContainer.appendChild(zCheckbox.Container);
              zCheckbox.Input.checked = aElement.ValueArray.contains(aOption.ItemPath);
              zCheckbox.Input.setAttribute('optionarrayid', i);
            }
            if (aElement.MultiSelectCheckboxElementArray)
              aElement.MultiSelectCheckboxElementArray.push(zCheckbox);
            i++;
          });
        } else if (aElement.Options) {
          var zOptionsList = aElement.Options.split(',');
          for (var i=0; i<zOptionsList.length; i++){
            zCheckbox = FormUI.Draw.Checkbox.create( {Value: zOptionsList[i] , Name: aParams.Element.ElementId, Id: zOptionsList[i], Text: zOptionsList[i] } );
            DOM.addEvent(zCheckbox.Input,"onclick",FormUI.Draw.Checkbox.addValueToList,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
            DOM.addEvent(zCheckbox.Container,"onclick",FormUI.cancelBubble,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
            DOM.addEvent(zCheckbox.Label,"onclick",FormUI.cancelBubble,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
            zCheckboxContainer.appendChild(zCheckbox.Container);
            zCheckbox.Input.checked = aElement.ValueArray.contains(zOptionsList[i]);
            zCheckbox.Input.setAttribute('optionarrayid', i);
            if (aElement.MultiSelectCheckboxElementArray)
              aElement.MultiSelectCheckboxElementArray.push(zCheckbox);
            }
        }
        FormUI.ElementArray.CurrentItem = {SaveFunc: FormUI.Save.formInput, Params: {Original:aParams.Element.ValueArray.copy() ,Input:zCheckboxContainer, Container:aElement.ElementId, Element:aElement}};
        zCheckboxContainer.style.height = zCheckboxContainer.offsetHeight + 'px';
        zCheckboxContainer.parentNode.parentNode.style.zIndex = '500';
        if (aParams.Element.ContainerTopAdjust){
          zCheckboxContainer.parentNode.style.top = (zCheckboxContainer.parentNode.offsetHeight + aParams.Element.ContainerTopAdjust) + 'px';
        }
        if (!aParams.Element.RemoveCloseText || !isTrue(aParams.Element.RemoveCloseText)){
          var CloseText = DOM.createTextElement("div","","FormUI-CloseEditOverlay","","x");
          zCheckboxContainer.appendChild(CloseText);
          CloseText.style.top = (zCheckboxContainer.offsetTop + 6) + 'px';
          CloseText.style.left = (zCheckboxContainer.offsetWidth - 15) + 'px';
        }
        return zCheckboxContainer;
      },
      createRadio: function(aParams) {
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zOriginalContent = aParams.OriginalContent;
        var zOptionsList = aElement.Options.split(',');
        for (var i=0; i<zOptionsList.length; i++){
          var zOptionElement = DOM.createElement('input');
          zOptionElement.value = zOptionsList[i];
          zOptionElement.type='radio';
          zOptionElement.id='inp_'+aElement.ElementId+'_'+zOptionsList[i];
          zOptionElement.name='inp_'+aElement.ElementId;
          zContainer.appendChild(zOptionElement);
          var newLabel = DOM.createElement('label','inp_'+aElement.ElementId+'_'+zOptionsList[i]+'_Label');
          newLabel.htmlFor = 'inp_'+aElement.ElementId+'_'+zOptionsList[i];
          newLabel.appendChild(document.createTextNode(zOptionsList[i]));
          zContainer.appendChild(newLabel);
          DOM.addEvent(zOptionElement,"onclick",FormUI.Save.formInput,{Original:zOriginalContent,Input:zOptionElement,Container:aElement.ElementId,Element:aElement});
          if (zOriginalContent==zOptionsList[i]){
            zOptionElement.checked = true;
          }
          var zTabParams = {InputElement: zOptionElement, OriginalContent: zOriginalContent, NextOptionIndex: (i+1), Element:aElement}
          DOM.addEvent(zOptionElement,"onkeydown", FormUI.keyHandler, zTabParams);
          if(i == 0) {
            DOM.addEvent(zOptionElement,"onblur", FormUI.Draw.ResetFunctions.resetField, {Element:aElement});
            zOptionElement.focus();
          }
        }
        return zContainer;
      },
      createCheckbox: function (aParams) {
        var aElement = aParams.Element;
        var zContainer = aParams.Container;
        var zLabel = aElement.Label ? aElement.Label : "";
        var zValue = aElement.CheckboxTrueValue ? aElement.CheckboxTrueValue : "Y";
        var aOption = {Id:aElement.ElementId, Text:zLabel, Name:aElement.ElementId, Value:zValue};
        var zCheckbox = FormUI.Draw.Checkbox.create(aOption);
        var zOriginalContent = FormUI.Draw.EditFunctions.getValue(aParams.OriginalContent, aElement.DefaultValue, zCheckbox.Input);
        zContainer.appendChild(zCheckbox.Container);
        if (aElement.Value == zValue) {
            zCheckbox.Input.checked = true;
            try {
              zCheckbox.Input.checked = true;
              zCheckbox.checked = true;
            } catch(e) {
              zCheckbox.Input.checked = true;
            }
        }
        aElement.EditStateOnly = aElement.EditStateOnly ? aElement.EditStateOnly : true;
        if (aElement.EditStateOnly == false) {
            DOM.addEvent(zCheckbox.Input, "onblur", FormUI.Save.timeoutFormInput, {Original:zOriginalContent, Input:zCheckbox.Input, Container:aElement.ElementId, Element:aElement});
        }
        DOM.addEvent(zCheckbox.Input, "onkeydown", FormUI.keyHandler, {InputElement:zCheckbox.Input, OriginalContent:zOriginalContent});
        DOM.addEvent(zCheckbox.Input, "onclick", FormUI.Save.timeoutFormInput, {Input:zCheckbox.Input, Container:aElement.ElementId, Element:aElement});
        return zContainer;
      },
      createFile: function(aParams) {
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zOriginalContent = aParams.OriginalContent;
        FormUI.Draw.FileInput.UploadCount++;
        FormUI.Draw.FileInput.UploadElementList['File' + FormUI.Draw.FileInput.UploadCount] = aElement;
        FormUI.Draw.FileInput.FormItem = aElement;
        FormUI.Draw.FileInput.Params = { Original:zOriginalContent, Container:aElement.ElementId, Element:aElement };
        DOM.addEvent($('label-' + aElement.ElementId),"onclick", FormUI.Draw.FileInput.hide, 'File' + FormUI.Draw.FileInput.UploadCount);
        if (!$("FileInput_MainContainer"+ aElement.ElementId)) {
          return FormUI.Draw.FileInput.create(aParams);
        } else {
          return FormUI.Draw.FileInput.show(aElement.ElementId);
        }
      },
      createPassword: function(aParams) {
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zOriginalContent = aParams.Element.Value;
        var zInputElement = DOM.createElement('input','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        zInputElement.setAttribute("type","password");
        zInputElement.setAttribute("value",zOriginalContent);
        zContainer.appendChild(zInputElement);
        DOM.addEvent(zInputElement,"onkeydown", FormUI.keyHandler, {InputElement: zInputElement, OriginalContent: zOriginalContent, Element:aElement});
        DOM.addEvent(zInputElement,"onblur", FormUI.Save.timeoutFormInput, {Original:zOriginalContent, Input:zInputElement, Container:aElement.ElementId, Element:aElement});
        var zElementDimension  = FormUI.ElementDimension.get(aElement.DisplayFormat, aElement);
        zInputElement.style.width  = zElementDimension.Width + 'px';
        zInputElement.style.height = zElementDimension.Height + 'px';
        zInputElement.focus();
        zInputElement.select();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        FormUI.addUndoRedoEvent({InputElement: zInputElement, Element: aElement});
        if(aElement.OnRemoveFunction)
          FormUI.Draw.RemoveElementFunction('',aParams);
        return zInputElement;
      },
      createDimension: function(aParams) {
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zOriginalContent;
        if(aElement.Unit) {
          zOriginalContent = aParams.OriginalContent.split(aElement.Unit)[0];
        }
        else {
          zOriginalContent = aParams.OriginalContent;
        }
        var zHasUnit = false;
        var zInputElement = DOM.createElement('input','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        zInputElement.setAttribute("type","text");
        zInputElement.setAttribute("value",zOriginalContent);
        zContainer.appendChild(zInputElement);
        if(aElement.Unit) {
          var zUnitDiv = DOM.createElement('div','Unit'+aElement.ElementId,'FormUI-Unit');
          zUnitDiv.innerHTML = aElement.Unit;
          zUnitDiv.style.position = 'absolute';
          zUnitDiv.style.left = ((aElement.FieldWidth * FormUI.GridMultiplier)+((aElement.Unit.length-1)*FormUI.GridMultiplier))+'px';
          zUnitDiv.style.top = ((aElement.FieldHeight * FormUI.GridMultiplier)-10)+'px';
          zContainer.appendChild(zUnitDiv);
          zHasUnit = true;
        }
        DOM.addEvent(zInputElement,"onkeydown", FormUI.keyHandler, {InputElement: zInputElement, OriginalContent: zOriginalContent, Element:aElement});
        DOM.addEvent(zInputElement,"onblur", FormUI.Save.timeoutFormInput, {Original:zOriginalContent, Input:zInputElement, Container:aElement.ElementId, Element:aElement});
        var zElementDimension  = FormUI.ElementDimension.get(aElement.DisplayFormat, aElement);
        zInputElement.style.width  = zElementDimension.Width + 'px';
        zInputElement.style.height = zElementDimension.Height + 'px';
        zInputElement.focus();
        zInputElement.select();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        FormUI.addUndoRedoEvent({InputElement: zInputElement, Element: aElement});
      },
      createHierarchyMultiSelectCheckbox: function(aParams) {
        var zOriginalDisplay;
        var zContainer = aParams.Container;
        var zCheckboxContainer = DOM.createElement('div', 'inp_' + aParams.Element.ElementId, 'selection-container');
        zContainer.appendChild(zCheckboxContainer);
        var aElement = aParams.Element;
        var zOriginalContent = aParams.OriginalContent;
        aElement.RegionArray = [];
        aElement.MultiSelectCheckboxElementArray = [];
        if (aElement.OptionsArray.length>0) {
          FormUI.Draw.drawRecursiveCheckboxes(aElement.OptionsArray,aElement,aElement,aParams,zCheckboxContainer);
          if (aElement.SelectAllCheckbox && aElement.RegionArray.length <= aElement.ValueArray.length) {
            aElement.SelectAllCheckbox.Input.checked = true;
          }
        }
        FormUI.ElementArray.CurrentItem = {SaveFunc: FormUI.Save.formInput, Params: {Original:aParams.Element.ValueArray.copy() ,Input:zCheckboxContainer, Container:aElement.ElementId, Element:aElement}};
        zCheckboxContainer.style.height = zCheckboxContainer.offsetHeight + 'px';
        if (!aParams.Element.RemoveCloseText || !isTrue(aParams.Element.RemoveCloseText)){
          var CloseText = DOM.createTextElement("div","","FormUI-CloseEditOverlay","","x");
          zCheckboxContainer.appendChild(CloseText);
          CloseText.style.top = (zCheckboxContainer.offsetTop + 6) + 'px';
          CloseText.style.left = (zCheckboxContainer.offsetWidth - 15) + 'px';
        }
        return zCheckboxContainer;
      },
      createSingleSelectRadio: function(aParams) {
        var zOriginalDisplay;
        var zContainer = aParams.Container;
        var zRadioContainer = DOM.createElement('div', 'inp_' + aParams.Element.ElementId, 'selection-container');
        zContainer.appendChild(zRadioContainer);
        var aElement = aParams.Element;
        var zOriginalContent = aParams.OriginalContent;
        if (aElement.OptionsArray.length>0){
          var zOriginalContent = aElement.Value;
          var i=0;
          var zRadio;
          aElement.OptionsArray.forEach(function(aOption){
            zRadio = FormUI.Draw.Radio.create( {Value: aOption.ItemPath , Name: aParams.Element.ElementId, Id: aOption.Id, Text: aOption.DisplayName } );
            DOM.addEvent(zRadio.Input,"onclick",FormUI.Draw.Radio.setValue,{Original:zOriginalContent,Input:zRadio.Input,Container:aElement.ElementId,Element:aElement});
            DOM.addEvent(zRadio.Container,"onclick",FormUI.Draw.Radio.setValue,{Original:zOriginalContent,Input:zRadio.Input,Container:aElement.ElementId,Element:aElement});
            DOM.addEvent(zRadio.Label,"onclick",FormUI.Draw.Radio.setValue,{Original:zOriginalContent,Input:zRadio.Input,Container:aElement.ElementId,Element:aElement});
            zRadioContainer.appendChild(zRadio.Container);
            if (aElement.Value == zRadio.Input.value || aElement.ValueArray[0] == zRadio.Input.value) {
              zRadio.Input.checked = true;
            }
            zRadio.Input.setAttribute('optionarrayid', i);
            zRadio.Input.setAttribute('DisplayValue', aOption.DisplayName);
            i++;
          });
        } else if (aElement.Options) {
          var zOptionsList = aElement.Options.split(',');
          for (var i=0; i<zOptionsList.length; i++){
            zRadio = FormUI.Draw.Radio.create( {Value: zOptionsList[i] , Name: aParams.Element.ElementId, Id: zOptionsList[i], Text: zOptionsList[i] } );
            DOM.addEvent(zRadio.Input,"onclick",FormUI.Draw.Radio.setValue,{Original:zOriginalContent,Input:zRadio.Input,Container:aElement.ElementId,Element:aElement});
            DOM.addEvent(zRadio.Container,"onclick",FormUI.Draw.Radio.setValue,{Original:zOriginalContent,Input:zRadio.Input,Container:aElement.ElementId,Element:aElement});
            DOM.addEvent(zRadio.Label,"onclick",FormUI.Draw.Radio.setValue,{Original:zOriginalContent,Input:zRadio.Input,Container:aElement.ElementId,Element:aElement});
            zRadioContainer.appendChild(zRadio.Container);
            if (aElement.Value == zRadio.Input.value) {
              zRadio.Input.checked = true;
            }
            zRadio.Input.setAttribute('optionarrayid', i);
          }
        }
        zRadioContainer.style.height = zRadioContainer.offsetHeight + 'px';
        zRadioContainer.parentNode.style.position = "relative";
        if (aParams.Element.ContainerTopAdjust){
          zRadioContainer.parentNode.style.top = (zRadioContainer.parentNode.offsetTop + aParams.Element.ContainerTopAdjust) + 'px';
        }
        FormUI.ElementArray.CurrentItem = {SaveFunc: FormUI.Save.formInput, Params: {OriginalDisplay: aParams.Element.DisplayValue, Original:aParams.Element.Value ,Input:zRadioContainer, Container:aElement.ElementId, Element:aElement}};
        if (!aParams.Element.RemoveCloseText || !isTrue(aParams.Element.RemoveCloseText)){
          var CloseText = DOM.createTextElement("div","","FormUI-CloseEditOverlay","","x");
          zRadioContainer.appendChild(CloseText);
          CloseText.style.top = (zRadioContainer.offsetTop + 6) + 'px';
          CloseText.style.left = (zRadioContainer.offsetWidth - 15) + 'px';
        }
        return zRadioContainer;
      },
      createAsset: function(aParams) {
        aParams.AssetInput = true;
        FormUI.Draw.EditFunctions.createFile(aParams);
      },
      createMultipleAsset: function(aParams) {
        aParams.MultipleAssetInput = true;
        FormUI.Draw.EditFunctions.createFile(aParams);
      },
      createSearchInput: function(aParams) {
        var zContainer = aParams.Container;
        var aElement = aParams.Element;
        var zSearchInputContainer = DOM.createElement('div',aParams.Element.ElementId +'container', 'Icon_SearchBar');
        var zInputElement = DOM.createElement('input','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        zInputElement.setAttribute("type","text");
        zSearchInputContainer.style.width = (aElement.SearchInputContainerWidth) ? aElement.SearchInputContainerWidth + 'px' : '148px';
        zInputElement.className = "FormUISearchInput";
        var zOriginalContent = '';
        var zSearchInputText =  aElement.SearchInputText || '[Dealer Search]';
        zInputElement.setAttribute("value",zSearchInputText);
        zInputElement.setAttribute("autocomplete","off");
        if (aElement.MaxLength) {
          zInputElement.setAttribute("maxlength", aElement.MaxLength);
        }
        zContainer.appendChild(zSearchInputContainer);
        zSearchInputContainer.appendChild(zInputElement);
        DOM.addEvent(zInputElement,"onkeydown", FormUI.keyHandler, {InputElement: zInputElement, OriginalContent: zOriginalContent, Element:aElement});
        var zElementDimension  = FormUI.ElementDimension.get('Text', aElement);
        zInputElement.style.width  = (aElement.SearchInputElementWidth) ? aElement.SearchInputElementWidth + 'px' : zElementDimension.Width + 'px';
        zInputElement.style.height = (aElement.SearchInputElementHeight) ? aElement.SearchInputElementHeight + 'px' : zElementDimension.Height + 'px';
        zInputElement.focus();
        zInputElement.select();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        if(aElement.OnRemoveFunction)
          FormUI.Draw.RemoveElementFunction('',aParams);
        return zInputElement;
      },
      createSingleSelectSearchInput: function(aParams) {
        var zDialogMainContainer = DOM.createElement("div","DialogMainContainer");
        aParams.Element.DialogMainContainer = zDialogMainContainer;
        zDialogMainContainer.style.height = "auto";
        zDialogMainContainer.style.position = "relative";
        var zOriginalContainer = aParams.Container;
        DOM.replaceContent( zOriginalContainer,  aParams.Element.DisplayValue );
        DOM.addEvent(zOriginalContainer, "onmouseover", FormUI.Hover.mouseOver, zOriginalContainer);
        DOM.addEvent(zOriginalContainer, "onmouseout", FormUI.Hover.mouseOut, zOriginalContainer);
        var zLabel = $('label-'+aParams.Element.ElementId);
        if (zLabel) {
          DOM.addEvent(zLabel, "onmouseover", FormUI.Hover.mouseOver, zOriginalContainer);
          DOM.addEvent(zLabel, "onmouseout", FormUI.Hover.mouseOut, zOriginalContainer);
        }
        DOM.addEvent(zOriginalContainer,"onclick",FormUI.Draw.timeoutEditElement,{Container:aParams.Element.ElementId,Element:aParams.Element});
        if (zLabel) {
          DOM.addEvent(zLabel,"onclick",FormUI.Draw.timeoutEditElement,{Container:aParams.Element.ElementId,Element:aParams.Element});
        }
        var zContainer = DOM.createElement('div',aParams.Element.ElementId +'container', '');
        aParams.Container = zContainer;
        var aElement = aParams.Element;
        aElement.OriginalContainer = zOriginalContainer;
        var zSearchInputContainer = DOM.createElement('div',aParams.Element.ElementId +'container', 'Icon_SearchBar');
        var zInputElement = DOM.createElement('input','inp_'+aElement.ElementId, 'FormUI-FieldEdit FormUI-FieldEdit-'+aElement.DisplayFormat);
        zInputElement.setAttribute("type","text");
        zSearchInputContainer.style.width = (aElement.SearchInputContainerWidth) ? aElement.SearchInputContainerWidth + 'px' : '148px';
        zSearchInputContainer.style.position = "relative";
        zInputElement.className = "FormUISearchInput";
        var zOriginalContent = '';
        var zSearchInputText =  aElement.SearchInputText || '[Dealer Search]';
        zInputElement.setAttribute("value",zSearchInputText);
        zInputElement.setAttribute("autocomplete","off");
        if (aElement.MaxLength) {
          zInputElement.setAttribute("maxlength", aElement.MaxLength);
        }
        zContainer.appendChild(zSearchInputContainer);
        zSearchInputContainer.appendChild(zInputElement);
        DOM.addEvent(zInputElement,"onclick", FormUI.Draw.EditFunctions.clearInputField);
        DOM.addEvent(zInputElement,"onkeydown", FormUI.keyHandler, {InputElement: zInputElement, OriginalContent: zOriginalContent, Element:aElement});
        var zElementDimension  = FormUI.ElementDimension.get('Text', aElement);
        zInputElement.style.width  = (aElement.SearchInputElementWidth) ? aElement.SearchInputElementWidth + 'px' : zElementDimension.Width + 'px';
        zInputElement.style.height = (aElement.SearchInputElementHeight) ? aElement.SearchInputElementHeight + 'px' : zElementDimension.Height + 'px';
        zInputElement.focus();
        zInputElement.select();
        FormUI.Draw.runInputFocus('',aParams,zInputElement);
        if(aElement.RecentSearchPath){
          FormUI.Draw.EditFunctions.getRecentSearches(aParams);
        }
        if(aElement.OnRemoveFunction)
          FormUI.Draw.RemoveElementFunction('',aParams);
        zDialogMainContainer.appendChild(zContainer);
        var zDialogWidth = aElement.DialogWidth || 350;
        var zDialogHeight = aElement.DialogHeight || 300;
        aElement.Dialog = DOM.Dialog.show( zDialogMainContainer, "center", aElement.Label, zDialogWidth, zDialogHeight );
        FormUI.ElementArray.CurrentItem = null;
        return zInputElement;
      },
      clearInputField: function(){
        this.setAttribute("value", "");
      },
      closeDialog: function(aResults, aParams) {
        DOM.Dialog.hide();
      },
      getRecentSearches: function(aParams) {
        var aPostValues = aParams.Element.RecentSearchesPostValues || {};
        var aPropertyPrefix = aParams.Element.RecentSearchesPropertyPrefix || aParams.Element.FieldId;
        var aRecentSearchParams = aParams.Element.RecentSearchParams;
        Ajax.makeRequest({
          URL: URI.pageURL(unescape(aParams.Element.RecentSearchPath), 'GetRecentSearches', aRecentSearchParams, true),
          Function: FormUI.Draw.EditFunctions.showRecentSearches,
          Method: "POST",
          PostValues: aPostValues,
          Params: aParams
        });
        return true;
      },
      showRecentSearches: function(aResults, aParams) {
        var aElement = aParams.Element
        if ($(aElement.ElementId + "_RecentSearchesContainer")){
          var zRecentSearchesContainer = $(aElement.ElementId + "_RecentSearchesContainer");
          DOM.replaceContent(zRecentSearchesContainer);
        }else{
          var zRecentSearchesContainer = DOM.createElement("div",aElement.ElementId + "_RecentSearchesContainer");
        }
        var zDialogMainContainer = aElement.DialogMainContainer;
        if (aResults && aResults.Data && aResults.Data.length > 0){
          zRecentSearchesContainer.style.height = "auto";
          zRecentSearchesContainer.style.position = "relative";
          var zRecentSearchesHeading = DOM.createElement("div","RecentSearchLabel");
          zRecentSearchesHeading.innerHTML = "Recent";
          zRecentSearchesHeading.style.position = "relative";
          zRecentSearchesHeading.style.fontWeight = "bold";
          zRecentSearchesHeading.style.color = "#000000";
          zRecentSearchesHeading.style.width = "150px";
          zRecentSearchesHeading.style.marginTop = "10px";
          zRecentSearchesContainer.appendChild(zRecentSearchesHeading);
          var zRecentList = DOM.createElement("div","MediaOutList_ul");
          aResults.Data.forEach( function(aRecentMediaOutlet) {
            var zMediaOutlet_li = DOM.createElement("li","","MediaOutlet_li");
            zMediaOutlet_li.style.listStyleType = "none";
            var zMediaOutlet_Link = DOM.createElement("a","","MediaOutlet_Link");
            zMediaOutlet_Link.innerHTML = aRecentMediaOutlet.DisplayName;
            zMediaOutlet_Link.setAttribute("href", "javascript:void(0);");
            DOM.addEvent(zMediaOutlet_Link, "onclick", FormUI.OptionGroup.saveSingleSelectSearchInputV2, {ItemPath: aRecentMediaOutlet.ItemPath, DisplayName: aRecentMediaOutlet.DisplayName, FormElement: aParams.Element});
            zMediaOutlet_li.appendChild(zMediaOutlet_Link);
            zRecentList.appendChild(zMediaOutlet_li);
          });
           zRecentSearchesContainer.appendChild(zRecentList);
          zDialogMainContainer.appendChild(zRecentSearchesContainer);
        }
        return true;
      },
      createLink: function(aParams) {
        var zElementFieldParent = aParams.Container.parentNode;
        var zGoToLink = zElementFieldParent.getElementsByTagName('a')[0];
        if (zGoToLink) {
          DOM.removeElement(zGoToLink);
        }
        var zLinkInputDialogContainer = DOM.createElement("div","LinkInputDialogContainer");
        var zLinkInputDialog = DOM.Dialog.showForm(zLinkInputDialogContainer,"center","Edit Link",520,160,"LinkInfo",aParams.Element.Form.ItemPath,{AdditionalUrlParams:"&aFieldId="+aParams.Element.FieldId});
        zLinkInputDialog.returnedForm.LinkParams = aParams;
        DOM.addEvent($(zLinkInputDialog.DialogBoxId+"_closeBtn"),"onclick",FormUI.Save.Input.cancelSaveLink,aParams);
        return true
      }
    },
    AddFunctions: {
      elementCSVInput: function(e,aParams) {
      }
    },
    Checkbox: {
      create: function(aOption) {
        var zInputElementContainer = DOM.createElement('div','inp_' +aOption.Id + '_Container', 'CheckboxContainer');
        var zInputElement = DOM.createElement('input','inp_' +aOption.Id);
        zInputElement.setAttribute("type", "checkbox");
        zInputElement.setAttribute("value", aOption.Value);
        zInputElement.setAttribute("name", 'inp_' + aOption.Name);
        var zInputLabel = DOM.createTextElement('label','inp_' +aOption.Id + 'Label','','',aOption.Text.HTMLDecode());
        zInputLabel.setAttribute("for", 'inp_' +aOption.Id);
        zInputElementContainer.appendChild(zInputElement);
        zInputElementContainer.appendChild(zInputLabel);
        var zIsOptionAll = aOption.IsOptionAll || '';
        return {Container: zInputElementContainer, Input: zInputElement, Label: zInputLabel, IsOptionAll: zIsOptionAll};
      },
      addValueToList: function(e, aParams) {
       FormUI.cancelBubble(e, aParams);
       var zDisplayValue = FormUI.Save.Input.getDisplayValue(aParams);
       var zNewValue = aParams.Input.value;
       if (aParams.Element.DisplayValueArray) {
          if (zDisplayValue == '') {
            var zOptionDisplayName, zOptionValue;
            var zOptionId = aParams.Input.getAttribute('optionarrayid');
            var zOptionsArray = aParams.Element.RegionArray || aParams.Element.OptionsArray;
            if (zOptionsArray.length>0) {
              zOptionDisplayName = zOptionsArray[zOptionId].DisplayName;
              zOptionValue = zOptionsArray[zOptionId].ItemPath;
            } else {
              zOptionDisplayName = aParams.Input.value;
              zOptionValue = aParams.Input.value;
            }
            aParams.Element.DisplayValueArray.remove(zOptionDisplayName);
            aParams.Element.ValueArray.remove(zOptionValue);
          }
          else {
            aParams.Element.DisplayValueArray.push(zDisplayValue);
            aParams.Element.ValueArray.push(zNewValue);
          }
        }
        return true;
      },
      addHierarchyValueToList: function (e, aParams) {
        FormUI.cancelBubble(e, aParams);
        var zDisplayValue = FormUI.Save.Input.getDisplayValue(aParams);
        var zNewValue = aParams.Input.value;
        var zOptionDisplayName, zOptionValue;
        var zOptionId = aParams.Input.getAttribute('optionarrayid');
        var aOption = aParams.Element.RegionArray[zOptionId];
        if (aParams.Element.DisplayValueArray) {
          if (zDisplayValue == '') {
            if (aParams.Element.RegionArray.length>0) {
              zOptionDisplayName = aParams.Element.RegionArray[zOptionId].DisplayName;
              zOptionValue = aParams.Element.RegionArray[zOptionId].ItemPath;
            } else {
              zOptionDisplayName = aParams.Input.value;
              zOptionValue = aParams.Input.value;
            }
            aParams.Element.DisplayValueArray.remove(zOptionDisplayName);
            aParams.Element.ValueArray.remove(zOptionValue);
            if (aOption.SubItemArray && aParams.DeselectSubItemRecurse=='Y') {
              if (aParams.Element.ProperHierarchySelect=="Y") {
                var zChecked = (aParams.Input.checked) ? true : false;
                for (var i=0; i<aOption.SubItemArray.length; i++){
                  var zCheckbox = aOption.SubItemArray[i];
                  zCheckbox.Input.checked = zChecked;
                  FormUI.Draw.Checkbox.addHierarchyValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, DeselectSubItemRecurse: 'Y'});
                }
              }
              else {
                for (var i=0; i<aOption.SubItemArray.length; i++){
                  var zCheckbox = aOption.SubItemArray[i];
                  if (zCheckbox.Input.checked == true)
                    zCheckbox.Input.checked = false;
                  FormUI.Draw.Checkbox.addHierarchyValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, DeselectSubItemRecurse: 'Y'});
                }
              }
            }
            if (aOption.OwnerItem && aParams.DeselectOwnerRecurse=='Y') {
              if (aParams.Element.ProperHierarchySelect=="Y") {
                if (!aParams.Input.checked) {
                  var zCheckbox = aOption.OwnerItem;
                  zCheckbox.Input.checked = false;
                  FormUI.Draw.Checkbox.addHierarchyValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, DeselectOwnerRecurse: 'Y'});
                }
              }
              else {
                var zCheckbox = aOption.OwnerItem;
                if (zCheckbox.Input.checked == true)
                  zCheckbox.Input.checked = false;
                FormUI.Draw.Checkbox.addHierarchyValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, DeselectOwnerRecurse: 'Y'});
              }
            }
          }
          else {
            aParams.Element.DisplayValueArray.push(zDisplayValue);
            aParams.Element.ValueArray.push(zNewValue);
            if (aOption.SubItemArray) {
              if (aParams.Element.ProperHierarchySelect=="Y") {
                var zChecked = (aParams.Input.checked) ? true : false;
                for (var i=0; i<aOption.SubItemArray.length; i++){
                  var zCheckbox = aOption.SubItemArray[i];
                  zCheckbox.Input.checked = zChecked;
                  FormUI.Draw.Checkbox.addHierarchyValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, DeselectSubItemRecurse: 'Y'});
                }
              }
              else {
                for (var i=0; i<aOption.SubItemArray.length; i++){
                  var zCheckbox = aOption.SubItemArray[i];
                  if (zCheckbox.Input.checked == true)
                    zCheckbox.Input.checked = false;
                  FormUI.Draw.Checkbox.addHierarchyValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, DeselectSubItemRecurse: 'Y'});
                }
              }
            }
            if (aOption.OwnerItem) {
              if (aParams.Element.ProperHierarchySelect=="Y") {
                if (!aParams.Input.checked) {
                  var zCheckbox = aOption.OwnerItem;
                  zCheckbox.Input.checked = false;
                  FormUI.Draw.Checkbox.addHierarchyValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, DeselectOwnerRecurse: 'Y'});
                }
              }
              else {
                var zCheckbox = aOption.OwnerItem;
                if (zCheckbox.Input.checked == true)
                  zCheckbox.Input.checked = false;
                FormUI.Draw.Checkbox.addHierarchyValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, DeselectOwnerRecurse: 'Y'});
              }
            }
          }
        }
        return true;
      },
      addHierarchyValueToListV2: function (e, aParams) {
        FormUI.cancelBubble(e, aParams);
        var zDisplayValue = FormUI.Save.Input.getDisplayValue(aParams);
        var zNewValue = aParams.Input.value;
        var zOptionDisplayName, zOptionValue;
        var zOptionId = aParams.Input.getAttribute('optionarrayid');
        var aOption = aParams.Element.RegionArray[zOptionId];
        if (aParams.Element.DisplayValueArray) {
          if (zDisplayValue == '') {
            if (aParams.Element.RegionArray.length>0) {
              zOptionDisplayName = aParams.Element.RegionArray[zOptionId].DisplayName;
              zOptionValue = aParams.Element.RegionArray[zOptionId].ItemPath;
            }
            else {
              zOptionDisplayName = aParams.Input.value;
              zOptionValue = aParams.Input.value;
            }
            aParams.Element.DisplayValueArray.remove(zOptionDisplayName);
            aParams.Element.ValueArray.remove(zOptionValue);
            if (aParams.ContinueRecurse!="N") {
              if (aOption.SubItemArray) {
                for (var i=0; i<aOption.SubItemArray.length; i++){
                  var zCheckbox = aOption.SubItemArray[i];
                  if (zCheckbox.Input.checked) {
                    zCheckbox.Input.checked = false;
                    FormUI.Draw.Checkbox.addHierarchyValueToListV2(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, ContinueRecurse:'N'});
                  }
                }
              }
              if (aOption.OwnerItem) {
                var zCheckbox = aOption.OwnerItem;
                if (zCheckbox.Input.checked) {
                  zCheckbox.Input.checked = false;
                  FormUI.Draw.Checkbox.addHierarchyValueToListV2(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, ContinueRecurse:'N'});
                }
              }
              if (aParams.Element.SelectAllCheckbox) {
                aParams.Element.SelectAllCheckbox.Input.checked = false;
              }
            }
          }
          else {
            aParams.Element.DisplayValueArray.push(zDisplayValue);
            aParams.Element.ValueArray.push(zNewValue);
            if (aParams.ContinueRecurse!="N") {
              if (aOption.SubItemArray) {
                for (var i=0; i<aOption.SubItemArray.length; i++){
                  var zCheckbox = aOption.SubItemArray[i];
                  if (!zCheckbox.Input.checked) {
                    zCheckbox.Input.checked = true;
                    FormUI.Draw.Checkbox.addHierarchyValueToListV2(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, ContinueRecurse:'N'});
                  }
                }
              }
              if (aOption.OwnerItem) {
                var zCheckbox = aOption.OwnerItem;
                var zOwnerOptionId = zCheckbox.Input.getAttribute('optionarrayid');
                var zOwnerOption = aParams.Element.RegionArray[zOwnerOptionId];
                var zOwnerAllSubsSelected = true;
                if (zOwnerOption.SubItemArray) {
                  for (var i=0; i<zOwnerOption.SubItemArray.length; i++) {
                    if (!zOwnerOption.SubItemArray[i].Input.checked) {
                      zOwnerAllSubsSelected = false
                      break
                    }
                  }
                }
                if (zCheckbox.Input.checked!=zOwnerAllSubsSelected) {
                  zCheckbox.Input.checked = zOwnerAllSubsSelected;
                  FormUI.Draw.Checkbox.addHierarchyValueToListV2(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:zCheckbox.Container.id,Element:aParams.Element, ContinueRecurse:'N'});
                }
              }
              if (aParams.Element.SelectAllCheckbox && aParams.Element.RegionArray.length <= aParams.Element.ValueArray.length) {
                aParams.Element.SelectAllCheckbox.Input.checked = true;
              }
            }
          }
        }
        return true;
      },
      removeValueFromList: function() {
        return true;
      },
      selectAll: function(e, aParams) {
        FormUI.cancelBubble(e, aParams);
        var zDisplayValue = FormUI.Save.Input.getDisplayValue(aParams);
        var aElement = aParams.Element;
        for (var i=0; i<aElement.MultiSelectCheckboxElementArray.length; i++){
          var zCallEvent = false;
          var zCheckbox = aElement.MultiSelectCheckboxElementArray[i];
          if (zDisplayValue == '') {
            if (zCheckbox.Input.checked == true) {
              zCheckbox.Input.checked = false;
              zCallEvent = true;
            }
          } else {
            if (zCheckbox.Input.checked == false) {
              zCheckbox.Input.checked = true;
              zCallEvent = true;
            }
          }
          if (zCallEvent==true)
            FormUI.Draw.Checkbox.addValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
        }
        return true;
      },
      checkIsAllOption: function(e, aParams) {
        FormUI.cancelBubble(e, aParams);
        var zDisplayValue = FormUI.Save.Input.getDisplayValue(aParams);
        var aElement = aParams.Element;
        var zIsAllChecked = aParams.Checkbox.IsOptionAll;
        aElement.ValueArray = [];
        aElement.DisplayValueArray = [];
        for (var i=0; i<aElement.MultiSelectCheckboxElementArray.length; i++){
          var zCallEvent = false;
          var zCheckbox = aElement.MultiSelectCheckboxElementArray[i];
          if(zIsAllChecked == 'Y' && aParams.Checkbox.Input.checked == true) {
            if(zCheckbox.IsOptionAll == 'Y') {
              zCheckbox.Input.checked = true;
              zCallEvent = true;
            } else {
              zCheckbox.Input.checked = false;
              zCallEvent = true;
            }
          } else {
            if(zCheckbox.IsOptionAll == 'Y') {
              zCheckbox.Input.checked = false;
              zCallEvent = true;
            } else {
              if(zCheckbox.Input.checked == true) {
                zCallEvent = true;
              }
            }
          }
          if (zCallEvent==true) {
            FormUI.Draw.Checkbox.addValueToList(e,{Original:aParams.Original,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
          }
        }
        return true;
      }
    },
    getIndentValue: function (aOption,aIndent) {
      if (aOption.OwnerElement) {
        aIndent++;
        aIndent = FormUI.Draw.getIndentValue(aOption.OwnerElement,aIndent);
      }
      return aIndent;
    },
    drawRecursiveCheckboxes: function(aArray,aThisOption,aElement,aParams,zCheckboxContainer,aOwnerOption) {
      var zOriginalContent = aElement.Value;
      var zCheckbox;
      if (aElement.IncludeSelectAll=="Y" && aElement.ProperHierarchySelect=="Y" && aElement.SelectAllAdded!="Y") {
        aArray.insertAt({DisplayName:"Select All", ItemPath:"SelectAll", Id:"SelectAll_"+aElement.FieldId, SubItems:[]}, 0);
        aElement.SelectAllAdded = "Y"
      }
      aThisOption.SubItemArray = [];
      aArray.forEach(function(aOption){
        if (aOption.Disable !=  'Y') {
          zCheckbox = FormUI.Draw.Checkbox.create( {Value: aOption.ItemPath , Name: aParams.Element.ElementId, Id: aOption.Id, Text: aOption.DisplayName } );
          if (aElement.ProperHierarchySelect=="Y") {
            if (aOption.ItemPath=="SelectAll") {
              aElement.SelectAllCheckbox = zCheckbox;
              DOM.addEvent(zCheckbox.Input,"onclick",FormUI.Draw.Checkbox.selectAll,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
            }
            else {
              DOM.addEvent(zCheckbox.Input,"onclick",FormUI.Draw.Checkbox.addHierarchyValueToListV2,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
            }
          }
          else {
            DOM.addEvent(zCheckbox.Input,"onclick",FormUI.Draw.Checkbox.addHierarchyValueToList,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
          }
          DOM.addEvent(zCheckbox.Container,"onclick",FormUI.cancelBubble,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
          DOM.addEvent(zCheckbox.Label,"onclick",FormUI.cancelBubble,{Original:zOriginalContent,Input:zCheckbox.Input,Container:aElement.ElementId,Element:aElement});
          zCheckboxContainer.appendChild(zCheckbox.Container);
          zCheckbox.Input.checked = aElement.ValueArray.contains(aOption.ItemPath);
          zCheckbox.Input.setAttribute('optionarrayid', aElement.RegionArray.length);
          if (aThisOption.Disable == 'N')
            aOption.OwnerElement = aThisOption;
          var aIndent = 0;
          zIndent = FormUI.Draw.getIndentValue(aOption,aIndent);
          if (zIndent > 0)
            zCheckbox.Container.style.paddingLeft = (zIndent * 15) + 'px';
          if (aOwnerOption)
            aOption.OwnerItem = aOwnerOption;
          if (aElement.RegionArray && aOption.ItemPath != "SelectAll")
            aElement.RegionArray.push(aOption);
          if (aElement.MultiSelectCheckboxElementArray && aOption.ItemPath != "SelectAll")
            aElement.MultiSelectCheckboxElementArray.push(zCheckbox);
        }
        if (aThisOption.SubItemArray)
          aThisOption.SubItemArray.push(zCheckbox);
        if (aOption.SubItems && aOption.SubItems.length>0)
          FormUI.Draw.drawRecursiveCheckboxes(aOption.SubItems,aOption,aElement,aParams,zCheckboxContainer,zCheckbox);
      });
    },
    RemoveElementFunction: function(e,aParams) {
      DOM.createRemoveElement(aParams.Container,'remove-'+aParams.Container.id,eval(aParams.Element.OnRemoveFunction),aParams);
      return true;
    },
    Radio: {
      create: function(aOption) {
        var zInputElementContainer = DOM.createElement('div','inp_' +aOption.Id + '_Container', 'RadioContainer');
        var zInputElement = DOM.createElement('input','inp_' +aOption.Id);
        zInputElement.setAttribute("type", "radio");
        zInputElement.setAttribute("value", aOption.Value);
        zInputElement.setAttribute("name", 'inp_' + aOption.Name);
        var zInputLabel = DOM.createTextElement('label','inp_' +aOption.Id + 'Label','','',aOption.Text);
        zInputLabel.setAttribute("for", 'inp_' +aOption.Id);
        zInputElementContainer.appendChild(zInputElement);
        zInputElementContainer.appendChild(zInputLabel);
        return {Container: zInputElementContainer, Input: zInputElement, Label: zInputLabel};
      },
      setValue: function(e,aParams) {
        FormUI.cancelBubble(e,aParams);
        var zDisplayValue = FormUI.Save.Input.getDisplayValue(aParams);
        var zNewValue = aParams.Input.value;
        aParams.Element.Value = zNewValue;
        aParams.Element.DisplayValue = zDisplayValue;
        return true;
      }
    },
    StylizedSelect: {
      create: function( aParams ) {
        var zOriginalDisplay;
        var $select         = FormUI.Draw.StylizedSelect;
        var $this           = aParams.Element;
        var zOriginalValue  = $this.Value;
        $this.Container     = aParams.Container;
        var zForm           = aParams.Element.Form;
        var zValue          = $this.Value;
        $this.Value         = $this.DisplayValue;
        $this.Input         = FormUI.Draw.EditFunctions.createText( aParams );
        $this.Value         = zValue;
        $this.OnBlurParams.Original  = zOriginalValue;
        DOM.removeClass( $this.Input, "FormUI-FieldEdit-Selection" );
        DOM.addClass( $this.Input, "FormUI-FieldEdit-StylizedSelection" );
        DOM.addClass( $this.RelativeContainer, "FormUI-FieldEdit-StylizedSelection-Container" );
        $this.Input.value = $this.Input.value;
        DOM.removeEvent( $this.Input,"onblur", FormUI.Save.timeoutFormInput, $this.OnBlurParams );
        $this.Input.setAttribute( "readonly", "readonly" );
        $this.SelectedOptionIndex =  $this.SelectedOptionIndex || 0;
        if( !$this.OptionsArray.length )
          $this.SelectedOptionIndex = null;
        $this.Container.appendChild( $select.createOptions.call( $this ) );
        $this.Container.appendChild( DOM.createElement( "span", null, "FormUI-StylizedSelectIcon" ) );
        $select.setSelectContainerHeight.call( $this );
        $select.scrollOptionIntoView.call( $this, $this.SelectedOptionIndex );
        DOM.addEvent( $this.Input, "onkeyup", $select.setKeyValue, null, { BindTo: $this } );
        FormUI.ElementArray.CurrentItem = {
          SaveFunc: $select.currentItemSave,
          Params: {
            Original: $this.Value,
            Input: $this.Input,
            Container: $this.Input.Container, Element: $this
          }
        };
        return $this.Input;
      },
      select: function( e, aParams ) {
        var $select = FormUI.Draw.StylizedSelect;
        if ( this.SelectedOptionIndex ) {
          $select.deSelectOption.call( this, this.SelectedOptionIndex );
        }
        $select.selectOption.call( this, aParams.Index );
        $select.save.call( this, e )
        return true;
      },
      currentItemSave: function( e ) {
        FormUI.Draw.StylizedSelect.save.call( this.Params.Element, e );
        return true;
      },
      save: function( e ) {
        var fauxInput = {
          value: (this.SelectedOptionIndex || this.SelectedOptionIndex==0) ? this.OptionsArray[this.SelectedOptionIndex].ItemPath : "",
          type: "lightbox",
          DisplayValue: this.Input.value
        }
        this.OnBlurParams.Input = fauxInput;
        FormUI.Save.timeoutFormInput( e, this.OnBlurParams );
        return true;
      },
      selectOption: function( aIndex ) {
        var $select = FormUI.Draw.StylizedSelect;
        if( aIndex<0 || aIndex == null ) {
          return false;
        }
        if( this.OptionsArray[aIndex] ) {
          DOM.addClass( this.OptionsArray[aIndex].OptionElement, "Selected" );
          var zSelectedOption = this.OptionsArray[aIndex];
        }
        this.SelectedOptionIndex = aIndex;
        this.Input.value = zSelectedOption.DisplayName.HTMLDecode();
        this.DisplayValue = zSelectedOption.DisplayName;
        $select.scrollOptionIntoView.call( this, aIndex );
        return true;
      },
      deSelectOption: function( aIndex ) {
        if( aIndex<0 || aIndex == null) {
          return false;
        }
        if( this.OptionsArray[aIndex] ) {
          DOM.removeClass( this.OptionsArray[aIndex].OptionElement, "Selected" );
        }
        if( this.SelectedOptionIndex == aIndex ) {
          if( this.Input && this.Input.value == this.Value ) {
            this.Input.value = "";
          }
          this.SelectedOptionIndex = null;
          this.SelectedOptionText = "";
          this.SelectedOptionValue = "";
        }
        return true;
      },
      selectNextOption: function(aArray) {
        var $select = FormUI.Draw.StylizedSelect;
        var zArray = (aArray) ? aArray : this.ActiveOptionArray;
        zArray = zArray || this.OptionsArray;
        var zIndex = 0;
        for( var i = 0; i < zArray.length; i++ ) {
          if( zArray[i].Index == this.SelectedOptionIndex ) {
            zIndex = i+1;
          }
        }
        $select.deSelectOption.call( this, this.SelectedOptionIndex );
        if( !zArray.length ) {
          return false;
        }
        if( zIndex == zArray.length ) {
          zIndex = 0;
        }
        $select.selectOption.call( this, zArray[zIndex].Index );
        return true;
      },
      selectPreviousOption: function(aArray) {
        var $select = FormUI.Draw.StylizedSelect;
        var zArray = (aArray) ? aArray : this.ActiveOptionArray;
        zArray = zArray || this.OptionsArray;
        var zIndex = 0;
        for(var i = 0; i < zArray.length; i++) {
          if( zArray[i].Index == this.SelectedOptionIndex ) {
            zIndex = i-1;
          }
        }
        $select.deSelectOption.call( this, this.SelectedOptionIndex );
        if( !zArray.length ) {
          return false;
        }
        if( zIndex < 0 ) {
          zIndex = zArray.length-1;
        }
        $select.selectOption.call( this, zArray[zIndex].Index );
        return true;
      },
      setKeyValue: function( e ) {
        var $select = FormUI.Draw.StylizedSelect;
        var zKey = e.keyCode;
        if(zKey == 9) {
          return false;
        }
        else {
          if(zKey == 40 || zKey == 39) {
            $select.selectNextOption.call( this );
            this.Input.focus();
          } else if( zKey == 38 || zKey == 37) {
            $select.selectPreviousOption.call( this );
            this.Input.focus();
          }
          else if( zKey == 27 || zKey == 13) {
            $select.save.call( this );
          } else {
            $select.setMatchingOptions.call( this, zKey );
          }
        }
        return true;
      },
      setMatchingOptions: function( aKey ) {
        var $select = FormUI.Draw.StylizedSelect;
        var zMatches = [];
        $select.selectNextOption.call( this, $select.findExact.call( this, zMatches, String.fromCharCode( aKey ).toUpperCase(), true ) );
        return true;
      },
      findExact: function( aArray, aString, aBeginning, aBeginningOfWord ) {
        var $select = FormUI.Draw.StylizedSelect;
        var zIsMatch, zRegExp = new RegExp("(^|\\s)" + escape( aString ), "i");
        var zFound = false;
        for (var x = 0; x < this.OptionsArray.length; x++) {
          if ( aBeginningOfWord ) {
            zIsMatch = this.OptionsArray[x].DisplayName.search(zRegExp) != -1;
          } else if (aBeginning) {
            zIsMatch = this.OptionsArray[x].DisplayName.toUpperCase().indexOf( aString ) == 0;
          } else {
            zIsMatch = this.OptionsArray[x].DisplayName.toUpperCase().indexOf( aString ) > 0;
          }
          if (zIsMatch) {
            zFound = false;
            for (var y = 0; y < aArray.length; y++) {
              if (aArray[y].ItemPath == this.OptionsArray[x].ItemPath) {
                zFound = true;
                break;
              }
            }
            if ( !zFound ) {
              aArray[aArray.length] = this.OptionsArray[x];
            }
          }
        }
        return aArray;
      },
      createOptions: function() {
        var $select          = FormUI.Draw.StylizedSelect;
        this.SelectContainer = DOM.createElement( "div", null, "FormUI-SelectContainer" );
        this.SelectContainer.tabIndex    = -1000;
        this.SelectContainer.style.width =  ( this.Input.offsetWidth - 2 ) + "px";
        this.SelectContainer.style.left  =  this.Input.offsetLeft + "px";
        this.SelectContainer.style.top   =  this.Input.offsetHeight + "px";
        if ( this.OptionsArray && this.OptionsArray.length > 0 ){
          $select.drawOptions.call( this );
        } else if ( this.LoadingOptions ) {
          this.LoadingMessage           = DOM.createElement( "p", null, "FormUI-LoadingOptions" );
          this.LoadingMessage.innerHTML = "Loading...";
          this.SelectContainer.appendChild( this.LoadingMessage );
        } else {
          var zEmptyOptionMessage = DOM.createElement( "p", null, "FormUI-EmptyOptions" );
          zEmptyOptionMessage.innerHTML = "There are no options to select at this time.";
          this.SelectContainer.appendChild( zEmptyOptionMessage );
        }
        return this.SelectContainer;
      },
      drawOptions: function() {
        var zOptionElement;
        var i = 0;
        var $this = this;
        var $select = FormUI.Draw.StylizedSelect;
        this.OptionsArray.forEach( function( aOption ) {
          aOption.Index = i;
          zOptionElement = DOM.createElement( "div", null, "FormUI-Option" );
          zOptionElement.innerHTML = aOption.DisplayName;
          zOptionElement.Value     = aOption.ItemPath;
          aOption.OptionElement    = zOptionElement;
          DOM.makeHoverable( zOptionElement );
          if ( $this.OnOptionMouseOverFunction ) DOM.addEvent( zOptionElement, "onmouseover", $this.OnOptionMouseOverFunction, $this );
          if ( $this.OnOptionMouseOutFunction ) DOM.addEvent( zOptionElement, "onmouseout", $this.OnOptionMouseOutFunction, $this );
          if ( $this.Value == aOption.ItemPath ) {
            DOM.addClass( zOptionElement, "Selected" );
            $this.SelectedOptionIndex = i;
          }
          $this.SelectContainer.appendChild( zOptionElement );
          DOM.addEvent( zOptionElement, "onclick", $select.select, { Index: i }, { BindTo: $this } );
          i++;
        });
        return true;
      },
      scrollOptionIntoView: function( aIndex ) {
        if (aIndex < 0 || aIndex == null) {
            return false;
        }
        var zSelectTop = this.SelectContainer.scrollTop;
        var zSelectHeight = this.SelectContainer.offsetHeight;
        var zSelectBottom = zSelectTop + zSelectHeight;
        var zOptionTop = this.OptionsArray[aIndex].OptionElement.offsetTop;
        var zOptionHeight = this.OptionsArray[aIndex].OptionElement.offsetHeight;
        var zOptionBottom = zOptionTop + zOptionHeight;
        if ( zOptionTop < zSelectTop ) {
          this.SelectContainer.scrollTop = zOptionTop;
        } else if (zOptionBottom > zSelectBottom) {
          this.SelectContainer.scrollTop = zOptionTop + zOptionHeight - zSelectHeight;
        }
        return true;
      },
      setSelectContainerHeight: function() {
        var zAbsoluteDimensions =  DOM.getAbsolutePosition( this.Input, true );
        zAbsoluteDimensions.y   -= document.body.scrollTop;
        zAbsoluteDimensions.y   += this.Input.offsetHeight;
        var zMaxHeight = DOM.getMaxHeight( zAbsoluteDimensions.y, true );
        if ( this.SelectContainer.offsetHeight > zMaxHeight ) {
          this.SelectContainer.style.height = ( zMaxHeight - 10 ) + "px";
        }
        this.SelectContainer.style.visibility = "visible";
        return true;
      }
    },
    FormLightBox: {
      create: function( aParams ) {
        var zOriginalDisplay;
        var zContainer   = aParams.Container;
        var aElement     = aParams.Element;
        aElement.List    = aElement.List || new List( { ItemArray: aElement.OptionsArray } );
        var zForm        = aParams.Element.Form;
        var zDialogWidth = aElement.LightBoxDialogWidth || 700;
          var zOriginalContent = aParams.OriginalContent;
        var aLightboxParams = {
          ItemType: "Option",
          OwnerItemPath: zForm.ItemPath,
          ItemArray: aElement.OptionsArray,
          List: aElement.List,
          TripleBubble: true
        };
        var zLightboxContainer = DOM.createElement('div');
        zContainer.appendChild(zLightboxContainer);
        aLightboxParams.LightboxDisplayObject = aElement.LightboxDisplayObject || List.LightboxView.AdditionalDisplayObjectList.SelectPopUp;
        aLightboxParams.LightboxDisplayObject.FormElement = aElement;
        aLightboxParams.LightboxDisplayObject.FormLightBoxType = aParams.Element.FormLightBoxType;
        aLightboxParams.LightboxDisplayObject.LightBoxOnDisplayFunction = aParams.Element.LightBoxOnDisplayFunction;
        var LightboxContent = DOM.createElement('div');
        aLightboxParams.List.ItemArray.forEach(function(aItem){
          LightboxContent.appendChild(List.createLightboxItem( aItem, aLightboxParams ));
        });
        var zHeightAvailable = document.body.clientHeight;
        zHeightAvailable = (zHeightAvailable < (550 + 80)) ? (zHeightAvailable-80) : 550;
        aElement.Dialog = DOM.Dialog.show( LightboxContent, "center", aElement.Title, zDialogWidth, zHeightAvailable );
        aLightboxParams.LightboxDisplayObject.Dialog = aElement.Dialog;
        DOM.addEvent( $(aElement.Dialog.DialogBoxId), "onclick", FormUI.cancelBubble, { Element:aElement } );
        DOM.addEvent( $(aElement.Dialog.DialogBoxId + "_closeBtn"), "onclick", FormUI.Draw.LightBox.close, { Element: aElement, Params: aParams } );
        aElement.LightboxDisplayObject = aLightboxParams.LightboxDisplayObject;
        return LightboxContent;
      },
      close: function( e, aParams ) {
      }
    },
    LightBox: {
      create: function( aParams ) {
        var zOriginalDisplay;
        var zContainer   = aParams.Container;
        var aElement     = aParams.Element;
        aElement.List    = aElement.List || new List( { ItemArray: aElement.OptionsArray } );
        var zForm        = aParams.Element.Form;
        var zDialogWidth = aElement.LightBoxDialogWidth || 700;
             var zOriginalContent = aParams.OriginalContent;
        var aLightboxParams = {
          ItemType: "Option",
          OwnerItemPath: zForm.ItemPath,
          ItemArray: aElement.OptionsArray,
          List: aElement.List,
          LightboxFormType: aParams.FormType,
          TripleBubble: true                                  
        };
        aLightboxParams.LightboxDisplayObject             = aElement.LightboxDisplayObject || List.LightboxView.AdditionalDisplayObjectList.SelectPopUp;
        aLightboxParams.LightboxDisplayObject.Name        = aElement.Form.FormType + "_" + aElement.Field;
        aLightboxParams.LightboxDisplayObject.FormElement = aElement;
        aLightboxParams.List.ItemArray.forEach( function( aItem ) {
          aItem.Id = ( aItem.Id.indexOf("Option") == -1 ) ? "Option" + aItem.Id : aItem.Id ;
        });
        var LightboxContent = List.createLightbox( aLightboxParams.List.ItemArray, aLightboxParams );
        FormUI.ElementArray.CurrentItem = { SaveFunc: FormUI.Draw.LightBox.close, Params: { Element: aElement, Params: aParams, HideDialog: true } };
        var zHeightAvailable = document.body.clientHeight;
        zHeightAvailable = (zHeightAvailable < (550 + 80)) ? (zHeightAvailable-80) : 550;
        aElement.Dialog = DOM.Dialog.show( LightboxContent, "center", " " + aElement.Label, zDialogWidth, zHeightAvailable );
        aLightboxParams.LightboxDisplayObject.Dialog = aElement.Dialog;
        var zZoom = $( "Lightbox_Zoom" );
        DOM.addClass( zZoom, "LightboxOptionsZoom" );
        $( "NewDialog_content" ).parentNode.appendChild( zZoom );
        DOM.addEvent( $(aElement.Dialog.DialogBoxId), "onclick", FormUI.cancelBubble, { Element:aElement } );
        DOM.addEvent( $(aElement.Dialog.DialogBoxId + "_closeBtn"), "onclick", FormUI.Draw.LightBox.close, { Original: zOriginalContent, Element: aElement, Params: aParams } );
        var OnClickArray = $(aElement.Dialog.DialogBoxId + "_closeBtn");
        var zElementFunctions = "onclickFunctions";
        var tempElement = OnClickArray[zElementFunctions][0];
        OnClickArray[zElementFunctions][0] = OnClickArray[zElementFunctions][1];
        OnClickArray[zElementFunctions][1] = tempElement;
        aElement.LightboxDisplayObject = aLightboxParams.LightboxDisplayObject;
        return LightboxContent;
      },
      close: function( e, aParams ) {
        var aElement = aParams.Element;
        if ( aParams.HideDialog ) {
          DOM.Dialog.hide();
        }
        var zInput =  { value: aElement.Value, type: "lightbox", DisplayValue: aElement.DisplayValue };
FormUI.Save.timeoutFormInput( e, { Container: aElement.ElementId, Element: aElement, Input: zInput } );
        if ( aElement.LightboxDisplayObject.closeDialog ) {
          aElement.LightboxDisplayObject.closeDialog( aElement, aElement.Form );
        }
        return true;
      }
    },
    MultiSelectPopUp: {
			   myElement:null,
      _getDisplayClass: function() {
        var $displayObj = this.LightboxDisplayObject;
        if (!$displayObj) {
          $displayObj = Util.Object.create(List.LightboxView.AdditionalDisplayObjectList.HTMLDisplay, {});
          $displayObj.select = function(e, aLightboxItem) {
            var $self = aLightboxItem.DisplayObject;
            var zFormElement = $self.FormElement;
            var zSelectedValue = aLightboxItem.getAttribute("selected");
            if (zSelectedValue!="Y" && $self.ValueArray.length>=$self.FormElement.MaxSelected) {
              $self.MessageContainer.innerHTML = "You may only select " + $self.FormElement.MaxSelected +"  items.  You must deselect another option before selecting tihs item.";
              if (!aLightboxItem.ItemDragged) {
                if (aLightboxItem.DragTimeout) {
                  clearTimeout(aLightboxItem.DragTimeout);
                }
              }
              aLightboxItem.ItemDragged = false;
              return zSelectedValue;
            }
      						if (!aLightboxItem.ItemDragged) {
  						      $self.MessageContainer.innerHTML = "Select items by clicking one the boxes above.  The box will be highlighted once selected.  You may also sort these items from top left to bottom right to set the order of appearance.";
              zSelectedValue = $displayObj.parent.select.call(this, e, aLightboxItem);
              if (aLightboxItem.parentNode.childNodes) {
                var zLightboxItemArray = aLightboxItem.parentNode.childNodes;
                var zDisplayValueArray = [];
                var zValueArray = [];
                for (var i=0; i<zLightboxItemArray.length; i++) {
                  if (zLightboxItemArray[i].getAttribute("selected")=="Y") {
                    zDisplayValueArray.push(zLightboxItemArray[i].List_Item.DisplayName);
                    zValueArray.push(zLightboxItemArray[i].List_Item.ItemPath);
                  }
                }
          	  			$self.DisplayValueArray = zDisplayValueArray;
            				$self.ValueArray = zValueArray;
          				}
      						}
						      return zSelectedValue;
			       }
					     $displayObj.create = function(aItem) {
						      var zLightboxItem = $displayObj.parent.create.call(this, aItem);
      						if (this.FormElement.ValueArray && this.FormElement.ValueArray.contains(aItem.ItemPath)) {
      							 $displayObj.parent.select.call(this, null, zLightboxItem);
      						}
      						return zLightboxItem;
     					}
			     }
    				FormUI.Draw.MultiSelectPopUp._getDisplayClass = function() {
    					 return $displayObj;
    				};
				    return $displayObj;
  			 },
			getDisplayObject: function() {
				var zDisplayClass = FormUI.Draw.MultiSelectPopUp._getDisplayClass.call( this );			
				var zDisplayObj   = Util.Object.create( zDisplayClass, {} );
        zDisplayObj.FormElement      = this;
        zDisplayObj.FormLightBoxType = this.FormLightBoxType;
        zDisplayObj.LightBoxOnDisplayFunction = this.LightBoxOnDisplayFunction;
				zDisplayObj.ValueArray        = this.ValueArray.copy();
				zDisplayObj.DisplayValueArray = this.DisplayValueArray.copy();
				return zDisplayObj;
			},
			save: function( e, aParams ) {
 				var zElement    = aParams.Element;
 				var $displayObj = aParams.LightboxDisplayObj;
     if ($displayObj.Dialog.LightboxItemContainer.childNodes) {
       var zLightboxItemArray = $displayObj.Dialog.LightboxItemContainer.childNodes;
       var zDisplayValueArray = [];
       var zValueArray = [];
       for (var i=0; i<zLightboxItemArray.length; i++) {
         if (zLightboxItemArray[i].getAttribute("selected")=="Y") {
           zDisplayValueArray.push(zLightboxItemArray[i].List_Item.DisplayName);
           zValueArray.push(zLightboxItemArray[i].List_Item.ItemPath);
         }
       }
 	  			$displayObj.DisplayValueArray = zDisplayValueArray;
   				$displayObj.ValueArray = zValueArray;
 				}
 				if ($displayObj.ValueArray.length < zElement.MinSelected) {
 					 $displayObj.MessageContainer.innerHTML = "You must select " + zElement.MinSelected +"  items before saving.";
 					 return true;
 				}
 				aParams.ValueArray         = zElement.ValueArray.copy();
 				zElement.DisplayValueArray = $displayObj.DisplayValueArray;
 				zElement.ValueArray        = $displayObj.ValueArray;
 				return aParams.MultiSelectPopUp.blur(e, aParams);
			},
   			blur: function( e, aParams ) {
    				var zElement = aParams.Element;
    				if ( !aParams.DoNotKillDialog ) {
              DOM.Dialog.hide();
    				}
    				var $self = aParams.MultiSelectPopUp;
    				var zSaveParams = {
    				  Original  : aParams.ValueArray || zElement.ValueArray.copy(),
    				  Input     : $self.Dialog,
    				  Container : zElement.ElementId,
    					Element   : aParams.Element
    			  }
    				FormUI.Save.formInput( e, zSaveParams );
    				return true;
    		},
      create: function( aParams ) {
        var zOriginalDisplay;
        var $self        = FormUI.Draw.MultiSelectPopUp;
				    var zContainer   = aParams.Container;
        var aElement     = aParams.Element;
        aElement.List    = aElement.List || new List( { ItemArray: aElement.OptionsArray } );
        var zForm        = aElement.Form;
        var zDialogWidth = aElement.LightBoxDialogWidth || 700;
    				aElement.ValueArray        =  aElement.ValueArray || [];
    				aElement.DisplayValueArray =  aElement.DisplayValueArray || [];
    				aElement.MaxSelected = aElement.MaxSelected || 10000;
    				aElement.MinSelected = aElement.MinSelected || 0;
        var zOriginalContent;
        var aLightboxParams = {
          ItemType: "Option",
          OwnerItemPath: zForm.ItemPath,
          ItemArray: aElement.OptionsArray,
          List: aElement.List,
          TripleBubble: true
        };
        var zLightboxContainer = DOM.createElement("div");
        zContainer.appendChild(zLightboxContainer);
        aLightboxParams.LightboxDisplayObject = FormUI.Draw.MultiSelectPopUp.getDisplayObject.call( aElement );
        var zLightboxContent = DOM.createElement("div");
        var zLightboxItemContainer            = DOM.createElement("div", "", "clearfix");
        zLightboxItemContainer.style.position = "relative";
    				var zSortParams = {
     					OnSortCompleteFunction : aLightboxParams.LightboxDisplayObject.sortComplete || LiveAdMaker.sortItems,
     					List                   : aElement.List,
     					ItemPath							        : aElement.SortItemPath || aElement.SaveFormItemPath  || aElement.Form.ItemPath,
     					AreaType							        : aElement.AreaType,
     					DisplayObject					     : aLightboxParams.LightboxDisplayObject
    				};
    				DOM.linkObject( zLightboxItemContainer, "Drag_OnSortCompleteFunction", List.sortLightboxComplete );
    				DOM.linkObject( zLightboxItemContainer, "Drag_OnSortCompleteParams", zSortParams );
    				zLightboxItemContainer.ItemCount  = aLightboxParams.List.ItemArray.length;
    				aLightboxParams.List.ItemArray.forEach(function(aItem){
    					zLightboxItemContainer.appendChild(List.createLightboxItem( aItem, aLightboxParams ));
    				});
        var zLightboxControls             = DOM.createElement("div", "", "clearfix");
        zLightboxControls.style.textAlign = "center";
        var zLightboxControlMessage          = DOM.createElement("div");
        zLightboxControlMessage.style.margin = "5px auto";
        zLightboxControlMessage.innerHTML    = aElement.ValuePrompt || "Select items by clicking one the boxes above.  The box will be highlighted once selected.  You may also sort these items from top left to bottom right to set the order of appearance.";
        zLightboxControlMessage.innerHTML += ". <b>Only the first "+aElement.MaxSelected+" selected items will be displayed.</b> ";
        zLightboxControls.appendChild(zLightboxControlMessage);
				    aLightboxParams.LightboxDisplayObject.MessageContainer = zLightboxControlMessage;
        var zLightboxButtonContainer          = DOM.createElement("div", "", "clearfix");
        zLightboxButtonContainer.style.margin = "0px auto";
        zLightboxButtonContainer.style.width  = "300px";
        var zSaveButton       = DOM.createElement("div", "", "Button");
        zSaveButton.innerHTML = "Save";
        var zCancelButton            = DOM.createElement("div", "", "Button");
        zCancelButton.style.cssFloat = zCancelButton.style.styleFloat = "right";
        zCancelButton.innerHTML      = "Cancel";
        zLightboxButtonContainer.appendChild(zCancelButton);
        zLightboxButtonContainer.appendChild(zSaveButton);
        zLightboxControls.appendChild(zLightboxButtonContainer);
        zLightboxContent.appendChild(zLightboxItemContainer);
        zLightboxContent.appendChild(zLightboxControls);
        var zHeightAvailable = document.body.clientHeight;
        zHeightAvailable = (zHeightAvailable < (550 + 80)) ? (zHeightAvailable - 80) : 550;
        zLightboxControlsHeight        = 60;
        zLightboxControls.style.height = zLightboxControlsHeight + "px";
        zLightboxItemContainer.style.overflowY = "scroll";
        zLightboxItemContainer.style.height    = (zHeightAvailable - zLightboxControlsHeight - 15) + "px";
        aElement.Dialog = DOM.Dialog.show( zLightboxContent, "center", aElement.Label, zDialogWidth, zHeightAvailable );
        FormUI.Draw.MultiSelectPopUp.myElement = aElement;
        var zAllItems = DOM.getElementsWithClassName("div","Lightbox_Item HTMLDisplay medium htmldisplay_landscape Draggable", $("NewDialog_content"))
        for(var i=0;i<zAllItems.length;i++){
          if(zAllItems[i]){
            DOM.addEvent(zAllItems[i],"onclick",FormUI.Draw.MultiSelectPopUp.setSelectedState,{ functionName:"setSelectedState" });
            DOM.addEvent(zAllItems[i],"onmouseover",FormUI.Draw.MultiSelectPopUp.setSelectedState,{functionName:"setSelectedState" });
          }
        }
        FormUI.Draw.MultiSelectPopUp.setSelectedState();
        aLightboxParams.LightboxDisplayObject.Dialog = aElement.Dialog;
        aElement.Dialog.LightboxItemContainer = zLightboxItemContainer;
        aElement.Dialog.LightboxControls      = zLightboxControls;
			     FormUI.ElementArray.CurrentItem = { SaveFunc: FormUI.Save.formInput, Params: { Original: aParams.Element.ValueArray.copy(), Input: aElement.Dialog, Container: aElement.ElementId, Element: aElement } };
        DOM.addEvent( $(aElement.Dialog.DialogBoxId), "onclick", FormUI.cancelBubble, { Element:aElement } );
        DOM.addEvent( $(aElement.Dialog.DialogBoxId + "_closeBtn"), "onclick", $self.blur, { Element: aElement, MultiSelectPopUp: $self, LightboxDisplayObj: aLightboxParams.LightboxDisplayObject, DoNotKillDialog: true } );
				    DOM.addEvent(zSaveButton, "onclick", $self.save, { Element: aElement, MultiSelectPopUp: $self, LightboxDisplayObj: aLightboxParams.LightboxDisplayObject } );
				    DOM.addEvent(zCancelButton, "onclick", $self.blur, { Element: aElement, MultiSelectPopUp: $self, LightboxDisplayObj: aLightboxParams.LightboxDisplayObject } );
        aElement.LightboxDisplayObject = aLightboxParams.LightboxDisplayObject;      
        return zLightboxContent;
      },
      setSelectedState: function(){
        var zAllUnsellectedItems = DOM.getElementsWithClassName("div","Lightbox_Item HTMLDisplay medium htmldisplay_landscape Draggable", $("NewDialog_content"))
        for(var i=0;i<zAllUnsellectedItems.length;i++){
          if(zAllUnsellectedItems[i]){
            zAllUnsellectedItems[i].style.backgroundColor="white";
            zAllUnsellectedItems[i].style.color="black";
            zAllUnsellectedItems[i].style.border="1px solid gray";
          }
        }
        var zAllSelectedItems = DOM.getElementsWithClassName("div","Lightbox_Item HTMLDisplay medium htmldisplay_landscape Draggable selected", $("NewDialog_content"))
        for(var i=0;i<FormUI.Draw.MultiSelectPopUp.myElement.MaxSelected;i++){
          if(zAllSelectedItems[i]){
            zAllSelectedItems[i].style.backgroundColor="#a8a8a8";
            zAllSelectedItems[i].style.color="white";
            zAllUnsellectedItems[i].style.border="1px solid gray";
          }
        }
        return true;
      }
    },
    FileInput: {
      Params: null,
      UploadCount: 0,
      UploadElementList: [],
      create: function(aParams) {
        var zInputNumber = "File"+FormUI.Draw.FileInput.UploadCount;
        var zFileUploadContainer = DOM.createElement("div", "FileInput_MainContainer"+zInputNumber);
        var zMessageContainer = DOM.createElement("div", "FileInput_MessageContainer"+zInputNumber);
        var zIFrame = DOM.createElement("iframe", "FileInput_PostFrame"+zInputNumber, "AbsolutelyHidden");
        var aElement = aParams.Element;
        var zFormUI = (aElement.Form) ? aElement.Form : FormUI;
        zIFrame.setAttribute("src", "/home.blank");
        var zForm = DOM.createElement("form", "frmFileInput"+zInputNumber);
        var zItem = aElement.SaveFormItemPath || zFormUI.ItemPath;
        aElement.FormId = "frmFileInput" + zInputNumber;
        zForm.setAttribute("action",  zItem.toPagePath() + '.FileUploadCompleteJS');
        zForm.setAttribute("method", "post");
        zForm.setAttribute("enctype", "multipart/form-data");
        zForm.setAttribute("encoding", "multipart/form-data");
        zForm.setAttribute("target", "FileInput_PostFrame"+zInputNumber);
        var zInput = DOM.createElement("input", "inpFileInputId");
        zInput.setAttribute("type", "hidden");
        zInput.setAttribute("value", zInputNumber);
        zForm.appendChild(zInput);
        var zInput = DOM.createElement("input", "inp"+zInputNumber);
        if(aElement.FieldSize != "Custom"){
          var zElementDimension  = FormUI.ElementDimension.get(aElement.DisplayFormat, aElement);
          zFileUploadContainer.style.width = zElementDimension.Width + 15 + 'px';
          zInput.style.width  = zElementDimension.Width + 'px';
          zInput.style.height = zElementDimension.Height + 'px';
        }
        zInput.setAttribute("type", "file");
        zInput.setAttribute("UploadId", zInputNumber);
        DOM.addEvent(zInput, "onchange", FormUI.Draw.FileInput.upload, zInputNumber);
        zForm.appendChild(zInput);
        var zHref = DOM.createElement("a", "FileInput_CancelSelect"+zInputNumber, "CancelInputFile");
        zHref.setAttribute("href", "javascript:void(0);");
        zHref.innerHTML = 'x';
        DOM.addEvent(zHref, "onclick", FormUI.Draw.FileInput.hide, zInputNumber);
        zForm.appendChild(zHref);
        var zIFrameContainer = aElement.IFrameContainer || zFileUploadContainer;
        zIFrameContainer.appendChild( zIFrame );
        zFileUploadContainer.appendChild(zForm);
        aParams.InputNumber = zInputNumber;
        if (!DOM.Browser.isSafari) {
          FormUI.ElementArray.CurrentItem = {SaveFunc: FormUI.Draw.FileInput.hide, Params: aParams};
        }
        $(FormUI.Draw.FileInput.FormItem.ElementId).appendChild(zMessageContainer);
        $(FormUI.Draw.FileInput.FormItem.ElementId).appendChild(zFileUploadContainer);
        DOM.addEvent($(FormUI.Draw.FileInput.FormItem.ElementId), "onclick", FormUI.cancelBubble, aParams);
        DOM.addEvent(zInput, "onclick", FormUI.cancelBubble, aParams);
        if (document.frames && document.frames["FileInput_PostFrame"+zInputNumber] && document.frames["FileInput_PostFrame"+zInputNumber].name != "FileInput_PostFrame"+zInputNumber) {
          document.frames["FileInput_PostFrame"+zInputNumber].name = "FileInput_PostFrame"+zInputNumber;
        }
        if (aParams.AssetInput) {
          FormUI.Draw.FileInput.Params.ItemPath = zItem;
          FormUI.Draw.FileInput.Params.AssetOwnerContainerId = FormUI.Draw.FileInput.FormItem.AssetOwnerContainerId;
          FormUI.Draw.FileInput.Params.AssetOwnerContainer = FormUI.Draw.FileInput.FormItem.AssetOwnerContainer;
          FormUI.Draw.FileInput.Params.AssetInput = true;
        }
        if (aParams.MultipleAssetInput) {
          FormUI.Draw.FileInput.Params.ItemPath = zItem;
          FormUI.Draw.FileInput.Params.AssetOwnerContainerId = FormUI.Draw.FileInput.FormItem.AssetOwnerContainerId;
          FormUI.Draw.FileInput.Params.AssetOwnerContainer = FormUI.Draw.FileInput.FormItem.AssetOwnerContainer;
          FormUI.Draw.FileInput.Params.MultipleAssetInput = tru