/* XhtmlAjaxControls
Version 4.0 Copyright 1994-2007 NuView Systems, Inc.
$Id: XhtmlAjaxControls.js,v 1.30 2007/05/18 20:57:29 randy Exp $
*/
/**
 * NuCtl Object
 */
function NuCtl() {
	this._isLoaded;
	this._aChildren;
	this._aProps;
	this._ctlParent;
	this._elementCtl;
	/**
	 * shutdown
	 */
	this.shutdown = function() {
		this._shutdown();
	}
	/**
	 * action
	 */
	this.action = function(prm_sEvent, prm_params) {
		switch (prm_sEvent) {
		case NuEvent.c_SEVENT_ONCHANGE:
			this.onChange(prm_params);
			break;
		case NuEvent.c_SEVENT_ONCLICK:
			this.onClick(prm_params);
			break;
		default:
			this._action(prm_sEvent, prm_params);
			break;
		}
	}
	/**
	 * addChild
	 */
	this.addChild = function(prm_child) {
		if (!this._aChildren) {
			this._aChildren = [];
		}
		this._aChildren.push(prm_child);
	}
	/**
	 * applyStyles
	 */
	this.applyStyles = function() {
		this._applyStyles();
	}
	/**
	 * bindParent
	 */
	this.bindParent = function(prm_parent) {
		this.setParent(prm_parent);
		if (prm_parent.addChild) {
			prm_parent.addChild(this);
		}
	}
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		this._createHtml(prm_elemBase);
	}
	/**
	 * datasourceClose
	 */
	this.datasourceClose = function(prm_sProp) {
		var v_sProp;
		if (prm_sProp) {
			v_sProp = prm_sProp;
		} else {
			v_sProp = NuCtl.c_SPROP_DATASOURCE;
		}
		this.setProperty(prm_sProp, null);
	}
	/**
	 * datasourceOpen
	 */
	this.datasourceOpen = function(prm_sProp, prm_isCreateEmpty) {
		var v_Return;
		var v_sDataset;
		var v_sProp;
		if (prm_sProp) {
			v_sProp = prm_sProp;
		} else {
			v_sProp = NuCtl.c_SPROP_DATASOURCE;
		}
		v_Return = this._getProperty(v_sProp);
		if (!v_Return) {
			switch (v_sProp) {
			case NuCtl.c_SPROP_DATASOURCE:
			case NuCtl.c_SPROP_BODY:
				v_sDataset = this.getProperty(NuCtl.c_SPROP_DATASET);
				if (v_sDataset) {
					v_Return = new NuDatasource();
					v_Return.setName(v_sDataset);
					v_Return.getRow(1);
					this._setProperty(v_sProp, v_Return);
				}
				break;
			}
			if (!v_Return && prm_isCreateEmpty) {
				v_Return = new NuDatasource();
				this._setProperty(v_sProp, v_Return);
			}
		}
		return v_Return;
	}
	/**
	 * draw
	 */
	this.draw = function(prm_elemBase) {
		this._draw(prm_elemBase);
	}
	/**
	 * fireEvent - deprecated
	 */
	this.fireEvent = function(prm_sEvent, prm_params) {
		return this.action(prm_sEvent, prm_params);
	}
	/**
	 * getChildren
	 */
	this.getChildren = function() {
		return this._aChildren;
	}
	/**
	 * getDataset
	 */
	this.getDataset = function() {
		return this.getProperty(NuCtl.c_SPROP_DATASET);
	}
	/**
	 * getDimensions
	 */
	this.getDimensions = function() {
		var v_Return;
		v_Return = [];
		v_Return["x"] = this.getStyle(NuCtl.c_SSTYLE_LEFT);
		v_Return["y"] = this.getStyle(NuCtl.c_SSTYLE_TOP);
		v_Return["w"] = this.getStyle(NuCtl.c_SSTYLE_WIDTH);
		v_Return["h"] = this.getStyle(NuCtl.c_SSTYLE_HEIGHT);
		return v_Return;
	}
	/**
	 * getEvent
	 */
	this.getEvent = function(prm_sEvent) {
		var v_events;
		v_events = this.getProperty(NuCtl.c_SPROP_EVENTS);
		if (v_events) {
			return v_events[prm_sEvent];
		} else {
			return null;
		}
	}
	/**
	 * getEvents
	 */
	this.getEvents = function() {
		return this.getProperty(NuCtl.c_SPROP_EVENTS);
	}
	/**
	 * getId
	 */
	this.getId = function() {
		return this._getId();
	}
	/**
	 * getName
	 */
	this.getName = function() {
		var v_Return;
		v_Return = this.getProperty(NuCtl.c_SPROP_NAME);
		if (!v_Return) {
			v_Return = "Id" + NuView.Document.getUniqueId();
			this.setName(v_Return);
		}
		return v_Return;
	}
	/**
	 * getObject
	 */
	this.getObject = function() {
		return this._elementCtl;
	}
	/**
	 * getParent
	 */
	this.getParent = function() {
		return this._ctlParent;
	}
	/**
	 * getProperty
	 */
	this.getProperty = function(prm_sProp, prm_sDefault) {
		return this._getProperty(prm_sProp, prm_sDefault);
	}
	/**
	 * getStyle
	 */
	this.getStyle = function(prm_sStyle) {
		return this._getStyle(prm_sStyle);
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_UNKNOWN;
	}
	/**
	 * getValue
	 */
	this.getValue = function() {
		return this._getValue();
	}
	/**
	 * getValueOrig
	 */
	this.getValueOrig = function() {
		return this.getProperty(NuCtl.c_SPROP_VALORIG);
	}
	/**
	 * getVariable
	 */
	this.getVariable = function(prm_sVar) {
		var v_objVars;
		v_objVars = this._getProperty(NuCtl.c_SPROP_VARIABLES);
		if (v_objVars) {
			return v_objVars[prm_sVar];
		} else {
			return null;
		}
	}
	/**
	 * initialize
	 */
	this.initialize = function() {
		this._initialize();
	}
	/**
	 * isChanged
	 */
	this.isChanged = function() {
		var v_sVal;
		v_sVal = this._aProps[NuCtl.c_SPROP_CHANGED];
		if ((v_sVal) && (v_sVal == "Yes")) {
			return true;
		} else {
			return false;
		}
	}
	/**
	 * isLoaded
	 */
	this.isLoaded = function() {
		return this._isLoaded;
	}
	/**
	 * isValid
	 */
	this.isValid = function() {
		var v_sVal;
		v_sVal = this._aProps[NuCtl.c_SPROP_VALID];
		if ((v_sVal) && (v_sVal == "Yes")) {
			return true;
		} else {
			return false;
		}
	}
	/**
	 * moveTo
	 */
	this.moveTo = function(prm_iLeft, prm_iTop) {
		if (prm_iTop) this.setStyle(NuCtl.c_SSTYLE_TOP, prm_iTop);
		if (prm_iLeft) this.setStyle(NuCtl.c_SSTYLE_LEFT, prm_iLeft);
	}
	/**
	 * onClick
	 */
	this.onClick = function(prm_params) {
		return this._action(NuEvent.c_SEVENT_ONCLICK, prm_params);
	}
	/**
	 * onChange
	 */
	this.onChange = function(prm_params) {
		return this._action(NuEvent.c_SEVENT_ONCHANGE, prm_params);
	}
	/**
	 * onSubmit
	 */
	this.onSubmit = function(prm_params) {
		return this._onSubmit(prm_params);
	}
	/**
	 * refresh
	 */
	this.refresh = function() {}
	/**
	 * removeChild
	 */
	this.removeChild = function(prm_child) {
		var v_i;
		var v_iCnt;
		if (!prm_child) {
		} else if (!this._aChildren) {
		} else {
			v_i = 0;
			v_iCnt = this._aChildren.length;
			while (v_i < v_iCnt) {
				if (this._aChildren[v_i] == prm_child) {
					v_iCnt -= 1;
					this._aChildren[v_i] = this._aChildren[v_iCnt];
				} else {
					v_i++;
				}
			}
		}
	}
	/**
	 * resize
	 */
	this.resize = function(prm_iWidth, prm_iHeight) {
		if (prm_iHeight) this.setStyle(NuCtl.c_SSTYLE_HEIGHT, prm_iHeight);
		if (prm_iWidth) this.setStyle(NuCtl.c_SSTYLE_WIDTH, prm_iWidth);
	}
	/**
	 * scheduleEvent
	 */
	this.scheduleEvent = function(prm_sEventWhen, prm_sEventWhat, prm_objParams) {
		NuView.Document.scheduleEvent(prm_sEventWhen, this.getName(), prm_sEventWhat, prm_objParams);
	}
	/**
	 * setChanged
	 */
	this.setChanged = function(prm_isChanged) {
		var v_sVal;
		if (prm_isChanged) {
			v_sVal = "Yes";
			NuView.Document.addToChangeList(this.getName());
		} else {
			v_sVal = null;
		}
		this._aProps[NuCtl.c_SPROP_CHANGED] = v_sVal;
	}
	/**
	 * setDataset
	 */
	this.setDataset = function(prm_sDataset) {
		this.setProperty(NuCtl.c_SPROP_DATASET, prm_sDataset);
	}
	/**
	 * setDimensions
	 */
	this.setDimensions = function(prm_objDimensions) {
		this.resize(prm_objDimensions["w"], prm_objDimensions["h"]);
		this.moveTo(prm_objDimensions["x"], prm_objDimensions["y"]);
	}
	/**
	 * setEvent
	 */
	this.setEvent = function(prm_sEvent, prm_func) {
		var v_hEvents;
		if (prm_sEvent) {
				v_hEvents = this.getProperty(NuCtl.c_SPROP_EVENTS);
				if (prm_func) {
					v_hEvents[prm_sEvent, prm_func];
				} else {
					NuHash.remove(v_hEvents, prm_sEvent);
				}
		}
	}

	/**
	 * setName
	 */
	this.setName = function(prm_sName) {
		this.setProperty(NuCtl.c_SPROP_NAME, prm_sName);
	}
	/**
	 * setElement
	 */
	this.setElement = function(prm_element) {
		this._elementCtl = prm_element;
	}
	/**
	 * setParent
	 */
	this.setParent = function(prm_ctlParent) {
		this._ctlParent = prm_ctlParent;
	}
	/**
	 * setProperty
	 */
	this.setProperty = function(prm_sProp, prm_object) {
		this._setProperty(prm_sProp, prm_object);
	}
	/**
	 * setPropertyList
	 */
	this.setPropertyList = function(prm_object) {
		var v_i;
		var v_sProp;
		var v_sStyle;
		var v_sVal;
		var v_objStyles;
		var v_oPropItr;
		var v_oXml;
		if (prm_object) {
			try {
				for (v_sProp in prm_object) {
					switch (v_sProp) {
					case NuCtl.c_SPROP_STYLE:
						v_objStyles = prm_object[v_sProp];
						for (v_sStyle in v_objStyles) {
							if (v_objStyles[v_sStyle]) {
								v_sVal = v_objStyles[v_sStyle];
								v_sStyle = v_sStyle.replace("_", "-");
								this.setStyle(v_sStyle, v_sVal);
							}
						}
						break;
					default:
						v_sVal = prm_object[v_sProp];
						this.setProperty(v_sProp, v_sVal);
						break;
					}
				}
			} catch (forPropException) {
				for (v_oXml in NuXmlJson.XmlProp) {
					v_sProp = NuXmlJson.XmlProp[v_oXml];
					try {
						if (prm_object[v_sProp]) {
							v_sVal = prm_object[v_sProp];
							this.setProperty(v_sProp, v_sVal);
						}
					} catch (XMLException) {
						msg(XMLException.toString());
					}
				}
			}
		}
	}
	/**
	 * setStyle
	 */
	this.setStyle = function(prm_sStyle, prm_sValue) {
		this._setStyle(prm_sStyle, prm_sValue);
	}
	/**
	 * setValid
	 */
	this.setValid = function(prm_isValid) {
		var v_sVal;
		if (prm_isValid) {
			v_sVal = "Yes";
		} else {
			v_sVal = null;
		}
		this._aProps[NuCtl.c_SPROP_VALID] = v_sVal;
	}
	/**
	 * setValue
	 */
	this.setValue = function(prm_sValue) {
		this._setValue(prm_sValue);
	}
	/**
	 * setValueOrig
	 */
	this.setValueOrig = function(prm_sValue) {
		this.setProperty(NuCtl.c_SPROP_VALORIG, prm_sValue);
	}
	/**
	 * setVariable
	 */
	this.setVariable = function(prm_sVar, prm_objValue) {
		var v_objVars;
		v_objVars = this._getProperty(NuCtl.c_SPROP_VARIABLES);
		if (!v_objVars) {
			v_objVars = {};
		}
		v_objVars[prm_sVar] = prm_objValue;
	}
	/**
	 * setVisibility
	 */
	this.setVisibility = function(prm_sVisibility) {
		var v_sStyle;
		if (prm_sVisibility == "hide") {
			this.setStyle(NuCtl.c_SSTYLE_DISPLAY, "none");
		} else if (prm_sVisibility == "show") {
			this.setStyle(NuCtl.c_SSTYLE_DISPLAY, "block");
		} else if (prm_sVisibility == "toggle") {
			v_sStyle = this.getStyle(NuCtl.c_SSTYLE_DISPLAY);
			if (!v_sStyle) {
				this.setStyle(NuCtl.c_SSTYLE_DISPLAY, "none");
			} else if (v_sStyle == "none") {
				this.setStyle(NuCtl.c_SSTYLE_DISPLAY, "block");
			} else {
				this.setStyle(NuCtl.c_SSTYLE_DISPLAY, "none");
			}
		}
	}
	/**
	 * toXml
	 */
	this.toXml = function() {
		var v_Return;
		v_Return  = '<ctl>';
		v_Return += this._aProps.join(",");
		v_Return += '</ctl>';
		return v_Return;
	}
	/**
	 * validate
	 */
	this.validate = function(prm_sProp, prm_msgs) {
		return this._validate(prm_sProp, prm_msgs);
	}
	//
	// private functions
	//
	/**
	 * _action
	 */
	this._action = function(prm_sEvent, prm_params) {
		var v_Return;
		var v_ctl;
		var v_events;
		var v_parent;
		v_Return = true;
		v_ctl = this;
		switch (prm_sEvent) {
		case NuEvent.c_SEVENT_ONCHANGE:
			this.setValue(NuElement.getValueById("N_" + this.getName()));
			break;
		}
		if (this.getEvent(prm_sEvent)) {
			v_events = v_ctl.getEvents();
			v_events[prm_sEvent].call(this, prm_params);
		} else {
			v_parent = this.getParent();
			if (v_parent) {
				v_Return = v_parent.action(prm_sEvent, prm_params);
			}
		}
		return v_Return;
	}
	/**
	 * _applyStyles
	 */
	this._applyStyles = function() {
		var v_sStyle;
		var v_objCtl;
		var v_objStyles;
		v_objCtl = this._elementCtl;
		if (v_objCtl) {
			v_objStyles = this.getProperty(NuCtl.c_SPROP_STYLE);
			if (v_objStyles) {
				for (v_sStyle in v_objStyles) {
					if (v_objStyles[v_sStyle]) { /*Skip Un-necessary Style information*/
						v_objCtl.style[v_sStyle] = v_objStyles[v_sStyle];
					}
				}
			}
		}
	}
	/**
	 * _createHidden
	 */
	this._createHidden = function(prm_elemBase) {
		var v_elemInput;
		v_elemInput = NuElement.create("input", prm_elemBase);
		NuElement.setAttribute(v_elemInput, "type", "HIDDEN");
		NuElement.setAttribute(v_elemInput, "name", "O_" + this.getName());
		NuElement.setAttribute(v_elemInput, "value", this.getValueOrig());
	}
	/**
	 * _createHtml
	 */
	this._createHtml = function(prm_elemBase) {
		var v_object;
		v_object = this.getProperty(NuCtl.c_SPROP_VAL);
		if (v_object) {
			NuElement.setContent(prm_elemBase, v_object);
		}
	}
	/**
	 * _createLayers
	 */
	this._createLayers = function(prm_elemBase) {
		var v_i;
		var v_iCnt;
		var v_iHeight;
		var v_iWidth;
		var v_aLayers;
		var v_object;
		var v_objDimensions;
		v_aLayers = this.getProperty(NuCtl.c_SPROP_LAYERS);
		if (v_aLayers) {
//			v_iWidth = this.getStyle(NuCtl.c_SSTYLE_WIDTH);
			v_iCnt = v_aLayers.length;
			for (v_i = 0; v_i < v_iCnt; v_i++) {
				v_object = v_aLayers[v_i];
				v_object.setStyle(NuCtl.c_SSTYLE_POSITION, "absolute");
//				v_object.setStyle(NuCtl.c_SSTYLE_LEFT, 0);
//				v_object.setStyle(NuCtl.c_SSTYLE_TOP, 0);
				v_object.draw(prm_elemBase);
			}
		}
	}
	/**
	 * _draw
	 */
	this._draw = function(prm_elemBase) {
		var v_sItr;
		var v_sProp;
		var v_sTitle;
		var v_sWindow;
		var v_sbDsp;
		var v_sStyles;
		var v_elemCtl;
		var v_elemDiv;
		var v_elemImg;
		var v_objCtl;
		var v_objFieldSet;
		var v_objLegend;
		var v_objStyles;
		v_sProp = this.getName();
		v_sTitle = this.getProperty(NuCtl.c_SPROP_TITLE);
		v_sWindow = this.getProperty(NuCtl.c_SPROP_WINDOW);
		if ((v_sWindow) && (v_sWindow == "Yes")) {
			v_elemDiv = NuElement.create("div", prm_elemBase);
			NuElement.setAttribute(v_elemDiv, "class", "ctl_window");
			NuElement.setAttribute(v_elemDiv, "onMouseDown", "return NuView.Document.onMouseDown(event);");
			NuElement.setAttribute(v_elemDiv, "id", "F_" + this.getName() + "-Window");
			v_elemImg = NuElement.create("img", v_elemDiv);
			NuElement.setAttribute(v_elemDiv, "src", NuView.User.getPathImages() + "/WindowClose.png");
			NuElement.setAttribute(v_elemDiv, "class", "ctl_window_close");
			NuElement.setAttribute(v_elemDiv, "border", 0);
			NuElement.setAttribute(v_elemDiv, "alt", "Close Window");
			if (v_sTitle) {
				NuElement.setContent(v_sTitle);
			} else {
				NuElement.setContent("&nbsp;");
			}
		} else if (v_sTitle) {
			v_objFieldSet = NuElement.create("fieldset", prm_elemBase);
			v_objLegend = NuElement.create("legend", v_objFieldSet);
		}
		v_sProp = this.getProperty(NuCtl.c_SPROP_ICON);
		if (v_sProp) {
			if (v_objFieldSet) {
				v_elemImg = NuElement.create("img", v_objFieldSet);
			} else {
				v_elemImg = NuElement.create("img", prm_elemBase);
			}
			NuElement.setAttribute(v_elemImg, "id", "F_" + this.getName() + "-Icon");
			NuElement.setAttribute(v_elemImg, "src", (v_sProp.indexOf("/") < 0 ? NuView.User.getPathImages() + "/" : "") + v_sProp);
		}
		if (prm_elemBase) {
			v_objStyles = this.getProperty(NuCtl.c_SPROP_STYLE);
			v_sProp = this.getEvent(NuEvent.c_SEVENT_ONCLICK);
			if (v_objStyles && v_sProp) {
				v_objStyles["cursor"] = "pointer";
			}
			v_objSpan = NuElement.create("span");
			v_oSpan = {
				"id" : "C_" + this.getName(),
				"name" : "C_" + this.getName(),
				"class" : this.getType() + (this.getProperty("cssclass") ? " " + this.getProperty("cssclass") : ""),
				"linkdata" : this.getProperty(NuCtl.c_SPROP_LINKDATA) ? this.getProperty(NuCtl.c_SPROP_LINKDATA): "",
				"style" : v_objStyles,
				"onclick" : NuView.Document.onClick
			};
			for (v_sItr in v_oSpan) {
				if (v_oSpan[v_sItr] && v_oSpan[v_sItr] != "") {
					switch(v_sItr) {
					case "class":
					case "id":
					case "name":
					case "linkdata":
					case "onclick":
						NuElement.createAttribute(v_sItr, v_oSpan[v_sItr], v_objSpan);
						break;
					case "style":
						for (v_sStyles in v_oSpan[v_sItr]) {
							if (v_oSpan[v_sItr][v_sStyles] && v_oSpan[v_sItr][v_sStyles] != "") {
								v_objSpan.style[v_sStyles] = v_oSpan[v_sItr][v_sStyles];
							}
						}
						break;
					default:
						break;
					}
				}
			}
			this._createLayers(v_objSpan);
			this.createHtml(v_objSpan);
			if (v_sTitle && v_objFieldSet && v_objSpan) {
				NuElement.addElement(v_objSpan, v_objFieldSet);
				NuElement.addElement(v_objFieldSet, prm_elemBase);
			} else {
				NuElement.addElement(v_objSpan, prm_elemBase);
			}
		} else {
			if (NuElement.getById("LoadingJSON")) {
				NuElement.removeElement(NuElement.getById("LoadingJSON"));
			}
			v_elemCtl = NuElement.create("div", prm_elemBase);
			this._createLayers(v_elemCtl);
			this.createHtml(v_elemCtl);
			v_objCtl = this._loadObject(true);
			v_objStyles = this.getProperty(NuCtl.c_SPROP_STYLE);
			if (v_objStyles) {
				for (v_sProp in v_objStyles) {
					if (v_objStyles[v_sProp] && v_objStyles[v_sProp] != "") {
						v_objCtl.style[v_sProp] = v_objStyles[v_sProp];
					}
					
				}
			}
			if (v_objCtl) {
				NuElement.addElement(v_elemCtl, v_objCtl);
			}
		}
	}
	/**
	 * _getId
	 */
	this._getId = function() {
		var v_Return;
		if (this._elementCtl) {
			v_Return = NuElement.getAttribute(this._elementCtl, NuCtl.c_SPROP_ID);
			if (!v_Return) {
				v_Return = NuElement.getAttribute(this._elementCtl, NuCtl.c_SPROP_NAME);
			}
		}
		return v_Return;
	}
	/**
	 * _getProperty
	 */
	this._getProperty = function(prm_sProp, prm_sDefault) {
		var v_Return;
		if (!this._isLoaded) {
			this._loadObject();
		}
		switch (prm_sProp) {
		case NuCtl.c_SPROP_VAL:
			v_Return = this.getValue();
			if (!v_Return) {
				v_Return = this._aProps[prm_sProp];
			}
			break;
		case NuCtl.c_SPROP_TYPE:
			v_Return = this.getType();
			break;
		case NuCtl.c_SPROP_ID:
			v_Return = this.getId();
			break;
		case NuCtl.c_SPROP_NAME:
			v_Return = this._aProps[prm_sProp];
			if (!v_Return) {
				v_Return = this._getProperty(NuCtl.c_SPROP_ID);
				if (v_Return) {
					v_Return = NuStr.read(v_Return, 2, "_")
					this._aProps[prm_sProp] = v_Return;
				}
			}
			break;
		case NuCtl.c_SPROP_REQUIRED:
			v_Return = NuElement.getAttribute(this._elementCtl, "nu" + prm_sProp);
			break;
		default:
			v_Return = this._aProps[prm_sProp];
			if (!v_Return) {
				v_Return = NuElement.getAttribute(this._elementCtl, prm_sProp);
			}
			break;
		}
		if (!v_Return && prm_sDefault) {
			v_Return = prm_sDefault;
		}
		return v_Return;
	}
	/**
	 * _getStyle
	 */
	this._getStyle = function(prm_sStyle) {
		var v_Return;
		var v_objStyles;
		if (!this._isLoaded) {
			this._loadObject();
		}
		v_objStyles = this.getProperty(NuCtl.c_SPROP_STYLE);
		if (v_objStyles) {
			v_Return = v_objStyles[prm_sStyle];
		} else {
			v_Return = null;
		}
		switch (prm_sStyle) {
		case NuCtl.c_SSTYLE_LEFT:
		case NuCtl.c_SSTYLE_TOP:
		case NuCtl.c_SSTYLE_WIDTH:
		case NuCtl.c_SSTYLE_HEIGHT:
			if (v_Return) {
				if (v_Return.endsWith && (v_Return.endsWith("px"))) {
					v_Return = parseInt(v_Return.substring(0, v_Return.length - 2));
				}
			} else if (this._elementCtl) {
				switch (prm_sStyle) {
				case NuCtl.c_SSTYLE_LEFT:
					v_Return = NuElement.getLeft(this._elementCtl);
					break;
				case NuCtl.c_SSTYLE_TOP:
					v_Return = NuElement.getTop(this._elementCtl);
					break;
				case NuCtl.c_SSTYLE_WIDTH:
					v_Return = NuElement.getWidth(this._elementCtl);
					break;
				case NuCtl.c_SSTYLE_HEIGHT:
					v_Return = NuElement.getHeight(this._elementCtl);
					break;
				}
			}
			break;
		}
		return v_Return;
	}
	/**
	 * _getValue
	 */
	this._getValue = function() {
		var v_Return;
		var v_i;
		var v_iCnt;
		var v_sId;
		var v_sType;
		var v_element;
		var v_elemChild;
		if (!this._elementCtl) {
			v_Return = this._aProps[NuCtl.c_SPROP_VAL];
		} else {
			v_sType = this.getType();
			switch (v_sType) {
			case NuCtl.c_STYPE_LABEL:
			case NuCtl.c_STYPE_LINK:
				if (this._elementCtl) {
					v_Return = NuElement.getContent(this._elementCtl);
				}
				break;
			default:
				v_sId = this.getProperty(NuCtl.c_SPROP_ID);
				if (!v_sId) {
				} else if (v_sId.startsWith("F_")) {
					v_element = NuElement.getById(v_sId);
				} else {
					v_element = NuElement.getById("N_" + v_sId.substring(2));
				}
				if (v_element) {
					switch (v_sType) {
					case NuCtl.c_STYPE_TEXT:
					case NuCtl.c_STYPE_ADDRESS:
					case NuCtl.c_STYPE_MEMO:
					case NuCtl.c_STYPE_HIDDEN:
					case NuCtl.c_STYPE_PASSWORD:
						v_Return = v_element.value + "";
						break;
					case NuCtl.c_STYPE_COMBOBOX:
					case NuCtl.c_STYPE_MULTISELECT:
						if (v_element.selectedIndex < 0) {
							v_Return = NuElement.getContent(v_element);
						} else {
							v_Return = v_element.value + "";
						}
						break;
					default:
						switch (NuElement.getAttribute(v_element, "type")) {
						case "text":
						case "textarea":
						case "hidden":
						case "button":
						case "file":
						case "password":
						case "radio":
							v_Return = v_element.value + "";
							break;
						case "checkbox":
							if (v_element.checked) {
								v_Return = "Yes";
							} else {
								v_Return = "No";
							}
							break;
						default:
							v_iCnt = v_element.length;
							for (v_i = 0; v_i < v_iCnt; v_i++) {
								v_elemChild = v_element[v_i];
								if (v_elemChild.type != "radio") {
								} else if (v_elemChild.checked == true) {
									v_Return = v_elemChild.value + "";
								}
							}
							break;
						}
						break;
					}
				}
				break;
			}
		}
		if (v_Return == null) {
			v_Return = "";
		}
		return v_Return;
	}
	/**
	 * _getValueOrig
	 */
	this._getValueOrig = function() {
		var v_Return;
		var v_sId;
		var v_element;
		v_sId = this.getProperty(NuCtl.c_SPROP_ID);
		v_element = NuElement.getById("O_" + v_sId.substring(2));
		if (v_element) {
			v_Return = v_element.value;
		}
		if (v_Return == null) {
			v_Return = "";
		}
		return v_Return;
	}
	/**
	 * _initialize
	 */
	this._initialize = function() {
		this._aProps = {};
	}
	/**
	 * _loadObject
	 */
	this._loadObject = function(prm_isForceCreate) {
		var v_i;
		var v_iCnt;
		var v_sProp;
		var v_attributes;
		var v_elemTd;
		var v_objParent;
		if (this._elementCtl == null) {
			v_sProp = this._aProps[NuCtl.c_SPROP_NAME];
			this._elementCtl = NuElement.getById("C_" + v_sProp);
			if (!this._elementCtl) {
				this._elementCtl = NuElement.getById("F_" + v_sProp);
			}
			if ((prm_isForceCreate) && (this._elementCtl == null)) {
				this._elementCtl = NuElement.create("span");
				v_sProp = this._aProps[NuCtl.c_SPROP_NAME];
				if (v_sProp) {
					/*
					v_elemTd = NuElement.create("span", this._elementCtl);
					NuElement.setAttribute(v_elemTd, "id", "C_" + v_sProp);
					*/
					NuElement.setAttribute(this._elementCtl, "id", "C_" + v_sProp);
					if (this._aProps[NuCtl.c_SPROP_REQUIRED] && this._aProps[NuCtl.c_SPROP_REQUIRED].toLowerCase() == "yes") {
						NuElement.setAttribute(this._elementCtl, "nu" + NuCtl.c_SPROP_REQUIRED, "Yes");
					}
				}
				v_sProp = this.getEvent(NuEvent.c_SEVENT_ONCLICK);
				if (v_sProp) {
					this.setStyle(NuCtl.c_SSTYLE_CURSOR, "pointer");
					NuElement.setAttribute(this._elementCtl, "onclick", NuView.Document.onClick);
				}
				this._applyStyles();
				if (this._ctlParent == null) {
					v_objParent = NuView.Document.getRoot();
					NuElement.addElement(this._elementCtl, v_objParent);
				} else {
					NuElement.addElement(this._elementCtl, this._ctlParent);
				}
			}
		}
		if (this._isLoaded) {
		} else if (this._elementCtl) {
/*
			v_attributes = this._elementCtl.attributes;
			if (v_attributes) {
				v_iCnt = v_attributes.length;
				for (v_i = 0; v_i < v_iCnt; v_i++) {
					v_sProp = v_attributes[v_i].nodeName;
					if (v_sProp == "type") {
					} else if (v_sProp == "id") {
					} else {
						this._aProps[v_sProp] = v_attributes[v_i].nodeValue;
					}
				}
			}
*/
			this._isLoaded = true;
		}
		return this._elementCtl;
	}
	/**
	 * _onSubmit
	 */
	this._onSubmit = function(prm_params) {
		var v_Return;
		var v_sPropVal;
		var v_sVal;
		v_Return = true;
		// required test
		v_sPropVal = this.getProperty(NuCtl.c_SPROP_REQUIRED);
		if (v_sPropVal == "Yes") {
			v_sVal = this.getValue();
			if (v_sVal == "") {
				v_hError = {
					message:"FldRequired",
					ctl:NuCtl.getName(v_ctl),
					dataset:NuCtl.getDatasetName(v_ctl),
					title:NuCtl.getAttribute(v_ctl, "tip")
					};
				NuView.message(v_hError);
				v_Return = false;
			}
		}
		if (v_Return) {
			v_sPropVal = this.getProperty(NuCtl.c_SPROP_VALID);
			if (v_sPropVal == "No") {
				v_Return = this.onChange();
			}
		}
	}
	/**
	 * _setProperty
	 */
	this._setProperty = function(prm_sProp, prm_object) {
		var v_i;
		var v_iCnt;
		var v_sProp;
		var v_aEvents;
		var v_aLayers;
		var v_element;
		var v_ctl;
		switch (prm_sProp) {
		case NuCtl.c_SSTYLE_TOP:
		case NuCtl.c_SSTYLE_LEFT:
			this._setStyle(prm_sProp, prm_object);
			break;
		case NuCtl.c_SSTYLE_HEIGHT:
		case NuCtl.c_SSTYLE_WIDTH:
			this._setStyle(prm_sProp, prm_object);
			break;
		case NuCtl.c_SPROP_TYPE:
			break;
		case NuCtl.c_SPROP_REQUIRED:
			if (this._elementCtl) {
				NuElement.setAttribute(this._elementCtl, "nu" + prm_sProp, prm_object);
			} else if ((prm_object == null) || (prm_object.length == 0)) {
				this._aProps[prm_sProp] = null;
			} else {
				this._aProps[prm_sProp] = prm_object;
			}
			break;
		case NuCtl.c_SPROP_EVENTS:
			v_aEvents = this._aProps[NuCtl.c_SPROP_EVENTS];
			if (v_aEvents) {
				for (v_sProp in prm_object) {
					if (prm_object[v_sProp]) {
						v_aEvents[v_sProp] = prm_object[v_sProp];
					}
				}
			} else {
				this._aProps[NuCtl.c_SPROP_EVENTS] = prm_object;
			}
			break;
		case NuCtl.c_SPROP_ID:
			break;
		case NuCtl.c_SPROP_LAYERS:
			v_aLayers = [];
			this._aProps[NuCtl.c_SPROP_LAYERS] = v_aLayers;
			v_iCnt = prm_object.length;
			for (v_i = 0; v_i < v_iCnt; v_i++) {
				v_ctl = prm_object[v_i];
				v_ctl = NuCtl.create(v_ctl, this);
				v_aLayers.push(v_ctl);
			}
			break;
		case NuCtl.c_SPROP_ICON:
			this._aProps[prm_sProp] = prm_object;
			v_element = NuElement.getById("F_" + this.getName() + "-Icon");
			if (v_element) {
				NuElement.setAttribute(v_element, "src", NuView.User.getPathImages() + "/" + prm_object);
			}
			break;
		case NuCtl.c_SPROP_VAL:
			this._setValue(prm_object);
			break;
		default:
			if ((prm_object == null) || (prm_object.length == 0)) {
				delete this._aProps[prm_sProp];
			} else {
				this._aProps[prm_sProp] = prm_object;
			}
			break;
		}
	}
	/**
	 * _setStyle
	 */
	this._setStyle = function(prm_sStyle, prm_sValue) {
		var v_sStyle;
		var v_objStyles;
		v_objStyles = this.getProperty(NuCtl.c_SPROP_STYLE);
		if (!v_objStyles) {
			v_objStyles = {};
			this.setProperty(NuCtl.c_SPROP_STYLE, v_objStyles);
		}
		v_sStyle = prm_sStyle.replace("_", "-");
		if ((prm_sValue == null) || (prm_sValue.length == 0)) {
			delete v_objStyles[v_sStyle];
		} else {
			v_objStyles[v_sStyle] = prm_sValue;
		}
		if (this._elementCtl) {
			this._elementCtl.style[v_sStyle] = prm_sValue;
		}
	}
	/**
	 * _setValue
	 */
	this._setValue = function(prm_object) {
		var v_sId;
		var v_element;
		if (this.isLoaded()) {
			v_sId = this.getId();
			v_element = NuElement.getById("N_" + v_sId.substring(2));
			switch (this.getType()) {
			default:
				v_element.value = prm_object;
				break;
			}
		} else if ((prm_object == null) || (prm_object.length == 0)) {
			delete this._aProps[NuCtl.c_SPROP_VAL];
		} else {
			this._aProps[NuCtl.c_SPROP_VAL] = prm_object;
		}
	}
	/**
	 * _shutdown
	 */
	this._shutdown = function() {
		var v_i;
		var v_iCnt;
		/*
		if (this._ctlParent) {
			this._ctlParent.removeChild(this);
			this._ctlParent = null;
		}
		this._aProps = null;
		if (this._aChildren) {
			v_iCnt = this._aChildren.length;
			for (v_i = 0; v_i < v_iCnt; v_i++) {
				this.removeChild(this._aChildren[v_i]);
			}
			this._aChildren = null;
		}
		if (this._elementCtl) {
			NuElement.removeElement(this._elementCtl);
			this._elementCtl = null;
		}
		*/
	}
	/**
	 * _validate
	 */
	this._validate = function(prm_sProp, prm_msgs) {
		var v_Return;
		var v_sVal;
		if (prm_msgs) {
			v_Return = prm_msgs;
		}
		switch (prm_sProp) {
		case NuCtl.c_SPROP_REQUIRED:
			if (this.getProperty(prm_sProp) != "Yes") {
			} else if (this.getType() == NuCtl.c_STYPE_HIDDEN) {
			} else {
				v_sVal = this.getValue();
				if (v_sVal == "") {
					if (!v_Return) {
						v_Return = new NuMessages();
					}
					v_Return.add({msg:"FldRequired", ctl:NuElement.getAttribute(this.getObject(), "title")});
				}
			}
			break;
		}
		return v_Return;
	}
}
//
// NuCtl static items
//
	// control types
	NuCtl.c_STYPE_UNKNOWN = "unknown";
	NuCtl.c_STYPE_ADDRESS = "address";
	NuCtl.c_STYPE_BREADCRUMBS = "breadcrumbs";
	NuCtl.c_STYPE_BUTTON = "button";
	NuCtl.c_STYPE_CALENDAR = "calendar";
	NuCtl.c_STYPE_CHECKBOX = "check";
	NuCtl.c_STYPE_COMBOBOX = "combo";
	NuCtl.c_STYPE_DATASHEET = "datasheet";
	NuCtl.c_STYPE_DATE = "date";
	NuCtl.c_STYPE_GRAPH = "graph";
	NuCtl.c_STYPE_GRID = "grid";
	NuCtl.c_STYPE_HIDDEN = "hidden";
	NuCtl.c_STYPE_IMAGE = "image";
	NuCtl.c_STYPE_INTEGER = "integer";
	NuCtl.c_STYPE_LABEL = "label";
	NuCtl.c_STYPE_LINEBREAK = "linebreak";
	NuCtl.c_STYPE_LINK = "link";
	NuCtl.c_STYPE_MEMO = "memo";
	NuCtl.c_STYPE_MENU = "menu";
	NuCtl.c_STYPE_MONEY = "money";
	NuCtl.c_STYPE_MULTISELECT = "multiselect";
	NuCtl.c_STYPE_NUMBER = "number";
	NuCtl.c_STYPE_PAGEBREAK = "pagebreak";
	NuCtl.c_STYPE_PANEL = "panel";
	NuCtl.c_STYPE_PASSWORD = "password";
	NuCtl.c_STYPE_RADIO = "radio";
	NuCtl.c_STYPE_RICHTEXT = "richtext";
	NuCtl.c_STYPE_TABSET = "tabset";
	NuCtl.c_STYPE_TEXT = "text";
	NuCtl.c_STYPE_TREE = "tree";
	NuCtl.c_STYPE_WHITEBOARD = "whiteboard";
	NuCtl.c_STYPE_WIKI = "wiki";
	// properties
	NuCtl.c_SPROP_BODY = "body";
	NuCtl.c_SPROP_BODYSTYLE = "bodystyle";
	NuCtl.c_SPROP_CANCHANGE = "canchange";
	NuCtl.c_SPROP_CANVIEW = "canview";
	NuCtl.c_SPROP_CANDRAG = "candrag";
	NuCtl.c_SPROP_CHANGED = "changed";
	NuCtl.c_SPROP_COL = "col";
	NuCtl.c_SPROP_DATA = "data";
	NuCtl.c_SPROP_DATA1 = "data1";
	NuCtl.c_SPROP_DATA2 = "data2";
	NuCtl.c_SPROP_DATA3 = "data3";
	NuCtl.c_SPROP_DATASET = "dataset";
	NuCtl.c_SPROP_DATASOURCE = "datasource";
	NuCtl.c_SPROP_EVENTS = "events";
	NuCtl.c_SPROP_FIELD = "fld";
	NuCtl.c_SPROP_FOOTER = "footer";
	NuCtl.c_SPROP_FOOTERSTYLE = "footerstyle";
	NuCtl.c_SPROP_FORMAT = "format";
	NuCtl.c_SPROP_GROUPBY = "groupby";
	NuCtl.c_SPROP_HEADER = "header";
	NuCtl.c_SPROP_HEADERSTYLE = "headerstyle";
	NuCtl.c_SPROP_HIGHLIGHTING = "highlighting";
	NuCtl.c_SPROP_HREF = "href";
	NuCtl.c_SPROP_ICON = "icon";
	NuCtl.c_SPROP_ID = "id";
	NuCtl.c_SPROP_LAYERS = "layers";
	NuCtl.c_SPROP_LAYOUT = "layout";
	NuCtl.c_SPROP_LBL = "lbl";
	NuCtl.c_SPROP_LEN = "len";
	NuCtl.c_SPROP_LINKDATA = "linkdata";
	NuCtl.c_SPROP_MARGINLEFT = "marginleft";
	NuCtl.c_SPROP_MARGINRIGHT = "marginright";
	NuCtl.c_SPROP_NAME = "name";
	NuCtl.c_SPROP_READONLY = "readonly";
	NuCtl.c_SPROP_REQUIRED = "required";
	NuCtl.c_SPROP_ROW = "row";
	NuCtl.c_SPROP_ROWNUM = "rownum";
	NuCtl.c_SPROP_SPAN = "span";
	NuCtl.c_SPROP_STYLE = "style";
	NuCtl.c_SPROP_SUBMENU = "submenu";
	NuCtl.c_SPROP_TIP = "tip";
	NuCtl.c_SPROP_TITLE = "title";
	NuCtl.c_SPROP_TYPE = "type";
	NuCtl.c_SPROP_VAL = "val";
	NuCtl.c_SPROP_VALID = "valid";
	NuCtl.c_SPROP_VALORIG = "valorig";
	NuCtl.c_SPROP_VARIABLES = "variables";
	NuCtl.c_SPROP_WINDOW = "window";
	// styles
	NuCtl.c_SSTYLE_BORDER = "border";
	NuCtl.c_SSTYLE_CURSOR = "cursor";
	NuCtl.c_SSTYLE_DISPLAY = "display";
	NuCtl.c_SSTYLE_HEIGHT = "height";
	NuCtl.c_SSTYLE_LEFT = "left";
	NuCtl.c_SSTYLE_OVERFLOW = "overflow";
	NuCtl.c_SSTYLE_POSITION = "position";
	NuCtl.c_SSTYLE_TOP = "top";
	NuCtl.c_SSTYLE_WIDTH = "width";
	/**
	 * action
	 */
	NuCtl.action = function(prm_sCtl, prm_sEvent, prm_params) {
		var v_ctl;
		v_ctl = NuView.Document.Controls.get(prm_sCtl);
		if (v_ctl) {
			v_ctl.action(prm_sEvent, prm_params);
		}
	}
	/**
	 * create
	 */
	NuCtl.create = function(prm_object, prm_parent) {
		var v_Return;
		var v_sId;
		var v_sObjType;
		var v_sType;
		var v_element;
		v_sObjType = NuObject.getType(prm_object);
		switch (v_sObjType) {
		case "String":
			v_sType = prm_object.toLowerCase();
			break;
		case "Element":
			v_sId = NuElement.getName(prm_object);
			v_sType = NuElement.getAttribute(prm_object, "nutype");
			if (v_sType) {
				v_sType = v_sType.toLowerCase();
			} else {
				v_sType = NuElement.getTag(prm_object);
			}
			break;
		case "Hash":
			v_sType = prm_object[NuCtl.c_SPROP_TYPE];
			if (v_sType) {
				v_sType = v_sType.toLowerCase();
			} else {
				v_sType = NuCtl.c_STYPE_UNKNOWN;
			}
			v_sId = prm_object[NuCtl.c_SPROP_ID];
			if (!v_sId) {
				v_element = null;
			} else if (v_sId.indexOf("_") == 1) {
				v_element = NuElement.getById(v_sId);
			} else {
				v_element = NuElement.getById("C_" + v_sId);
				if (!v_element) {
					v_element = NuElement.getById("F_" + v_sId);
				}
			}
			if (v_element) {
				v_sType = NuElement.getAttribute(v_element, "nutype");
				if (v_sType) {
					v_sType = v_sType.toLowerCase();
				} else if (NuElement.getTag(v_element) == "input") {
					v_sType = NuCtl.c_STYPE_HIDDEN;
				}
			}
			break;
		}
		switch (v_sType) {
		case NuCtl.c_STYPE_ADDRESS:
			v_Return = new NuCtlAddress();
			break;
		case NuCtl.c_STYPE_BUTTON:
			v_Return = new NuCtlButton();
			break;
		case NuCtl.c_STYPE_CALENDAR:
			v_Return = new NuCtlCalendar();
			break;
		case NuCtl.c_STYPE_CHECKBOX:
			v_Return = new NuCtlCheckbox();
			break;
		case NuCtl.c_STYPE_COMBOBOX:
			v_Return = new NuCtlCombobox();
			break;
		case NuCtl.c_STYPE_DATASHEET:
			v_Return = new NuCtlDatasheet();
			break;
		case NuCtl.c_STYPE_DATE:
			v_Return = new NuCtlDate();
			break;
		case NuCtl.c_STYPE_HIDDEN:
			v_Return = new NuCtlHidden();
			break;
		case NuCtl.c_STYPE_GRAPH:
			v_Return = new NuCtlGraph();
			break;
		case NuCtl.c_STYPE_GRID:
			v_Return = new NuCtlGrid();
			break;
		case NuCtl.c_STYPE_IMAGE:
			v_Return = new NuCtlImage();
			break;
		case NuCtl.c_STYPE_INTEGER:
			v_Return = new NuCtlInteger();
			break;
		case NuCtl.c_STYPE_LABEL:
			v_Return = new NuCtlLabel();
			break;
		case NuCtl.c_STYPE_LINEBREAK:
			v_Return = new NuCtlLinebreak();
			break;
		case NuCtl.c_STYPE_MEMO:
			v_Return = new NuCtlMemo();
			break;
		case NuCtl.c_STYPE_MENU:
			v_Return = new NuCtlMenu();
			break;
		case NuCtl.c_STYPE_MONEY:
			v_Return = new NuCtlMoney();
			break;
		case NuCtl.c_STYPE_MULTISELECT:
			v_Return = new NuCtlMultiselect();
			break;
		case NuCtl.c_STYPE_NUMBER:
			v_Return = new NuCtlNumber();
			break;
		case NuCtl.c_STYPE_PAGEBREAK:
			v_Return = new NuCtlPagebreak();
			break;
		case NuCtl.c_STYPE_PANEL:
			v_Return = new NuCtlPanel();
			break;
		case NuCtl.c_STYPE_PASSWORD:
			v_Return = new NuCtlPassword();
			break;
		case NuCtl.c_STYPE_RADIO:
			v_Return = new NuCtlRadio();
			break;
		case NuCtl.c_STYPE_RICHTEXT:
			v_Return = new NuCtlRichtext();
			break;
		case NuCtl.c_STYPE_TABSET:
			v_Return = new NuCtlTabset();
			break;
		case NuCtl.c_STYPE_TEXT:
			v_Return = new NuCtlText();
			break;
		case NuCtl.c_STYPE_TREE:
			v_Return = new NuCtlTree();
			break;
		case NuCtl.c_STYPE_WHITEBOARD:
			v_Return = new NuCtlWhiteboard();
			break;
		case NuCtl.c_STYPE_WIKI:
			v_Return = new NuCtlWiki();
			break;
		case NuCtl.c_STYPE_WINDOW:
			v_Return = new NuCtlWindow();
			break;
		default:
			v_Return = new NuCtlLabel();
			break;
		}
		if (v_Return) {
			v_Return.initialize();
			switch (v_sObjType) {
			case "Element":
			case "Hash":
				v_Return.setPropertyList(prm_object);
				if (v_sId) {
					NuView.Document.Controls.set(v_sId, v_Return);
				} else {
					v_sId = prm_object[NuCtl.c_SPROP_NAME];
					if (!v_sId) {
						v_sId = v_Return.getName();
					}
					NuView.Document.Controls.set(v_sId, v_Return);
				}
				break;
			}
			if (prm_parent) {
				v_Return.bindParent(prm_parent);
			}
			if (v_element) {
				v_Return.setElement(v_element);
			}
		}
		return v_Return;
	}
	/**
	 * createById
	 */
	NuCtl.createById = function(prm_sId) {
		return NuCtl.create(NuElement.getById(prm_sId));
	}
	/**
	 * fireEvent - deprecated
	 */
	NuCtl.fireEvent = function(prm_sCtl, prm_sEvent, prm_params) {
		return NuCtl.action(prm_sCtl, prm_sEvent, prm_params);
	}
	/**
	 * getValue
	 */
	NuCtl.getValue = function(prm_sId) {
		return NuElement.getValueById(prm_sId);
	}
	/**
	 * setValue
	 */
	NuCtl.setValue = function(prm_sId, prm_sVal) {
		var v_sVal;
		if (!prm_sVal) {
			NuElement.setValueById(prm_sId, "");
		} else if (prm_sVal.startsWith("dt!")) {
			v_sVal = NuDate.toStr(prm_sVal);
			NuElement.setValueById(prm_sId, v_sVal);
		} else if (prm_sVal.startsWith("mny!")) {
			v_sVal = NuMny.toStr(prm_sVal);
			NuElement.setValueById(prm_sId, prm_sVal);
		} else {
			NuElement.setValueById(prm_sId, prm_sVal);
		}
	}
//
// NuCtl end
//
/**
 * NuCtlAddress Object
 */
function NuCtlAddress() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sClass;
		var v_sItr;
		var v_sProp;
		var v_sReq;
		var v_sType;
		var v_sValue;
		var v_objAdr;
		var v_oLbl;
		var v_oAdr;
		v_sValue = this.getValue();
		v_sValue = (v_sValue ? v_sValue : "");
		v_objAdr = NuElement.create("textarea");
		v_sReq = this._aProps[NuCtl.c_SPROP_REQUIRED];
		v_sReq = (v_sReq ? v_sReq : "");
		v_sType = this.getProperty(NuCtl.c_SPROP_TYPE);
		v_oAdr = {
			rows : "2",
			cols : "30",
			id : "N_" + this.getName(),
			name : "N_" + this.getName(),
			required : v_sReq,
			nutype : v_sType,
			"class" : "ctl"
		};
		v_sProp = this.getProperty(NuCtl.c_SPROP_CANCHANGE);
		if ((v_sProp) && (v_sProp == "No")) {
			NuElement.setAttribute(v_objAdr, "readonly", "YES");
		}
		for (v_sItr in v_oAdr) {
			if (v_oAdr[v_sItr] && v_oAdr[v_sItr] != "") {
				switch(v_sItr) {
				case "rows":
				case "cols":
				case "id":
				case "required":
				case "nutype":
				case "class":
				case "name":
					NuElement.createAttribute(v_sItr, v_oAdr[v_sItr], v_objAdr);
					break;
				default:
					break;
				}
			}
		}
		v_objAdr.value = v_sValue;
		v_objAdr.innerHTML = v_sValue;
		v_objAdr ? NuXmlJson.addChild(prm_elemBase, v_objAdr) : 0; /*Add Control If Exists*/
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_ADDRESS;
	}
}
NuCtlAddress.prototype = new NuCtl();
/**
 * NuCtlButton Object
 */
function NuCtlButton() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_oBtn = {};
		var v_oDOMNode;
		var v_oParent;
		var v_sItr;
		var v_sName;
		var v_sProp;
		/*Pre-Requisites*/
		v_sProp = this.getProperty(NuCtl.c_SPROP_VAL);
		v_sProp = (v_sProp ? v_sProp : ""); /*InCase the v_sProp is undefined set it to ""*/
		v_sName = this.getName();
		/*Button Content Rendering Start*/
		v_oBtn = {
			type : NuCtl.c_STYPE_BUTTON,
			id : "F_" + v_sName,
			value : v_sProp,
			onclick : NuView.Document.onClick
		};
		v_oDOMNode = NuElement.create("input");
		for (v_sItr in v_oBtn) {
			if (v_oBtn[v_sItr] && v_oBtn[v_sItr] != "") {
				switch(v_sItr) {
				case "onclick":
				case "type":
				case "id":
				case "value":
					NuElement.createAttribute(v_sItr, v_oBtn[v_sItr], v_oDOMNode);
					break;
				default:
					/*Todo: Any Error Checking Code could be written here*/
					break;
				}
			}
		}
		v_oParent = prm_elemBase;
		v_oDOMNode ? NuXmlJson.addChild(v_oParent, v_oDOMNode) : 0; /*Add Control If Exists*/
		/*Button Content Rendering End*/
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_BUTTON;
	}
}
NuCtlButton.prototype = new NuCtl();
/**
 * NuCtlCalendar Object
 */
function NuCtlCalendar() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_isDone = false;
		var v_isPm;
		var v_i;
		var v_iCnt;
		var v_iDay = 0;
//		var v_iDaysInMonth = 0;
		var v_iFirstDay;
		var v_iHour = 0;
		var v_iMin;
		var v_iMonth = 0;
		var v_iSec;
		var v_iYear = 0;
		var v_sCalType;
		var v_sCtlId;
		var v_sCtlName;
		var v_sDateHighlight;
		var v_sDay;
		var v_sFormat;
		var v_sMonth;
		var v_sStyle;
		var v_sType;
		var v_sWindow;
		var v_sbDsp;
		var v_dt;
		var v_dtCnt;
		var v_aListDay;
		var v_aListMonth;
		var v_xml;
		var v_xmlCalData;
		v_sCtlId = this.getName();
		v_sCalType = this.getProperty(NuCtl.c_SPROP_LAYOUT);
		v_sFormat = this.getProperty(NuCtl.c_SPROP_FORMAT);
		if (v_sCalType == "") {
			v_sCalType = "Date";
		}
		v_dt = this.getValue();
		if ((!v_dt) || (v_dt == "")) {
			v_dt = NuDate.now();
		}
		v_sDateHighlight = this.getProperty(NuCtl.c_SPROP_HIGHLIGHTING);
		v_aListDay = NuView.User.CalendarDays;
		v_aListMonth = NuView.User.CalendarMonths;
		switch (v_sCalType) {
		case "Date":
			v_dt = NuDate.getPartByType(v_dt, NuDate.c_ITYPE_DATEONLY);
			break;
		case "Time":
			v_dt = NuDate.getPartByType(v_dt, NuDate.c_ITYPE_TIMEONLY);
			break;
		}
		this.setValue(v_dt);
		v_sbDsp = new StringBuffer();
		v_sbDsp.append('\n<table class="calendar">\n');
		v_sbDsp.append('\t<tr>\n');
		v_sbDsp.append('\t\t<td colSpan="7" align="CENTER">\n');
		if (v_sCalType != "Time") {
			v_iDay = NuDate.getPart(v_dt, NuDate.c_IPART_DAY);
			v_iMonth = NuDate.getPart(v_dt, NuDate.c_IPART_MONTH);
			v_iYear = NuDate.getPart(v_dt, NuDate.c_IPART_YEAR);
			v_sbDsp.append('\t\t\t<table class="calendarTitle">\n');
			v_sbDsp.append('\t\t\t\t<tr>\n');
			v_sbDsp.append('\t\t\t\t\t<td><div class="calendarTitleLink" title="Previous Month" onClick="return onCalendar(\'' + v_sCtlId + '_MonthPrev\', event);"><img src="' + NuFile.getPath('Image', 'LArrow.gif') + '" /></div></td>\n');
			v_sbDsp.append('\t\t\t\t\t<td>\n');
			v_sbDsp.append('\t\t\t\t\t\t<select id="F_' + v_sCtlId + '_Month" class="calendarTitle" onChange="return onCalendar(\'' + v_sCtlId + '_Month\', event);">\n');
			for (v_i = 1; v_i <= 12; v_i++) {
				v_sMonth = v_aListMonth[v_i - 1];
				v_sbDsp.append('\t\t\t\t\t\t\t<option value="' + v_i + '">' + v_sMonth + '</option>\n');
			}
			v_sbDsp.append('\t\t\t\t\t\t</select>\n');
			v_sbDsp.append('\t\t\t\t\t</td>\n');
			v_sbDsp.append('\t\t\t\t\t<td><div class="calendarTitleLink" title="Next Month" onClick="return onCalendar(\'' + v_sCtlId + '_MonthNext\',event);"><img border="0" src="' + NuView.User.getPathImages() + '/RArrow.gif' + '" /></div></td>\n');
			v_sbDsp.append('\t\t\t\t\t<td><div class="calendarTitleLink" title="Previous Year" onClick="return onCalendar(\'' + v_sCtlId + '_YearPrev\',event);"><img border="0" src="' + NuView.User.getPathImages() + '/LArrow.gif' + '" /></div></td>\n');
			v_sbDsp.append('\t\t\t\t\t<td><div id="F_' + v_sCtlId + '_Year" class="calendarTitle">' + v_iYear + '</div></td>\n');
			v_sbDsp.append('\t\t\t\t\t<td><div class="calendarTitleLink" title="Next Year" onClick="return onCalendar(\'' + v_sCtlId + '_YearNext\',event);"><img border="0" src="' + NuView.User.getPathImages() + '/RArrow.gif' + '" /></div></td>\n');
			v_sbDsp.append('\t\t\t\t</tr>\n');
			v_sbDsp.append('\t\t\t</table>\n');
		}
		if (v_sCalType != "Date") {
			v_iHour = NuDate.getPart(v_dt, NuDate.c_IPART_HOUR);
			v_iMin = NuDate.getPart(v_dt, NuDate.c_IPART_MIN);
			v_iSec = NuDate.getPart(v_dt, NuDate.c_IPART_SEC);
			if (v_iHour < 0) {
				v_iHour = "";
			}
			if (v_iMin < 0) {
				v_iMin = "";
			}
			if (v_iSec < 0) {
				v_iSec = "";
			}
			v_isPm = false;
			switch (v_iHour) {
			case 0:
				v_iHour = 12;
				break;
			case 12:
				v_isPm = true;
				break;
			default:
				if (v_iHour > 12) {
					v_iHour -= 12;
					v_isPm = true;
				}
				break;
			}
			v_sbDsp.append('\t\t\t<table class="calendarTitle">\n');
			v_sbDsp.append('\t\t\t\t<tr>\n');
			v_sbDsp.append('\t\t\t\t\t<td nowrap="yes">\n');
			v_sbDsp.append('\t\t\t\t\t\t<input id="' + v_sCtlId + '_Hour" type="TEXT" class="calendarTitle" onChange="return onCalendar(\'' + v_sCtlId + '_Hour\', event);" style="width:2em;" maxlength="2" value="' + v_iHour + '" />:\n');
			v_sbDsp.append('\t\t\t\t\t\t<input id="' + v_sCtlId + '_Min" type="TEXT" class="calendarTitle" onChange="return onCalendar(\'' + v_sCtlId + '_Min\', event);" style="width:2em;" maxlength="2" value="' + v_iMin + '" />:\n');
			v_sbDsp.append('\t\t\t\t\t\t<input id="' + v_sCtlId + '_Sec" type="TEXT" class="calendarTitle" onChange="return onCalendar(\'' + v_sCtlId + '_Sec\', event);" style="width:2em;" maxlength="2" value="' + v_iSec + '" />\n');
			v_sbDsp.append('\t\t\t\t\t\t<input id="' + v_sCtlId + '_AmPm" type="CHECKBOX" class="calendarTitle" onChange="return onCalendar(\'' + v_sCtlId + '_AmPm\', event);"');
			if (v_isPm) {
				v_sbDsp.append(' CHECKED');
			}
			v_sbDsp.append(' /> pm?\n');
			v_sbDsp.append('\t\t\t\t\t</td>\n');
			if (v_sCalType == "Time") {
				v_sbDsp.append('\t\t\t\t\t<td>\n');
				v_sbDsp.append('\t\t\t\t\t\t<a href="Navigate.html" class="calendarTitle" onClick="return onCalendar(\'' + v_sCtlId + '_Ok\', event);">Ok</a>');
				v_sbDsp.append('\t\t\t\t\t</td>\n');
			}
			v_sbDsp.append('\t\t\t\t</tr>\n');
			v_sbDsp.append('\t\t\t</table>\n');
		}
		v_sbDsp.append('\t\t</td>\n');
		v_sbDsp.append('\t</tr>\n');
		if (v_sCalType != "Time") {
			v_sbDsp.append('\t<tr>\n');
			for (v_i = 1; v_i <= 7; v_i++) {
				v_sDay = v_aListDay[v_i - 1];
				v_sbDsp.append('\t\t<td class="calendarDay">' + v_sDay + '</td>\n');
			}
			v_sbDsp.append('\t</tr>\n');
			v_iFirstDay = NuDate.getPart(v_dt, NuDate.c_IPART_FIRSTDAYOFMONTH);
//			v_iDaysInMonth = NuDate.getPart(v_dt, NuDate.c_IPART_DAYSINMONTH);
			v_dtCnt = NuDate.getPartByType(v_dt, NuDate.c_ITYPE_DATEONLY);
			v_dtCnt = NuDate.setPart(v_dtCnt, NuDate.c_IPART_DAY, 1);
			v_dtCnt = NuDate.add(v_dtCnt, 0 - v_iFirstDay, "d");
			v_iCnt = 0;
			while (!v_isDone) {
				v_sbDsp.append('\t<tr>\n');
				for (v_i = 1; v_i <= 7; v_i++) {
					v_iCnt += 1;
					v_dtCnt = NuDate.add(v_dtCnt, 1, "d");
//					v_sDay = NuDate.getPart(v_dtCnt, NuDate.c_IPART_DAY);
					if (v_sFormat && (v_sFormat == "Popup")) {
						v_sStyle = "";
					} else if ((v_dtCnt == v_dt) && (v_sDateHighlight != "No")) {
						v_sStyle = "Chosen";
					} else if ((v_i == 1) || (v_i == 7)) {
						v_sStyle = "Holiday";
					} else {
						v_sStyle = "Weekday";
					}
//					if ((v_iCnt > 7) && (v_sDay == v_iDaysInMonth)) {
//						v_isDone = true;
//					}
					v_sbDsp.append('\t\t<td valign="TOP"');
					if (v_sStyle != "") {
						v_sbDsp.append(' class="calendar' + v_sStyle + '"')
					}
					v_sbDsp.append('>\n<div id="F_' + v_sCtlId + '_calday-' + v_iCnt + '" class="calendar_day" onClick="return onCalendar(\'' + v_sCtlId + '_calday-' + v_iCnt + '\', event);"></div>\n');
					if (v_sFormat && (v_sFormat == "Popup")) {
					} else {
						v_sbDsp.append('<div id="F_' + v_sCtlId + '_caldate-' + v_iCnt + '" class="calendar_data"></div>\n');
					}
					v_sbDsp.append('</td>\n');
					if (v_iCnt == 42) {
						v_isDone = true;
					}
				}
				v_sbDsp.append('\t</tr>\n');
			}
		}
		v_sbDsp.append('</table>\n');
		v_sbDsp.append('<div id="F_' + v_sCtlId + '_changedata" class="visibleNo"></div>\n');
		NuElement.setContent(prm_elemBase, v_sbDsp.toString());
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_CALENDAR;
	}
	/**
	 * nextMonth
	 */
	this.nextMonth = function() {
		var v_dt;
		v_dt = this.getValue();
		v_dt = NuDate.add(v_dt, 1, "m");
		this.setValue(v_dt);
		this.refresh();
	}
	/**
	 * nextYear
	 */
	this.nextYear = function() {
		var v_dt;
		v_dt = this.getValue();
		v_dt = NuDate.add(v_dt, 1, "y");
		this.setValue(v_dt);
		this.refresh();
	}
	/**
	 * prevMonth
	 */
	this.prevMonth = function() {
		var v_dt;
		v_dt = this.getValue();
		v_dt = NuDate.add(v_dt, -1, "m");
		this.setValue(v_dt);
		this.refresh();
	}
	/**
	 * prevYear
	 */
	this.prevYear = function() {
		var v_dt;
		v_dt = this.getValue();
		v_dt = NuDate.add(v_dt, -1, "y");
		this.setValue(v_dt);
		this.refresh();
	}
	/**
	 * refresh
	 */
	this.refresh = function() {
		var v_isDone;
		var v_i;
		var v_iDateCol;
		var v_iDay;
		var v_iDaysInMonth;
		var v_iFirstDay;
		var v_iMonth;
		var v_iColIdx;
		var v_iRowIdx;
		var v_iYear;
		var v_sCtlName;
		var v_sDataset;
		var v_sDateFld;
		var v_sDisplay;
		var v_sMonth;
		var v_sVal;
		var v_sYearMonth;
		var v_sbDisplay;
		var v_aListMonth;
		var v_col;
		var v_datasource;
		var v_dt;
		var v_dtCnt;
		var v_dtVal;
		var v_foreachCol;
		var v_foreachRow;
		var v_row;
		var v_rowlist;
		v_sCtlName = this.getName();
		v_dt = this.getValue();
		if ((!v_dt) || (v_dt == "")) {
			v_dt = NuDate.now();
			this.setValue(v_dt);
		}
		v_sDateFld = this.getVariable("DateFld");
		v_iDateFld = this.getVariable("DateCol");
		v_objDates = this.getProperty(NuCtl.c_SPROP_DATA);
		if (!v_objDates) {
			v_objDates = {};
			this.setProperty(NuCtl.c_SPROP_DATA, v_objDates);
		}
		v_iMonth = NuDate.getPart(v_dt, NuDate.c_IPART_MONTH);
		v_aListMonth = NuView.User.CalendarMonths;
		v_iYear = NuDate.getPart(v_dt, NuDate.c_IPART_YEAR);
		v_dtCnt = NuDate.fromParts(v_iYear, v_iMonth, 1, 0, 0, 0, 0, false);
		v_rowlist = v_objDates[v_dtCnt];
		if (!v_rowlist) {
			v_sDataset = this.getDataset();
			v_datasource = new NuDatasource();
			v_datasource.setName(v_sDataset);
			v_datasource.setFormParameter("F_NavRowStartVal_" + v_sDataset, v_dtCnt);
			v_datasource.open();
			v_iDateCol = v_datasource.getColumnNumByName(v_sDateFld);
			this.setVariable("DateCol", v_iDateCol);
			v_objDates["headers"] = v_datasource.getHeader();
			v_objDates[v_dtCnt] = new NuDatasourceRowList();
			while (v_datasource.next()) {
				v_row = v_datasource.getRow();
				v_dtVal = v_row.getValue(v_iDateCol);
				v_row.removeColumn(v_iDateCol);
				v_rowlist = v_objDates[v_dtVal];
				if (v_rowlist == null) {
					v_rowlist = new NuDatasourceRowList();
					v_objDates[v_dtVal] = v_rowlist;
				}
				v_rowlist.append(v_row);
			}
			v_datasource.close();
		}
		v_iFirstDay = NuDate.getPart(v_dt, NuDate.c_IPART_FIRSTDAYOFMONTH);
		v_iDaysInMonth = NuDate.getPart(v_dt, NuDate.c_IPART_DAYSINMONTH);
		v_dtCnt = NuDate.getPartByType(v_dt, NuDate.c_ITYPE_DATEONLY);
		v_dtCnt = NuDate.setPart(v_dtCnt, NuDate.c_IPART_DAY, 1);
		v_dtCnt = NuDate.add(v_dtCnt, 0 - v_iFirstDay, "d");
		v_aListMonth = NuView.User.CalendarMonths;
		NuElement.setValueById('F_' + v_sCtlName + '_Month', v_iMonth);
		NuElement.setHtmlById('F_' + v_sCtlName + '_Year', v_iYear);
		v_isDone = false;
		v_foreachRow = new NuForEach();
		v_foreachCol = new NuForEach();
		for (v_i = 1; v_i <= 42; v_i++) {
			v_dtCnt = NuDate.add(v_dtCnt, 1, "d");
			v_iDay = NuDate.getPart(v_dtCnt, NuDate.c_IPART_DAY);
//			if ((v_dtCnt == v_dt) && (v_sDateHighlight != "No")) {
//				v_sStyle = "Chosen";
//			} else if ((v_i == 1) || (v_i == 7)) {
//				v_sStyle = "Holiday";
//			} else {
//				v_sStyle = "Weekday";
//			}
			if ((v_i == 36) && (v_iDay < 7)) {
				v_isDone = true;
			}
			v_sbDisplay = new StringBuffer();
			if (v_isDone) {
				v_iDay = "";
			} else {
				v_rowlist = v_objDates[v_dtCnt];
				if (v_rowlist) {
					v_sbDisplay.append('<table class="calendar_datasheet">');
					v_foreachRow.setList(v_rowlist.getRowArray());
					while (v_foreachRow.next()) {
						v_sbDisplay.append('\n<tr onclick="return onCalendar(\'' + v_sCtlName + '_row-' + v_dtCnt + '-' + (v_foreachRow.getIndex() + 1) + '\', event);">');
						v_foreachCol.setList(v_foreachRow.get().getColumnArray());
						while (v_foreachCol.next()) {
							if (v_foreachCol.getIndex() != v_iDateCol) {
								v_sbDisplay.append('<td class="calendar_data_col" valign="TOP">');
								v_col = v_foreachCol.get();
								if (v_col) {
									v_sVal = NuStr.toDisplay(v_col.getValue());
									v_sbDisplay.append(v_sVal);
								}
								v_sbDisplay.append('</td>');
							}
						}
						v_sbDisplay.append('</tr>');
					}
					v_sbDisplay.append('</table>');
				}
			}
			NuElement.setAttributeById('F_' + v_sCtlName + '_calday-' + v_i, "date", v_dtCnt);
			NuElement.setHtmlById('F_' + v_sCtlName + '_calday-' + v_i, v_iDay);
			NuElement.setHtmlById('F_' + v_sCtlName + '_caldate-' + v_i, v_sbDisplay);
		}
	}
	/**
	 * rowCopy
	 */
	this.rowCopy = function(prm_dt, prm_iRowNum) {
		if (prm_dt && prm_iRowNum) {
			this.rowEdit(prm_dt, prm_iRowNum);
		}
		this.setVariable("rowchosen", 0);
	}
	/**
	 * rowDelete
	 */
	this.rowDelete = function(prm_dt, prm_iRowNum) {
		var v_iRowNum;
		var v_sColName;
		var v_sColVal;
		var v_sCtlName;
		var v_sDataset;
		var v_sDateFld;
		var v_sVal;
		var v_dt;
		var v_aHeader;
		var v_element;
		var v_objDates;
		var v_objHeader;
		var v_foreachHeader;
		var v_row;
		var v_rowlist;
		v_sDataset = this.getProperty(NuCtl.c_SPROP_DATASET);
		NuElement.setAttributeById("DatasheetMultiHeader_" + v_sDataset, "class", "visibleNo");
		NuElement.setAttributeById("DatasheetMultiBody_" + v_sDataset, "class", "visibleNo");
		if (prm_dt) {
			v_dt = prm_dt;
		} else {
			v_dt = this.getVariable("datechosen");
		}
		if (prm_iRowNum) {
			v_iRowNum = prm_iRowNum;
		} else {
			v_iRowNum = this.getVariable("rowchosen");
		}
		this.setVariable("rowchosen", 0);
		if (v_iRowNum > 0) {
			v_objDates = this.getProperty(NuCtl.c_SPROP_DATA);
			if (v_objDates) {
				v_rowlist = v_objDates[v_dt];
				if (v_rowlist) {
					v_row = v_rowlist.removeRow(prm_iRowNum);
					v_rowlist = v_objDates["edited"];
					if (!v_rowlist) {
						v_rowlist = new NuDatasourceRowList();
						v_objDates["edited"] = v_rowlist;
					}
					v_rowlist.append(v_row);
					this.setChanged(true);
				}
			}
		}
		this.refresh();
	}
	/**
	 * rowEdit
	 */
	this.rowEdit = function(prm_dt, prm_iRowNum) {
		var v_sColName;
		var v_sColVal;
		var v_sCtlName;
		var v_sDataset;
		var v_sDateFld;
		var v_sVal;
		var v_aHeader;
		var v_colHeader;
		var v_element;
		var v_objDates;
		var v_foreachHeader;
		var v_foreachRow;
		var v_row;
		var v_rowlist;
		v_sDataset = this.getProperty(NuCtl.c_SPROP_DATASET);
		v_element = NuElement.getById("DatasheetMultiHeader_" + v_sDataset);
		if (v_element) {
			NuElement.setAttribute(v_element, "class", "visibleYes");
			v_element = NuElement.getById("DatasheetMultiBody_" + v_sDataset);
			NuElement.setAttribute(v_element, "class", "visibleYes");
			this.setVariable("datechosen", prm_dt);
			this.setVariable("rowchosen", prm_iRowNum);
			v_sCtlName = this.getName();
			v_sDateFld = this.getVariable("DateFld");
			NuCtl.setValue("O_" + v_sDateFld + "_" + v_sDataset + "_0", prm_dt);
			NuCtl.setValue("N_" + v_sDateFld + "_" + v_sDataset + "_0", prm_dt);
			v_objDates = this.getProperty(NuCtl.c_SPROP_DATA);
			if (v_objDates) {
				v_row = null;
				if (prm_iRowNum != 0) {
					v_rowlist = v_objDates[prm_dt];
					if (v_rowlist) {
						v_row = v_rowlist.getRow(prm_iRowNum - 1);
					}
				}
				v_foreachHeader = new NuForEach(v_objDates["headers"].getColumnArray());
				while (v_foreachHeader.next()) {
					v_colHeader = v_foreachHeader.get();
					v_sColName = v_colHeader.getName();
					if (v_sDateFld == v_sColName) {
					} else if ((prm_iRowNum == 0) || (!v_row)) {
						NuCtl.setValue("O_" + v_sColName + "_" + v_sDataset + "_0", "");
						NuCtl.setValue("N_" + v_sColName + "_" + v_sDataset + "_0", "");
					} else {
						v_sColVal = v_row.getValue(v_foreachHeader.getIndex());
						NuCtl.setValue("O_" + v_sColName + "_" + v_sDataset + "_0", v_sColVal);
						NuCtl.setValue("N_" + v_sColName + "_" + v_sDataset + "_0", v_sColVal);
					}
				}
			}
		}
	}
	/**
	 * rowSave
	 */
	this.rowSave = function(prm_iRowNum) {
		var v_isChanged;
		var v_iRowNum;
		var v_sColName;
		var v_sColOrigVal;
		var v_sColVal;
		var v_sCtlName;
		var v_sDataset;
		var v_sDateFld;
		var v_sVal;
		var v_dt;
		var v_dtOrig;
		var v_aHeader;
		var v_element;
		var v_objDates;
		var v_rowHeader;
		var v_col;
		var v_foreachHeader;
		var v_row;
		var v_rowlist;
		v_sDataset = this.getProperty(NuCtl.c_SPROP_DATASET);
		v_element = NuElement.getById("DatasheetMultiHeader_" + v_sDataset);
		if (v_element) {
			NuElement.setAttribute(v_element, "class", "visibleNo");
			v_sCtlName = this.getName();
			v_sDateFld = this.getVariable("DateFld");
			v_dt = NuStr.toDate(NuCtl.getValue("N_" + v_sDateFld + "_" + v_sDataset + "_0"));
			v_dtOrig = NuStr.toDate(NuCtl.getValue("O_" + v_sDateFld + "_" + v_sDataset + "_0"));
			v_objDates = this.getProperty(NuCtl.c_SPROP_DATA);
			if (v_objDates) {
				v_row = null;
				v_rowlist = v_objDates[v_dtOrig];
				v_iRowNum = this.getVariable("rowchosen");
				if (v_iRowNum == 0) {
				} else if (v_dt == v_dtOrig) {
					if (v_rowlist) {
						v_row = v_rowlist.getRow(v_iRowNum - 1);
					}
				} else {
					v_rowlist.remove(v_iRowNum);
					v_rowlist = v_objDates[v_dt];
					v_iRowNum = 0;
				}
				if (v_iRowNum == 0) {
					if (!v_rowlist) {
						v_rowlist = new NuDatasourceRowList();
						v_objDates[v_dt] = v_rowlist;
					}
					v_row = new NuDatasourceRow();
					v_rowlist.append(v_row);
				}
				if (v_row) {
					v_isChanged = false;
					v_foreachHeader = new NuForEach(v_objDates["headers"].getColumnArray());
					while (v_foreachHeader.next()) {
						v_colHeader = v_foreachHeader.get();
						v_sColName = v_colHeader.getProperty("name");
						if (v_sDateFld != v_sColName) {
							v_sColVal = NuCtl.getValue("N_" + v_sColName + "_" + v_sDataset + "_0");
							v_col = v_row.getColumn(v_foreachHeader.getIndex());
							v_col.setValue(v_sColVal);
							if (!v_isChanged) {
								v_isChanged = v_col.isChanged();
							}
						}
					}
					if (v_isChanged) {
						v_rowlist = v_objDates["edited"];
						if (!v_rowlist) {
							v_rowlist = new NuDatasourceRowList();
							v_objDates["edited"] = v_rowlist;
						}
						v_rowlist.append(v_row);
						this.setChanged(true);
					}
				}
			}
		}
		this.refresh();
	}
	/**
	 * save
	 */
	this.save = function() {
		var v_Return;
		var v_iCtlNum;
		var v_iRowNum;
		var v_sCtlId;
		var v_sDataset;
		var v_sVal;
		var v_sValOrig;
		var v_ctl;
		var v_element;
		var v_foreachCtl;
		var v_foreachRows;
		var v_col;
		var v_row;
		var v_rowHeaders;
		var v_objRow;
		var v_sbDsp;
		v_Return = true;
		v_sDataset = this.getProperty(NuCtl.c_SPROP_DATASET);
		v_sbDsp = new StringBuffer();
		v_iRowNum = 0;
		v_objDates = this.getProperty(NuCtl.c_SPROP_DATA);
		if (v_objDates) {
			v_rowHeaders = v_objDates["headers"];
			v_rowlist = v_objDates["edited"];
			if (v_rowlist) {
				v_rowlist.createHtml(v_sbDsp);
			}
/*
			v_rowlist = v_objDates["deleted"];
			if (v_rowlist) {
				v_foreachRows = new NuForEach(v_rowlist.getRowArray());
				while (v_foreachRows.next()) {
					v_row = v_foreachRows.get();
					if (v_row) {
						v_iRowNum += 1;
						v_sbDsp.append('<input type="HIDDEN" name="F_Cmd_' + v_sDataset + '_' + v_iRowNum + '" value="Delete" />\n');
						v_sbDsp.append('<input type="HIDDEN" name="F_Id_' + v_sDataset + '_' + v_iRowNum + '" value="');
						v_sbDsp.append(v_row.getRowId());
						v_sbDsp.append('" />\n');
						v_sbDsp.append('<input type="HIDDEN" name="F_Dt_' + v_sDataset + '_' + v_iRowNum + '" value="');
						v_sbDsp.append(v_row.getTimestamp());
						v_sbDsp.append('" />\n');
					}
				}
			}
*/
		}
		v_sbDsp.append('<input type="HIDDEN" name="F_RowCnt_' + v_sDataset + '" value="' + v_iRowNum + '" />\n');
		NuElement.setHtmlById("F_" + v_sCtlId + "_changedata", v_sbDsp);
		return v_Return;
	}
	/**
	 * setMonth
	 */
	this.setMonth = function(prm_iMonth) {
		var v_dt;
		v_dt = this.getValue();
		v_dt = NuDate.setPart(v_dt, NuDate.c_IPART_MONTH, prm_iMonth);
		this.setValue(v_dt);
		this.refresh();
	}
}
NuCtlCalendar.prototype = new NuCtl();
/**
 * NuCtlCheckbox Object
 */
function NuCtlCheckbox() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sItr;
		var v_sName;
		var v_sProp;
		var v_oChkBox = {};
		var v_oDOMNode;
		var v_oLbl;
		var v_oParent;
		/*Pre-Requisites*/
		v_sProp = this.getProperty(NuCtl.c_SPROP_VAL);
		v_sProp = (v_sProp ? v_sProp : ""); /*_ InCase the v_sProp is undefined set it to "" _*/
		v_sName = this.getName();
		/*Checkbox Content Rendering Start*/
		v_oChkBox = {
			type : "CHECKBOX",
			name : "N_" + v_sName,
			id : "N_" + v_sName,
			checked : v_sProp,
			onclick : NuView.Document.onClick
		};
		v_oDOMNode = NuElement.create("input");
		for (v_sItr in v_oChkBox) {
			if (v_oChkBox[v_sItr] && v_oChkBox[v_sItr] != "") {
				switch(v_sItr) {
				case "onclick":
				case "name":
				case "type":
				case "id":
				case "checked":
					NuElement.createAttribute(v_sItr, v_oChkBox[v_sItr], v_oDOMNode);
					break;
				default:
					/*Todo: Any Error Checking Code could be written here*/
					break;
				}
			}
		}
		v_oParent = prm_elemBase;
		v_oDOMNode ? NuXmlJson.addChild(v_oParent, v_oDOMNode) : 0; /*Add Control If Exists*/
		/*Checkbox Content Rendering End*/
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_CHECKBOX;
	}
}
NuCtlCheckbox.prototype = new NuCtl();
/**
 * NuCtlCombobox Object
 */
function NuCtlCombobox() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_Return;
		var v_aRows;
		var v_sItr;
		var v_sName;
		var v_sProp;
		var v_sReq;
		var v_sValue;
		var v_elemTmpNode;
		var v_objSelected;
		var v_oCmbBox = {};
		var v_oDOMNode;
		var v_oDOMNodeAttrib;
		var v_oLbl;
		var v_oParent;
		var v_row;
		/*Pre-Requisites*/
		v_sProp = this.getProperty("srch");
		v_sProp = (v_sProp == ""? this.getProperty("srchorig") : v_sProp); /*_ InCase the v_sProp is undefined set it to "" _*/
		v_sName = "N_" + this.getName();
		v_sValue = this.getValue();
		v_sValue = (v_sValue ? v_sValue : "");
		v_sReq = this._aProps[NuCtl.c_SPROP_REQUIRED];
		v_sReq =  (v_sReq ? v_sReq : "");
		/*Combobox Content Rendering Start*/
		v_oCmbBox = {
			"class" : "ctl",
			id : v_sName,
			name : v_sName,
			srch : v_sProp,
			required : v_sReq
		};
		v_oDOMNode = NuElement.create("select");
		for (v_sItr in v_oCmbBox) {
			if (v_oCmbBox[v_sItr] && v_oCmbBox[v_sItr] != "") {
				switch(v_sItr) {
				case "srch":
				case "id":
				case "class":
				case "required":
				case "name":
					NuElement.createAttribute(v_sItr, v_oCmbBox[v_sItr], v_oDOMNode);
					break;
				default:
					/*Todo: Any Error Checking Code could be written here*/
					break;
				}
			}
		}
		/**
		 * Extract Select Values
		 */
		v_Return = new NuDatasource();
		v_Return.setName(this.getProperty("src").replace(/\[dataset_|\]/g,""));
		v_Return.open();
		while (v_Return.next()) {
			v_row = v_Return.getRow();
			v_elemTmpNode = NuElement.create("option");
			v_oDOMNodeAttrib = NuElement.createAttribute("value");
			if (v_sValue == v_row.getValue(0)) {
				/*
				v_objSelected = document.createAttribute("selected");
				v_elemTmpNode.setAttributeNode(v_objSelected);
				*/
				NuElement.createAttribute("selected", true, v_elemTmpNode);
			}
			v_oDOMNodeAttrib.nodeValue = v_row.getValue(0);
			v_elemTmpNode.setAttributeNode(v_oDOMNodeAttrib);
			v_elemTmpNode.innerHTML = v_row.getValue(1);
			NuXmlJson.addChild(v_oDOMNode, v_elemTmpNode);
		}
		v_Return.close();
		v_oParent = prm_elemBase;
		v_oDOMNode ? NuXmlJson.addChild(v_oParent, v_oDOMNode) : 0; /*Add Control If Exists*/
		/*Combobox Content Rendering End*/
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_COMBOBOX;
	}
}
NuCtlCombobox.prototype = new NuCtl();
/**
 * NuCtlDatasheet Object
 */
function NuCtlDatasheet() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_i;
		var v_iCnt;
		var v_jsonChild;
		var v_jsonDataSheet;
		var v_objBorder;
		var v_objCol;
		var v_objDataSheet;
		var v_objId;
		var v_objRow;
		var v_objTable;
		var v_objTBody;
		var v_sItr;
		v_objId = prm_elemBase;
		v_objTable = NuElement.create("table");
		v_objTBody = NuElement.create("tbody");
		NuElement.addElement(v_objTBody, v_objTable);
		NuElement.createAttribute("class", "datasheet", v_objTable);
		NuElement.createAttribute("summary", "datasheet", v_objTable);
		NuElement.addElement(v_objTable, v_objId);
		v_jsonDataSheet = this.getChildren();
		v_iCnt = NuXmlJson.getCount(v_jsonDataSheet);
		for (v_i = 0; v_i < v_iCnt; v_i++) {
			v_jsonChild = NuXmlJson.getChild(v_jsonDataSheet, v_i);
			v_sTag = NuXmlJson.getTag(v_jsonChild);
			if (v_sTag) {
				switch (v_sTag) {
				case "row":
					v_objRow = this.createRow(v_jsonChild, v_jsonDataSheet);
					NuElement.addElement(v_objRow, v_objTBody);
					break;
				case "col":
					v_objCol = this.createCol(v_jsonChild, v_jsonDataSheet);
					NuElement.addElement(v_objCol, v_objTBody);
					break;
				case "datasheet":
					v_objDataSheet = this.createDatasheet(v_jsonChild);
					NuElement.addElement(v_objDataSheet, v_objTBody);
					break;
				case "v":
					NuElement.setContent(v_objTBody, v_objTBody.innerHTML + this.getXMLTextContent(v_jsonChild));
				default:
					/*Any other checking code if required*/
					break;
				}
			}
		}
	}
	/**
	 * createDatasheet
	 */
	this.createDatasheet = function(prm_obj) {
		var v_i;
		var v_iCnt;
		var v_jsonChild;
		var v_jsonDataSheet;
		var v_objBorder;
		var v_objCol;
		var v_objDataSheet;
		var v_objNewTable;
		var v_objNewTBody;
		var v_objRow;
		v_iCnt = NuXmlJson.getCount(prm_obj);
		v_objNewTable = NuElement.create("table");
		v_objNewTBody = NuElement.create("tbody");
		NuElement.addElement(v_objNewTBody, v_objNewTable);
		for (v_i = 0; v_i < v_iCnt; v_i++) {
			v_jsonChild = NuXmlJson.getChild(prm_obj, v_i);
			v_sTag = NuXmlJson.getTag(v_jsonChild);
			if (v_sTag) {
				switch (v_sTag) {
				case "row":
					v_objRow = this.createRow(v_jsonChild);
					NuElement.addElement(v_objRow, v_objNewTBody);
					break;
				case "col":
					v_objCol = this.createCol(v_jsonChild);
					NuElement.addElement(v_objCol, v_objNewTBody);
					break;
				case "datasheet":
					v_objDataSheet = this.createDatasheet(v_jsonChild);
					NuElement.addElement(v_objDataSheet, v_objNewTBody);
					break;
				case "v":
					NuElement.setContent(v_objNewTBody, v_objNewTBody.innerHTML + this.getXMLTextContent(v_jsonChild));
				default:
					/*Any other checking code if required*/
					break;
				}
			}
		}
		return v_objNewTable;
	}
	/**
	 * createRow
	 */
	this.createRow = function(prm_obj) {
		var v_i;
		var v_iCnt;
		var v_elemLbl;
		var v_jsonChild;
		var v_jsonDataSheet;
		var v_objCol;
		var v_objDataSheet;
		var v_objNewRow;
		var v_objRow;
		v_iCnt = NuXmlJson.getCount(prm_obj);
		v_objNewRow = NuElement.create("tr"); /*Cannot Use Table Here*/
		for (v_i = 0; v_i < v_iCnt; v_i++) {
			v_jsonChild = NuXmlJson.getChild(prm_obj, v_i);
			v_sTag = NuXmlJson.getTag(v_jsonChild);
			if (v_sTag) {
				switch (v_sTag) {
				case "row":
					v_objRow = this.createRow(v_jsonChild);
					NuElement.addElement(v_objRow, v_objNewRow);
					break;
				case "col":
					if (this.extractCtlInf(v_jsonChild, "lbl") && this.extractCtlInf(v_jsonChild, "lbl") != "") {
						v_elemLbl = NuElement.create("td");
						if (this.extractCtlInf(v_jsonChild, "type") != "hidden") {
							v_elemLbl.innerHTML = this.extractCtlInf(v_jsonChild, "lbl") + ":";
							if (this.extractCtlInf(v_jsonChild, "required")) {
								NuElement.createAttribute("class", "colLabelRequired", v_elemLbl);
							} else {
								NuElement.createAttribute("class", "colLabel", v_elemLbl);
							}
						}
						NuElement.addElement(v_elemLbl, v_objNewRow);
					}
					v_objCol = this.createCol(v_jsonChild);
					NuElement.addElement(v_objCol, v_objNewRow);
					break;
				case "datasheet":
					v_objDataSheet = this.createDatasheet(v_jsonChild);
					NuElement.addElement(v_objDataSheet, v_objNewRow);
					break;
				case "v":
					NuElement.setContent(v_objNewRow, v_objNewRow.innerHTML + this.getXMLTextContent(v_jsonChild));
				default:
					/*Any other checking code if required*/
					break;
				}
			}
		}
		return v_objNewRow;
	}
	/**
	 * createCol
	 */
	this.createCol = function(prm_obj) {
		var v_i;
		var v_iCnt;
		var v_sCtl;
		var v_sCtlDef;
		var v_jsonChild;
		var v_jsonDataSheet;
		var v_objCol;
		var v_objDataSheet;
		var v_objNewCol;
		var v_objRow;
		v_sCtl = this.getVal(prm_obj);
		if (v_sCtl) {
			v_sCtl = v_sCtl.replace("[ctl_", "").replace("]", "");
			v_sCtlDef = NuView.Document.FrmCtls.getCtlInf(v_sCtl, NuView.Document.getView());
			if (v_sCtlDef) {
				v_sCtlDef[NuCtl.c_SPROP_NAME] = v_sCtl;
			}
		}
		v_iCnt = NuXmlJson.getCount(prm_obj);
		/**
		 * Create Labels Here
		 */
		v_objNewCol = NuElement.create("td");
		NuView.Document.Controls.create(v_sCtlDef, v_objNewCol);
		for (v_i = 0; v_i < v_iCnt; v_i++) {
			v_jsonChild = NuXmlJson.getChild(prm_obj, v_i);
			v_sTag = NuXmlJson.getTag(v_jsonChild);
			if (v_sTag) {
				switch (v_sTag) {
				case "row":
					v_objRow = this.createRow(v_jsonChild);
					NuElement.addElement(v_objRow, v_objNewCol);
					break;
				case "col":
					v_objCol = this.createCol(v_jsonChild);
					NuElement.addElement(v_objCol, v_objNewCol);
					break;
				case "datasheet":
					v_objDataSheet = this.createDatasheet(v_jsonChild);
					NuElement.addElement(v_objDataSheet, v_objNewCol);
					break;
				case "v":
					NuElement.setContent(v_objNewCol, v_objNewCol.innerHTML + this.getXMLTextContent(v_jsonChild));
				default:
					/*Any other checking code if required*/
					break;
				}
			}
		}
		return v_objNewCol;
	}
	/**
	 * extractCtlInf
	 */
	this.extractCtlInf = function(prm_obj, prp_sPrp) {
		var v_Return;
		var v_sCtl;
		var v_sCtlDef;
		v_sCtl = this.getVal(prm_obj);
		if (v_sCtl) {
			v_sCtl = v_sCtl.replace("[ctl_","").replace("]","");
			v_sCtlDef = NuView.Document.FrmCtls.getCtlInf(v_sCtl, NuView.Document.getView());
			v_Return = "";
			if (v_sCtlDef && v_sCtlDef[prp_sPrp]) {
				v_Return = v_sCtlDef[prp_sPrp];
			}
		}
		return v_Return;
	}
	/**
	 * getChildren
	 */
	this.getChildren = function() {
		return this.getProperty("childNodes"); /*Only Xml Considered For Now, JSON or any other Support could be embedded later*/
	}
	this.getVal = function(prm_objXmlJson) {
		return prm_objXmlJson.firstChild.nodeValue;
	}
	/**
	 * getXMLTextContent
	 *   The only need for writing this function is to make the v tag work in IE. 
	 *   IE has 2 different XML parsers for XML and HTML thus we cannot insert node of one in other, as we can do in Firefox.
	 */
	this.getXMLTextContent = function (prm_objXmlJson) {
		var v_Return = "";
		var v_iCnt;
		var v_iI;
		var v_iJ;
		var v_elemAttribLst;
		var v_elemTmpNod;
		var v_jsonChild;
		v_iCnt = NuXmlJson.getCount(prm_objXmlJson);
		for (v_iI = 0; v_iI < v_iCnt; v_iI++) {
			v_jsonChild = NuXmlJson.getChild(prm_objXmlJson, v_iI);
			if (NuXmlJson.getTag(v_jsonChild) == "#text") {
				if (v_jsonChild.nodeValue) {
					v_Return += NuStr.replace(v_jsonChild.nodeValue, " ", "&nbsp;");
				}
			} else {
				v_Return += "<";
				v_Return += NuXmlJson.getTag(v_jsonChild);
				v_elemAttribLst = v_jsonChild.attributes;
				for (v_iJ = 0; v_iJ < v_elemAttribLst.length; v_iJ++) {
					v_Return += " ";
					v_Return += v_elemAttribLst[v_iJ].nodeName;
					v_Return += "=";
					v_Return += v_elemAttribLst[v_iJ].nodeValue;
				}
				v_Return += ">";
				if (v_jsonChild.nodeValue) {
					v_Return += NuStr.replace(v_jsonChild.nodeValue, " ", "&nbsp;");
				}
				v_Return += this.getXMLTextContent(v_jsonChild);
				v_Return += "</";
				v_Return += NuXmlJson.getTag(v_jsonChild);
				v_Return += ">";
			}
		}
		return v_Return;
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_DATASHEET;
	}
}
NuCtlDatasheet.prototype = new NuCtl();
/**
 * NuCtlDate Object
 */
function NuCtlDate() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sFormat;
		var v_sProp;
		var v_sType;
		var v_sbStyle;
		var v_hStyles;
		var v_elemNode;
		var v_hChild;
		var v_jsonCtl;
		this._createHidden(prm_elemBase);
		//this._createLabel(prm_sbDsp);
		v_sType = this.getProperty(NuCtl.c_SPROP_TYPE);
		v_jsonCtl = {
			tag:"input",
			size:8,
			type:"TEXT",
			name:"N_" + this.getName(),
			value:this.getValue(),
			nutype:v_sType
			};
		v_sProp = this.getProperty(NuCtl.c_SPROP_READONLY);
		if ((v_sProp) && (v_sProp.toLowerCase() == "yes")) {
			v_jsonCtl["class"] = "ctl ctl_ReadOnly";
			v_jsonCtl["readonly"] = "YES";
		} else {
			v_jsonCtl["class"] = "ctl";
			v_jsonCtl["image"] = "Calendar.gif";
			v_jsonCtl["imageover"] = "CalendarH.gif";
		}
		v_sbStyle = new StringBuffer();
		v_hStyles = this.getProperty(NuCtl.c_SPROP_STYLE);
		for (v_sProp in v_hStyles) {
			if (v_hStyles[v_sProp] && v_hStyles[v_sProp] != "") {
				v_sbStyle.append(v_sProp + ':' + v_hStyles[v_sProp] + ';');
			}
		}
		if (v_sbStyle.getLength() > 0) {
			v_jsonCtl["style"] = v_sbStyle.toString();
		}
		v_objEvents = this.getProperty(NuCtl.c_SPROP_EVENTS);
		for (v_sProp in v_objEvents) {
			if (v_objEvents[v_sProp]) {
				switch (v_sProp) {
				case NuEvent.c_SEVENT_ONCHANGE:
					v_jsonCtl["onchange"] = NuView.Document.onChange;
					break;
				case NuEvent.c_SEVENT_ONCLICK:
					v_jsonCtl["onclick"] = NuView.Document.onClick;
					break;
				}
			}
		}
		if ((v_sProp) && (v_sProp.toLowerCase() == "yes")) {
		} else {
			v_hChild = {
				"tag" : "img",
				"class" : "buttonImage",
				"alt" : "Look at Calendar", 
				"id" : "N_" + this.getName() + "_Img",
				"src": "Themes/Df/Images/Calendar.gif"
			};
			v_jsonCtl["childNodes"] = [v_hChild];
		}
		NuElement.createNodeByJSON(prm_elemBase, v_jsonCtl);
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_DATE;
	}
}
NuCtlDate.prototype = new NuCtl();
/**
 * NuCtlGraph Object
 */
function NuCtlGraph() {
	this._sGraphData;
	this._elemGraph;
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_iHeight;
		var v_iLeft;
		var v_iWidth;
		var v_iTop;
		v_iHeight = this.getStyle(NuCtl.c_SSTYLE_HEIGHT);
		if (!v_iHeight) v_iHeight = 400;
		v_iWidth = this.getStyle(NuCtl.c_SSTYLE_WIDTH);
		if (!v_iWidth) v_iWidth = 550;
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_GRAPH;
	}
	/**
	 * onClick
	 */
	this.onClick = function(prm_nuevent) {
		var v_sPart;
		v_sPart = prm_nuevent[NuEvent.c_SPARAM_CONTROLPART];
		switch (v_sPart) {
		case "Area":
		case "AreaStacked":
		case "Bar":
		case "BarFloating":
		case "BarStacked":
		case "Candlestick":
		case "Column":
		case "Column3d":
		case "ColumnFloating":
		case "ColumnParallel3d":
		case "ColumnStacked":
		case "ColumnStacked3d":
		case "Line":
		case "Pie":
		case "Pie3d":
		case "Polar":
		case "Scatter":
			this.setProperty(NuCtl.c_SPROP_LAYOUT, v_sPart);
			break;
		}
		this.refresh();
	}
	/**
	 * refresh
	 */
	this.refresh = function() {
		var v_sbXml;
		var v_sChartType;
		var v_sLayout;
		var v_sLbl;
		this._elemGraph = document["N_" + this.getId().substring(2)];
		v_sLbl = this.getProperty(NuCtl.c_SPROP_LBL);
		if ((v_sLbl == null) || (v_sLbl == "")) {
			v_sLbl = this.getProperty(NuCtl.c_SPROP_TITLE);
		}
		v_sLayout = this.getProperty(NuCtl.c_SPROP_LAYOUT, "Line");
		switch (v_sLayout) {
		case "AreaStacked":
			v_sChartType = "stacked area";
			break;
		case "BarFloating":
			v_sChartType = "floating bar";
			break;
		case "BarStacked":
			v_sChartType = "stacked bar";
			break;
		case "Column3d":
			v_sChartType = "3d column";
			break;
		case "ColumnFloating":
			v_sChartType = "floating column";
			break;
		case "ColumnParallel3d":
			v_sChartType = "parallel 3d column";
			break;
		case "ColumnStacked":
			v_sChartType = "stacked column";
			break;
		case "ColumnStacked3d":
			v_sChartType = "stacked 3d column";
			break;
		case "Pie3d":
			v_sChartType = "3d pie";
			break;
		default:
			v_sChartType = v_sLayout.toLowerCase();
			break;
		}
		this._prepareGraphData();
		v_sbXml = new StringBuffer();
		v_sbXml.append("<chart>");
		v_sbXml.append("	<chart_type>" + v_sChartType + "</chart_type>");
		v_sbXml.append("	<axis_category size='10' color='000000' alpha='75' skip='0' orientation='horizontal' />");
		v_sbXml.append("	<axis_ticks value_ticks='true' category_ticks='true' major_thickness='1' minor_thickness='1' minor_count='1' major_color='000000' minor_color='222222' position='inside' />");
		v_sbXml.append("	<axis_value size='10' color='ffffff' alpha='50' steps='6' prefix='' suffix='' decimals='0' separator='' show_min='false' />");
		v_sbXml.append("	<chart_data>");
		v_sbXml.append(this._sGraphData);
		v_sbXml.append("	</chart_data>");
		v_sbXml.append("	<chart_grid_h alpha='10' color='000000' thickness='1' />");
		v_sbXml.append("	<chart_pref line_thickness='2' point_shape='circle' fill_shape='false' rotation_x='15' rotation_y='10' />");
		v_sbXml.append("	<chart_rect x='75' y='110' width='330' height='150' positive_color='ffffff' positive_alpha='50' negative_color='000000' negative_alpha='10' />");
		v_sbXml.append("	<chart_transition type='slide_left' delay='.25' duration='0.25' order='series' />");
		switch (v_sLayout) {
		case "Pie":
		case "Pie3d":
			v_sbXml.append("	<chart_value position='inside' size='12' color='000000' background_color='aaff00' alpha='80' as_percentage='true' />");
			break;
		default:
			v_sbXml.append("	<chart_value position='cursor' size='12' color='000000' background_color='aaff00' alpha='80' as_percentage='false' />");
			break;
		}
		v_sbXml.append("	<draw>");
		v_sbXml.append("		<text color='0000000' alpha='40' font='arial' rotation='-90' bold='true' size='50' x='0' y='280' width='300' height='200' h_align='left' v_align='top'>");
		v_sbXml.append(v_sLbl);
		v_sbXml.append("</text>");
		v_sbXml.append("	</draw>");
		v_sbXml.append("	<legend_label layout='horizontal' bullet='line' font='arial' bold='true' size='13' color='000000' alpha='25' />");
		v_sbXml.append("	<legend_rect x='75' y='0' width='330' height='5' margin='5' fill_color='000000' fill_alpha='7' line_color='000000' line_alpha='50' line_thickness='0' />");
		v_sbXml.append("	<legend_transition type='dissolve' delay='0' duration='0.5' />");
		v_sbXml.append("	<series_color>");
		v_sbXml.append("		<color>ff4444</color>");
		v_sbXml.append("		<color>ffff00</color>");
		v_sbXml.append("		<color>8844ff</color>");
		v_sbXml.append("	</series_color>");
		v_sbXml.append("	<series_explode>");
		v_sbXml.append("		<number>50</number>");
		v_sbXml.append("	</series_explode>");
		v_sbXml.append("</chart>");
		this._elemGraph.SetVariable("update_xml", v_sbXml.toString().replace(/\t/g, ""));
	}
	/**
	 * _prepareGraphData
	 */
	this._prepareGraphData = function() {
		var v_i;
		var v_iBucketCnt;
		var v_iBucketIdx;
		var v_iCnt;
		var v_iFoundIdx;
		var v_iIncrement;
		var v_sBucket1;
		var v_sBucket2;
		var v_sDataset;
		var v_sGroup;
		var v_sIncrementType;
		var v_sXHigh;
		var v_sXLow;
		var v_sXType;
		var v_sXVal;
		var v_sYHigh;
		var v_sYLow;
		var v_sYType;
		var v_sYVal;
		var v_sbXml;
		var v_aBuckets;
		var v_aBucketVals;
		var v_aDataBucket;
		var v_aRow;
		var v_hData;
		var v_datasource;
		if (!this._sGraphData) {
			v_sDataset = this.getProperty(NuCtl.c_SPROP_DATASET);
			v_datasource = NuView.Document.getDatasource(v_sDataset);
			v_sXType = v_datasource.getColumnType(2);
			v_sYType = v_datasource.getColumnType(3);
			v_hData = {};
			v_iCnt = v_datasource.getRowCount();
			for (v_i = 1; v_i <= v_iCnt; v_i++) {
				v_sGroup = v_datasource.getColumnValue(v_i, 1);
				v_sXVal = v_datasource.getColumnValue(v_i, 2);
				v_sYVal = v_datasource.getColumnValue(v_i, 3);
				v_sXVal = NuStr.toType(v_sXVal, v_sXType);
				v_sYVal = NuStr.toType(v_sYVal, v_sYType);
				if ((v_sXVal == null) || (v_sYVal == null)) {
				} else if ((v_sXVal == "") || (v_sYVal == "")) {
				} else if ((v_sXVal == "dt!") || (v_sYVal == "dt!")) {
				} else {
					if (!v_sXLow) {
						v_sXLow = v_sXVal;
						v_sXHigh = v_sXVal;
						v_sYLow = v_sYVal;
						v_sYHigh = v_sYVal;
					}
					if (v_sXVal < v_sXLow) {
						v_sXLow = v_sXVal;
					}
					if (v_sXVal > v_sXHigh) {
						v_sXHigh = v_sXVal;
					}
					if (v_sYVal < v_sYLow) {
						v_sYLow = v_sYVal;
					}
					if (v_sYVal > v_sYHigh) {
						v_sYHigh = v_sYVal;
					}
					v_aRow = v_hData[v_sGroup];
					if (!v_aRow) {
						v_aRow = [];
						v_hData[v_sGroup] = v_aRow;
					}
					v_aRow.push([v_sXVal, v_sYVal]);
				}
			}
			switch (v_sXType) {
			case "DateTime":
				v_sIncrementType = "y";
				v_iIncrement = NuDate.difference(v_sXHigh, v_sXLow, v_sIncrementType);
				if (v_iIncrement < 5) {
					v_sIncrementType = "m";
					v_iIncrement = NuDate.difference(v_sXHigh, v_sXLow, v_sIncrementType);
					if (v_iIncrement < 5) {
						v_sIncrementType = "d";
						v_iIncrement = NuDate.difference(v_sXHigh, v_sXLow, v_sIncrementType);
					}
				}
				break;
			default:
				v_sIncrementType = "Number";
				v_iIncrement = v_sXHigh - v_sXLow;
				break;
			}
			v_iIncrement = NuNum.toInt(v_iIncrement / 5);
			switch (v_sIncrementType) {
			case "y":
				v_sXVal = NuDate.fromParts(NuDate.getPart(v_sXLow, NuDate.c_IPART_YEAR), 1, 1);
				v_sXHigh = NuDate.fromParts(NuDate.getPart(v_sXHigh, NuDate.c_IPART_YEAR), 1, 1);
				break;
			case "m":
				v_sXVal = NuDate.fromParts(NuDate.getPart(v_sXLow, NuDate.c_IPART_YEAR), NuDate.getPart(v_sXLow, NuDate.c_IPART_MONTH), 1);
				v_sXHigh = NuDate.fromParts(NuDate.getPart(v_sXHigh, NuDate.c_IPART_YEAR), NuDate.getPart(v_sXHigh, NuDate.c_IPART_MONTH), 1);
				break;
			default:
				v_sXVal = v_sXLow;
				break;
			}
			v_aBuckets = [v_sXVal];
			while (v_sXVal < v_sXHigh) {
				switch (v_sIncrementType) {
				case "Number":
					v_sXVal += v_iIncrement;
					break;
				default:
					v_sXVal = NuDate.add(v_sXVal, v_iIncrement, v_sIncrementType);
					break;
				}
				v_aBuckets.push(v_sXVal);
			}
			v_sbXml = new StringBuffer();
			v_sbXml.append("<row>");
			v_sbXml.append("	<null />");
			v_iBucketCnt = v_aBuckets.length;
			for (v_i = 0; v_i < v_iBucketCnt; v_i++) {
				v_sVal = v_aBuckets[v_i];
				v_sbXml.append("<string>");
				switch (v_sIncrementType) {
				case "d":
					v_sVal = v_sVal.substring(9, 11) + "/" + v_sVal.substring(7, 9);
					break;
				case "m":
					v_sVal = v_sVal.substring(7, 9) + "/" + v_sVal.substring(5, 7);
					break;
				case "y":
					v_sVal = v_sVal.substring(3, 7);
					break;
				}
				v_sbXml.append(v_sVal);
				v_sbXml.append("</string>");
			}
			v_sbXml.append("</row>");
			for (v_sGroup in v_hData) {
				if (v_sGroup == "toJSONString") {
				} else {
					v_aDataBuckets = [];
					v_aRow = v_hData[v_sGroup];
					for (v_i = 0; v_i < v_aRow.length; v_i++) {
						v_sXVal = v_aRow[v_i][0];
						v_sYVal = v_aRow[v_i][1];
						v_iFoundIdx = -1;
						for (v_iBucketIdx = 0; v_iBucketIdx < (v_iBucketCnt - 1); v_iBucketIdx++) {
							v_sBucket1 = v_aBuckets[v_iBucketIdx];
							v_sBucket2 = v_aBuckets[v_iBucketIdx + 1];
							if ((v_sBucket1 <= v_sXVal) && (v_sXVal < v_sBucket2)) {
								v_iFoundIdx = v_iBucketIdx;
							}
						}
						if (v_iFoundIdx == -1) {
							v_iFoundIdx = v_iBucketCnt - 1;
						}
						v_aBucketVals = v_aDataBuckets[v_iFoundIdx];
						if (v_aBucketVals == null) {
							v_aBucketVals = [v_sYVal, 1];
							v_aDataBuckets[v_iFoundIdx] = v_aBucketVals;
						} else {
							v_aBucketVals[0] += v_sYVal;
							v_aBucketVals[1] += 1;
						}
					}
					v_sbXml.append("<row>");
					v_sbXml.append("<string>");
					v_sbXml.append(NuStr.toXml(v_sGroup));
					v_sbXml.append("</string>");
					for (v_i = 0; v_i < v_iBucketCnt; v_i++) {
						v_aBucketVals = v_aDataBuckets[v_i];
						if (v_aBucketVals == null) {
							v_sbXml.append("<null />");
						} else {
							v_sbXml.append("<number>");
							v_sbXml.append(v_aBucketVals[0] / v_aBucketVals[1]);
							v_sbXml.append("</number>");
						}
					}
					v_sbXml.append("</row>");
				}
			}
			this._sGraphData = v_sbXml.toString();
		}
	}
}
NuCtlGraph.prototype = new NuCtl();
/**
 * NuCtlGrid Object
 */
function NuCtlGrid() {
	this._iUniqueColId = 0;
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_iColCnt;
		var v_iColIdx;
		var v_iMinColCnt;
		var v_iRowCnt;
		var v_iRowIdx;
		var v_iSectionColCnt;
		var v_iSectionColIdx;
		var v_iSectionRowCnt;
		var v_iSectionRowIdx;
		var v_iSpan;
		var v_sBodyProp;
		var v_sBodyStyle;
		var v_sCtlName;
		var v_sFooterProp;
		var v_sFooterStyle;
		var v_sHeaderProp;
		var v_sHeaderStyle;
		var v_sHeight;
		var v_sProp;
		var v_sStyle;
		var v_sTdCls;
		var v_aSectionStyles;
		var v_datasource;
		var v_elemCol;
		var v_elemItem;
		var v_elemRow;
		var v_elemSection;
		var v_elemTable;
		var v_object;
		var v_objStyle;
		var v_objVal;
		var v_datasourceSection;
		v_datasource = this.datasourceOpen(NuCtl.c_SPROP_BODY);
		if (v_datasource) {
			v_iRowCnt = v_datasource.getRowCount();
			v_iColCnt = v_datasource.getColumnCount();
		} else {
			v_iRowCnt = 0;
			v_iColCnt = 0;
		}
		v_iMinColCnt = v_iColCnt;
		v_sCtlName = this.getName();
		v_aSectionStyles = this.getSectionStyles();
		v_sHeaderProp = v_aSectionStyles["headerprop"];
		v_sHeaderStyle = v_aSectionStyles["headerstyle"];
		v_sBodyProp = v_aSectionStyles["bodyprop"];
		v_sBodyStyle = v_aSectionStyles["bodystyle"];
		v_sFooterProp = v_aSectionStyles["footerprop"];
		v_sFooterStyle = v_aSectionStyles["footerstyle"];
		v_elemTable = NuElement.create("table", prm_elemBase);
		v_objSection = this.getProperty(NuCtl.c_SPROP_HEADER);
		if (v_objSection) {
			v_iSectionColCnt = v_objSection.getColumnCount();
			v_elemSection = NuElement.create("thead", v_elemTable);
			v_iSectionColCnt = v_objSection.getColumnCount();
			v_iSectionRowCnt = v_objSection.getRowCount();
			v_iMinColCnt = v_iSectionColCnt;
			v_iSectionRowIdx = 1;
			while (v_iSectionRowIdx <= v_iSectionRowCnt) {
				v_elemRow = NuElement.create("tr", v_elemSection);
				NuElement.setAttribute(v_elemRow, "height", (20 + (v_iSectionRowCnt - v_iSectionRowIdx) * 5) + "px");
				v_elemRow.style["position"] = "relative";
				if (v_elemRow.style["top"]) {
					v_elemRow.style["top"] = 'expression(document.getElementById("C_" + this.getProperty(NuCtl.c_SPROP_NAME)).scrollTop)';
				}
				v_iSectionColIdx = 1;
				while (v_iSectionColIdx <= v_iSectionColCnt) {
					v_object = v_objSection.getColumnObject(v_iSectionRowIdx, v_iSectionColIdx);
					if (v_object) {
						v_iSpan = v_object.getProperty(NuCtl.c_SPROP_SPAN);
						v_objVal = v_object.getValue();
					} else {
						v_iSpan = null;
						v_objVal = null;
					}
					v_elemCol = NuElement.create("th", v_elemRow);
					NuElement.setAttribute(v_elemCol, "id", "F_" + v_sCtlName + "-header-row-" + v_iSectionRowIdx + "-col-" + v_iSectionColIdx);
					if (v_sHeaderProp) {
						NuElement.setAttribute(v_elemCol, "class", v_sHeaderProp['classth'] + '_' + v_iSectionRowIdx);
					}
					if ((v_iSpan) && (v_iSpan > 1)) {
						NuElement.setAttribute(v_elemCol, "colSpan", v_iSpan);
					}
					if (v_sHeaderStyle) {
						for (v_objStyle in v_sHeaderStyle) {
							if (v_sHeaderStyle[v_objStyle] && v_sHeaderStyle[v_objStyle] != "") {
								v_elemCol.style[v_objStyle] = v_sHeaderStyle[v_objStyle];
							}
						}
					}
					if (!v_objVal) {
						v_elemItem = NuElement.create("span", v_elemCol);
						v_elemItem.style["clear"] = "both";
						v_elemItem.style["float"] = "right";
						v_elemItem.style["cursor"] = "w-resize";
						v_elemItem.style["margin"] = "-14px -2px -1em 1em";
						NuElement.setContent(v_elemItem, "&nbsp;");
					} else if (v_objVal instanceof Array) {
						this.createNestedHtml(v_objVal, NuCtl.c_SPROP_HEADER, v_iSectionRowIdx, v_iSectionColIdx, v_elemCol);
					} else if (v_objVal.draw) {
						v_objVal.draw(v_elemCol);
						v_elemItem = NuElement.create("span", v_elemCol);
						v_elemItem.style["clear"] = "both";
						v_elemItem.style["float"] = "right";
						v_elemItem.style["cursor"] = "w-resize";
						v_elemItem.style["margin"] = "-14px -2px -1em 1em";
						NuElement.setContent(v_elemItem, "&nbsp;");
					} else {
						v_elemItem = NuElement.create("span", v_elemCol);
						v_elemItem.style["clear"] = "both";
						v_elemItem.style["float"] = "right";
						v_elemItem.style["cursor"] = "w-resize";
						v_elemItem.style["margin"] = "-14px -2px -1em 1em";
						NuElement.setContent(v_elemCol, v_objVal);
					}
					if ((v_iSpan) && (v_iSpan > 1)) {
						v_iSectionColIdx += v_iSpan;
					} else {
						v_iSectionColIdx++;
					}
				}
				v_iSectionRowIdx++;
			}
		}
		v_objSection = this.getProperty(NuCtl.c_SPROP_FOOTER);
		if (v_objSection) {
			v_elemSection = NuElement.create("tfoot", prm_elemTable);
			v_iSectionCnt = v_objSection.length;
			for (v_iSectionIdx = 1; v_iSectionIdx <= v_iSectionCnt; v_iSectionIdx++) {
				v_object = v_objSection[v_iSectionIdx];
				NuElement.create("td", v_elemSection);
				v_elemSection.inneHTML += "-4";
				if (v_sFooterProp) {
////					prm_sbDsp.append(v_sFooterProp);
				}
				if (v_sFooterStyle) {
					NuElement.setAttribute(v_elemCol, "style", v_sFooterStyle);
				}
				if (!v_object) {
				} else if (v_object.draw) {
					v_object.draw(v_elemCol);
				} else {
					NuElement.setContent(v_elemCol, v_object);
				}
			}
		}
		v_elemSection = NuElement.create("tbody", v_elemTable);
		if (g_sBrowser != "Mozilla") {
		} else if (!this.getProperty(NuCtl.c_SPROP_STYLE)) {
		} else if (this.getProperty(NuCtl.c_SPROP_STYLE).height) {
			v_sStyle = "overflow: auto;";
			v_sHeight = NuStr.toInt(this.getProperty(NuCtl.c_SPROP_STYLE).height);
			v_sHeight -= (20 * v_iSectionRowCnt + 5 * ((v_iSectionRowCnt * (v_iSectionRowCnt - 1)) / 2)) + 26;
			v_sStyle += " height:" + v_sHeight + "px;";
			NuElement.setAttribute(v_elemSection, "style", v_sStyle);
		}
		for (v_iRowIdx = 1; v_iRowIdx <= v_iRowCnt; v_iRowIdx++) {
			v_elemRow = NuElement.create("tr", v_elemSection);
			NuElement.setAttribute(v_elemRow, "id", "F_" + this.getName() + "-body-row-" + v_iRowIdx);
			v_iSectionColIdx = 1;
			v_objGroupBy = v_datasource.getRowProperty(v_iRowIdx, NuCtl.c_SPROP_GROUPBY);
			if (v_objGroupBy) {
				v_iGroupLevel = NuStr.toInt(v_objGroupBy["level"]);
				v_sGroupVal = v_objGroupBy["val"];
			}
			while (v_iSectionColIdx <= v_iMinColCnt) {
				v_object = v_datasource.getColumnObject(v_iRowIdx, v_iSectionColIdx);
				if (v_object) {
					v_iSpan = v_object.getProperty(NuCtl.c_SPROP_SPAN);
					v_objVal = v_object.getValue();
				} else {
					v_iSpan = null;
					v_objVal = null;
				}
				this._iUniqueColId = 0;
				v_elemCol = NuElement.create("td", v_elemRow);
				NuElement.setAttribute(v_elemCol, "id", "F_" + v_sCtlName + "-body-row-" + v_iRowIdx + "-col-" + v_iSectionColIdx);
				NuElement.setAttribute(v_elemCol, "nowrap", "true");
				if (v_sBodyProp) {
					if (v_objGroupBy) {
						v_sTdCls = v_sBodyProp['classtd'] + '_' + v_iGroupLevel;
					} else if (v_iRowIdx % 2 ==0) {
						v_sTdCls = v_sBodyProp['classtd'] + '_even';
					} else {
						v_sTdCls = v_sBodyProp['classtd'] + '_odd';
					}
					v_sTdCls += (' ' + v_sCtlName + '_col_' + v_iSectionColIdx);
					NuElement.setAttribute(v_elemCol, "class", v_sTdCls);
				} else {
					NuElement.setAttribute(v_elemCol, "class", v_sCtlName + "_col_" + v_iSectionColIdx);
				}
				if (v_iSpan) {
					NuElement.setAttribute(v_elemCol, "colSpan", v_iSpan);
				}
				if (v_sBodyStyle) {
					for (v_objStyle in v_sBodyStyle) {
						if (v_sBodyStyle[v_objStyle] && v_sBodyStyle[v_objStyle] != "") {
							v_elemCol.style[v_objStyle] = v_sBodyStyle[v_objStyle];
						}
					}
				}
				if (!v_objVal) {
				} else if (v_objVal instanceof Object) {
				} else if (NuStr.toMny(v_objVal).substring(4).length == 0) {
				} else {
					NuElement.setAttribute(v_elemCol, "align", "right");
				}
				if (!v_objVal) {
				} else if (v_objVal instanceof Array) {
					this.createNestedHtml(v_objVal, NuCtl.c_SPROP_BODY, v_iRowIdx, v_iSectionColIdx, v_elemCol);
				} else if (v_objVal.draw) {
					v_elemItem = NuElement.create("span", v_elemCol);
					NuElement.setAttribute(v_elemItem, "id", "F_body-row-" + v_iRowIdx + "-col-" + v_iSectionColIdx + "_" + this.getUniqueColId());
					v_objVal.setProperty(NuCtl.c_SPROP_ROWNUM, v_iRowIdx);
					v_objVal.draw(v_elemCol);
				} else {
					NuElement.setContent(v_elemCol, v_objVal);
				}
				if ((v_iSpan) && (v_iSpan > 1)) {
					v_iSectionColIdx += v_iSpan;
				} else {
					v_iSectionColIdx++;
				}
			}
		}
	}
	/**
	 * createNestedHtml
	 */
	this.createNestedHtml = function(prm_objArr, prm_sSection, prm_iRow, prm_iCol, prm_elemCol) {
		var v_iObjCnt;
		var v_iObjIdx;
		var v_elemItem;
		var v_objItm;
		v_iObjCnt = prm_objArr.length;
		for (v_iObjIdx = 0; v_iObjIdx < v_iObjCnt; v_iObjIdx++) {
			v_objItm = prm_objArr[v_iObjIdx];
			if (!v_objItm) {
			} else if (v_objItm instanceof String) {
				NuElement.setContent(prm_elemCol, v_objItm);
			} else if (v_objItm instanceof Array) {
				this.createNestedHtml(v_objItm, prm_sSection, prm_iRow, prm_iCol, prm_elemCol);
			} else if (v_objItm instanceof Object) {
				v_objItm = NuCtl.create(v_objItm, this);
				if (v_objItm.draw) {
					v_elemItem = NuElement.create("span", prm_elemCol);
					NuElement.setAttribute(v_elemItem, "id", "F_" + prm_sSection + "-row-" + prm_iRow + "-col-" + prm_iCol + "_" + this.getUniqueColId());
					v_objItm.setProperty(NuCtl.c_SPROP_ROWNUM, prm_iRow);
					v_objItm.draw(v_elemItem);
				} else {
					NuElement.setContent(v_elemItem, v_objItm);
				}
			} else {
				NuElement.setContent(prm_elemCol, v_objItm);
			}
		}
	}
	/**
	 * getColCount
	 */
	this.getColCount = function(prm_sProp, prm_iRow) {
		var v_datasource;
		v_datasource = this.datasourceOpen(prm_sProp);
		if (v_datasource) {
			return v_datasource.getColumnCount(prm_iRow);
		} else {
			return 0;
		}
	}
	/**
	 * getColSts
	 */
	this.getColSts = function(prm_iCol) {
		var v_sClass;
		var v_sCtlName;
		var v_sDisplay;
		var v_objStyle;
		v_objStyle = new NuStyle();
		v_objStyle.loadSheet("Xhtml");
		v_sCtlName = this.getName();
		v_sClass = "." + v_sCtlName + "_col_" + prm_iCol;
		v_sDisplay = v_objStyle.getClassStyle(v_sClass, NuCtl.c_SSTYLE_DISPLAY);
		v_objElement = NuElement.getById("F_" + v_sCtlName + "-body-row-" + 1 + "-col-" + prm_iCol);
		if (!v_objElement) {
			return "InvalidCol";
		} else if(v_sDisplay == "CSS file not found"){
			return "CSS error";
		} else if(v_sDisplay == "none"){
			return "hidden";
		} else {
			return "visible";
		}
	}
	/**
	 * getGridSum
	 */
	this.getGridSum = function() {
		var v_Return;
		var v_iBLen;
		var v_iColLen;
		var v_iI;
		var v_iJ;
		var v_iK;
		var v_objBody;
		var v_objBodyCurr;
		var v_objCurCol;
		var v_objCurColVal;
		var v_objCurCtl;
		var v_objCurCtlVal;
		var v_objCurRow;
		var v_objCtlName;
		var v_objCtlVal;
		var v_sTemp;
		v_objBody = this.getProperty(NuCtl.c_SPROP_BODY);
		v_Return = new Array();
		if (v_objBody && v_objBody.getRowCount() > 1) {
			v_objRow = v_objBody.getRow(1);
			v_iColLen = v_objRow.getColumnCount();
			for (v_iJ = 0; v_iJ < v_iColLen; v_iJ++) {
				for (v_iI = 1; v_iI < v_objBody.getRowCount(); v_iI++) {
					v_objCurCol = v_objBody.getColumnProperty(v_iI, v_iJ, NuCtl.c_SPROP_VAL);
					if (!v_objCurCol) {
					} else if (v_objCurCol instanceof Array) {
						for (v_iK = 0; v_iK < v_objCurCol.length; v_iK++) {
							v_objCurCtl = v_objCurCol[v_iK];
							if (!v_objCurCtl) {
							} else if (v_objCurCtl instanceof Object) {
								if (v_objCurCtl.getName) {
									v_objCtlName = v_objCurCtl.getName();
								} else {
									v_objCtlName = v_objCurCtl[NuCtl.c_SPROP_NAME];
								}
								v_objCurCtl = NuView.Document.Controls.get(v_objCtlName);
								v_objCtlVal = ctlGetVal("N_" + v_objCtlName).replace(/[^0-9.]/gi, "");
								if (!v_objCtlVal) {
									v_objCtlVal = v_objCurCtl.getValue();
									if (!v_objCtlVal) {
										v_objCtlVal = NuView.Document.Controls.get("N_" + v_objCurCtl.getName()).getValue();
									}
								}
								if (!v_objCurCtl) {
								} else if (!v_objCtlVal || v_objCtlVal == '') {
								} else if (!NuStr.isNum(v_objCtlVal)) {
								} else if (v_Return[v_iJ]) {
									v_Return[v_iJ] = NuStr.toNum(v_Return[v_iJ]) + NuStr.toNum(v_objCtlVal);
								} else {
									v_Return[v_iJ] = NuStr.toNum(v_objCtlVal);
								}
							}
						}
					} else if (v_objCurCol instanceof String) {
						if (!NuStr.isNum(NuStr.replace(v_objCurCol, ",", ""))) {
						} else if (v_Return[v_iJ]){
							v_Return[v_iJ] = NuStr.toNum(v_Return[v_iJ]) + NuMny.toNum(NuStr.toMny(v_objCurCol));
						} else {
							v_Return[v_iJ] = NuMny.toNum(NuStr.toMny(v_objCurCol));
						}
					} else if (v_objCurCol instanceof Object) {
						v_objCurCtl = NuView.Document.Controls.get(v_objCurCol.getName());
						if (!v_objCurCtl) {
						} else if (!(ctlGetVal("N_" + v_objCurCtl.getName())) || ctlGetVal("N_" + v_objCurCtl.getName()) == '') {
						} else if (!NuStr.isNum(ctlGetVal("N_" + v_objCurCtl.getName()).replace(/[^0-9.]/gi,""))) {
						} else if (v_Return[v_iJ]) {
							v_Return[v_iJ] = NuStr.toNum(v_Return[v_iJ]) + NuStr.toNum(ctlGetVal("N_" + v_objCurCtl.getName()).replace(/[^0-9.]/gi,""));
						} else {
							v_Return[v_iJ] = NuStr.toNum(ctlGetVal("N_" + v_objCurCtl.getName()).replace(/[^0-9.]/gi,""));
						}
					}
				}
			}
		}
		return v_Return;
	}
	/**
	 * getRowProperty
	 */
	this.getRowProperty = function(prm_sSection, prm_iRow, prm_sProp) {
		var v_iRow;
		var v_datasource;
		v_datasource = this.datasourceOpen(prm_sSection, false);
		if (v_datasource) {
			v_iRow = (prm_iRow || 1);
			return v_datasource.getRowProperty(v_iRow, prm_sProp);
		} else {
			return null;
		}
	}
	/**
	 * getRowCount
	 */
	this.getRowCount = function(prm_sProp) {
		var v_datasource;
		v_datasource = this.datasourceOpen(prm_sProp);
		if (v_datasource) {
			return v_datasource.getRowCount();
		} else {
			return 0;
		}
	}
	/**
	 * getSectionStyles
	 */
	this.getSectionStyles = function() {
		var v_Return;
		var v_i;
		var v_sProp;
		var v_sVal;
		var v_hSectionProp;
		var v_hSectionStyle;
		var v_objStyle;
		v_Return = {};
		for (v_i = 1; v_i <= 3; v_i++) {
			switch (v_i) {
			case 1:
				v_objStyle = this.getProperty(NuCtl.c_SPROP_HEADERSTYLE);
				break;
			case 2:
				v_objStyle = this.getProperty(NuCtl.c_SPROP_BODYSTYLE);
				break;
			case 3:
				v_objStyle = this.getProperty(NuCtl.c_SPROP_FOOTERSTYLE);
				break;
			}
			v_hSectionProp = {};
			v_hSectionStyle = {};
			if (v_objStyle) {
				for (v_sProp in v_objStyle) {
					if (v_objStyle[v_sProp] && v_objStyle[v_sProp] != "") {
						v_sVal = v_objStyle[v_sProp];
						switch (v_sProp) {
						case "align":
							v_hSectionProp["align"] = v_sVal;
							break;
						case "border":
							if (v_sVal != "groove") {
								v_hSectionStyle[v_sProp.replace("_", "-")] = v_sVal;
							} else if (v_i == 1) {
								v_hSectionProp["classth"] = "grid_th_groove";
							} else {
								v_hSectionProp["classtd"] = "grid_td_groove";
							}
							break;
						case "onclick":
							v_hSectionStyle["cursor"] = "pointer";
							v_hSectionProp["onclick"] = 'NuView.Document.getEvents(\'' + this.getName() + '\').' + v_sVal;
							break;
						case "valign":
							v_hSectionProp["valign"] = v_sVal;
							break;
						case "width":
							v_hSectionStyle["width"] = v_sVal;
							v_hSectionStyle["overflow"] = "hidden";
							break;
						default:
							v_hSectionStyle[v_sProp.replace("_", "-")] = v_sVal;
							break;
						}
					}
				}
			}
			switch (v_i) {
			case 1:
				v_Return["headerprop"] = v_hSectionProp;
				v_Return["headerstyle"] = v_hSectionStyle;
				break;
			case 2:
				v_Return["bodyprop"] = v_hSectionProp;
				v_Return["bodystyle"] = v_hSectionStyle;
				break;
			case 3:
				v_Return["footerprop"] = v_hSectionProp;
				v_Return["footerstyle"] = v_hSectionStyle;
				break;
			}
		}
		return v_Return;
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_GRID;
	}
	/**
	 * getUniqueColId
	 */
	this.getUniqueColId = function() {
		this._iUniqueColId += 1;
		return this._iUniqueColId;
	}
	/**
	 * setCol
	 */
	this.setCol = function(prm_sSection, prm_iRow, prm_iCol, prm_object) {
		var v_iCol;
		var v_iObjCnt;
		var v_iObjIdx;
		var v_iRow;
		var v_datasource;
		var v_object;
		var v_objItm;
		var v_objTest;
		v_object = prm_object;
		if (!prm_object) {
		} else if (prm_object instanceof String) {
		} else if (prm_object instanceof Object) {
			v_objTest = prm_object[NuCtl.c_SPROP_TYPE];
			if (v_objTest) {
				v_object = NuCtl.create(prm_object, this);
			}
		}
		v_datasource = this.datasourceOpen(prm_sSection, true);
		v_iRow = (prm_iRow || 1);
		v_iCol = (prm_iCol || 1);
		v_datasource.setColumn(v_iRow, v_iCol, v_object);
	}
	/**
	 * setColGroupSize
	 */
	this.setColGroupSize = function(prm_sSection, prm_iCol, prm_iSize) {
		var v_iColIdx
		var v_iColSpan;
		var v_iRowCnt;
		var v_iRowIdx;
		var v_sClsName;
		var v_sColSts;
		var v_sCtlName;
		var v_element;
		var v_objSection;
		v_sCtlName = this.getName();
		v_sColSts = this.getColSts(prm_iCol);
		if (v_sColSts.toLowerCase() == "invalidcol" || v_sColSts.toLowerCase() == "css error") {
		} else if ((v_sColSts.toLowerCase() == "hidden" && prm_iSize == -1) || (v_sColSts.toLowerCase() == "visible" && prm_iSize == 0)) {
			v_objSection = this.getProperty(NuCtl.c_SPROP_HEADER);
			if (v_objSection) {
				v_iRowCnt = v_objSection.getRowCount();
				for (v_iRowIdx = v_iRowCnt; v_iRowIdx > 0; v_iRowIdx--) {
					v_element = NuElement.getById("F_" + v_sCtlName + "-header-row-" + v_iRowIdx + "-col-" + prm_iCol);
					if (!v_element) {
						for (v_iColIdx = prm_iCol - 1; v_iColIdx > 0; v_iColIdx--) {
							v_element = NuElement.getById("F_" + v_sCtlName + "-header-row-" + v_iRowIdx + "-col-" + v_iColIdx);
							if (v_element) {
								v_iColIdx = 0;
							}
						}
					}
					if (!v_element) {
					} else if (prm_iSize == -1) {
						v_iColSpan = NuElement.getAttribute(v_element, "colSpan");
						if (!v_iColSpan) {
							NuElement.setStyle(v_element, "display", "");
						} else if (v_iColSpan == '1' && NuElement.getStyle(v_element, "display") == 'none') {
							NuElement.setStyle(v_element, "display", "");
						} else {
							NuElement.setAttribute(v_element, "colSpan", NuStr.toInt(v_iColSpan) + 1);
						}
					} else if (prm_iSize == 0) {
						v_iColSpan = NuElement.getAttribute(v_element, "colSpan");
						if (!v_iColSpan) {
							NuElement.setStyle(v_element, "display", "none");
						} else if (v_iColSpan == "1") {
							NuElement.setStyle(v_element, "display", "none");
						} else if (v_iColSpan != "") {
							NuElement.setAttribute(v_element, "colSpan", v_iColSpan - 1);
						} else {
							NuElement.setStyle(v_element, "display", "none");
						}
					} else {
						NuElement.setStyle(v_element, "display", "block");
						NuElement.setStyle(v_element, "overflow", "hidden");
						NuElement.setStyle(v_element, "width", prm_iSize);
					}
				}
			}
			v_objSection = this.getProperty(NuCtl.c_SPROP_BODY);
			if (v_objSection) {
				v_sClsName = "." + v_sCtlName + "_col_" + prm_iCol;
				this.toggleCol(v_sClsName);
			}
		}
	}
	/**
	 * setColProperty
	 */
	this.setColProperty = function(prm_sSection, prm_iRow, prm_iCol, prm_sProp, prm_object) {
		var v_iCol;
		var v_iRow;
		var v_datasource;
		v_datasource = this.datasourceOpen(prm_sSection, true);
		v_iRow = (prm_iRow || 1);
		v_iCol = (prm_iCol || 1);
		v_datasource.setColumnProperty(v_iRow, v_iCol, prm_sProp, prm_object);
	}
	/**
	 * setGridColValue
	 */
	this.setGridColValue = function(prm_iRowNum, prm_sCtl) {
		var v_iGroupLevel;
		var v_iGroupLevelTest;
		var v_iRowCnt;
		var v_iRowIdx;
		var v_objGroupBy;
		var v_sCtl;
		var v_sCtlName;
		var v_sGroupVal;
		var v_sGroupValTest;
		var v_sNewVal;
		v_sNewVal = ctlGetVal("N_" + prm_sCtl);
		v_objGroupBy = this.getRowProperty(NuCtl.c_SPROP_BODY, prm_iRowNum, NuCtl.c_SPROP_GROUPBY);
		if (v_objGroupBy) {
			v_iGroupLevel = NuStr.toInt(v_objGroupBy["level"]);
			v_sGroupVal = v_objGroupBy["val"];
			if (v_iGroupLevel) {
				v_sCtlName = prm_sCtl;
				v_iCtlIdx = v_sCtlName.substring(v_sCtlName.lastIndexOf('_') + 1);
				v_sCtlName = v_sCtlName.substring(0, v_sCtlName.lastIndexOf('_') + 1);
				v_iCtlIdx = NuStr.toInt(v_iCtlIdx);
				v_sDataset = this.getName();
				v_iRowIdx = prm_iRowNum;
				v_iRowCnt = this.getRowCount(NuCtl.c_SPROP_BODY);
				v_iGrpCnt = ctlGetVal("F_GrpCnt_" + v_sDataset);
				v_iGrpCnt = NuStr.toInt(v_iGrpCnt);
				while (v_iRowIdx <= v_iRowCnt) {
					v_iRowIdx++;
					v_objGroupBy = this.getRowProperty(NuCtl.c_SPROP_BODY, v_iRowIdx, NuCtl.c_SPROP_GROUPBY);
					if (v_objGroupBy) {
						v_iGroupLevelTest = NuStr.toInt(v_objGroupBy["level"]);
						v_sGroupValTest = v_objGroupBy["val"];
					} else {
						v_iGroupLevelTest = 0;
						v_sGroupValTest = null;
					}
					if (v_iGroupLevelTest <= v_iGroupLevel) {
						v_iRowIdx = v_iRowCnt + 1;
					} else {
						v_iCtlIdx += v_iGrpCnt;
						v_sCtl = "N_" + v_sCtlName + v_iCtlIdx ;
						ctlSetVal(v_sCtl , v_sNewVal);
					}
				}
			}
		}
	}
	/**
	 * setProperty
	 */
	this.setProperty = function(prm_sProp, prm_object) {
		var v_iPropIdx;
		var v_iPropCnt;
		var v_iCol;
		var v_iColCnt;
		var v_iColIdx;
		var v_iRow;
		var v_iSpan;
		var v_sProp;
		var v_aRow;
		var v_datasource;
		var v_objCol;
		var v_objItm;
		var v_objRow;
		var v_objTest;
		switch (prm_sProp) {
		case NuCtl.c_SPROP_BODY:
		case NuCtl.c_SPROP_HEADER:
		case NuCtl.c_SPROP_FOOTER:
			if (prm_object instanceof Array) {
				v_iCol = 0;
				v_iRow = 0;
				v_iPropCnt = prm_object.length;
				for (v_iPropIdx = 0; v_iPropIdx < v_iPropCnt; v_iPropIdx++) {
					v_objItm = prm_object[v_iPropIdx];
					v_objTest = v_objItm[NuCtl.c_SPROP_ROW];
					if (v_objTest) {
						v_aRow = v_objTest;
						v_iRow += 1;
						if (v_aRow instanceof Array) {
							v_iCol = 0;
							v_iColCnt = v_aRow.length;
							for (v_iColIdx = 0; v_iColIdx < v_iColCnt; v_iColIdx++) {
								v_objCol = v_aRow[v_iColIdx];
								if (v_objCol) {
									v_iCol += 1;
									v_objTest = v_objCol[NuCtl.c_SPROP_COL];
									if (v_objTest == "") {
										v_iSpan = v_objCol[NuCtl.c_SPROP_SPAN];
										v_objCol = null;
									} else if (v_objTest) {
										v_iSpan = v_objCol[NuCtl.c_SPROP_SPAN];
										v_objCol = v_objTest;
									} else {
										v_iSpan = null;
									}
									this.setCol(prm_sProp, v_iRow, v_iCol, v_objCol);
									if ((v_iSpan) && (v_iSpan > 1)) {
										this.setColProperty(prm_sProp, v_iRow, v_iCol, NuCtl.c_SPROP_SPAN, v_iSpan);
										v_iCol += (v_iSpan - 1);
									}
								}
							}
						}
						for (v_sProp in v_objItm) {
							if (v_sProp != NuCtl.c_SPROP_ROW) {
								this.setRowProperty(prm_sProp, v_iRow, v_sProp, v_objItm[v_sProp]);
							}
						}
					} else {
						v_objTest = v_objItm[NuCtl.c_SPROP_COL];
						if (v_objTest) {
							v_objItm = v_objTest;
						} else {
							v_objTest = v_objItm[NuCtl.c_SPROP_TYPE];
							if (v_objTest) {
								v_objItm = NuCtl.create(v_objItm, this);
							} else {
								v_objTest = v_objItm[NuCtl.c_SPROP_STYLE];
								if (v_objTest) {
									if (prm_sProp == NuCtl.c_SPROP_HEADER) {
										this._setProperty(NuCtl.c_SPROP_HEADERSTYLE, v_objTest);
									} else if (prm_sProp == NuCtl.c_SPROP_FOOTER) {
										this._setProperty(NuCtl.c_SPROP_FOOTERSTYLE, v_objTest);
									} else {
										this._setProperty(NuCtl.c_SPROP_BODYSTYLE, v_objTest);
									}
									v_objItm = null;
								}
							}
						}
						if (v_objItm) {
							v_iCol += 1;
							v_iRow = 1;
							this.setCol(prm_sProp, v_iRow, v_iCol, v_objItm);
						}
					}
				}
			} else {
				v_aRow = prm_object[NuCtl.c_SPROP_ROW];
				if (v_aRow instanceof Array) {
					v_iRow = 1;
					v_iCol = 0;
					v_iColCnt = v_aRow.length;
					for (v_iColIdx = 0; v_iColIdx < v_iColCnt; v_iColIdx++) {
						v_objCol = v_aRow[v_iColIdx];
						if (v_objCol) {
							v_objTest = v_objCol[NuCtl.c_SPROP_STYLE];
							if (v_objTest) {
								this._setProperty(prm_sProp, v_objCol);
							} else {
								v_iCol += 1;
								this.setCol(prm_sProp, v_iRow, v_iCol, v_objItm);
							}
						}
					}
				}
			}
			break;
		default:
			this._setProperty(prm_sProp, prm_object);
			break;
		}
	}
	/**
	 * setRowGroupVisible
	 */
	this.setRowGroupVisible = function(prm_sSection, prm_iRow, prm_isVisible) {
		var v_isDone;
		var v_iGroupLevel;
		var v_iGroupLevelTest;
		var v_iRowCnt;
		var v_iRowIdx;
		var v_sCtlName;
		var v_sGroupVal;
		var v_sGroupValTest;
		var v_sHiddenBy;
		var v_objGroupBy;
		v_objGroupBy = this.getRowProperty(prm_sSection, prm_iRow, NuCtl.c_SPROP_GROUPBY);
		if (v_objGroupBy) {
			v_iGroupLevel = NuStr.toInt(v_objGroupBy["level"]);
			v_sGroupVal = v_objGroupBy["val"];
			if (v_iGroupLevel) {
				v_sCtlName = this.getName();
				v_iRowIdx = prm_iRow;
				v_iRowCnt = this.getRowCount(prm_sSection);
				while (v_iRowIdx <= v_iRowCnt) {
					v_iRowIdx++;
					v_objGroupBy = this.getRowProperty(prm_sSection, v_iRowIdx, NuCtl.c_SPROP_GROUPBY);
					if (v_objGroupBy) {
						v_iGroupLevelTest = NuStr.toInt(v_objGroupBy["level"]);
						v_sGroupValTest = v_objGroupBy["val"];
					} else {
						v_iGroupLevelTest = 0;
						v_sGroupValTest = null;
					}
					if (v_iGroupLevelTest <= v_iGroupLevel) {
						v_iRowIdx = v_iRowCnt + 1;
					} else {
						v_element = NuElement.getById("F_" + v_sCtlName + "-" + prm_sSection + "-row-" + v_iRowIdx);
						if (!v_element) {
						} else if (prm_isVisible) {
							if (NuElement.getAttribute(v_element, "hiddenby") == (v_iGroupLevel + "-" + v_sGroupVal)) {
								NuElement.setAttribute(v_element, "hiddenby", null);
								v_element.style["display"] = "";
							}
						} else if (!NuElement.getAttribute(v_element, "hiddenby")) {
							NuElement.setAttribute(v_element, "hiddenby", v_iGroupLevel + "-" + v_sGroupVal);
							v_element.style["display"] = "none";
						}
					}
				}
			}
		}
	}
	/**
	 * setRowProperty
	 */
	this.setRowProperty = function(prm_sSection, prm_iRow, prm_sProp, prm_object) {
		var v_iRow;
		var v_datasource;
		v_datasource = this.datasourceOpen(prm_sSection, true);
		v_iRow = (prm_iRow || 1);
		v_datasource.setRowProperty(v_iRow, prm_sProp, prm_object);
	}
	/**
	 * setRowVisible
	 */
	this.setRowVisible = function(prm_sSection, prm_iRow, prm_isHide) {
		var v_isDone;
		var v_iGroupLevel;
		var v_iGroupLevelTest;
		var v_iRowCnt;
		var v_iRowIdx;
		var v_sCtlName;
		var v_sGroupVal;
		var v_sGroupValTest;
		var v_sHiddenBy;
		var v_objGroupBy;
		v_sCtlName = this.getName();
		v_iRowIdx = prm_iRow;
		v_element = NuElement.getById("F_" + v_sCtlName + "-" + prm_sSection + "-row-" + v_iRowIdx);
		if (!v_element) {
		} else if (prm_isHide == "no") {
			v_element.style["display"] = "";
		} else if (prm_isHide == "yes") {
			v_element.style["display"] = "none";
		} else if (v_element.style["display"] == "none") { // if hidden then display
			v_element.style["display"] = "";
		} else {// hide if visible
			v_element.style["display"] = "none";
		}
	}
	/**
	 * toggleCol
	 */
	this.toggleCol = function(prm_sClass) {
		var v_objStyle;
		var v_sDisplay;
		v_objStyle = new NuStyle();
		v_objStyle.loadSheet("Xhtml");
		v_sDisplay = v_objStyle.getClassStyle(prm_sClass, NuCtl.c_SSTYLE_DISPLAY);
		if (v_sDisplay != "none") {
			v_objStyle.setClassStyle(prm_sClass, NuCtl.c_SSTYLE_DISPLAY, "none");
		} else {
			v_objStyle.setClassStyle(prm_sClass, NuCtl.c_SSTYLE_DISPLAY, "");
		}
	}
}
	/**
	 * Static getGridSum function
	 */
	NuCtlGrid.getGridSum = function(prm_objGrid) {
		var v_Return;
		var v_iBLen;
		var v_iColLen;
		var v_iCtlLen;
		var v_iI;
		var v_iJ;
		var v_iK;
		var v_objBody;
		var v_objBodyCurr;
		var v_objCurCol;
		var v_objCurColVal;
		var v_objCurCtl;
		var v_objCurCtlVal;
		var v_objCurRow;
		var v_objGridCpy;
		v_objGridCpy = NuXmlJson.copy(prm_objGrid);
		v_objBody = NuXmlJson.getAttribute(v_objGridCpy, NuCtl.c_SPROP_BODY);
		v_Return = new Array();
		if (v_objBody) {
			for (v_iI = 0, v_iBLen = v_objBody.length; v_iI < v_iBLen; v_iI++) {
				v_objBodyCurr = v_objBody[v_iI];
				v_objCurRow = NuXmlJson.getChild(v_objBodyCurr, NuCtl.c_SPROP_ROW);
				if (v_objCurRow) {
					v_sIsSum = NuXmlJson.getChild(v_objBodyCurr, "issum");
					if (v_sIsSum == "Yes") {
					} else {
						v_iColLen = NuXmlJson.getAttribute(v_objCurRow, "length");
						for (v_iJ = 0; v_iJ < v_iColLen; v_iJ++) {
							v_objCurCol = NuXmlJson.getChild(v_objCurRow[v_iJ], NuCtl.c_SPROP_COL);
							if (!v_objCurCol) {
							} else if (v_objCurCol instanceof Array) {
								for (v_iK = 0, v_iCtlLen = v_objCurCol.length; v_iK < v_iCtlLen; v_iK++) {
									v_objCurCtl = v_objCurCol[v_iK];
									if (!v_objCurCtl) {
									} else if (v_objCurCtl instanceof Object) {
										v_objCurCtlVal = v_objCurCtl.val;
										if (!NuStr.isNum(NuStr.replace(v_objCurCtlVal, ",", ""))) {
										} else if (v_Return[v_iJ]) {
											v_Return[v_iJ] = NuStr.toNum(v_Return[v_iJ]) + NuStr.toNum(NuStr.replace(v_objCurCtlVal, ",", ""));
										} else {
											v_Return[v_iJ] = NuStr.toNum(NuStr.replace(v_objCurCtlVal, ",", ""));
										}
									}
								}
							} else if (v_objCurCol instanceof String) {
								if (!NuStr.isNum(NuStr.replace(v_objCurCol, ",", ""))) {
								} else if (v_Return[v_iJ]){
									v_Return[v_iJ] = NuStr.toNum(v_Return[v_iJ]) + NuMny.toNum(NuStr.toMny(v_objCurCol));
								} else {
									v_Return[v_iJ] = NuMny.toNum(NuStr.toMny(v_objCurCol));
								}
							} else if (v_objCurCol instanceof Object) {
								v_objCurColVal = v_objCurCol.val;
								if (!NuStr.isNum(NuStr.replace(v_objCurColVal, ",", ""))) {
								} else if(v_Return[v_iJ]) {
									v_Return[v_iJ] = NuStr.toNum(v_Return[v_iJ]) + NuStr.toNum(NuStr.replace(v_objCurColVal, ",", ""));
								} else {
									v_Return[v_iJ] = NuStr.toNum(NuStr.replace(v_objCurColVal, ",", ""));
								}
							}
						}
					}
				}
			}
		}
		return v_Return;
	}
NuCtlGrid.prototype = new NuCtl();
/**
 * NuCtlHidden Object
 */
function NuCtlHidden() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sItr;
		var v_sValue;
		var v_objHdn;
		v_sValue = this.getValue();
		v_sValue = (v_sValue ? v_sValue : "");
		v_objHdn = NuElement.create("input");
		v_oHdn = {
			type : NuCtl.c_STYPE_HIDDEN,
			id : "N_" + this.getName(),
			name : "N_" + this.getName(),
			value : v_sValue,
			fld : this.getProperty(NuCtl.c_SPROP_FIELD)
		};
		for (v_sItr in v_oHdn) {
			if (v_oHdn[v_sItr] && v_oHdn[v_sItr] != "") {
				switch(v_sItr) {
				case "type":
				case "id":
				case "name":
				case "value":
				case "fld":
					NuElement.createAttribute(v_sItr, v_oHdn[v_sItr], v_objHdn);
					break;
				default:
					break;
				}
			}
		}
		v_objHdn ? NuXmlJson.addChild(prm_elemBase, v_objHdn) : 0;
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_HIDDEN;
	}
}
NuCtlHidden.prototype = new NuCtl();
/**
 * NuCtlImage
 */
function NuCtlImage() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sProp;
		var v_sStyle;
		var v_elemCtl;
		v_sStyle = "";
		v_elemCtl = NuElement.create("img", prm_elemBase);
		v_sProp = this.getName();
		if (v_sProp) {
			NuElement.setAttribute(v_elemCtl, "id", "N_" + v_sProp);
		}
		v_sProp = this.getProperty(NuCtl.c_SPROP_VAL);
		if (v_sProp) {
			if (v_sProp.indexOf("/") < 0) {
				NuElement.setAttribute(v_elemCtl, "src", NuView.User.getPathImages() + "/" + v_sProp);
				NuElement.setAttribute(v_elemCtl, "alt", NuView.User.getPathImages() + "/" + v_sProp);
			} else {
				NuElement.setAttribute(v_elemCtl, "src", v_sProp);
				NuElement.setAttribute(v_elemCtl, "alt", v_sProp);
			}
		}
		v_sProp = this.getProperty(NuCtl.c_SPROP_CANDRAG);
		if ((v_sProp) && (v_sProp == "Yes")) {
			NuElement.setAttribute(v_elemCtl, "onMouseDown", "return NuView.Document.onMouseDown(event);");
		}
		v_sProp = this.getEvent(NuEvent.c_SEVENT_ONCLICK);
		if (v_sProp) {
			v_sStyle += 'cursor:pointer;';
		} else {
			v_sProp = this.getProperty(NuCtl.c_SPROP_CANDRAG);
			if ((v_sProp) && (v_sProp == "Yes")) {
				v_sStyle += 'cursor:move;';
			}
		}
		if (v_sStyle.length > 0) {
			NuElement.setAttribute(v_elemCtl, "style", v_sStyle);
		}
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_IMAGE;
	}
}
NuCtlImage.prototype = new NuCtl();
/**
 * NuCtlInteger Object
 */
function NuCtlInteger() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_objStyles;
		var v_sFormat;
		var v_sProp;
		var v_sType;
		var v_sbStyle;
		this._createHidden(prm_elemBase);
		//this._createLabel(prm_sbDsp);
		v_sbStyle = new StringBuffer();
		v_sType = this.getProperty(NuCtl.c_SPROP_TYPE);
		this._elementCtl = NuElement.create("input", prm_elemBase);
		NuElement.setAttribute(this._elementCtl, "type", "TEXT");
		NuElement.setAttribute(this._elementCtl, "name", "N_" + this.getName());
		NuElement.setAttribute(this._elementCtl, "id", "N_" + this.getName());
		NuElement.setAttribute(this._elementCtl, "value", this.getValue());
		v_sProp = this.getProperty(NuCtl.c_SPROP_READONLY);
		if ((v_sProp) && (v_sProp.toLowerCase() == "yes")) {
			NuElement.setAttribute(this._elementCtl, "class", "ctl ctl_ReadOnly");
			NuElement.setAttribute(this._elementCtl, "readonly", "YES");
		} else {
			NuElement.setAttribute(this._elementCtl, "class", "ctl");
		}
		NuElement.setAttribute(this._elementCtl, "nutype", v_sType);
		v_objStyles = this.getProperty(NuCtl.c_SPROP_STYLE);
		for (v_sProp in v_objStyles) {
			if (v_objStyles[v_sProp] && v_objStyles[v_sProp] != "") {
				v_sbStyle.append(v_sProp + ':' + v_objStyles[v_sProp] + ';');
			}
		}
		if (v_sbStyle.getLength() > 0) {
			NuElement.setAttribute(this._elementCtl, "style", v_sbStyle.toString());
		}
		v_objEvents = this.getProperty(NuCtl.c_SPROP_EVENTS);
		for (v_sProp in v_objEvents) {
			if (v_objEvents[v_sProp]) {
				switch (v_sProp) {
				case NuEvent.c_SEVENT_ONCHANGE:
					NuElement.setAttribute(this._elementCtl, "onchange", NuView.Document.onChange);
					break;
				case NuEvent.c_SEVENT_ONCLICK:
					NuElement.setAttribute(this._elementCtl, "onclick", NuView.Document.onClick);
					break;
				}
			}
		}
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_INTEGER;
	}
}
NuCtlInteger.prototype = new NuCtl();
/**
 * NuCtlLabel Object
 */
function NuCtlLabel() {
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_LABEL;
	}
	/**
	 * setProperty
	 */
	this.setProperty = function(prm_sProp, prm_sValue) {
		var v_obj;
		this._setProperty(prm_sProp, prm_sValue);
		if (prm_sProp == NuCtl.c_SPROP_VAL) {
			v_obj = this._loadObject();
			if (v_obj) {
				v_obj.firstChild.nodeValue = prm_sValue;
			}
		}
	}
}
NuCtlLabel.prototype = new NuCtl();
/**
 * NuCtlLinebreak Object
 */
function NuCtlLinebreak() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		this._elementCtl = NuElement.create("br", prm_elemBase);
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_LINEBREAK;
	}
}
NuCtlLinebreak.prototype = new NuCtl();
/**
 * NuCtlMemo Object
 */
function NuCtlMemo() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sItr;
		var v_sProp;
		var v_sReq;
		var v_sType;
		var v_sValue;
		var v_objTxtArea;
		var v_oLbl;
		var v_oTxtArea;
		v_sValue = this.getValue();
		v_sValue = (v_sValue ? v_sValue : "");
		v_objTxtArea = NuElement.create("textarea");
		v_sReq = this._aProps[NuCtl.c_SPROP_REQUIRED];
		v_sReq = (v_sReq ? v_sReq : "");
		v_sType = this.getProperty(NuCtl.c_SPROP_TYPE);
		v_oTxtArea = {
			rows : "10",
			cols : "40",
			wrap : "OFF",
			id : "N_" + this.getName(),
			name : "N_" + this.getName(),
			v_sProp : this.getProperty(NuCtl.c_SPROP_CANCHANGE),
			required : v_sReq,
			nutype : v_sType,
			"class" : "ctl"
		};
		v_sProp = this.getProperty(NuCtl.c_SPROP_CANCHANGE);
		if ((v_sProp) && (v_sProp == "No")) {
			NuElement.setAttribute(v_objTxtArea, "readonly", "YES");
		}
		for (v_sItr in v_oTxtArea) {
			if (v_oTxtArea[v_sItr] && v_oTxtArea[v_sItr] != "") {
				switch(v_sItr) {
				case "rows":
				case "cols":
				case "wrap":
				case "id":
				case "required":
				case "nutype":
				case "class":
				case "name":
					NuElement.createAttribute(v_sItr, v_oTxtArea[v_sItr], v_objTxtArea);
					break;
				case "v_sProp":
					if ((v_oTxtArea[v_sItr]) && (v_oTxtArea[v_sItr] == "No")) {
						NuElement.createAttribute("readonly", "YES", v_objTxtArea);
					}
				default:
					break;
				}
			}
		}
		v_objTxtArea.value = v_sValue;
		v_objTxtArea.innerHTML = v_sValue;
		v_objTxtArea ? NuXmlJson.addChild(prm_elemBase, v_objTxtArea) : 0; /*Add Control If Exists*/
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_MEMO;
	}
	/**
	 * setProperty
	 */
	this.setProperty = function(prm_sProp, prm_sValue) {
		var v_obj;
		this._setProperty(prm_sProp, prm_sValue);
		if (prm_sProp == NuCtl.c_SPROP_VAL) {
			v_obj = this._loadObject();
			if (v_obj) {
				v_obj = v_obj.getElementsByTagName("textarea");
				if (v_obj) {
					v_obj = v_obj[0];
					v_obj.value = prm_sValue;
				}
			}
		}
	}
}
NuCtlMemo.prototype = new NuCtl();
/**
 * NuCtlMenu Object
 */
function NuCtlMenu() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_i;
		var v_iCnt;
		var v_sLayout;
		var v_sVal;
		var v_aSubMenus;
		var v_elemItem;
		var v_elemLink;
		var v_objMenu;
		v_sLayout = this.getProperty(NuCtl.c_SPROP_LAYOUT);
		v_aSubMenus = this.getProperty(NuCtl.c_SPROP_SUBMENU);
		if (v_aSubMenus) {
			this._elementCtl = NuElement.create("ul", prm_elemBase);
			NuElement.setAttribute(this._elementCtl, "class", "menu_list");
			v_iCnt = v_aSubMenus.length;
			for (v_i = 0; v_i < v_iCnt; v_i++) {
				v_objMenu = v_aSubMenus[v_i];
				if (v_objMenu) {
					v_sVal = v_objMenu.getValue();
					v_elemItem = NuElement.create("li", this._elementCtl);
					NuElement.setAttribute(v_elemItem, "class", "menu_item");
					v_elemLink = NuElement.create("a", v_elemItem);
					NuElement.setAttribute(v_elemLink, "href", "#");
					NuElement.setAttribute(v_elemLink, "class", "menu_link");
					NuElement.setContent(v_elemLink, v_sVal);
				}
			}
		}
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_MENU;
	}
	/**
	 * setProperty
	 */
	this.setProperty = function(prm_sProp, prm_object) {
		var v_i;
		var v_iCnt;
		var v_aItems;
		var v_objItem;
		if (prm_sProp == NuCtl.c_SPROP_SUBMENU) {
			v_aItems = [];
			if (prm_object instanceof Array) {
				v_iCnt = prm_object.length;
				for (v_i = 0; v_i < v_iCnt; v_i++) {
					v_objItem = prm_object[v_i];
					v_aItems.push(NuCtl.create(v_objItem, this));
				}
			} else {
				v_aItems.push(NuCtl.create(prm_object, this));
			}
			this._setProperty(prm_sProp, v_aItems);
		} else {
			this._setProperty(prm_sProp, prm_object);
		}
	}
}
NuCtlMenu.prototype = new NuCtl();
/**
 * NuCtlMoney Object
 */
function NuCtlMoney() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sClass;
		var v_sItr;
		var v_sName;
		var v_sProp;
		var v_sReadonly;
		var v_sType;
		var v_sbStyle;
		var v_objEvents;
		var v_objEvtOnChange;
		var v_objEvtOnClick;
		var v_objPrpEvents;
		var v_objPrpStyles;
		var v_objStyles;
		var v_oDOMNode;
		var v_oDOMNodeAttrib;
		var v_oMny = {};
		var v_oParent;
		/*Pre-Requisites*/
		v_sType = this.getProperty(NuCtl.c_SPROP_TYPE);
		v_sClass = "ctl";
		v_sProp = this.getProperty(NuCtl.c_SPROP_READONLY);
		if ((v_sProp) && (v_sProp.toLowerCase() == "yes")) {
			v_sClass = "ctl ctl_ReadOnly";
			v_sReadonly = "YES";
		}
		v_sbStyle = new StringBuffer();
		v_objStyles = this.getProperty(NuCtl.c_SPROP_STYLE);
		for (v_objPrpStyles in v_objStyles) {
			if (v_objStyles[v_objPrpStyles] && v_objStyles[v_objPrpStyles] != "") {
				v_sbStyle.append(v_objPrpStyles + ':' + v_objStyles[v_objPrpStyles] + ';');
			}
		}
		v_objEvents = this.getProperty(NuCtl.c_SPROP_EVENTS);
		for (v_objPrpEvents in v_objEvents) {
			if (v_objEvents[v_objPrpEvents] && v_objEvents[v_objPrpEvents] != "") {
				switch (v_objPrpEvents) {
				case NuEvent.c_SEVENT_ONCHANGE:
					v_objEvtOnChange = NuView.Document.onChange;
					break;
				case NuEvent.c_SEVENT_ONCLICK:
					v_objEvtOnClick = NuView.Document.onClick;
					break;
				default:
					break;
				}
			}
		}
		v_sName = this.getName();
		v_oMny = {
			size : 6,
			type : NuCtl.c_STYPE_TEXT,
			id : "N_" + this.getName(),
			name : "N_" + this.getName(),
			value : this.getValue(),
			"class" : v_sClass,
			readonly : v_sReadonly,
			nutype : v_sType,
			style : v_sbStyle.toString(),
			onchange : v_objEvtOnChange,
			onclick : v_objEvtOnClick
		};
		v_oDOMNode = NuElement.create("input");
		for (v_sItr in v_oMny) {
			if (v_oMny[v_sItr] && v_oMny[v_sItr] != "") {
				switch(v_sItr) {
				case "size":
				case "type":
				case "id":
				case "name":
				case "value":
				case "class":
				case "readonly":
				case "nutype":
				case "style":
				case "onchange":
				case "onclick":
					NuElement.createAttribute(v_sItr, v_oMny[v_sItr], v_oDOMNode);
					break;
				default:
					/*Todo: Any Error Checking Code could be written here*/
					break;
				}
			}
		}
		v_oParent = prm_elemBase;
		v_oDOMNode ? NuXmlJson.addChild(v_oParent, v_oDOMNode) : 0; /*Add Control If Exists*/
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_MONEY;
	}
}
NuCtlMoney.prototype = new NuCtl();
/**
 * NuCtlMultiselect Object
 */
function NuCtlMultiselect() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sProp;
		var v_elemCol;
		var v_elemItem;
		var v_elemRow;
		this._createHidden(prm_elemBase);
		this._elementCtl = NuElement.create("table", prm_elemBase);
		v_elemRow = NuElement.create("tr", this._elementCtl);
		v_elemCol = NuElement.create("td", v_elemRow);
		NuElement.setAttribute(v_elemCol, "valign", "TOP");
		v_elemItem = NuElement.create("select", v_elemCol);
		NuElement.setAttribute(v_elemItem, "size", "5");
		v_elemCol = NuElement.create("td", v_elemRow);
		NuElement.setAttribute(v_elemCol, "valign", "CENTER");
		v_elemItem = NuElement.create("img", v_elemCol);
		NuElement.setAttribute(v_elemItem, "src", "Themes/Df/Images/RArrow.gif");
		v_elemItem = NuElement.create("br", v_elemCol);
		v_elemItem = NuElement.create("img", v_elemCol);
		NuElement.setAttribute(v_elemItem, "src", "Themes/Df/Images/LArrow.gif");
		v_elemCol = NuElement.create("td", v_elemRow);
		NuElement.setAttribute(v_elemCol, "valign", "TOP");
		v_elemItem = NuElement.create("select", v_elemCol);
		NuElement.setAttribute(v_elemItem, "size", "5");
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_MULTISELECT;
	}
}
NuCtlMultiselect.prototype = new NuCtl();
/**
 * NuCtlNumber Object
 */
function NuCtlNumber() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sClass;
		var v_sItr;
		var v_sName;
		var v_sProp;
		var v_sReadonly;
		var v_sType;
		var v_objEvents;
		var v_objEvtOnChange;
		var v_objEvtOnClick;
		var v_objPrpEvents;
		var v_objPrpStyles;
		var v_objStyles;
		var v_oDOMNode;
		var v_oDOMNodeAttrib;
		var v_oNum = {};
		var v_oParent;
		var v_sbStyle;
		/*Pre-Requisites*/
		v_sType = this.getProperty(NuCtl.c_SPROP_TYPE);
		v_sClass = "ctl";
		v_sProp = this.getProperty(NuCtl.c_SPROP_READONLY);
		if ((v_sProp) && (v_sProp.toLowerCase() == "yes")) {
			v_sClass = "ctl ctl_ReadOnly";
			v_sReadonly = "YES";
		}
		v_sbStyle = new StringBuffer();
		v_objStyles = this.getProperty(NuCtl.c_SPROP_STYLE);
		for (v_objPrpStyles in v_objStyles) {
			if (v_objStyles[v_objPrpStyles] && v_objStyles[v_objPrpStyles] != "") {
				v_sbStyle.append(v_objPrpStyles + ':' + v_objStyles[v_objPrpStyles] + ';');
			}
		}
		v_objEvents = this.getProperty(NuCtl.c_SPROP_EVENTS);
		for (v_objPrpEvents in v_objEvents) {
			if (v_objEvents[v_objPrpEvents] && v_objEvents[v_objPrpEvents] != "") {
				switch (v_objPrpEvents) {
				case NuEvent.c_SEVENT_ONCHANGE:
					v_objEvtOnChange = NuView.Document.onChange;
					break;
				case NuEvent.c_SEVENT_ONCLICK:
					v_objEvtOnClick = NuView.Document.onClick;
					break;
				default:
					break;
				}
			}
		}
		v_sName = this.getName();
		v_oNum = {
			type : NuCtl.c_STYPE_TEXT,
			id : "N_" + this.getName(),
			name : "N_" + this.getName(),
			value : this.getValue(),
			"class" : v_sClass,
			readonly : v_sReadonly,
			nutype : v_sType,
			style : v_sbStyle.toString(),
			onchange : v_objEvtOnChange,
			onclick : v_objEvtOnClick,
			size : 6
		};
		v_oDOMNode = NuElement.create("input");
		for (v_sItr in v_oNum) {
			if (v_oNum[v_sItr] && v_oNum[v_sItr] != "") {
				switch(v_sItr) {
				case "type":
				case "id":
				case "value":
				case "class":
				case "readonly":
				case "nutype":
				case "style":
				case "onchange":
				case "onclick":
				case "name":
				case "size":
					NuElement.createAttribute(v_sItr, v_oNum[v_sItr], v_oDOMNode);
					break;
				default:
					/*Todo: Any Error Checking Code could be written here*/
					break;
				}
			}
		}
		v_oParent = prm_elemBase;
		v_oDOMNode ? NuXmlJson.addChild(v_oParent, v_oDOMNode) : 0; /*Add Control If Exists*/
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_NUMBER;
	}
}
NuCtlNumber.prototype = new NuCtl();
/**
 * NuCtlPagebreak Object
 */
function NuCtlPagebreak() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		this._elementCtl = NuElement.create("hr", prm_elemBase);
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_PAGEBREAK;
	}
}
NuCtlPagebreak.prototype = new NuCtl();
/**
 * NuCtlPanel Object
 */
function NuCtlPanel() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_i;
		var v_iCnt;
		var v_arrSection;
		var v_ctl;
		var v_elemCol;
		var v_elemRow;
		var v_elemTmp;
		var v_parent;
		v_parent = this.getParent();
		this._elementCtl = NuElement.create("table", prm_elemBase);
		if ((v_parent) && (v_parent.getType)) {
			NuElement.setAttribute(this._elementCtl, "width", "100%");
		}
		v_arrSection = this.getProperty(NuCtl.c_SPROP_HEADER);
		if (v_arrSection) {
			v_elemRow = NuElement.create("tr", this._elementCtl);
			v_elemCol = NuElement.create("td", v_elemRow);
			NuElement.setAttribute(v_elemCol, "valign", "TOP");
			v_elemTmp = NuElement.create("table", v_elemCol);
			NuElement.setAttribute(v_elemTmp, "width", "100%");
			v_elemTmp = NuElement.create("tr", v_elemTmp);
			v_elemTmp = NuElement.create("td", v_elemTmp);
			v_iCnt = v_arrSection.length;
			for (v_i = 1; v_i < v_iCnt; v_i++) {
				v_ctl = v_arrSection[v_i];
				if (v_ctl) {
					v_ctl.draw(v_elemTmp);
				}
			}
		}
		v_elemRow = NuElement.create("tr", this._elementCtl);
		v_elemCol = NuElement.create("td", v_elemRow);
		NuElement.setAttribute(v_elemCol, "valign", "TOP");
		v_elemTmp = NuElement.create("table", v_elemCol);
		NuElement.setAttribute(v_elemTmp, "width", "100%");
		v_elemRow = NuElement.create("tr", v_elemTmp);
		v_arrSection = this.getProperty(NuCtl.c_SPROP_MARGINLEFT);
		if (v_arrSection) {
			v_elemCol = NuElement.create("td", v_elemRow);
			NuElement.setAttribute(v_elemCol, "valign", "TOP");
			v_iCnt = v_arrSection.length;
			for (v_i = 1; v_i < v_iCnt; v_i++) {
				v_ctl = v_arrSection[v_i];
				if (v_ctl) {
					v_ctl.draw(v_elemCol);
				}
			}
		}
		v_arrSection = this.getProperty(NuCtl.c_SPROP_BODY);
		if (v_arrSection) {
			v_elemCol = NuElement.create("td", v_elemRow);
			NuElement.setAttribute(v_elemCol, "valign", "TOP");
			v_iCnt = v_arrSection.length;
			for (v_i = 1; v_i < v_iCnt; v_i++) {
				v_ctl = v_arrSection[v_i];
				if (v_ctl) {
					v_ctl.draw(v_elemCol);
				}
			}
		}
		v_arrSection = this.getProperty(NuCtl.c_SPROP_MARGINRIGHT);
		if (v_arrSection) {
			v_elemCol = NuElement.create("td", v_elemRow);
			NuElement.setAttribute(v_elemCol, "valign", "TOP");
			v_iCnt = v_arrSection.length;
			for (v_i = 1; v_i < v_iCnt; v_i++) {
				v_ctl = v_arrSection[v_i];
				if (v_ctl) {
					v_ctl.draw(v_elemCol);
				}
			}
		}
		v_arrSection = this.getProperty(NuCtl.c_SPROP_FOOTER);
		if (v_arrSection) {
			v_elemRow = NuElement.create("tr", this._elementCtl);
			v_elemCol = NuElement.create("td", v_elemRow);
			NuElement.setAttribute(v_elemCol, "valign", "TOP");
			v_elemTmp = NuElement.create("table", v_elemCol);
			NuElement.setAttribute(v_elemTmp, "width", "100%");
			v_elemRow = NuElement.create("tr", v_elemTmp);
			v_elemCol = NuElement.create("td", v_elemRow);
			v_iCnt = v_arrSection.length;
			for (v_i = 1; v_i < v_iCnt; v_i++) {
				v_ctl = v_arrSection[v_i];
				if (v_ctl) {
					v_ctl.draw(v_elemCol);
				}
			}
		}
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_PANEL;
	}
	/**
	 * setProperty
	 */
	this.setProperty = function(prm_sProp, prm_object) {
		var v_arrItems;
		var v_arrSource;
		var v_objItem;
		var v_objSectionProps;
		if (NuStr.locate(prm_sProp, [NuCtl.c_SPROP_HEADER, NuCtl.c_SPROP_BODY, NuCtl.c_SPROP_FOOTER, NuCtl.c_SPROP_MARGINLEFT, NuCtl.c_SPROP_MARGINRIGHT])) {
			if (prm_object instanceof Array) {
				v_arrSource = prm_object;
			} else {
				v_arrSource = [prm_object];
			}
			v_objSectionProps = {};
			v_arrItems = [v_objSectionProps];
			v_iCnt = v_arrSource.length;
			for (v_i = 0; v_i < v_iCnt; v_i++) {
				v_objItem = v_arrSource[v_i];
				if (v_objItem) {
					if (v_objItem[NuCtl.c_SPROP_TYPE]) {
						v_arrItems.push(NuCtl.create(v_objItem, this));
					} else if (v_objItem[NuCtl.c_SPROP_STYLE]) {
						v_objSectionProps[NuCtl.c_SPROP_STYLE] = v_objItem[NuCtl.c_SPROP_STYLE];
					} else {
						v_arrItems.push(NuCtl.create(v_objItem, this));
					}
				}
			}
			this._setProperty(prm_sProp, v_arrItems);
		} else {
			this._setProperty(prm_sProp, prm_object);
		}
	}
}
NuCtlPanel.prototype = new NuCtl();
/**
 * NuCtlPassword Object
 */
function NuCtlPassword() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sFld;
		var v_sItr;
		var v_sName;
		var v_sProp;
		var v_sReadonly;
		var v_sReq;
		var v_sType;
		var v_sbStyle;
		var v_objEvents;
		var v_objPrpEvents;
		var v_objPrpStyles;
		var v_oDOMNode;
		var v_oDOMNodeAttrib;
		var v_oLbl;
		var v_oParent;
		var v_oPwd = {};
		var v_oTmp;
		/*Pre-Requisites*/
		v_sFld = this.getProperty(NuCtl.c_SPROP_FIELD);
		v_sFld = (v_sFld ? v_sFld : "");
		v_sType = this.getProperty(NuCtl.c_SPROP_TYPE);
		v_sProp = this.getProperty(NuCtl.c_SPROP_READONLY);
		if ((v_sProp) && (v_sProp.toLowerCase() == "yes")) {
			v_sClass += "ctl_ReadOnly";
			v_sReadonly = "YES";
		}
		v_sName = this.getName();
		v_sReq = this._aProps[NuCtl.c_SPROP_REQUIRED];
		v_sReq = (v_sReq ? v_sReq : "");
		v_oPwd = {
			size : 10,
			type : NuCtl.c_STYPE_PASSWORD,
			id : "N_" + this.getName(),
			name : "N_" + this.getName(),
			value : this.getValue(),
			readonly : v_sReadonly,
			nutype : v_sType,
			fld : v_sFld,
			required : v_sReq,
			"class" : "ctl"
		};
		v_oDOMNode = NuElement.create("input");
		for (v_sItr in v_oPwd) {
			if (v_oPwd[v_sItr] && v_oPwd[v_sItr] != "") {
				switch(v_sItr) {
				case "size":
				case "type":
				case "id":
				case "name":
				case "value":
				case "class":
				case "readonly":
				case "nutype":
				case "style":
				case "fld":
				case "required":
				case "class":
					NuElement.createAttribute(v_sItr, v_oPwd[v_sItr], v_oDOMNode);
					break;
				default:
					/*Todo: Any Error Checking Code could be written here*/
					break;
				}
			}
		}
		v_oParent = prm_elemBase;
		v_oDOMNode ? NuXmlJson.addChild(v_oParent, v_oDOMNode) : 0; /*Add Control If Exists*/
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_PASSWORD;
	}
}
NuCtlPassword.prototype = new NuCtl();
/**
 * NuCtlRadio Object
 */
function NuCtlRadio() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_iColCnt;
		var v_iRowCnt;
		var v_sPropLbl;
		var v_sThisVal;
		var v_sVal;
		var v_oAttrChecked;
		var v_oAttrType;
		var v_objSection;
		var v_oDatasource;
		var v_oLbl;
		var v_oParent;
		var v_oTable;
		var v_oTag;
		var v_oTbody;
		var v_oTd;
		var v_oTr;
		v_oDatasource = this.datasourceOpen(NuCtl.c_SPROP_BODY);
		if (v_oDatasource) {
			v_iRowCnt = v_oDatasource.getRowCount();
			v_iColCnt = v_oDatasource.getColumnCount();
		} else {
			v_iRowCnt = 0;
			v_iColCnt = 0;
		}
		v_sPropLbl = this.getProperty(NuCtl.c_SPROP_LBL);
		v_sPropLbl = (v_sPropLbl ? v_sPropLbl : "");
		v_sVal = this.getProperty(NuCtl.c_SPROP_VAL);
		v_oParent = prm_elemBase;
		v_oLbl = NuElement.create("td");
		v_oLbl.innerHTML = v_sPropLbl;
		v_oParent.appendChild(v_oLbl);
		v_oTable = NuElement.create("table");
		v_oParent.appendChild(v_oTable);
		v_objSection = this.getProperty(NuCtl.c_SPROP_BODY);
		if (v_objSection) {
			v_oTbody = NuElement.create("tBody");
			v_oTable.appendChild(v_oTbody);
			for (v_iRowIdx = 1; v_iRowIdx <= v_iRowCnt; v_iRowIdx++) {
				v_oTr = NuElement.create("tr");
				v_oTd = NuElement.create("td");
				v_oTag = NuElement.create("input");
				NuElement.createAttribute("type", this.getType());
				v_sThisVal = v_objSection.getCol(v_iRowIdx, 1);
				if ((v_sVal) && (v_sVal == v_sThisVal)) {
					NuElement.createAttribute("checked", "Yes", v_oAttrType);
				}
				v_oTag.setAttributeNode(v_oAttrType);
				NuElement.addElement(v_oTag, v_oTd);
				NuElement.addElement(v_oTd, v_oTr);
				NuElement.addElement(v_oTr, v_oTbody);
				v_oTr = NuElement.create("tr");
				v_oTd = NuElement.create("td");
				v_oTd.innerHTML = v_sThisVal;
				NuElement.addElement(v_oTd, v_oTr);
				NuElement.addElement(v_oTr, v_oTbody);
			}
		}
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_RADIO;
	}
}
NuCtlRadio.prototype = new NuCtl();
/**
 * NuCtlRichtext Object
 */
function NuCtlRichtext() {
	this._isEditorLoaded = false;
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_RICHTEXT;
	}
	/**
	 * getValue
	 */
	this.getValue = function() {
		var v_Return;
		v_Return = NuStr.replace(NuCtlRichtext._objDojo.getEditorContent(), "<", "[LT]");
		v_Return = NuStr.replace(v_Return, ">", "[GT]");
		return v_Return;
	}
	/**
	 * setValue
	 */
	this.setValue = function(prm_object) {
		if (this._isLoaded && NuCtlRichtext._objDojo) {
			NuCtlRichtext._objDojo.replaceEditorContent(prm_object);
		} else {
			this._setValue(prm_object);
			dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad", this, "refresh");
		}
	}
	/**
	 * validate
	 */
	this.validate = function(prm_sProp, prm_msgs) {
		var v_Return;
		var v_sId;
		var v_sVal;
		var v_element;
		switch (prm_sProp) {
		case NuCtl.c_SPROP_REQUIRED:
			v_sId = this.getId();
			v_element = NuElement.getById("N_" + v_sId.substring(2));
			v_element.value = this.getValue();
			break;
		}
		this._validate();
		return v_Return;
	}
}
NuCtlRichtext.prototype = new NuCtl();
	/// static methods
	/**
	 * createEditor
	 */
	NuCtlRichtext.createEditor = function (prm_sDiv) {
		var v_sDivHtml;
		v_sDivHtml = NuElement.getHtmlById(prm_sDiv);
		v_sDivHtml = NuStr.replace(v_sDivHtml, "[LT]", "<");
		v_sDivHtml = NuStr.replace(v_sDivHtml, "[GT]", ">");
		v_sDivHtml = NuStr.replace(v_sDivHtml, "&amp;", "&");
		NuElement.setHtmlById(prm_sDiv, v_sDivHtml);
		NuCtlRichtext._objDojo = dojo.widget.createWidget("Editor2", {}, dojo.byId(prm_sDiv));
	}
/**
 * NuCtlTabset Object
 */
function NuCtlTabset() {
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_TABSET;
	}
}
NuCtlTabset.prototype = new NuCtl();
/**
 * NuCtlText Object
 */
function NuCtlText() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sFld;
		var v_sFormat;
		var v_sItr;
		var v_sMaxLength;
		var v_sName;
		var v_sOnChange;
		var v_sOnClick;
		var v_sPer;
		var v_sProp;
		var v_sReadOnly;
		var v_sReq;
		var v_sValue;
		var v_objEvents;
		var v_oDOMNode;
		var v_oDOMNodeAttrib;
		var v_oLbl;
		var v_oParent;
		var v_oPct;
		var v_oStyle = {};
		var v_oTmp;
		var v_oTxt = {};
		/*Pre-Requisites*/
		v_sMaxLength = this.getProperty(NuCtl.c_SPROP_LEN);
		v_sMaxLength = (v_sMaxLength ? v_sMaxLength : "");
		if (v_sMaxLength != "") {
			v_oStyle["width"] = v_sMaxLength + "ex";
		}
		v_sFld = this.getProperty(NuCtl.c_SPROP_FIELD);
		v_sFld = (v_sFld ? v_sFld : "");
		v_sReq = this._aProps[NuCtl.c_SPROP_REQUIRED];
		v_sReq =  (v_sReq ? v_sReq : "");
		v_sProp = this.getProperty(NuCtl.c_SPROP_VAL);
		v_sProp = (v_sProp ? v_sProp : ""); /* InCase the v_sProp is undefined set it to ""*/
		v_sValue = this.getValue();
		v_sValue = (v_sValue ? v_sValue : "");
		v_sReadOnly = this.getProperty(NuCtl.c_SPROP_READONLY);
		v_sFormat = this.getProperty(NuCtl.c_SPROP_FORMAT);
		if (v_sFormat) {
			v_sFormat = v_sFormat.toLowerCase();
		} else {
			v_sFormat = "noformat";
		}
		if (v_sReadOnly && v_sReadOnly.toLowerCase() == "yes") {
			v_sReadOnly = "Yes";
			v_sFormat += " ctl_ReadOnly";
		} else {
			v_sReadOnly = null;
		}
		if (!v_sFormat) {
		} else if (v_sFormat.toLowerCase() == "percent") {
			v_sMaxLength = "3";
			v_oStyle["width"] = v_sMaxLength + "ex";
			v_sPer = "%";
		}
		v_sName = this.getName();
		v_objEvents = this.getProperty(NuCtl.c_SPROP_EVENTS);
		for (v_sProp in v_objEvents) {
			if (v_objEvents[v_sProp]) {
				switch (v_sProp) {
				case NuEvent.c_SEVENT_ONCHANGE:
					v_sOnChange = NuView.Document.onChange;
					break;
				case NuEvent.c_SEVENT_ONCLICK:
					v_sOnClick = NuView.Document.onClick;
					break;
				default:
					break;
				}
			}
		}
		v_oTxt = {
			type : NuCtl.c_STYPE_TEXT,
			id : "N_" + v_sName,
			name : "N_" + v_sName,
			value : v_sValue,
			readonly : v_sReadOnly,
			maxlength : v_sMaxLength,
			"class" : ("text_" + v_sFormat),
			percentage : v_sPer,
			fld : v_sFld,
			required : v_sReq,
			style : v_oStyle,
			"onchange" : v_sOnChange,
			"onclick" : v_sOnClick
		};
		v_oDOMNode = NuElement.create("input");
		for (v_sItr in v_oTxt) {
			if (v_oTxt[v_sItr] && v_oTxt[v_sItr] != "") {
				switch(v_sItr) {
				case "readonly":
				case "maxlength":
				case "class":
				case "type":
				case "id":
				case "value":
				case "fld":
				case "required":
				case "onchange":
				case "onclick":
				case "name":
					NuElement.createAttribute(v_sItr, v_oTxt[v_sItr], v_oDOMNode);
					break;
				case "percentage":
					v_oPct = NuElement.create("span");
					v_oPct.innerHTML = v_oTxt[v_sItr];
					break;
				case "style":
					for (v_objStyle in v_oTxt[v_sItr]) {
						v_oDOMNode.style[v_objStyle] = v_oTxt[v_sItr][v_objStyle];
					}
					break;
				default:
					/*Todo: Any Error Checking Code could be written here*/
					break;
				}
			}
		}
		v_oParent = prm_elemBase;
		v_oDOMNode ? NuXmlJson.addChild(v_oParent, v_oDOMNode) : 0; /*Add Control If Exists*/
		v_oPct ? NuXmlJson.addChild(v_oParent, v_oPct) : 0; /*Add Percentage If Exists*/
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_TEXT;
	}
}
NuCtlText.prototype = new NuCtl();
/**
 * NuCtlTree Object
 */
function NuCtlTree() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_elemCtl;
		this._elementCtl = NuElement.create("span", prm_elemBase);
		NuElement.setAttribute(this._elementCtl, "id", v_sId);
		NuElement.setAttribute(this._elementCtl, "class", "flowShell");
		v_tblBranches = this.getVariable("branches");
		if (v_tblBranches) {
			v_iCnt = v_tblBranches.getCount();
			for (v_i = 1; v_i <= v_iCnt; v_i++) {
				v_object = v_tblBranches.getByNum(v_i);
				v_object.createHtml(this._elementCtl);
			}
		}
	}
}
NuCtlTree.prototype = new NuCtl();
/**
 * NuCtlWhiteboard Object
 */
function NuCtlWhiteboard() {
	this._aflax;
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_iHeight;
		var v_iLeft;
		var v_iWidth;
		var v_iTop;
//		v_iLeft = 0;
//		v_iTop = 0;
//		v_iLeft = this.getStyle(NuCtl.c_SSTYLE_LEFT);
//		v_iTop = this.getStyle(NuCtl.c_SSTYLE_TOP);
		v_iHeight = this.getStyle(NuCtl.c_SSTYLE_HEIGHT);
		if (!v_iHeight) v_iHeight = 400;
		v_iWidth = this.getStyle(NuCtl.c_SSTYLE_WIDTH);
		if (!v_iWidth) v_iWidth = 550;
		this._aflax = new AFLAX("Common/Aflax/Whiteboard.swf");
		NuElement.setContent(prm_elemBase, this._aflax.getHTML(v_iWidth, v_iHeight, null, null, true, false));
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_WHITEBOARD;
	}
}
NuCtlWhiteboard.prototype = new NuCtl();
/**
 * NuCtlWiki Object
 */
function NuCtlWiki() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
		var v_sStar;
		var v_sVal;
		this._loadObject();
		v_sVal = this.getValue();
		if (v_sVal instanceof Array) {
			v_sVal = v_sVal.join("\n") + "\n";
		}
		if (v_sVal) {
			v_sStar = "\\*";
			// Paragraph Replacement
			v_sVal = NuStr.replaceRegEx(v_sVal, '\r\n', '\n');
			v_sVal = NuStr.replaceRegEx(v_sVal, '\n([A-Z].*)?\n(?=\n)', '\n<p>$1</p>\n\n');
			// Header 3
			v_sVal = NuStr.replaceRegEx(v_sVal, '^===(.*)?===$', '<h3>$1</h3>');
			// Header 2
			v_sVal = NuStr.replaceRegEx(v_sVal, '^==(.*)?==$', '<h2>$1</h2>');
			// 1 Bullet Start
			v_sVal = NuStr.replaceRegEx(v_sVal, '^([^' + v_sStar + '].*)?\n' + v_sStar, '$1\n<ul>\n\*');
			// 2 Bullet Start
			v_sVal = NuStr.replaceRegEx(v_sVal, '^(' + v_sStar + ' .*)?\n' + v_sStar + '{2}', '$1\n  <ul>\n\*\*');
			// 3 Bullet Start
			v_sVal = NuStr.replaceRegEx(v_sVal, '^(' + v_sStar + '{2} .*)?\n' + v_sStar + '{3}', '$1\n    <ul>\n\*\*\*');
			// 4 Bullet Start
			v_sVal = NuStr.replaceRegEx(v_sVal, '^(' + v_sStar + '{3} .*)?\n' + v_sStar + '{4}', '$1\n      <ul>\n\*\*\*\*');
			// 1 Bullet End with New Line
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + ' (.*)?\n\n', '\* $1\n  </ul>\n\n');
			// 1 Bullet End with Text
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + ' (.*)?\n(?=<p>)', '\* $1\n</ul>\n');
			// 2 Bullet End 1 level
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{2} (.*)?\n(?=' + v_sStar + ' )', '\*\* $1\n  </ul>\n');
			// 2 Bullet End with New Line
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{2} (.*)?\n\n', '\*\* $1\n  </ul>\n</ul>\n\n');
			// 2 Bullet End with Text
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{2} (.*)?\n(?=<p>)', '\*\* $1\n  </ul>\n</ul>\n');
			// 3 Bullet End 1 level
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{3} (.*)?\n(?=' + v_sStar + '{2} )', '\*\*\* $1\n    </ul>\n');
			// 3 Bullet End 2 levels
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{3} (.*)?\n(?=' + v_sStar + '{1} )', '\*\*\* $1\n    </ul>\n  </ul>\n');
			// 3 Bullet End with New Line
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{3} (.*)?\n\n', '\*\* $1\n    </ul>\n  </ul>\n</ul>\n\n');
			// 3 Bullet End with Text
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{3} (.*)?\n(?=<p>)', '\*\*\* $1\n    </ul>\n  </ul>\n</ul>\n');
			// 4 Bullet End 1 level
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{4} (.*)?\n(?=' + v_sStar + '{3} )', '\*\*\*\* $1\n      </ul>\n');
			// 4 Bullet End 2 levels
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{4} (.*)?\n(?=' + v_sStar + '{2} )', '\*\*\*\* $1\n      </ul>\n    </ul>\n  </ul>\n');
			// 4 Bullet End 3 levels
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{4} (.*)?\n(?=' + v_sStar + '{1} )', '\*\*\*\* $1\n      </ul>\n    </ul>\n  </ul>\n</ul>\n');
			// 4 Bullet End with New Line
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{4} (.*)?\n\n', '\*\* $1\n      </ul>\n    </ul>\n  </ul>\n</ul>\n\n');
			// 4 Bullet End with Text
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{4} (.*)?\n(?=<p>)', '\*\*\*\* $1\n      </ul>\n    </ul>\n  </ul>\n</ul>\n');
			// Simple Bullet Replacement
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + ' (.*)?', '  <li>$1</li>');
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{2} (.*)?', '    <li>$1</li>');
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{3} (.*)?', '      <li>$1</li>');
			v_sVal = NuStr.replaceRegEx(v_sVal, '^' + v_sStar + '{4} (.*)?', '        <li>$1</li>');
			// Link Replacement
			v_sVal = NuStr.replaceRegEx(v_sVal, '\\[{2}(.*) \\| (.*)\\]{2}', '<a href="WrkFlw.asp?F_NavForm=Hlp\&F_Obj=\$1">\$2</a>');
			NuElement.setContent(prm_elemBase, v_sVal);
		}
	}
	/**
	 * getType
	 */
	this.getType = function() {
		return NuCtl.c_STYPE_WIKI;
	}
}
NuCtlWiki.prototype = new NuCtl();
/**
 * NuCtlWindow Object
 */
function NuCtlWindow() {
	/**
	 * createHtml
	 */
	this.createHtml = function(prm_elemBase) {
	}
}
NuCtlWindow.prototype = new NuCtl();

//NuXmlJson.run();
