// MVRZ stuff
///MVRZ = new Object();
///MVRZ.data = new Object();
///MVRZ.data.object = new Object(); // Array of dataObjectIndex - server return info
var MVRZ_DISPLAY_TYPE_EDIT_SINGLE = 0;
var MVRZ_DISPLAY_TYPE_EDIT_MULTI = 1;
function msg(sText, category, source) {
if(typeof(category)=='undefined') category = 'ldbg';
if(typeof(source)=='undefined') source = 'LDebug';
YAHOO.log(sText, category, source);
}
function userMsg(sText) {
msg('userMsg()');
el = document.getElementById(gStatusId);
if(typeof(el)!='undefined') el.innerHTML = "
"+sText+"
";
if(sText.length) {
el.style.backgroundColor = '#ff3333';
} else {
el.style.backgroundColor = '#ffffff';
}
//anim.animate();
}
function userInputMsg(sText) {
msg('userMsg()');
el = document.getElementById(gInputStatusId);
if(typeof(el)!='undefined') el.innerHTML = ""+sText+"
";
if(sText.length) {
el.style.backgroundColor = '#ff3333';
} else {
el.style.backgroundColor = '#ffffff';
}
//anim.animate();
}
var helpTimer;
function helpOn(e) {
if(!e) return;
oTarget = YAHOO.util.Event.getTarget(e, 1);
if(oTarget==null) {
msg('helpOn - failed, no oTarget element');
return;
};
msg('helpOn(): '+oTarget.id+'/'+oTarget.tagName);
YAHOO.util.Dom.addClass(oTarget, "hover");
/*
if(oTarget.tagName=='IMG') {
oParent = YAHOO.util.Dom.getAncestorByTagName(oTarget.id, "DIV");
if (oParent != null) {
// Ensure that the tooltip is on top - find the right zIndex
var zIndex = oParent.style.zIndex;
if(typeof(zIndex)=='undefined' || zIndex == 0) zIndex = 0;
else zIndex = parseInt(zIndex)
msg("Starting with zIndex = "+zIndex);
var obj = oParent.parentNode;
while(typeof(obj)!='undefined') {
if(obj.tagName.toUpperCase()=="BODY") break;
var zT = obj.style.zIndex;
//msg("zIndex="+zT+" for tag/id="+obj.tagName+"/"+obj.id);
if (typeof(zT) != 'undefined' && zT != 0) {
zIndex = Math.max(zIndex, parseInt(zT));
}
obj = obj.parentNode;
}
zIndex++;
//msg("Setting zIndex to "+zIndex);
var tt = document.getElementById(ID_TOOLTIP);
tt.style.zIndex = zIndex;
tt.style.visibility = "visible";
oParent.className = 'helpOuterOn';
}
helpTimer = window.setTimeout(function (e, oTarget) {
showTip(e, oTarget);
},500,e, oTarget);
}
*/
}
function helpOff(e) {
if(!e) return;
oTarget = YAHOO.util.Event.getTarget(e, 1);
if(oTarget==null) {
msg('helpOff - failed, no oTarget element');
return;
};
YAHOO.util.Dom.removeClass(oTarget, "hover");
msg('helpOff(): '+oTarget.id+'/'+oTarget.tagName);
/*
window.clearTimeout(helpTimer);
hideTip();
if(oTarget.tagName=='IMG') {
oParent = YAHOO.util.Dom.getAncestorByTagName(oTarget.id, "DIV");
if(oParent != null) oParent.className = 'helpOuter';
//var tt = document.getElementById(ID_TOOLTIP);
//tt.style.visibility = "hidden";
}
*/
}
function tt(e, oInputDef) {
oTarget = YAHOO.util.Event.getTarget(e, 1);
if(oTarget==null) {
msg('tt - failed, no oTarget element');
return;
};
if(oInputDef==null) { // We've moved out
msg('tt - mouseout, resetting');
if(oTarget.tagName=='DIV') oTarget.className = 'helpOuter';
return;
};
var srcElement = e.srcElement;
//oTargetR = YAHOO.util.Event.getRelatedTarget(e, 1);
msg('tt(): '+oTarget.id+'/'+srcElement+'/'+oTarget.tagName);
var oInner = YAHOO.util.Dom.getFirstChild(oTarget.id);
if(oInner==null) oInner = oTarget;
if(oInner==null) {
msg('tt - failed, no oInner element');
return;
};
if(oTarget.tagName=='DIV') oTarget.className = 'helpOuterOn';
var myTooltip = new YAHOO.widget.Tooltip(ID_TOOLTIP, { context: oInner.id, text: getHelpText(oInputDef) } );
}
function getHelpText(oInputDef) {
var ret = '';
if(typeof(oInputDef)=='undefined') {
return ret;
}
if(oInputDef.isRequired) ret = "Required. ";
//else ret = "Optional: ";
if(typeof(oInputDef.help)=='function') {
//var oHelpContents = inputs.fields[input].help(datasetObject, inputs.fields[input], idField);
//ret += oInputDef.help();
ret += "FUNCTION";
} else {
if(typeof(oInputDef.help)!='undefined' && oInputDef.help.length) ret += oInputDef.help;
}
return ret;
}
function myFireEvent(element, sEvent) {
if (document.createEventObject){
// dispatch for IE
var evt = document.createEventObject();
return element.fireEvent('on'+sEvent, evt)
}
else{
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(sEvent, true, true ); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}
// ---------- Namespace ----------------------------------------------------
/*
if (typeof MVRZ == "undefined") {
var MVRZ = {};
}
MVRZ.namespace = function() {
var a=arguments, o=null, i, j, d;
for (i=0; i
* Note: When using IntervalCalendar, dates should not be selected or
* deselected using the 'selected' configuration property or any of the
* CalendarGroup select/deselect methods. Doing so will corrupt the internal
* state of the control. Instead, use the provided methods setInterval and
* resetInterval.
*
*
* Similarly, when handling select/deselect/etc. events, do not use the
* dates passed in the arguments to attempt to keep track of the currently
* selected interval. Instead, use getInterval.
*
*
* @namespace YAHOO.example.calendar
* @class IntervalCalendar
* @extends YAHOO.widget.CalendarGroup
* @constructor
* @param {String | HTMLElement} container The id of, or reference to, an HTML DIV element which will contain the control.
* @param {Object} cfg optional The initial configuration options for the control.
*/
function IntervalCalendar(container, cfg) {
/**
* The interval state, which counts the number of interval endpoints that have
* been selected (0 to 2).
*
* @private
* @type Number
*/
this._iState = 0;
// Must be a multi-select CalendarGroup
cfg = cfg || {};
cfg.multi_select = true;
// Call parent constructor
IntervalCalendar.superclass.constructor.call(this, container, cfg);
// Subscribe internal event handlers
/*
this.beforeSelectEvent.subscribe(this._intervalOnBeforeSelect, this, true);
this.selectEvent.subscribe(this._intervalOnSelect, this, true);
this.beforeDeselectEvent.subscribe(this._intervalOnBeforeDeselect, this, true);
this.deselectEvent.subscribe(this._intervalOnDeselect, this, true);
*/
}
/**
* Default configuration parameters.
*
* @property IntervalCalendar._DEFAULT_CONFIG
* @final
* @static
* @private
* @type Object
*/
IntervalCalendar._DEFAULT_CONFIG = YAHOO.widget.CalendarGroup._DEFAULT_CONFIG;
YAHOO.lang.extend(IntervalCalendar, YAHOO.widget.CalendarGroup, {
/**
* Returns a string representation of a date which takes into account
* relevant localization settings and is suitable for use with
* YAHOO.widget.CalendarGroup and YAHOO.widget.Calendar methods.
*
* @method _dateString
* @private
* @param {Date} d The JavaScript Date object of which to obtain a string representation.
* @return {String} The string representation of the JavaScript Date object.
*/
_dateString : function(d) {
var a = [];
a[this.cfg.getProperty(IntervalCalendar._DEFAULT_CONFIG.MDY_MONTH_POSITION.key)-1] = (d.getMonth() + 1);
a[this.cfg.getProperty(IntervalCalendar._DEFAULT_CONFIG.MDY_DAY_POSITION.key)-1] = d.getDate();
a[this.cfg.getProperty(IntervalCalendar._DEFAULT_CONFIG.MDY_YEAR_POSITION.key)-1] = d.getFullYear();
var s = this.cfg.getProperty(IntervalCalendar._DEFAULT_CONFIG.DATE_FIELD_DELIMITER.key);
return a.join(s);
},
/**
* Given a lower and upper date, returns a string representing the interval
* of dates between and including them, which takes into account relevant
* localization settings and is suitable for use with
* YAHOO.widget.CalendarGroup and YAHOO.widget.Calendar methods.
*
* Note: No internal checking is done to ensure that the lower date
* is in fact less than or equal to the upper date.
*
*
* @method _dateIntervalString
* @private
* @param {Date} l The lower date of the interval, as a JavaScript Date object.
* @param {Date} u The upper date of the interval, as a JavaScript Date object.
* @return {String} The string representing the interval of dates between and
* including the lower and upper dates.
*/
_dateIntervalString : function(l, u) {
var s = this.cfg.getProperty(IntervalCalendar._DEFAULT_CONFIG.DATE_RANGE_DELIMITER.key);
return (this._dateString(l)
+ s + this._dateString(u));
},
/**
* Returns the lower and upper dates of the currently selected interval, if an
* interval is selected.
*
* @method getInterval
* @return {Array} An empty array if no interval is selected; otherwise an array
* consisting of two JavaScript Date objects, the first being the
* lower date of the interval and the second being the upper date.
*/
getInterval : function() {
// Get selected dates
var dates = this.getSelectedDates();
if(dates.length > 0) {
// Return lower and upper date in array
var l = dates[0];
var u = dates[dates.length - 1];
return [l, u];
}
else {
// No dates selected, return empty array
return [];
}
},
/**
* Sets the currently selected interval by specifying the lower and upper
* dates of the interval (in either order).
*
* Note: The render method must be called after setting the interval
* for any changes to be seen.
*
*
* @method setInterval
* @param {Date} d1 A JavaScript Date object.
* @param {Date} d2 A JavaScript Date object.
*/
setInterval : function(d1, d2) {
// Determine lower and upper dates
var b = (d1 <= d2);
var l = b ? d1 : d2;
var u = b ? d2 : d1;
// Update configuration
this.cfg.setProperty('selected', this._dateIntervalString(l, u), false);
this._iState = 2;
},
/**
* Resets the currently selected interval.
*
* Note: The render method must be called after resetting the interval
* for any changes to be seen.
*
*
* @method resetInterval
*/
resetInterval : function() {
// Update configuration
this.cfg.setProperty('selected', [], false);
this._iState = 0;
},
/**
* Handles beforeSelect event.
*
* @method _intervalOnBeforeSelect
* @private
*/
_intervalOnBeforeSelect : function(t,a,o) {
// Update interval state
this._iState = (this._iState + 1) % 3;
if(this._iState == 0) {
// If starting over with upcoming selection, first deselect all
this.deselectAll();
this._iState++;
}
},
/**
* Handles selectEvent event.
*
* @method _intervalOnSelect
* @private
*/
_intervalOnSelect : function(t,a,o) {
// Get selected dates
var dates = this.getSelectedDates();
if(dates.length > 1) {
/* If more than one date is selected, ensure that the entire interval
between and including them is selected */
var l = dates[0];
var u = dates[dates.length - 1];
this.cfg.setProperty('selected', this._dateIntervalString(l, u), false);
}
// Render changes
this.render();
},
/**
* Handles beforeDeselect event.
*
* @method _intervalOnBeforeDeselect
* @private
*/
_intervalOnBeforeDeselect : function(t,a,o) {
if(this._iState != 0) {
/* If part of an interval is already selected, then swallow up
this event because it is superfluous (see _intervalOnDeselect) */
return false;
}
},
/**
* Handles deselectEvent event.
*
* @method _intervalOnDeselect
* @private
*/
_intervalOnDeselect : function(t,a,o) {
if(this._iState != 0) {
// If part of an interval is already selected, then first deselect all
this._iState = 0;
this.deselectAll();
// Get individual date deselected and page containing it
var d = a[0][0];
var date = YAHOO.widget.DateMath.getDate(d[0], d[1] - 1, d[2]);
var page = this.getCalendarPage(date);
if(page) {
// Now (re)select the individual date
page.beforeSelectEvent.fire();
this.cfg.setProperty('selected', this._dateString(date), false);
page.selectEvent.fire([d]);
}
// Swallow up since we called deselectAll above
return false;
}
}
});
MVRZ.util.calendar.IntervalCalendar = IntervalCalendar;
})();
}
//MVRZ.util = new Object();
MVRZ.util.getElObject = function getElObject(elOrObj) {
var ret = elOrObj;
if(typeof(elOrObj)!='object') {
ret = document.getElementById(elOrObj);
}
return ret;
}
MVRZ.util.haveConnectionsCompleted = function haveConnectionsCompleted(fnCallback, fnArg) {
//if(typeof(forceCheck)=='undefined') forceCheck = false;
//if(!forceCheck && gWaitDone) return gWaitDone;
gWaitDone = false;
//msg('fnWait():');
var loaded = true;
for(datasetName in MY) {
var loadStatus = MY[datasetName].loadStatus;
msg('fnWait():'+datasetName+' loadStatus='+loadStatus);
if(typeof(loadStatus)!='undefined' && (loadStatus != LOAD_STATUS_LOADED) && (loadStatus == LOAD_STATUS_INPROGRESS)) {
// This catches only items that are preloading
loaded = false;
}
}
if (loaded) {
MVRZ.util.event.unsubscribe(EVENT_CONNECTION_PROCESSED);
if (!gWaitDone) {// Final check
gWaitDone = true;
if (typeof(fnCallback) == 'function') {
msg('MVRZ.util.haveConnectionsCompleted: Calling fnCallback: '+fnCallback);
fnCallback(fnArg);
}
}
}
else {
//msg('fnWait() - not ready yet');
}
return gWaitDone;
}
MVRZ.util.errorHandler = function(txt, source, obj) {
YAHOO.log("errorHandler("+txt+")");
var sourceText='', errText = '';
if (typeof(txt) != 'undefined' && txt.length == 0) {
if(typeof(source) == 'undefined') return;
switch (source) {
case (YUI_ERR_SOURCE_CONNECTION):
sourceText = "Could not connect";
if (typeof(obj) != 'undefined') {
objText = obj.status + ":" + obj.statusText;
}
break;
default:
sourceText = "Unknown Error";
}
var msgText = sourceText;
if (dbg && objText.length)
msgText += "(" + objText + ")";
} else msgText = txt;
YAHOO.log('ERR TXT:'+msgText);
if(gRealIsAdmin) {
popupErr(msgText);
} else {
popupErr(MSG_SYSTEM_ERROR);
}
}
// Inputs -------------------------------------------------------------
MVRZ.util.setInputDef = function (name, inputType, label, help, isRequired, validationFunction, validationArg, optionsFunction, fnOnChange, readonly, defaultVal) {
this.name = name;
this.label = label;
this.help = help;
this.inputType = inputType;
this.optionsFunction = optionsFunction;
this.isRequired = isRequired;
this.validationFunction = validationFunction;
this.validationArg = validationArg;
this.defaultVal = defaultVal;
this.fnOnChange = fnOnChange;
this.readonly = readonly;
msg("setInputDef "+name+" fnOnChange : "+typeof(fnOnChange));
switch(inputType) {
case(INPUT_TYPE_TEXTAREA) :
this.style = {
"width" : "99%"
}
this.styleWrapper = {
"width" : "100%"
}
break;
case(INPUT_TYPE_SELECT) :
this.style = {
//"width" : "204px"
}
this.styleWrapper = {
//"width" : "204px"
}
break;
case(INPUT_TYPE_CHECKBOX) :
this.style = {
//"width" : "auto",
//"margin" : "0px"
}
this.styleWrapper = {
"width" : "204px"
}
break;
default:
this.style = {
//"width" : "200px"
//"width" : "99%"
}
this.styleWrapper = {
//"width" : "204px"
//"width" : "100%"
}
}
}
MVRZ.util.setChildId = function(base, append){
if(typeof(append)=='undefined') append = ID_CHILD_APPEND;
var ret = base + ID_CHILD_SEPARATOR + append;
return ret;
}
MVRZ.util.encodeSelectId = function(what, id){
var ret = 'select:'+what+':'+id;
return ret;
}
MVRZ.util.encodeInputId = function encodeInputId(what, datasetRowIndex, id, input){
var ret = datasetRowIndex+':'+what+':'+id;
if(typeof(input) != 'undefined') ret = ret+':'+input;
msg('encodeInputId() = '+ret);
return ret;
}
MVRZ.util.decodeInputId = function decodeInputId(sId) {
msg('decodeInputId('+sId + ")");
//alert('sId='+sId);
if(typeof(sId)=='undefined' || typeof(sId)=='object' || sId==null || sId.length==0) return '';
var splitResult = sId.split(':', 4);
var obj = new Object();
obj.sId = sId;
//obj.displayRowIndex = splitResult[0];
obj.datasetRowIndex = splitResult[0];
obj.datasetName = splitResult[1];
obj.idValue = splitResult[2];
obj.input = splitResult[3];
// Get the menaingful value
var oTarget = document.getElementById(sId);
if (oTarget) {
var type = oTarget.type;
var value = oTarget.value; // Default
switch (oTarget.tagName.toLowerCase()) {
case ('input'):
switch (type) {
case (INPUT_TYPE_CHECKBOX):
value = oTarget.checked;
break;
case (INPUT_TYPE_RADIO):
//value = MVRZ.util.formatter.Date.format(newVal);
break;
default:
}
break;
case ('textarea'):
value = oTarget.innerHTML;
break;
case ('select'):
default:
}
obj.value = value;
}
msg('decodeInputId('+sId + ") -> "+obj.datasetRowIndex+', '+obj.datasetName+', '+obj.idValue+', '+obj.input);
return obj;
}
MVRZ.util._setInput = function _setInput(oInput, newVal){
msg("MVRZ.util._setInput:: "+oInput.sId+" : "+oInput.datasetRowIndex+" , "+oInput.input);
var oTarget = document.getElementById(oInput.sId);
if(oTarget == null || typeof(oTarget)=='undefined') {
msg("MVRZ.util._setInput:: - no target, returning false, sId="+oInput.sId);
return;
}
if(typeof(newVal)=='undefined' || newVal==null) newVal = '';
if(typeof(MY[oInput.datasetName].inputs.fields[oInput.input]) != 'undefined') {
var type = MY[oInput.datasetName].inputs.fields[oInput.input].inputType;
} else {
var type = oTarget.type;
}
msg("MVRZ.util._setInput: tagname="+oTarget.tagName+', type='+type);
// Ensure correct assignment/formatting
switch (oTarget.tagName.toLowerCase()) {
case ('input'):
switch (type) {
case (INPUT_TYPE_CHECKBOX):
oTarget.checked = newVal ? 1 : 0;
break;
case (INPUT_TYPE_DATE):
oTarget.value = MVRZ.util.formatter.date.format(newVal);
break;
default:
oTarget.value = newVal;
}
break;
case ('select'):
case ('textarea'):
default:
oTarget.value = newVal;
}
msg("MVRZ.util._setInput:: "+oInput.sId+'='+oTarget.value);
return true;
}
MVRZ.util.setInput = function setInput(sId, newVal){
var oInput = MVRZ.util.decodeInputId(sId);
MVRZ.util._setInput(oInput, newVal);
msg("MVRZ.util.setInput:: "+oInput.sId+" : "+oInput.datasetRowIndex+", "+oInput.datasetRowIndex+", "+oInput.input+" = "+oInput.oldVal+"->"+oInput.curVal);
return oInput;
}
MVRZ.util.getInputVal = function getInputVal(oField, inputType) {
// Ensure correct formatting for save (unformat if it's been formatted for display)
var val = null;
if(typeof(inputType)=='undefined') {
inputType = oField.type;
}
if(oField) {
switch(inputType) {
case(INPUT_TYPE_DATE):
val = MVRZ.util.formatter.date.unformat(oField.value);
break;
case(INPUT_TYPE_DATETIME):
val = MVRZ.util.formatter.datetime.unformat(oField.value);
break;
case(INPUT_TYPE_CHECKBOX):
val = MVRZ.util.parseCheckbox(oField.checked) ? 1 : 0;
break;
default:
val = oField.value;
break;
}
}
return val;
}
MVRZ.util._getInput = function _getInput(oInput, oTarget){
/*
this.sId = MVRZ.util.encodeInputId(datasetName, dataRow, id, input);
this.what = datasetName;
this.dataRow = datasetRowIndex;
this.id = idValue;
this.input = input;
*/
msg("MVRZ.util._getInput:: "+oInput.sId+" : "+oInput.datasetRowIndex+" , "+oInput.input);
if(typeof(oTarget)=='undefined') {
var oTarget = document.getElementById(oInput.sId);
}
if(oTarget == null || typeof(oTarget)=='undefined') {
msg("MVRZ.util._getInput:: - no target, returning false, sId="+oInput.sId);
oInput = null;
return false;
}
switch(oInput.datasetRowIndex) {
case("select") :
break;
default:
// Find the dataRow
oInput.datasetRowIndex = MY[oInput.datasetName].getDatasetRowIndex(oInput.idValue);
if(oInput.datasetRowIndex<0) {
msg("MVRZ.util._getInput:: - no datasetRowIndex, returning false, idValue="+oInput.idValue);
return false;
}
if(!oInput.datasetRowIndex) oInput.datasetRowIndex = 0; // Ensure not null
if(MY[oInput.datasetName].isRow(oInput.datasetRowIndex)) {
oInput.oldVal = MY[oInput.datasetName].get(oInput.datasetRowIndex, oInput.input);
}
}
// Ensure correct formatting for save (unformat if it's been formatted for display)
if(typeof(MY[oInput.datasetName].inputs.fields[oInput.input]) != 'undefined') {
/*
switch(MY[oInput.datasetName].inputs.fields[oInput.input].inputType) {
case(INPUT_TYPE_DATE):
oInput.curVal = MVRZ.util.formatter.date.unformat(oTarget.value);
break;
case(INPUT_TYPE_DATETIME):
oInput.curVal = MVRZ.util.formatter.datetime.unformat(oTarget.value);
break;
case(INPUT_TYPE_CHECKBOX):
oInput.curVal = MVRZ.util.parseCheckbox(oTarget.checked) ? 1 : 0;
break;
default:
oInput.curVal = oTarget.value;
break;
}
*/
oInput.curVal = MVRZ.util.getInputVal(oTarget, MY[oInput.datasetName].inputs.fields[oInput.input].inputType);
}
msg("MVRZ.util._getInput:: "+oInput.oldVal+"->"+oInput.curVal);
return true;
}
MVRZ.util.getInput = function getInput(sId){
//var splitResult = sId.split(':', 4);
var oInput = MVRZ.util.decodeInputId(sId);
//dataRow = obj.dataRow;
//what = splitResult[1];
//id = splitResult[2];
//input = splitResult[3];
//var ret = new MVRZ.util._getInput(obj.what, obj.dataRow, obj.id, obj.input);
if (!MVRZ.util._getInput(oInput)) {
oInput = null;
msg("MVRZ.util.getInput:: "+sId+" is not a valid element");
} else {
msg("MVRZ.util.getInput:: "+sId+" : "+oInput.datasetRowIndex+", "+oInput.input+" = "+oInput.oldVal+"->"+oInput.curVal);
}
return oInput;
}
MVRZ.util.getAllInputs = function(datasetName, datasetRowIndex, idValue) {
msg("MVRZ.util.getAllInputs("+datasetName+","+datasetRowIndex+","+idValue+')');
var ret = new Object();
var oInput = new Object();
oInput.datasetName = datasetName;
oInput.datasetRowIndex = datasetRowIndex;
oInput.idValue = idValue;
for(name in MY[datasetName].inputs.fields) {
var oField = MY[datasetName].inputs.fields[name];
oInput.sId = MVRZ.util.encodeInputId(datasetName, datasetRowIndex, idValue, name);
oInput.input = name;
if(!MVRZ.util._getInput(oInput)) {
if(!oField.readonly || oField.noEditRender || oField.notOnServer) {
continue;
} else {
oInput.curVal = MY[datasetName].get(oInput.datasetRowIndex, name);
}
}
ret[name] = oInput.curVal;
}
msg('getAllInputs: ' + serializeArray(ret));
return ret;
}
MVRZ.util.setAllInputIds = function setAllInputIds(dataObject, datasetRowIndex, curId, newId) {
// Used after save when new ID has been created for a previously zero ID dataset row
var dataObjectIndex = dataObject.datasetName;
msg('setAllInputIds: ' + dataObjectIndex+', '+datasetRowIndex+', '+curId+', '+newId);
// Find the datasetRowIndex for the current data
datasetRowIndex = dataObject.getDatasetRowIndex(curId);
if(datasetRowIndex<0) return;
// Update the data store for the idField - used during next parts for ID=0 in particular
//DONE LATER:dataObject.set(datasetRowIndex, dataObject.inputs.uniqueField, newId);
// Change the html elements
for(name in dataObject.inputs.fields) {
//var sId = dataRow + ':' + newId + ':' + name;
if(name === dataObject.inputs.uniqueField) {
// Skip updating the ID for now - affects the rest of this for loop
continue;
}
var sMainId = MVRZ.util.encodeInputId(dataObjectIndex, datasetRowIndex, newId, dataObject.inputs.uniqueField);
var sCurId = MVRZ.util.encodeInputId(dataObjectIndex, datasetRowIndex, curId, name);
var sNewId = MVRZ.util.encodeInputId(dataObjectIndex, datasetRowIndex, newId, name);
var oInput = MVRZ.util.getInput(sCurId);
if(typeof(oInput) != 'undefined' && oInput != null) { // Some inputs are not in the html Dom
msg('setAllInputIds setting: ' + name);
if(el=document.getElementById(sCurId)) { // NOTE: May be from a table update
el.id = sNewId;
if (el.id === sMainId) {
oInput.curVal = el.value = newId; // Like a select box
}
if(elErr=document.getElementById(sCurId+':Err')) elErr.id = sNewId+':Err';
msg('setAllInputIds removing dirtyInput from ' + el.id);
YAHOO.util.Dom.removeClass(el, NAME_CLASS_DIRTYINPUT);
}
// Update the data store
dataObject.set(datasetRowIndex, name, oInput.curVal);
}
}
// Update the main ID
var name = dataObject.inputs.uniqueField;
var sCurId = MVRZ.util.encodeInputId(dataObjectIndex, datasetRowIndex, curId, name);
if(el=document.getElementById(sCurId)) {
var sNewId = MVRZ.util.encodeInputId(dataObjectIndex, datasetRowIndex, newId, name);
el.id = sNewId;
if(elErr=document.getElementById(sCurId+':Err')) elErr.id = sNewId+':Err';
msg('setAllInputIds removing dirtyInput from ' + el.id);
YAHOO.util.Dom.removeClass(el, NAME_CLASS_DIRTYINPUT);
}
// Update the dataObject
dataObject.request.saveArgArray[GET_ID] = newId;
dataObject.request.saveArgArray[GET_INPUTID] = sNewId;
// Update the data store for the idField
dataObject.set(datasetRowIndex, dataObject.inputs.uniqueField, newId.toString());
msg('setAllInputIds: DONE');
return;
}
MVRZ.util.parser = new function parser() {
this.text = function text(sData) {
msg('parser.text('+sData+')');
return sData;
}
this.int = function int(sData) {
msg('parser.int('+sData+')');
return parseInt(sData);
}
this.checkbox = function checkbox(sData) {
var ret = (typeof(sData)=='undefined' || (sData == 0 && sData !== 'on')) ? false : true;
msg('parser.checkbox('+sData+') = '+ret);
return ret;
}
this.date = function date(sDate) {
if(typeof(sDate)=='object') return sDate;
var ret = (typeof(sDate)=='undefined' || sDate.length==0 || sDate==false) ? false : MVRZ.util.parser.dateObj(sDate);
//msg('parser.date('+sData+') = '+ret);
return ret;
}
this.datetime = function datetime(sData) {
if(typeof(sData)=='object') return sData;
var ret = (typeof(sData)=='undefined' || sData.length==0) ? false : MVRZ.util.parser.datetimeObj(sData);
//msg('parser.date('+sData+') = '+ret);
return ret;
}
this.dateObj = function dateObj(sData) {
var ret = MVRZ.util.formatter._strToDate(sData);
msg('dateObj('+sData+') = '+ret);
return ret;
}
this.datetimeObj = function datetimeObj(sData) {
var ret = MVRZ.util.formatter._strToDate(sData);
msg('datetimeObj('+sData+') = '+ret);
return ret;
}
this.secondsToMinutes = function minutes(sData) {
var ret = (typeof(sData)=='undefined' || sData.length==0) ? false : sData/60;
popupInfo("MVRZ.util.parser.minutesAgo: gParserBaseSeconds="+gParserBaseSeconds+" sData="+sData+", ret="+ret);
msg('parser.secondsToMinutes('+sData+') = '+ret);
return ret;
}
this.getParser = function getParser(inputType) {
//var ret = "string";
var ret = YAHOO.util.DataSource.parseString;
switch(inputType) {
case(INPUT_TYPE_CHECKBOX):
ret = this.checkbox;
break;
case(INPUT_TYPE_NUMBER):
case(INPUT_TYPE_CURRENCY):
//ret = "number";
ret = YAHOO.util.DataSource.parseNumber;
break;
case(INPUT_TYPE_TEMPERATURE):
case(INPUT_TYPE_TEMPERATUREOROFFSET):
ret = this.int;
break;
case(INPUT_TYPE_DATE):
ret = this.dateObj;
break;
case(INPUT_TYPE_DATETIME):
ret = this.datetimeObj;
break;
case(INPUT_TYPE_TEXT):
case(INPUT_TYPE_TEXTBOX):
case(INPUT_TYPE_DROPDOWN):
case(INPUT_TYPE_TEXTAREA):
case(INPUT_TYPE_LIST):
case(INPUT_TYPE_CHECKBOX):
case(INPUT_TYPE_RADIO):
case(INPUT_TYPE_LINK):
case(INPUT_TYPE_EMAIL):
case(INPUT_TYPE_BUTTON):
case(INPUT_TYPE_HIDDEN):
case(INPUT_TYPE_SELECT):
default:
}
msg("getParser("+inputType+") - returning ");
return ret;
}
}
MVRZ.util.parseCheckbox = function parseCheckbox(sData) {
var ret = (typeof(sData)=='undefined' || (sData == 0 && sData !== 'on')) ? false : true;
msg('parseCheckbox('+sData+') = '+ret);
return ret;
}
var gSortField;
MVRZ.util.sorter = new function sorter() {
this.number = function (a, b) {
msg("sorting.number("+a+","+b+")");
return parseInt(parseFloat(a) - parseFloat(b));
}
this.text = function (a, b) {
msg("sorting.text("+a+","+b+")");
var x = a.toLowerCase();
var y = b.toLowerCase();
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
this.oField = new Object();
this.oField.number = function (a, b) {
msg("sorting.field.number("+a[gSortField]+","+b[gSortField]+") gSortField="+gSortField);
return MVRZ.util.sorter.number(a[gSortField], b[gSortField]);
}
this.oField.text = function (a, b) {
msg("sorting.field.text("+a[gSortField]+","+b[gSortField]+") gSortField="+gSortField);
return MVRZ.util.sorter.text(a[gSortField],b[gSortField]);
}
this.getSorter = function(inputType, fieldName) {
var ret, oFn;
if (typeof(fieldName) != 'undefined') {
oFn = this.oField;
gSortField = fieldName;
}
else {
oFn = this;
}
switch(inputType) {
case(INPUT_TYPE_CHECKBOX):
case(INPUT_TYPE_TEMPERATURE):
case(INPUT_TYPE_TEMPERATUREOROFFSET):
case(INPUT_TYPE_NUMBER):
case(INPUT_TYPE_CURRENCY):
case(INPUT_TYPE_CHECKBOX):
ret = oFn.number;
break;
case(INPUT_TYPE_DATE):
case(INPUT_TYPE_DATETIME):
ret = oFn.number;
break;
case(INPUT_TYPE_TEXT):
case(INPUT_TYPE_TEXTBOX):
case(INPUT_TYPE_DROPDOWN):
case(INPUT_TYPE_TEXTAREA):
case(INPUT_TYPE_LIST):
case(INPUT_TYPE_RADIO):
case(INPUT_TYPE_LINK):
case(INPUT_TYPE_EMAIL):
case(INPUT_TYPE_BUTTON):
case(INPUT_TYPE_HIDDEN):
case(INPUT_TYPE_SELECT):
default:
ret = oFn.text;
}
msg("getSorter("+inputType+") - returning "+ret);
return ret;
}
}
/* -------------- Date functions ---------------- */
var dayArray = new Array();
dayArray[0] = "Sun";
dayArray[1] = "Mon";
dayArray[2] = "Tue";
dayArray[3] = "Wed";
dayArray[4] = "Thu";
dayArray[5] = "Fri";
dayArray[6] = "Sat";
var monthArray = new Array();
monthArray[1] = "Jan";
monthArray[2] = "Feb";
monthArray[3] = "Mar";
monthArray[4] = "Apr";
monthArray[5] = "May";
monthArray[6] = "Jun";
monthArray[7] = "Jul";
monthArray[8] = "Aug";
monthArray[9] = "Sep";
monthArray[10] = "Oct";
monthArray[11] = "Nov";
monthArray[12] = "Dec";
/*
MVRZ.util.formatterTimestamp = function formatterTimestamp(elLiner, oRecord, oColumn, oData) {
// timestamp is seconds since 1970 epoch (php time() function)
if(typeof(oData)=='undefined' || oData==null) return '';
var newData = MVRZ.util.timestampToDate(oData);
if(typeof(elLiner)=='object' && elLiner != null) elLiner.innerHTML = newData;
else return newData;
}
*/
MVRZ.util.timestampToDate = function timestampToDate(timestamp) {
msg('util.timestampToDate(' + timestamp + ')');
// timestamp is seconds since 1970 epoch (php time() function)
var theDate = new Date(timestamp * 1000);
//var dateString = theDate.toGMTString();
//alert('formatterTimestamp:'+timestamp+' = '+dateString);
return theDate;
}
MVRZ.util.formatter = new function formatter() {
this._cleanHtmlTags = function _cleanHtmlTags(htmlStr, tags, discardTags) {
/*
* Removes tags and any attributes but leaves anything between open/close tags
*
USAGE: _cleanHtml(htmlStr [, tags [, discardTags]]])
tags: “a|b|table|tr|td|th�
discardTags: “1� – to discard the tags rather than remove them
Eg. _cleanHtml(“Hello�, “a�, 1); - To remove the “a� tags
*/
if (typeof(htmlStr) == 'undefined')
return '';
var cleanHtmlStr;
if (typeof(tags) == 'undefined')
cleanHtmlStr = htmlStr.replace(/<\/?(?!\!)[^>]*>/gi, "");
else {
if (typeof(discardTags) == 'undefined')
discardTags = false;
if (!discardTags) {
var strRegExp = '?(?!(' + tags + '))[^>]*>';
alert ("allow strRegExp="+strRegExp);
cleanHtmlStr = htmlStr.replace(new RegExp(strRegExp, 'gi'), "");
}
else {
var strRegExp = '?(' + tags + ')[^>]*>';
alert ("discard strRegExp="+strRegExp);
cleanHtmlStr = htmlStr.replace(new RegExp(strRegExp, 'gi'), "");
}
}
return cleanHtmlStr;
}
this._cleanCommentSGML = function _cleanCommentSGML(htmlStr){
//Thanks to: http://www.faqts.com/knowledge_base/view.phtml/aid/21761
var cleanHtmlStr = htmlStr;
cleanHtmlStr=cleanHtmlStr.replace(/s*/g,''); //double dashes escaped cuz of SGML comment
return cleanHtmlStr;
}
this._cleanDate = function _cleanDate(dateStr) { // Get rid of any date parts that cause confusion
if(typeof dateStr == "undefined" || dateStr.length==0) return '';
var cleanDateStr = dateStr;
//debugAppend('
cleanDate('+dateStr+'):'+cleanDateStr);
cleanDateStr = cleanDateStr.replace(/mon|tue|wed|thu|fri|sat|sun/ig, "");
cleanDateStr = cleanDateStr.replace(/^[^a-zA-Z0-9]*/g,'').replace(/[^a-zA-Z0-9]*$/g,''); // trim
return cleanDateStr;
}
this._normalizeDate = function _normalizeDate(dateStr) { // Get rid of any date parts that cause confusion
var dateArray, index;
newDateObj = new Date();
var currentYear = newDateObj.getFullYear().toString();
var yearPrefix = currentYear.substr(0, 2);
if(typeof dateStr == "undefined" || dateStr.toString().length ==0) { // Use today's date
dateMilliseconds = dateToMilliseconds();
} else {
dateMilliseconds = dateToMilliseconds(dateStr);
}
newDateObj.setTime(dateMilliseconds);
var parseDateStr = newDateObj.getDate() + " " + monthArray[newDateObj.getMonth()+1] + ", " + yearPrefix + newDateObj.getFullYear().toString().substr(2,2);
//var parseDateStr = (dateArray[1] + ' ' + dateArray[0] + ', ' + yearPrefix + dateArray[2]);
return parseDateStr;
}
this._dateToMilliseconds = function _dateToMilliseconds(dateStr) { // Get rid of any date parts that cause confusion
var dateArray, index;
newDateObj = new Date();
var currentYear = newDateObj.getFullYear().toString();
var yearPrefix = currentYear.substr(0, 2);
if(typeof dateStr == "undefined" || dateStr.toString().length ==0) { // Use today's date
var dateMilliseconds = newDateObj.getTime();
} else {
// Get the date parts
var cleanDateStr = cleanDate(dateStr);
//debug(dateStr+', '+cleanDateStr);
var dayDateArray = cleanDateStr.split(" "); // Separate the Day and the date
if(!dayDateArray[1]) index=0;
else index = 1;
var dateArray = dayDateArray[index].split('-');
var parseDateStr = (dateArray[1] + ' ' + dateArray[0] + ', ' + yearPrefix + dateArray[2]);
var dateMilliseconds = Date.parse(parseDateStr);
}
return dateMilliseconds;
}
this._secondsToDate = function _secondsToDate(timestamp) { // convert timestamp to date
msg("_secondsToDate("+timestamp+")");
if (typeof (timestamp) == "undefined" || timestamp == 0) { // Blanks
return;
}
var newDateObj = new Date();
newDateObj.setTime(timestamp*1000);
return newDateObj;
}
var dbgCount=0;
this.currency = new function currency(){
this.clean = function clean(curStr, args){
msg('Currency.clean(' + curStr + ')');
if(typeof(curStr)=='undefined') return '';
return curStr.toString().replace(',', '');
}
this.format = function format(curStr, args){ // Currency String
msg('Currency.format(' + curStr + ')');
if(typeof(curStr)=='undefined' || curStr==null || curStr.length==0) curStr = "0";
var ret = this.clean(curStr);
ret = parseFloat(ret).toFixed(2);
//ret = parseFloat(ret) * 100;
//ret = Math.round(ret)/100;
return ret;
}
}
this.html = new function html(){
this.format = function format(str, args){ // Time String
msg('html.format(' + str + ')');
if(typeof(str)=='undefined' || str==null) return '';
var ret = str;
if(!MVRZ.util.validation.isHtml(str)) {
ret = str.replace(/\n/g, "
");
//ret = "" + str + "
";
}
return ret;
}
}
this.time = new function time(){
this.format = function format(timeStr, args){ // Time String
msg('Time.format(' + timeStr + ')');
if(typeof(timeStr)=='undefined' || timeStr==null) return '';
// Ensure no seconds in display by default
return timeStr.toString().substr(0,5);
}
}
this.datetime = new function datetime(){
this.format = function format(dateStr, args) { // Convert database date to Date
//msg("_getDatabaseDate("+dateStr+")");
var ret = '';
if(typeof(dateStr)!="object") {
var oDate = MVRZ.util.formatter._strToDate(dateStr);
} else {
var oDate = dateStr;
}
if(oDate instanceof Date) {
var dayStr = MVRZ.util.formatter.date.format(oDate);
//var timeStr = MVRZ.util.formatter.pad.left(oDate.getHours(),2,'0') + ':' + MVRZ.util.formatter.pad.left(oDate.getMinutes(),2,'0') + ':' + MVRZ.util.formatter.pad.left(oDate.getSeconds(),2,'0');
var timeStr = MVRZ.util.formatter.pad.left(oDate.getHours(),2,'0') + ':' + MVRZ.util.formatter.pad.left(oDate.getMinutes(),2,'0');
ret = dayStr + ' ' + timeStr;
};
return ret;
}
this.formatRecent = function formatRecent(dateStr, args) { // Convert database date to Date
//msg("_getDatabaseDate("+dateStr+")");
var ret = '';
if(typeof(dateStr)!="object") {
var oDate = MVRZ.util.formatter._strToDate(dateStr);
} else {
var oDate = dateStr;
}
if(oDate instanceof Date) {
var now = new Date();
var nowTime = now.getTime();
var dateTime = oDate.getTime();
if(dateTime < (nowTime - MILLISECONDS_IN_YEAR)) {
//ret = (parseInt(oDate.getMonth()) + 1) + '/' + oDate.getDate() + '/' + parseInt(oDate.getFullYear());
ret = oDate.getDate() + '-' + aMonthsOfYear[(parseInt(oDate.getMonth()))].substr(0,3) + '-' + oDate.getFullYear();
} else if(dateTime < (nowTime - MILLISECONDS_IN_WEEK)) {
ret = oDate.getDate() + '-' + aMonthsOfYear[(parseInt(oDate.getMonth()))].substr(0,3);
} else if(dateTime < (nowTime - (MILLISECONDS_IN_DAY*2))) {
//var days = Math.floor((nowTime - dateTime)/MILLISECONDS_IN_DAY);
//ret = days + " day" + (days==1?"":"s") + " ago";
//ret = aDayOfWeek[oDate.getDay()].substr(0,3);
ret = aDayOfWeek[oDate.getDay()];
} else if(dateTime < (nowTime - MILLISECONDS_IN_DAY)) { // Yesterday
ret = 'Yesterday ' + MVRZ.util.formatter.pad.left(oDate.getHours(),2,'0') + ':' + MVRZ.util.formatter.pad.left(oDate.getMinutes(),2,'0');
} else if(dateTime < (nowTime - MILLISECONDS_IN_HOUR)) {
// Show the number of hours ago
var hours = Math.round((nowTime - dateTime) / MILLISECONDS_IN_HOUR);
ret = hours + " hour" + (hours==1?"":"s") + " ago";
} else {
// Show the number of minutes ago
var mins = Math.max(0,Math.round((nowTime - dateTime) / MILLISECONDS_IN_MINUTE)); // Don't allow -ve
ret = mins + " min" + (mins==1?"":"s") + " ago";
}
}
return ret;
}
this.unformat = function unformat(dateStr, args) { // Convert database date to Date
//msg("_getDatabaseDate("+dateStr+")");
if(typeof(dateStr)!="object") {
var oDate = MVRZ.util.formatter._strToDate(dateStr);
} else {
var oDate = dateStr;
}
var sMonth = "0" + (oDate.getMonth()+1);
sMonth = sMonth.toString();
sMonth = sMonth.substr(sMonth.length-2,2);
var day = oDate.getDate();
if(day.toString().length==1) day = "0" + day;
var timeStr = MVRZ.util.formatter.pad.left(oDate.getHours(),2,'0') + ':' + MVRZ.util.formatter.pad.left(oDate.getMinutes(),2,'0') + ':' + MVRZ.util.formatter.pad.left(oDate.getSeconds(),2,'0');
return oDate.getFullYear() + "-" + sMonth + "-" + day + ' ' + timeStr;
// ------ UNUSED ----
var dateArray, index;
var timeArray = new Array();
if (typeof dateStr == "undefined" || dateStr.toString().length == 0) {
return null;
}
else {
// Get the date and time parts
var dateTime = dateStr.split(' ', 2);
var datePart = dateTime[0];
var timePart = dateTime[1];
//msg("_getDatabaseDate("+dateStr+") -- split to "+datePart+"/"+timePart);
// Get the date parts
dateArray = datePart.split('-');
// Get the time parts
if (typeof(timePart) != 'undefined' && timePart.length) {
timeArray = timePart.split(':');
}
}
var oDate = new Date();
if (parseInt(dateArray[0], 10)>0) {
//msg("_getDatabaseDate("+dateStr+") - setFullYear :: "+serializeArray(dateArray));
oDate.setFullYear(dateArray[0], dateArray[1] - 1, dateArray[2]);
}
else {
//msg("_getDatabaseDate("+dateStr+") - returning null :: "+serializeArray(dateArray));
return null;
}
if(timeArray.length) {
oDate.setHours(timeArray[0], timeArray[1], timeArray[2]);
}
//msg("_getDatabaseDate("+ dateStr +") - returning: " + oDate);
//if(dbgCount<5) {
// alert("_getDatabaseDate("+dateStr+") - split to "+datePart+"/"+timePart+" = "+oDate);
// dbgCount++;
//}
return oDate;
}
/*
this.format = function format(dateStr, args){ // Restore/Return unformated form
msg('DatabaseDate.format(' + dateStr + ')');
if(dateStr === DATE_DB_NULL) return '';
return MVRZ.util.formatter.date.format(this.unformat(dateStr, args));
}
*/
}
this.databaseDate = this.datetime;
this.formatTableCell = function formatTableCell(elCell, oRecord, oColumn, oData){
msg('date.formatTableCell('+oData+') typeof = ' + typeof(oData));
var val = null;
if (typeof(elCell) != 'undefined' && (oData instanceof Date || typeof(oData) == 'String')) {
msg('date.formatTableCell() - calling MVRZ.util.formatter.date.format : ' + typeof(MVRZ.util.formatter.date.format));
val = MVRZ.util.formatter.date.format(oData);
elCell.innerHTML = val;
}
msg('date.formatTableCell() - DONE = '+val);
}
this.monthStrToNumber = function monthStrToNumber(monthStr) {
var monthNum = 0;
var monthTestStr = monthStr.substr(0,3).toLowerCase();
for(var i in aMonthsOfYear) {
if(aMonthsOfYear[i].substr(0,3).toLowerCase() === monthTestStr) {
monthNum = parseInt(i);
break;
}
}
return monthNum;
}
this._strToDate = function _strToDate(dateTimeStr, args) {
msg('date._strToDate('+dateTimeStr+')');
if(typeof(dateTimeStr)!="undefined") {
if(dateTimeStr==null || dateTimeStr.length==0 || dateTimeStr == DATE_VALUE_NONE || dateTimeStr == DATETIME_VALUE_NONE) return '';
}
var index;
var newDateObj;
if (dateTimeStr instanceof Date) {
newDateObj = dateTimeStr;
}
else {
if (typeof(dateTimeStr) == "undefined" || dateTimeStr==null || dateTimeStr.toString().length == 0) { // Use today's date
newDateObj = new Date();
//var dateMilliseconds = newDateObj.getTime();
}
else {
var parseDateStr, match;
var year, month, day
var hours=0, minutes=0, seconds=0;
var cleanDateStr = MVRZ.util.formatter._cleanDate(dateTimeStr);
var dateTimeArray = cleanDateStr.split(" "); // Separate the date and the time
/*
if (typeof(dateTimeArray[1])!='undefined')
var index = 0;
else
var index = 1;
*/
var dateStr = dateTimeArray[0];
var timeStr = dateTimeArray[1];
// Turn dateStr into Date-parsable string m/d/y
re1 = DATE_REGEX_YYYYMMDD; // yyyy-mm-dd
re2 = DATE_REGEX_DMMMYY; // d[d]-mmm[m]-yy[yy]
re3 = DATE_REGEX_DMYY; // World Date: n[n]/m[m]/yy[yy]
if(DATE_REGEX_YYYYMMDD.test(dateStr)) {
var dateArray = DATE_REGEX_YYYYMMDD.exec(dateStr);
//var parseDateStr = (dateArray[1] + '/' + dateArray[2] + '/' + dateArray[0]);
year = dateArray[DATE_REGEX_YYYYMMDD_MATCH.year];
month = dateArray[DATE_REGEX_YYYYMMDD_MATCH.month];
month = parseInt(month, 10) - 1; // Adjust for zero-based input
day = dateArray[DATE_REGEX_YYYYMMDD_MATCH.day];
} else if(DATE_REGEX_DMMMYY.test(dateStr)) {
var dateArray = DATE_REGEX_DMMMYY.exec(dateStr);
month = this.monthStrToNumber(dateArray[DATE_REGEX_DMMMYY_MATCH.month]);
//var parseDateStr = (dateArray[1] + '/' + monthNum + '/' + dateArray[2]);
year = dateArray[DATE_REGEX_DMMMYY_MATCH.year];
day = dateArray[DATE_REGEX_DMMMYY_MATCH.day];
} else if(DATE_REGEX_DMYY.test(dateStr)){
var dateArray = DATE_REGEX_DMYY.exec(dateStr);
//var parseDateStr = (dateArray[1] + '/' + dateArray[0] + '/' + dateArray[2]);
year = dateArray[DATE_REGEX_DMYY_MATCH.year];
month = dateArray[DATE_REGEX_DMYY_MATCH.month];
month = parseInt(month, 10) - 1; // Adjust for zero-based input
day = dateArray[DATE_REGEX_DMYY_MATCH.day];
}
// Decode the time
if(typeof(timeStr)!='undefined' && TIME_REGEX_HHMMSS.test(timeStr)) {
var timeArray = TIME_REGEX_HHMMSS.exec(timeStr);
hours = timeArray[TIME_REGEX_HHMMSS_MATCH.hours];
minutes = timeArray[TIME_REGEX_HHMMSS_MATCH.minutes];
seconds = timeArray[TIME_REGEX_HHMMSS_MATCH.seconds];
}
// Get the date parts
msg('parsing::' + parseDateStr);
//var dateMilliseconds = Date.parse(parseDateStr);
var newDateObj = new Date(year, month, day, hours, minutes, seconds);
//newDateObj.setTime(dateMilliseconds);
}
//newDateObj.setTime(dateMilliseconds);
}
return newDateObj;
}
this.text = new function text() {
this.format = function format(str, args) {
msg('text.format('+str+')');
return str;
}
this.unformat = function unformat(str, args) { // Restore/Return unformated form
msg('text.unformat('+str+')');
return str;
}
}
this.date = new function date() {
this.format = function format(dateStr, args) {
msg('date.format('+dateStr+')');
if(typeof(dateStr)!="object") {
if(typeof(dateStr)!="undefined") {
if(dateStr==null || dateStr.length==0 || dateStr == DATE_VALUE_NONE) return '';
}
var index;
var newDateObj = MVRZ.util.formatter._strToDate(dateStr);
} else var newDateObj = dateStr;
if(newDateObj.getFullYear() < 0) return '';
// Format the date
dateStr = dayArray[newDateObj.getDay()] + " " + newDateObj.getDate() + "-" + monthArray[newDateObj.getMonth()+1] + "-" + newDateObj.getFullYear();
return dateStr;
}
this.unformat = function unformat(dateStr, args) { // Restore/Return unformated form
msg('date.unformat('+dateStr+')');
if(typeof(dateStr)=='undefined' || dateStr.length==0) return "";
if(typeof(dateStr)!="object") {
var oDate = MVRZ.util.formatter._strToDate(dateStr);
} else {
var oDate = dateStr;
}
var sMonth = "0" + (oDate.getMonth()+1);
sMonth = sMonth.toString();
sMonth = sMonth.substr(sMonth.length-2,2);
var day = oDate.getDate();
if(day.toString().length==1) day = "0" + day;
return oDate.getFullYear() + "-" + sMonth + "-" + day;
/*
var index;
var newDateObj;
if(typeof dateStr == "undefined" || dateStr.toString().length ==0) { // Use today's date
return DATE_VALUE_NONE;
} else {
// Get the date parts
var cleanDateStr = MVRZ.util.formatter._cleanDate(dateStr);
var dayDateArray = cleanDateStr.split(" "); // Separate the Day and the date
if(!dayDateArray[1]) index=0;
else index = 1;
var dateArray = dayDateArray[index].split('-');
var parseDateStr = (dateArray[1] + ' ' + dateArray[0] + ', ' + dateArray[2]);
msg('parsing::'+parseDateStr);
var dateMilliseconds = Date.parse(parseDateStr);
var newDateObj = new Date();
newDateObj.setTime(dateMilliseconds);
}
newDateObj.setTime(dateMilliseconds);
// Format the date
var sMonth = "0" + (newDateObj.getMonth()+1);
sMonth = sMonth.toString();
sMonth = sMonth.substr(sMonth.length-2,2);
dateStr = newDateObj.getFullYear() + "-" + sMonth + "-" + newDateObj.getDate();
msg('date.unformat('+dateStr+') returning '+dateStr);
return dateStr;
*/
}
}
this.timestamp = new function timestamp() {
this.format = function format(str, args) {
msg('formatter.Timestamp.format(' + str + ')');
var ret;
if(typeof(str)=='undefined' || str==null || str.length==0) {
ret = '';
} else {
var oDate = MVRZ.util.timestampToDate(str);
// Format the date
ret = dayArray[oDate.getDay()] + " " + oDate.getDate() + "-" + monthArray[oDate.getMonth()+1] + "-" + oDate.getFullYear() + ' ' + MVRZ.util.formatter.pad.left(oDate.getHours(),2,'0') + ':' + MVRZ.util.formatter.pad.left(oDate.getMinutes(),2,'0');
}
return ret;
}
this.formatRecent = function formatRecent(dateStr, args) { // Convert database date to Date
//msg("_getDatabaseDate("+dateStr+")");
var ret = '';
if(typeof(dateStr)!="object") {
var oDate = MVRZ.util.formatter._secondsToDate(dateStr);
} else {
var oDate = dateStr;
}
return MVRZ.util.formatter.datetime.formatRecent(oDate);
}
}
this.pad = new function pad(){
this.left = function left(str, padLength, padStr){
if(typeof(str)=='undefined' || typeof(padLength)=='undefined' || typeof(str)=='padStr') return str;
var l = str.toString().length;
if(l >= padLength) return str;
var pl = padStr.toString().length;
var n = (padLength-l) / pl;
var padding = '';
for(var i=0; i1) { // Check for overpadding
padding = padding.substr(padding.length-padLength, padLength);
}
return padding + str;
}
}
this.DataTable = new function DataTable(){
this.text = function text(elCell, oRecord, oColumn, oData){
var val = MVRZ.util.formatter.text.format(oData);
if(typeof(elCell)=='object' && elCell) {
msg('formatter.DataTable.text() - Setting = '+val);
elCell.innerHTML = val;
} else {
msg('formatter.DataTable.text() - Returning = '+val);
return val;
}
}
this.select = function select(elCell, oRecord, oColumn, oData){
// Get the dataset
var field = oColumn.key;
var datasetName = oColumn.mvrz.datasetName;
if(typeof(oColumn.editor)!='undefined' && oColumn.editor != null) {
var val = "["+oData+"]"; // Default
for(var i in oColumn.editor.dropdownOptions) {
if(oColumn.editor.dropdownOptions[i].value==oData) {
val = oColumn.editor.dropdownOptions[i].label;
break;
}
}
} else val = oData;
if(typeof(elCell)=='object' && elCell) {
msg('formatter.DataTable.text() - Setting = '+val);
elCell.innerHTML = val;
} else {
msg('formatter.DataTable.text() - Returning = '+val);
return val;
}
}
this.date = function date(elCell, oRecord, oColumn, oData){
var val = MVRZ.util.formatter.date.format(oData);
if(typeof(elCell)=='object' && elCell) {
msg('formatter.DataTable.date() - Setting = '+val);
elCell.innerHTML = val;
} else {
msg('formatter.DataTable.date() - Returning = '+val);
return val;
}
}
this.timestamp = function timestamp(elCell, oRecord, oColumn, oData){
var val = MVRZ.util.formatter.timestamp.format(oData);
if(typeof(elCell)=='object' && elCell) {
msg('formatter.DataTable.timestamp() - Setting = '+val);
elCell.innerHTML = val;
} else {
msg('formatter.DataTable.timestamp() - Returning = '+val);
return val;
}
}
this.timestampRecent = function timestampRecent(elCell, oRecord, oColumn, oData){
var val = MVRZ.util.formatter.timestamp.formatRecent(oData);
if(typeof(elCell)=='object' && elCell) {
msg('formatter.DataTable.timestampRecent() - Setting = '+val);
elCell.innerHTML = val;
} else {
msg('formatter.DataTable.timestampRecent() - Returning = '+val);
return val;
}
}
}
this.getFormatter = function getFormatter(inputType, viewtype) {
//var ret = "string";
var obj = this;
if(typeof(viewType)=='undefined') viewType = VIEW_TYPE_TABLE;
if(viewType==VIEW_TYPE_TABLE) {
obj = this.DataTable;
}
var ret = obj.text.format;
switch(inputType) {
case(INPUT_TYPE_CURRENCY):
//ret = "number";
ret = obj.currency.format;
break;
case(INPUT_TYPE_DATE):
case(INPUT_TYPE_DATETIME):
ret = obj.date.format;
break;
case(INPUT_TYPE_TEMPERATURE):
ret = obj.text.format;
break;
case(INPUT_TYPE_TEMPERATUREOROFFSET):
case(INPUT_TYPE_NUMBER):
case(INPUT_TYPE_CHECKBOX):
case(INPUT_TYPE_TEXT):
case(INPUT_TYPE_TEXTBOX):
case(INPUT_TYPE_DROPDOWN):
case(INPUT_TYPE_TEXTAREA):
case(INPUT_TYPE_LIST):
case(INPUT_TYPE_CHECKBOX):
case(INPUT_TYPE_RADIO):
case(INPUT_TYPE_LINK):
case(INPUT_TYPE_EMAIL):
case(INPUT_TYPE_BUTTON):
case(INPUT_TYPE_HIDDEN):
case(INPUT_TYPE_SELECT):
default:
ret = inputType;
}
msg("getFormatter("+inputType+") - returning " + ret);
return ret;
}
}
// Util Data -------------------------------------------------------------------
MVRZ.util.Data = new function Data() {
this.getDataSource = function getDataSource(oData) {
msg("Instantiating MVRZ.util.Data.getDataSource()...");
var dataSource = new Object();
dataSource = new YAHOO.util.LocalDataSource(oData);
dataSource.responseType = YAHOO.util.XHRDataSource.TYPE_JSARRAY;
dataSource.maxCacheEntries = 1;
return dataSource;
}
this.getDataTable = function getDataTable(container, colDefs, dataSource, oCfg, dataTableSubscribe) {
msg("Instantiating MVRZ.util.Data.getDataTable()...");
dataTable = new YAHOO.widget.DataTable(container, colDefs, dataSource, oCfg);
msg("Adding click subscriptions...");
if(typeof(dataTableSubscribe)!='undefined') {
for(eventName in dataTableSubscribe) {
dataTable.subscribe(eventName, dataTableSubscribe[eventName]);
}
}
return dataTable;
}
}
// Util Select -------------------------------------------------------------------
MVRZ.util.select = new Object();
MVRZ.util.select.setOptions = function(oSelect, oList, selectedId) {
msg("MVRZ.util.select.setOptions("+oSelect.id+","+typeof(oList)+","+selectedId+")");
// Create the options list
var oOptions = new Object();
var count = 0;
if (oList instanceof Array) {
//popupInfo("MVRZ.util.select.setOptions - an Array: " + dump(oList));
for (index in oList) {
var selectVal = index;
var selectText = oList[index];
if(selectText instanceof Array) {
selectVal = oList[index][1];
selectText = oList[index][0];
} else if(typeof(selectText)=='object') {
selectVal = oList[index][value];
selectText = oList[index][name];
}
msg('propertyTypes: ' + index + " " + selectVal + " " + selectText + " selected=" + selectedId);
var oOption = document.createElement('option');
oOption.value = selectVal;
oOption.text = selectText;
if (selectVal == selectedId)
oOption.selected = true;
try {
oSelect.add(oOption, null); // standards compliant; doesn't work in IE
}
catch (ex) {
oSelect.add(oOption); // IE only
}
}
}
else {
msg("MVRZ.util.select.setOptions - NOT an Array");
for (item in oList) {
var selectVal = oList[item];
var selectText = item;
msg('propertyTypes: ' + item + " " + selectVal + " " + selectText + " selected=" + selectedId);
var oOption = document.createElement('option');
oOption.value = selectVal;
oOption.text = selectText;
if (selectVal == selectedId)
oOption.selected = true;
try {
oSelect.add(oOption, null); // standards compliant; doesn't work in IE
}
catch (ex) {
oSelect.add(oOption); // IE only
}
}
}
}
MVRZ.util.select.telephoneTypes = function(oSelect, selectedId) {
var selectId = oSelect.id;
msg('MVRZ.util.select.telephoneTypes('+selectId+', '+selectedId+')');
// Load all countries and prepare the options list
var dataObject = new Object();
dataObject.args = new Object();
dataObject.selectId = selectId;
dataObject.selectedId = selectedId;
//var oSelect = document.getElementById(selectId);
if(typeof(oSelect)=='undefined') {
MVRZ.util.errorHandler('Failed to find telephoneTypes select object ('+selectId+') for options insertion');
return 0;
}
var oTelephoneTypes = {"Main": 0, "Home": 1, "Work": 2, "Cell": 3, "Fax": 4};
var oOptions = new Object();
// Create the options list
var count = 0;
for (type in oTelephoneTypes) {
var selectVal = oTelephoneTypes[type];
var selectText = type;
msg('telephoneTypes: ' + type + " " + selectVal + " " + selectText + " selected=" + selectedId);
var oOption = document.createElement('option');
oOption.value = selectVal;
oOption.text = selectText;
if (selectVal == selectedId)
oOption.selected = true;
try {
oSelect.add(oOption, null); // standards compliant; doesn't work in IE
}
catch (ex) {
oSelect.add(oOption); // IE only
}
}
}
MVRZ.util.select.propertyTypes = function(oSelect, selectedId) {
var selectId = oSelect.id;
msg('MVRZ.util.select.propertyTypes('+selectId+', '+selectedId+')');
// Load all countries and prepare the options list
var dataObject = new Object();
dataObject.args = new Object();
dataObject.selectId = selectId;
dataObject.selectedId = selectedId;
//var oSelect = document.getElementById(selectId);
if(typeof(oSelect)=='undefined') {
MVRZ.util.errorHandler('Failed to find propertyTypes select object ('+selectId+') for options insertion');
return 0;
}
var oPropertyTypes = {
'Home/Detached/Villa': PROPERTY_TYPE_HOME,
'Condo/Apartment/Flat': PROPERTY_TYPE_APARTMENT,
'Townhome/Terraced': PROPERTY_TYPE_TOWNHOME,
'Duplex/Semi-detached': PROPERTY_TYPE_DUPLEX
};
var count=0;
for (type in oPropertyTypes) {
var val = oPropertyTypes[type];
//MVRZ.data.object[dataset][JSON_RESPONSE_INDEX_DATA][count++] = {'ID':val, 'name':type};
MY[dataset].setRow(count++, {'ID':val, 'name':type});
}
MVRZ.util.select.setOptions(oSelect, oPropertyTypes, selectedId);
}
/*
MVRZ.util.select.countries = function(oSelect, selectedId) {
msg('MVRZ.util.select.countries('+selectId+', '+selectedId+')');
var selectId = oSelect.id;
// Load all countries and prepare the options list
var dataObject = new Object();
dataObject.args = new Object();
dataObject.selectId = selectId;
dataObject.selectedId = selectedId;
dataObject.args.load = {
action: YUI_ACTION_LOAD,
what: DATASET_SELECTCOUNTRIES,
rf: YUI_RETURNFORMAT_JSON
}
dataObject.handleLoadSuccess = function(oRequest oConnection) {
var oRequest = oConnection.argument;
var sSelect = oRequest.selectId;
var selectedId = oRequest.selectedId;
msg('handleSuccess: '+oRequest.args.load.what+" at selectID "+sSelect+" selectedId="+selectedId);
var oSelect = document.getElementById(sSelect);
if(typeof(oSelect)=='undefined' || oSelect==null) {
MVRZ.util.errorHandler('Failed to find select object ('+sSelect+') for options insertion');
return 0;
}
// Create the options list
var oOption = document.createElement('option');
oOption.value = '';
oOption.text = '-- Select --';
if (typeof(selectedId)=='undefined' || selectedId == null || selectedId.length==0)
oOption.selected = true;
try {
oSelect.add(oOption, null); // standards compliant; doesn't work in IE
}
catch (ex) {
oSelect.add(oOption); // IE only
}
for (country in MVRZ.data.object[DATASET_SELECTCOUNTRIES][JSON_RESPONSE_INDEX_DATA]) {
var selectVal = MVRZ.data.object[DATASET_SELECTCOUNTRIES][JSON_RESPONSE_INDEX_DATA][country]['ID'];
var selectText = MVRZ.data.object[DATASET_SELECTCOUNTRIES][JSON_RESPONSE_INDEX_DATA][country]['name'];
//msg('handleSuccess: ' + country + " " + selectVal + " " + selectText + " selected=" + selectedId);
var oOption = document.createElement('option');
oOption.value = selectVal;
oOption.text = selectText;
if (selectVal == selectedId)
oOption.selected = true;
try {
oSelect.add(oOption, null); // standards compliant; doesn't work in IE
}
catch (ex) {
oSelect.add(oOption); // IE only
}
}
}
if(typeof(MVRZ.data.object[DATASET_SELECTCOUNTRIES][JSON_RESPONSE_INDEX_DATA])=='undefined') {
MVRZ.util.remote.load(dataObject);
}
}
*/
MVRZ.util.select[DATASET_SELECTCOUNTRIES] = function(oSelect, selectedId, fnOnAvailable) {
msg('MVRZ.util.select.countries()');
this.load = function() {
msg('MVRZ.util.select.countries load()');
MVRZ.util.select.load(DATASET_SELECTCOUNTRIES);
}
this.options = function(oSelect, selectedId, fnOnAvailable) {
var selectId = oSelect.id;
msg('MVRZ.util.select.countries options('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(DATASET_SELECTCOUNTRIES, oSelect, selectedId, "-- Country --", fnOnAvailable);
}
}
MVRZ.util.select[DATASET_PROPERTY] = function(oSelect, selectedId, fnOnAvailable) {
//var selectId = oSelect.id;
//msg('MVRZ.util.select.feature('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(DATASET_PROPERTY, oSelect, selectedId, "-- NEW --", fnOnAvailable);
}
MVRZ.util.select[DATASET_HOMEAUTOMATION] = function(oSelect, selectedId, fnOnAvailable) {
//var selectId = oSelect.id;
//msg('MVRZ.util.select.feature('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(DATASET_HOMEAUTOMATION, oSelect, selectedId, "-- NEW --", fnOnAvailable);
}
MVRZ.util.select.release = function(oSelect, selectedId, fnOnAvailable) {
//var selectId = oSelect.id;
//msg('MVRZ.util.select.releases('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(TEN_WHAT_RELEASES, oSelect, selectedId, "-- NEW --", fnOnAvailable);
}
MVRZ.util.select.customer = function(oSelect, selectedId, fnOnAvailable) {
//var selectId = oSelect.id;
//msg('MVRZ.util.select.customer('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(TEN_WHAT_CUSTOMERS, oSelect, selectedId, "-- NEW --", fnOnAvailable);
}
MVRZ.util.select.segment = function(oSelect, selectedId, fnOnAvailable) {
//var selectId = oSelect.id;
//msg('MVRZ.util.select.segment('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(TEN_WHAT_SEGMENTS, oSelect, selectedId, "-- NEW --", fnOnAvailable);
}
MVRZ.util.select.feature = function(oSelect, selectedId, fnOnAvailable) {
//var selectId = oSelect.id;
//msg('MVRZ.util.select.feature('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(TEN_WHAT_FEATURES, oSelect, selectedId, "-- NEW --", fnOnAvailable);
}
MVRZ.util.select.featureCustomer = function(oSelect, selectedId, fnOnAvailable) {
//var selectId = oSelect.id;
//msg('MVRZ.util.select.featureCustomer('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(TEN_WHAT_FEATURECUSTOMERS, oSelect, selectedId, "-- NEW --", fnOnAvailable);
}
MVRZ.util.select.featureSegment = function(oSelect, selectedId, fnOnAvailable) {
//var selectId = oSelect.id;
//msg('MVRZ.util.select.featureSegment('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(TEN_WHAT_FEATURESEGMENTS, oSelect, selectedId, "-- NEW --", fnOnAvailable);
}
MVRZ.util.select.featureType = function(oSelect, selectedId, fnOnAvailable) {
//var selectId = oSelect.id;
//msg('MVRZ.util.select.featureType('+selectId+', '+selectedId+')');
return MVRZ.util.select.what(TEN_WHAT_FEATURETYPES, oSelect, selectedId, "-- NEW --", fnOnAvailable);
}
MVRZ.util.select.what = function(what, oSelect, selectedId, nullText, fnOnAvailable, dataset) {
msg('MVRZ.util.select.what('+what+', '+oSelect+', '+selectedId+')');
if(typeof(dataset)=='undefined') dataset = what;
if(typeof(oSelect)=='object') {
var selectId = oSelect.id;
} else { // For a lookup or list
var selectId = oSelect;
if(typeof(MY[dataset])=='undefined') {
msg(what+': Data not loaded for select lookup:'+dataset);
return '';
} else {
if(typeof(oSelect)=='undefined') { // Just get the option list as an object array
var ret = new Array();
var indexCount = 0;
msg(what+': Select list being created:'+dataset);
//for(dataLine in MVRZ.data.object[dataset][JSON_RESPONSE_INDEX_DATA]) {
for(dataLine in MY[dataset].getRows()) {
var selectIndex = MY[dataset].get(dataLine, 'ID');
if(selectIndex==0) continue; // Don't include "new" entries not yet saved
var selectText = MY[dataset].get(dataLine, 'name');
if(typeof(selectText)=='undefined' || selectText.length==0) selectText = "ID="+selectIndex;
ret[indexCount++] = {label: selectText, value: selectIndex};
}
return ret;
} else {
for(dataLine in MY[dataset].getRows()) {
if(MY[dataset].get(dataLine, 'ID') == selectedId) {
var ret = MY[dataset].get(dataLine, selectId);
msg(what+': Lookup found for '+selectedId+' = '+ret);
return ret;
}
}
msg(what+': Lookup NOT found for '+selectedId);
}
}
}
msg('MVRZ.util.select.what('+what+', '+selectId+', '+selectedId+')');
// Load all elements and prepare the options list
var oRequest = new Object();
oRequest.args = new Object();
//oRequest.elContent = selectId;
oRequest.selectId = selectId;
oRequest.selectedId = selectedId;
oRequest.nullText = nullText;
oRequest.prefix = what;
oRequest.dataset = dataset;
oRequest.fnOnAvailable = fnOnAvailable;
oRequest.args.what = what;
oRequest.args.load = {
action: YUI_ACTION_LOAD,
what: what,
rf: YUI_RETURNFORMAT_JSON
}
if(typeof(oRequest.fnOnAvailable)=='function') {
fnOnAvailable = oRequest.fnOnAvailable;
} else {
if(typeof(oSelect)=='object') fnOnAvailable = MVRZ.util.select.handleOnAvailable;
else return MVRZ.util.select.lookup(oRequest);
}
oRequest.handleLoadSuccess = function(oHandlerRequest /*oConnection*/) {
//var oHandlerRequest = oConnection.argument;
var sSelect = oHandlerRequest.selectId;
var fnOnAvailable = oHandlerRequest.fnOnAvailable;
var dataIndex = oHandlerRequest.args.load.what;
msg('handleLoadSuccess: '+dataIndex+" at selectID "+sSelect);
popupInfo('handleLoadSuccess: '+dataIndex+" at selectID "+sSelect);
YAHOO.util.Event.onAvailable(sSelect, fnOnAvailable, oHandlerRequest);
}
this.renderit = function renderit(oRequest) {
msg('select.what.renderit(): '+oRequest+', id='+oRequest.selectId);
if(typeof(oRequest.fnOnAvailable)!='function') {
msg('select.what.renderit(): no function, setting to default');
oRequest.fnOnAvailable = MVRZ.util.select.handleOnAvailable;
}
if(document.getElementById(oRequest.selectId)) {
popupInfo("Calling oRequest.fnOnAvailable() directly");
oRequest.fnOnAvailable(oRequest, oRequest.dataset);
} else {
popupInfo("Calling oRequest.fnOnAvailable() via Event");
YAHOO.util.Event.onAvailable(oRequest.selectId, oRequest.fnOnAvailable, oRequest);
}
}
if(MY[dataset].isLoaded()) {
this.renderit(oRequest);
} else {
MY[dataset].load('', oRequest, this.renderit);
}
// TODO - deal with load in progress for same data
/*
if(typeof(MVRZ.data.object[dataset])=='undefined') {
msg(what+': Data not loaded:'+dataset);
MVRZ.util.remote.load(oRequest);
} else {
msg(what+': Data already loaded');
if(document.getElementById(selectId)) {
MVRZ.util.select.handleOnAvailable(oRequest, dataset);
} else {
YAHOO.util.Event.onAvailable(selectId, fnOnAvailable, oRequest);
}
}
*/
}
MVRZ.util.select.load = function(what) {
// Load all elements and prepare the options list
var oRequest = new Object();
oRequest.args = new Object();
oRequest.args.load = {
action: YUI_ACTION_LOAD,
what: what,
rf: YUI_RETURNFORMAT_JSON
}
oRequest.handleLoadSuccess = function(oHandlerRequest /*oConnection*/) {
//var oHandlerRequest = oConnection.argument;
var dataIndex = oHandlerRequest.args.load.what;
msg('select.load handleLoadSuccess: '+dataIndex);
}
if(typeof(MY[what])=='undefined') {
msg(what+': Data not loaded');
MVRZ.util.remote.load(oRequest);
}
}
MVRZ.util.select.handleOnAvailable = function(oRequest, dataset) {
msg('handleOnAvailable: '+dataset);
// Construct the options from the list
var sSelect = oRequest.selectId;
var dataIndex = oRequest.args.load.what;
var selectedId = oRequest.selectedId;
var nullText = oRequest.nullText;
var prefix = oRequest.prefix;
if(typeof(dataset)=='undefined') dataset = dataIndex;
msg('handleOnAvailable: '+dataIndex+" at selectID "+sSelect+" selectedId="+selectedId);
var oSelect = document.getElementById(sSelect);
if(!oSelect) {
MVRZ.util.errorHandler('Failed to find handleOnAvailable select object ('+sSelect+') for options insertion::'+typeof(oSelect)+', =='+document.getElementById(sSelect));
return 0;
}
// Clear the current list
if(typeof(oSelect.options)!='undefined') for(var i=oSelect.options.length-1;i>=0;i++) oSelect.remove(i);
// Create the options list
var oOption = document.createElement('option');
if(typeof(nullText)=='undefined') {
oOption.value = '';
oOption.text = '-- Select --';
} else if(nullText.length) {
oOption.value = '';
oOption.text = nullText;
}
if (typeof(selectedId)=='undefined' || selectedId == null || selectedId.length==0)
oOption.selected = true;
try {
oSelect.add(oOption, null); // standards compliant; doesn't work in IE
}
catch (ex) {
oSelect.add(oOption); // IE only
}
msg('handleOnAvailable: added first option');
prefix = ""; // TODO - check if this is really needed
for (index in MY[dataset].getRows()) {
msg('handleOnAvailable: adding index='+index);
var selectVal = MY[dataset].get(index, prefix+'ID');
if(selectVal==0) continue; // Don't include "new" entries not yet saved
var selectText = MY[dataset].get(index, prefix+'name');
if(typeof(selectText)=='undefined' || selectText.length==0) selectText = "ID"+index+'='+selectVal;
//msg('handleOnAvailable: ' + dataIndex + " :: " + index + " " + selectVal + "(" + prefix + "ID)" + " " + selectText + " selected=" + selectedId);
var oOption = document.createElement('option');
oOption.value = selectVal;
oOption.text = selectText;
if (selectVal == selectedId)
oOption.selected = true;
try {
oSelect.add(oOption, null); // standards compliant; doesn't work in IE
}
catch (ex) {
oSelect.add(oOption); // IE only
}
}
msg('handleOnAvailable: DONE');
}
MVRZ.util.select.lookup = function(oRequest) {
// Return a value from the list
var sSelect = oRequest.selectId;
var datasetName = oRequest.args.load.what;
var selectedId = oRequest.selectedId;
var nullText = oRequest.nullText;
var prefix = oRequest.prefix;
msg('select.lookup: '+datasetName+" at selectID "+sSelect+" selectedId="+selectedId);
var found = false;
for (index in MY[datasetName].getRows()) {
if(MY[datasetName].get(index, prefix+'ID') == selectedId) {
found=true;
break;
}
}
if(!found) return null;
var lookup = MY[dataIndex].get(index, prefix+sSelect);
return lookup;
}
// Util Remote -------------------------------------------------------------------
MVRZ.util.remote = new Object();
MVRZ.util.remote.requestObjectArray = new Object(); // Array of request objects indexed by url
MVRZ.util.remote.update = function update(dataObject, argArray) {
msg('MVRZ.util.remote.update()');
// Save it now
return dataObject.save(argArray);
//return MVRZ.util.remote.save(oTarget, dataObject);
}
MVRZ.util.remote.saveInput = function saveInput(oTargetOrId, dataObject) {
msg('saveInput('+oTargetOrId+', datsetName='+dataObject.datsetName+'::'+typeof(oTargetOrId));
if(typeof(dataObject.args)=='undefined') var dataObjectIndex = dataObject.datasetName;
else var dataObjectIndex = dataObject.args.what;
if(typeof(oTargetOrId) == 'object') {
var sId = oTargetOrId.id;
var oTarget = oTargetOrId;
} else {
var sId = oTargetOrId;
var oTarget = document.getElementById(oTargetOrId);
}
msg('save input '+dataObjectIndex+' sId='+sId);
//var sId = oTarget.id;
var oInput = MVRZ.util.getInput(sId);
if(!dataObject.noSave && oInput!=null) {
if(typeof(sId)=='undefined' || typeof(oInput)!='object' || typeof(oInput.idValue)=='undefined') return;
msg('save input '+dataObjectIndex+' sId='+sId+', idValue='+oInput.idValue+' :: ' + typeof(oInput));
// Ensure for new (unsaved in DB) data that all requires/errors are fixed
if(oInput.idValue==0 || dataObject.doSaveFor[oInput.idValue]) {
msg('save input - unsaved');
if(MVRZ.util.validation.allInputsValid(dataObjectIndex)) {
var inputArray = MVRZ.util.getAllInputs(oInput.datasetName, oInput.datasetRowIndex, oInput.idValue);
var nvps = '';
for(name in inputArray) {
nvps += name+'='+rawurlencode(inputArray[name])+'&';
}
msg('save input - saving for first time : '+nvps);
} else {
msg('save input - skipping save ');
return;
}
} else {
var nvps = oInput.input+'='+rawurlencode(oInput.curVal);
}
//dataObject.request.saveArgArray = new Array();
////dataObject.request.saveArgArray['displayRowIndex'] = oInput.displayRowIndex;
////dataObject.request.saveArgArray['datasetRowIndex'] = oInput.datasetRowIndex;
////dataObject.request.saveArgArray['sId'] = oInput.sId;
////dataObject.request.saveArgArray[GET_ID] = oInput.idValue;
////dataObject.request.saveArgArray[GET_NVPS] = nvps;
var argArray = {}
argArray[GET_DATASETROWINDEX] = oInput.datasetRowIndex;
argArray[GET_DISPLAYROWINDEX] = oInput.displayRowIndex;
argArray[GET_INPUTID] = oInput.sId;
argArray[GET_ID] = oInput.idValue;
argArray[GET_NVPS] = nvps;
return MVRZ.util.remote.update(dataObject, argArray);
} else {
// Just save the value locally
if(oInput) {
dataObject.set(oInput.datasetRowIndex, oInput.input, oInput.curVal);
YAHOO.util.Dom.removeClass(sId, NAME_CLASS_DIRTYINPUT);
} else if(oTarget) { // Catches defaultVal assigned to input that is not in DOM yet
var oInput = MVRZ.util.decodeInputId(sId);
MVRZ.util._getInput(oInput, oTarget);
dataObject.set(oInput.datasetRowIndex, oInput.input, oInput.curVal);
}
return true;
}
}
MVRZ.util.remote.saveDirtyInputs = function saveDirtyInputs(doDatasetName){
msg('saveDirtyInputs('+doDatasetName+')');
var aDirtyInputs = YAHOO.util.Dom.getElementsByClassName(NAME_CLASS_DIRTYINPUT);
return MVRZ.util.remote.saveInputs(doDatasetName)
}
MVRZ.util.remote.saveInputs = function saveInputs(aInputObjects, doDatasetName) {
msg('saveInputs(aInputObjects, '+doDatasetName+')');
//popupInfo('saveInputs(aInputs, '+doDatasetName+')::'+dump(aInputObjects));
var aInputs = new Object();
for (iIndex in aInputObjects) {
var oTarget = aInputObjects[iIndex];
var sId = oTarget.id;
var oInput = MVRZ.util.getInput(sId);
if(oInput == null) {
continue;
}
// Collate by dataset and idValue
var datasetName = oInput.datasetName;
if(typeof(doDatasetName)!='undefined' && doDatasetName !== datasetName) {
continue;
}
var idValue = oInput.idValue;
var datasetRowIndex = oInput.datasetRowIndex;
var input = oInput.input;
msg('saveInputs::'+datasetName+', '+datasetRowIndex+', '+input+'='+oInput.curVal);
if(typeof(aInputs[datasetName])=='undefined') aInputs[datasetName] = new Object();
if(typeof(aInputs[datasetName][datasetRowIndex])=='undefined') aInputs[datasetName][datasetRowIndex] = new Object();
aInputs[datasetName][datasetRowIndex][input] = oInput;
}
//popupInfo("saveInputs:: " + dump(aInputs));
for(datasetName in aInputs) {
//popupInfo("saveInputs, doing datasetName=" + datasetName);
var dataObject = MY[datasetName];
for (datasetRowIndex in aInputs[datasetName]) {
var aIds = new Object();
var aNvps = new Object();
var doneRequired = false;
var idValue = null;
var skipSave = false;
for (input in aInputs[datasetName][datasetRowIndex]) {
var oInput = aInputs[datasetName][datasetRowIndex][input];
if(idValue==null) idValue = oInput.idValue;
// Ensure for new (unsaved in DB) data that all requires/errors are fixed
if (oInput.idValue == 0 && !doneRequired) {
msg('save input - unsaved');
if (MVRZ.util.validation.allInputsValid(datasetName)) {
var inputArray = MVRZ.util.getAllInputs(oInput.datasetName, oInput.datasetRowIndex, oInput.idValue);
for (name in inputArray) {
aNvps[name] = inputArray[name];
aIds[oInput.sId]=1;
}
msg('saveInputs - saving for first time : ' + serializeArray(aNvps));
}
else {
msg('saveInputs - skipping save as not valid ');
skipSave = true;
break; // Next datasetRowIndex
}
doneRequired = true;
}
aNvps[oInput.input] = oInput.curVal;
aIds[oInput.sId]=1;
}
// Save the list
if(!skipSave) {
var nvps = serializeArray(aNvps);
dataObject.request.idArray = aIds;
//dataObject.request.saveArgArray = new Array();
////dataObject.request.saveArgArray[GET_DATASETROWINDEX] = datasetRowIndex;
////dataObject.request.saveArgArray[GET_ID] = idValue;
////dataObject.request.saveArgArray[GET_NVPS] = nvps;
msg('saveInputs() Calling MVRZ.util.remote.update(dataObject):'+nvps);
var argArray = {}
argArray[GET_DATASETROWINDEX] = datasetRowIndex;
argArray[GET_ID] = idValue;
argArray[GET_NVPS] = nvps;
MVRZ.util.remote.update(dataObject, argArray);
}
}
}
}
MVRZ.util.remote.saveTableInput = function(tableCallback, datasetName, dataIndex, fieldName, newValue, otherList) {
msg("MVRZ.util.remote.saveTableInput("+datasetName+","+fieldName+","+newValue+")");
if(typeof(otherList)=='undefined') {
msg("MVRZ.util.remote.saveTableInput undef otherlist");
var nvps = fieldName+'='+rawurlencode(newValue);
} else {
msg("MVRZ.util.remote.saveTableInput defined otherlist");
otherList[fieldName] = newValue;
var nvps = serializeArray(otherList);
}
msg("MVRZ.util.remote.saveTableInput nvps="+nvps);
var dataObject = MY[datasetName];
dataObject.newValue = newValue;
dataObject.tableCallback = tableCallback;
dataObject.datasetName = datasetName;
dataObject.handleSaveSuccess = function tmp(connectionObject) {
msg('saveTableInput handleSaveSuccess(), calling tableCallback(true,'+this.newValue+')');
if(typeof(this.tableCallback)=='function') this.tableCallback(true, this.newValue);
//var what = connectionObject.argument.what;
//var id = MVRZ.encodeSelectId(what,);
//var idValue = connectionObject.argument.currentDatasetIdValue;
//MY[what].renderEdit('tab'+what);
}
dataObject.handleSaveFailure = function tmp(connectionObject) {
msg('saveTableInput handleSaveFailure(), calling tableCallback(false)');
if(typeof(this.tableCallback)=='function') this.tableCallback(false);
}
//dataObject.request.saveArgArray = new Array();
//dataObject.request.saveArgArray['displayRowIndex'] = oInput.displayRowIndex;
//dataObject.request.saveArgArray['datasetRowIndex'] = dataIndex;
//dataObject.request.saveArgArray['sId'] = oInput.sId;
////dataObject.request.saveArgArray[GET_ID] = dataIndex;
////dataObject.request.saveArgArray[GET_NVPS] = nvps;
var argArray = {}
argArray[GET_ID] = dataIndex;
argArray[GET_NVPS] = nvps;
msg('MVRZ.util.remote.saveTableInput() argArray::' + serializeArray(dataObject.request.saveArgArray));
return MVRZ.util.remote.update(dataObject, argArray);
}
MVRZ.util.remote.save = function save(oTarget, dataObject) {
if(typeof(dataObject.args)=='undefined') var dataObjectIndex = dataObject.datasetName;
else var dataObjectIndex = dataObject.args.what;
msg("MVRZ.util.remote.save("+dataObjectIndex+")");
// Cancel any auto-save timer
MVRZ.util.event.clearTimer(TIMER_SAVE);
if(typeof(dataObject.handleSaveSuccess) != 'function') {
dataObject.handleSaveSuccess = function tmp(dataObject) {
var oRequest = dataObject.argument;
if(typeof(oRequest)=='undefined') return;
var dataObjectIndex = oRequest.args.what;
var sId = oRequest.save.sId;
msg("handleSaveSuccess("+dataObjectIndex+', '+sId+')');
var eInput = MVRZ.util.getInput(sId);
if(typeof(eInput)=='undefined' || eInput.curVal == eInput.oldVal) {
YAHOO.util.Dom.removeClass(oTarget, NAME_CLASS_DIRTYINPUT);
}
// Any special change function
if(eInput.dataRow=='select') {
oInput = gInputs[dataObjectIndex].inputs.selectField;
msg('handleSaveSuccess, '+dataObjectIndex+', '+typeof(oInput.fnOnSave)+' :: '+oInput.name);
} else {
oRequest.currentDataRowIndex = eInput.dataRow;
oRequest.currentDatasetIdValue = eInput.idValue;
oInput = gInputs[dataObjectIndex].inputs.fields[eInput.input];
msg('handleSaveSuccess, '+dataObjectIndex+', '+oInput.name+' :: Setting current DatRow/Id Index to '+oRequest.currentDataRowIndex+"/"+oRequest.currentDatasetIdValue);
}
if(typeof(oInput)!='undefined') {
if(typeof(oInput.fnOnSave)!='undefined') {
msg('handleSaveSuccess, calling fnOnChange::'+oInput.name);
oInput.fnOnSave(null, oRequest);
}
}
}
}
var curLocation = top.location.search;
var splitResult = curLocation.split('?');
var getStr = splitResult[1];
postStrArray = new Array();
postStrArray[YUI_GET_ACTION] = YUI_ACTION_SAVE;
postStr = serializeArray(postStrArray);
postStr += "&" + getStr; // Copy URL arguments
postStr += "&" + serializeArray(dataObject.save);
//var url = 'http://myvrzone.myvrzone.com/Data/YUI/?' + getStr;
var url = gDataUrlBase+ '/?' + getStr;
var method = 'POST';
msg('--->' + method+' '+url+'::'+postStr);
callback = {
success: connectionHandleSaveSuccess,
failure: connectionHandleSaveFailure,
scope: dataObject,
argument: dataObject,
timeout: 30000
}
var connectionObject = YAHOO.util.Connect.asyncRequest(method, url, callback, postStr);
}
MVRZ.util.remote.load = function(oRequest) {
msg('MVRZ.util.remote.load()');
if(typeof(oRequest) == 'undefined') {
msg('MVRZ.util.remote.load() - oRequest is undefined');
return;
}
// Current page get args need to be passed as well
var curLocation = window.location.href;
var splitResult = curLocation.split('?');
if(typeof(splitResult[1]) != 'undefined') var getStr = splitResult[1];
else getStr = '';
msg('getStr '+getStr);
if(typeof(oRequest.args.load) != 'undefined') {
if(getStr.length) getStr += '&';
getStr += serializeArray(oRequest.args.load);
}
//var url = 'http://myvrzone.myvrzone.com/Data/Rates?cid=4-1' + getStr;
//var url = 'http://myvrzone.myvrzone.com/Admin/Setup?' + getStr;
var url = gDataUrlBase + '/?' + getStr;
var method = 'GET';
msg('--->' + method+' '+url);
// Data already loaded?
dataIndex = oRequest.args.load.what;
if(typeof(MY[dataIndex])!='undefined' && MY[dataIndex].dataset[JSON_RESPONSE_INDEX_URLARGS] == getStr) {
// Already loaded this data
msg("Data is already loaded:" + getStr);
// Do callback/action
if (typeof(oRequest.handleLoadSuccess) == 'function') {
msg('Calling request function');
oRequest.handleLoadSuccess(oRequest /*oConnectionCallback*/);
return;
}
} else {
// Need to load this data
msg("Data is NOT already loaded:" + getStr);
}
// Load already in progress?
if(typeof(MVRZ.util.remote.requestObjectArray[url])=='undefined' || MVRZ.util.remote.requestObjectArray[url].requestStatus != REQUEST_STATUS_STARTED) {
oRequest.requestID = url;
oRequest.requestStatus = REQUEST_STATUS_STARTED;
//MVRZ.util.remote.requestStatusArray[url] = REQUEST_STATUS_STARTED;
MVRZ.util.remote.requestObjectArray[url] = oRequest;
callback = {
success: connectionHandleLoadSuccess,
failure: connectionHandleLoadFailure,
scope: oRequest,
argument: oRequest,
timeout: 30000
}
var connectionObject = YAHOO.util.Connect.asyncRequest(method, url, callback);
} else {
msg("Load is already in progress:" + url);
// Append object to current list to ensure that any callbacks are done
currentRequest = MVRZ.util.remote.requestObjectArray[url];
if(typeof(currentRequest.waitStack) == 'undefined') currentRequest.waitStack = new Array();
msg('== Adding to waitStack: '+dataIndex+'/'+oRequest.args.load.what);
currentRequest.waitStack.push(oRequest);
}
}
// Util Event --------------------------------------------------------------------
var gTimerArray = new Object();
var gTimerDisable = false;
var gSaveTimer;
MVRZ.util.event = new Object();
MVRZ.util.event.handlers = new Object();
MVRZ.util.event.subscribe = function subscribe(eventName, id, fnHandler, fnCallback, fnArg){
msg('MVRZ.util.event.subscribe ('+eventName+','+id+')');
//MVRZ.util.event.handlers[eventName] = fnHandler;
if (typeof(id) == 'undefined' || id == null || id.length == 0) {
id = EVENT_ID_DEFAULT;
}
if(typeof(MVRZ.util.event.handlers[eventName])=='undefined') {
MVRZ.util.event.handlers[eventName] = new Object();
}
MVRZ.util.event.handlers[eventName][id] = {
fn: fnHandler,
fnCallback: fnCallback,
fnArg: fnArg
};
}
MVRZ.util.event.unsubscribe = function unsubscribe(eventName, id){
msg('MVRZ.util.event.unsubscribe ('+eventName+')');
if (typeof(id) == 'undefined' || id == null || id.length == 0) {
id = EVENT_ID_DEFAULT;
}
if(typeof(MVRZ.util.event.handlers[eventName])!='undefined') {
delete MVRZ.util.event.handlers[eventName][id];
}
}
MVRZ.util.event.setTimer = function setTimer(sType, timeoutFunc, delay, arg1, arg2) {
if(gTimerDisable) return;
function doTimerFunc() {
msg('doTimerFunc');
timeoutFunc(arg1, arg2);
}
msg('setTimer('+sType+') '+typeof(timeoutFunc));
// Clear existing timer if present;
MVRZ.util.event.clearTimer(sType);
gTimerArray[sType] = tId = setTimeout(doTimerFunc, delay);
msg('setTimer('+sType+') tId='+tId);
return tId;
}
MVRZ.util.event.clearTimer = function clearTimer(sType) {
msg('clearTimer('+sType+')');
var tId = gTimerArray[sType];
if(typeof(tId)!='undefined' && tId) clearTimeout(tId);
gTimerArray[sType] = 0;
return 0;
}
MVRZ.util.event.disableTimer = function disableTimer(sWhy) {
clearTimeout(gSaveTimer);
gTimerDisable = true;
msg('MVRZ.util.event.disableTimer ('+sWhy+')');
return 0;
}
MVRZ.util.event.handleInputFocus = function handleInputFocus(e, obj){
oTarget = YAHOO.util.Event.getTarget(e, 1);
if(typeof(oTarget)=='undefined') oTarget = e; // Assume input passed in
var oDataset = MVRZ.util.event._getDataset(obj);
msg("Focus: "+oDataset.datasetName+" on "+oTarget.id);
var oInputInfo = MVRZ.util.decodeInputId(oTarget.id);
// Default handler
var oTr = YAHOO.util.Dom.getAncestorByTagName(oTarget, "tr");
YAHOO.util.Dom.addClass(oTr, "focus");
// If it's a date then show the date picker
var oInput = oDataset.inputs.fields[oInputInfo.input];
if(typeof(oInput)!='undefined') {
switch(oInput.inputType) {
case(INPUT_TYPE_DATE):
var refDate;
if(typeof(oInput.reference)!='undefined') refDate = oInput.reference.date;
MVRZ.Render.Controls.datePicker.show(oTarget.id, refDate);
break;
default:
MVRZ.Render.Controls.datePicker.hide();
}
}
}
MVRZ.util.event._inputCallback = function _inputCallback(obj, event) {
var oCallback = obj.callback[event];
if(typeof(oCallback)=='undefined') return;
var oDataset = obj.oDataset;
var groupId = oCallback.groupId;
if(typeof(groupId)!='undefined') {
var oEl = document.getElementById(groupId);
// Find group array item
var found = false;
for(var gIndex in oDataset.inputs.editList) {
if(oDataset.inputs.editList[gIndex].groupId === groupId) {
found = true;
break;
}
}
if(!found) return;
var group = oDataset.inputs.editList[gIndex];
var action = group[oCallback.action];
if(typeof(action)=='undefined') return;
if(typeof(action)=='function') {
action(obj);
} else { // Assume object with info on what to do
var idValue = obj.idValue;
var fId = obj.id;
var field = action.field;
var idField = oDataset.getUniqueField();
var cond = action.cond;
if(typeof(field)=='undefined' || typeof(field)=='idValue') return;
//var fieldVal = oDataset.get(idValue, field, idField);
fEl = document.getElementById(fId);
var fieldVal = MVRZ.util.getInputVal(fEl, oDataset.inputs.fields[field].inputType);
if(fieldVal == null) return;
if(typeof(cond)=='undefined') {
var sEvalInner = parseBool(fieldVal);
} else {
var sEvalInner = "'" + fieldVal + "'" + cond;
}
var sEval = "var result = ("+sEvalInner+")";
eval(sEval);
if(result) var oApply = action.ifTrue;
else var oApply = action.ifFalse;
for(item in oApply) {
switch(item) {
case('groupStyle'):
for(var i in oApply[item]) {
oEl.style[i] = oApply[item][i];
}
break;
case('set'):
var refInput = MVRZ.util.decodeInputId(fId);
for(var iField in oApply[item]) {
if(typeof(oApply[item][iField])=='function') {
var val = oApply[item][iField]({idValue: idValue});
} else {
var val = oApply[item][iField];
}
var sId = MVRZ.util.encodeInputId(oDataset.datasetName, refInput.datasetRowIndex, idValue, iField);
MVRZ.util.setInput(sId, val);
MVRZ.util.remote.saveInput(sId, oDataset);
}
break;
}
}
}
}
}
MVRZ.util.event._getDataset = function _getDataset(obj) {
if(typeof(obj.oDataset)!='undefined') {
var oDataset = obj.oDataset;
} else {
if(typeof(obj.args)=='undefined') var dataObjectIndex = obj.datasetName;
else var dataObjectIndex = obj.args.what;
var oDataset = MY[dataObjectIndex];
}
return oDataset;
}
MVRZ.util.event.handleInputBlur = function handleInputBlur(e, obj){
//MVRZ.util.remote.saveDirtyInputs();
var oTarget = YAHOO.util.Event.getTarget(e, 1);
if(typeof(oTarget)=='undefined') oTarget = e; // Assume input passed in
var oDataset = MVRZ.util.event._getDataset(obj);
if(typeof(oDataset)!='object') return;
var sId = oTarget.id;
msg("Blur: "+oDataset.datasetName+" on "+sId);
// Default handler
MVRZ.util.event.clearTimer(TIMER_SAVE);
// Compare values to see if it's changed
var oInput = MVRZ.util.getInput(sId);
if(typeof(oInput)=='undefined' || oInput == null) return;
var ret = true;
if(oInput.dataRow != 'select') {
if(MVRZ.util.validation._validateInput(oDataset.datasetName, oInput)) {
if(oInput.datasetRowIndex<0) { // Add a new dataset row
oDataset.append(0);
}
if (oInput.curVal != oInput.oldVal) {
MVRZ.util.render.clearInputError(oDataset.datasetName, oInput);
MVRZ.util.remote.saveInput(oTarget, oDataset);
}
} else { // Invalid
MVRZ.util.render.setInputError(oDataset.datasetName, oInput);
ret = false;
// Put the cursor back to the error field
// TODO THIS DOESN'T WORK
/*
YAHOO.util.Event.stopEvent(e);
el = document.getElementById(sId);
if(typeof(el) != 'undefined') el.focus();
return false;
*/
}
var oTr = YAHOO.util.Dom.getAncestorByTagName(oTarget, "tr");
YAHOO.util.Dom.removeClass(oTr, "focus");
}
MVRZ.util.event.changed(e, obj);
msg('MVRZ.util.event.handleInputBlur - DONE');
return ret;
}
MVRZ.util.event.handleInputKeydown = function handleInputKeydown(e, obj){
msg("handleInputKeydown()");
// Default handler
// Cancel any auto-save timer
MVRZ.util.event.clearTimer(TIMER_SAVE);
}
MVRZ.util.event.handleInputChange = function handleInputChange(e, obj){
msg("handleInputChange()");
// Default handler
return MVRZ.util.event.handleInputBlur(e, obj);
}
MVRZ.util.event.handleListInputChange = function handleListInputChange(e, oInput){
oTarget = YAHOO.util.Event.getTarget(e, 1);
if(typeof(oTarget)=='undefined') oTarget = e; // Assume input passed in
var sId = oTarget.id;
msg("handleListInputChange: "+oTarget.id+" = "+oTarget.checked+' ('+oInput.name+')');
aId = sId.split("-");
sListInputId = aId[0];
sListType = aId[1];
sListId = aId[2];
oId = MVRZ.util.decodeInputId(sListInputId);
/*
oId.sId
oId.datasetRowIndex
oId.datasetName
oId.idValue
oId.input
*/
var oListInput = document.getElementById(sListInputId);
if(typeof(oListInput)=='undefined') { // Check that the list input exists
return;
}
msg("handleListInputChange: sListInputId="+sListInputId+', sListType='+sListType+', oTarget type='+typeof(oTarget));
if(sListType==='ready') { // It's the first checkbox - saying whether something was reviewed or not
} else { // It's the second checkbox, saying whether something was included or not
if(typeof(oTarget)!='undefined') {
if(oTarget.checked) { // Need to ensure parents are all set too
msg("handleListInputChange: select is checked");
oReadyCheck = document.getElementById(sListInputId+'-ready-'+sListId);
if(typeof(oReadyCheck)!='undefined') {
oReadyCheck.checked = true;
// Check all parent hierarchy too - both boxes
oParentGroup = YAHOO.util.Dom.getAncestorByClassName(oReadyCheck, 'list-group');
msg("handleListInputChange: select is checked, oParentGroup type="+typeof(oParentGroup));
while(typeof(oParentGroup) === 'object' && oParentGroup != null /* && oParentGroup.className === 'list-group' */) {
// Set all children inputs
var aChildren = YAHOO.util.Dom.getChildren(oParentGroup);
for(iChildIndex in aChildren) {
if(aChildren[iChildIndex].type != 'checkbox' || aChildren[iChildIndex].id.indexOf("-select-") == -1) continue;
aChildren[iChildIndex].checked = true;
}
oParentGroup = YAHOO.util.Dom.getAncestorByClassName(oParentGroup, 'list-group');
}
}
} else { // Need to ensure that all children are unchecked
msg("handleListInputChange: select is NOT checked");
oParentGroup = YAHOO.util.Dom.getAncestorByClassName(oTarget, 'list-group');
var aInputs = YAHOO.util.Dom.getElementsBy(
function(oInput) {
return oInput.id.indexOf("-select-") == -1 ? false : true;
} ,
"input" ,
oParentGroup ,
function(oInput) {
oInput.checked = false;
}
);
}
}
}
msg("handleListInputChange: re-doing list fields");
// Construct the combo list string
var sListInput = '';
aListItems = YAHOO.util.Dom.getElementsByClassName(sListInputId+'-list-item');
msg("handleListInputChange: re-doing list fields, count="+aListItems.length);
for(listIndex in aListItems) {
var aId = aListItems[listIndex].id.split("-");
sListInputId = aId[0];
sListType = aId[1];
sListId = aId[2];
if(!aListItems[listIndex].checked) {
oReadyCheck = document.getElementById(sListInputId+'-ready-'+sListId);
if(typeof(oReadyCheck)!='undefined' && !oReadyCheck.checked) continue;
}
sListInput += '&' + sListId + '=' + (aListItems[listIndex].checked ? '1' : '0') + ':';
}
oListInput.value = sListInput;
var datasetObject = MY[oId.datasetName];
msg("handleListInputChange: "+oTarget.id+" = "+oTarget.checked+' ('+oInput.name+')');
MVRZ.util.remote.saveInput(oListInput, datasetObject);
}
MVRZ.util.event.handleInputKeyup = function handleInputKeyup(e, obj){
oTarget = YAHOO.util.Event.getTarget(e, 1);
if(typeof(oTarget)=='undefined') oTarget = e; // Assume input passed in
var sId = oTarget.id;
var oDataset = MVRZ.util.event._getDataset(obj);
msg("Keyup: "+oTarget.id+" = "+oTarget.value+' ('+oDataset.datasetName+')');
// Default handler
// - Set up timer to auto-save data if key not pressed again
var oInput = MVRZ.util.getInput(sId);
if(typeof(oInput)=='undefined' || oInput==null) return;
// Auto-save
if(MVRZ.util.validation._validateInput(oDataset.datasetName, oInput, true)) { // true for keyup
MVRZ.util.render.clearInputError(oDataset.datasetName, oInput);
if (typeof(oInput.oldVal)=='undefined' || oInput.curVal != oInput.oldVal) {
//alert('about to set timer ');
//msg('about to call setTimer '+typeof(MVRZ.util.remote.saveInput));
gSaveTimer = MVRZ.util.event.setTimer(TIMER_SAVE, MVRZ.util.remote.saveInput, 60000, oTarget, obj);
YAHOO.util.Dom.addClass(oTarget, NAME_CLASS_DIRTYINPUT);
} else {
YAHOO.util.Dom.removeClass(oTarget, NAME_CLASS_DIRTYINPUT);
}
} else {
MVRZ.util.render.setInputError(oDataset.datasetName, oInput);
return false;
}
MVRZ.util.event.changed(e, obj);
return true;
}
MVRZ.util.event.changed = function changed(e, obj){
oTarget = YAHOO.util.Event.getTarget(e, 1);
if(typeof(oTarget)=='undefined') oTarget = e; // Assume input passed in
var oDataset = MVRZ.util.event._getDataset(obj);
if(typeof(oDataset.args)=='undefined') {
var oInputs = MY[oDataset.datasetName].inputs;
} else {
var oInputs = gInputs[oDataset.datasetName].inputs;
}
var sId = oTarget.id;
//msg('MVRZ.util.event.changed, '+dataObjectIndex+', '+sId);
if(typeof(oDataset.oSteps)!='undefined' && typeof(oDataset.oSteps.changeCallback)!='undefined') {
msg('MVRZ.util.event.changed: calling changeCallback()');
oDataset.oSteps.changeCallback();
}
// Any special functions on change for this input?
var eInput = MVRZ.util.getInput(sId);
msg('MVRZ.util.event.changed, '+oDataset.datasetName+', '+sId+' :: '+eInput.datasetRowIndex);
if(eInput.datasetRowIndex=='select') {
oInput = oInputs.selectField;
msg('MVRZ.util.event.changed, '+oDataset.datasetName+', '+typeof(oInput.fnOnChange)+' :: '+oInput.name);
} else {
oInput = oInputs.fields[eInput.input];
}
if(typeof(oInput)!='undefined') {
if(typeof(oInput.fnOnChange)!='undefined') {
msg('MVRZ.util.event.changed, calling fnOnChange');
oInput.fnOnChange(e, obj);
}
}
if(typeof(obj.callback)!='undefined') {
if(typeof(obj.callback.changed)!='undefined') {
msg('MVRZ.util.event.changed, processing changed callback');
MVRZ.util.event._inputCallback(obj, 'changed');
}
}
msg('MVRZ.util.event.changed - DONE');
}
MVRZ.util.event.handleInputClick = function handleInputClick(e, obj){
oTarget = YAHOO.util.Event.getTarget(e, 1);
if(typeof(oTarget)=='undefined') oTarget = e; // Assume input passed in
msg("Click: "+obj+" obj.args.what "+obj.args.what+", target id="+oTarget.id);
// Default handler
}
// Util Render --------------------------------------------------------------------
MVRZ.util.render = new Object();
MVRZ.util.saveCellEdit = function saveCellEdit(oInfo, fnCallback, newValue) {
msg('MVRZ.util.saveCellEdit(): '+oInfo.datasetName);
var oDataset = MY[oInfo.datasetName];
var record = oInfo.getRecord(),
column = oInfo.getColumn(),
oldValue = oInfo.value,
recordIndex = record.getData(oDataset.inputs.uniqueField),
datatable = oInfo.getDataTable();
msg("saveCellEdit: recordIndex="+recordIndex+", column.key="+column.key+", oldValue="+oldValue+", newValue="+newValue);
// Any other fields that should be supplied at the same time?
if(recordIndex == null) { // New row
msg('MVRZ.util.render.saveCellEdit - NEW RECORD');
var otherList = new Object();
for(input in oDataset.inputs) {
if(!oDataset.inputs[input].isRequired) continue;
var fieldName = oDataset.inputs[input];
otherList[fieldName] = record.getData(fieldName);
msg('MVRZ.util.render.saveCellEdit - Appending Field '+fieldName+' = '+otherList[fieldName]);
}
}
msg("saveCellEdit: this.uniqueField="+oDataset.inputs.uniqueField+", recordIndex="+recordIndex+", column.key="+column.key+", oldValue="+oldValue+", newValue="+newValue);
// Save the value to the DB
MVRZ.util.remote.saveTableInput(fnCallback, oInfo.datasetName, recordIndex, column.key, newValue, otherList);
if(typeof(oInfo.fnAfterTableSave)=='function') {
oInfo.fnAfterTableSave();
}
}
MVRZ.util.checkboxCellEditor = function checkboxCellEditor(oEditor) {
alert('checkboxCellEditor: ' + oEditor.datasetName);
}
MVRZ.util.render.cellEditor = function cellEditor(oDataset, inputName) {
msg('MVRZ.util.render.cellEditor('+oDataset.datasetName+', '+typeof(oDataset)+', '+inputName+')');
var oInputs = oDataset.inputs;
//this.uniqueField = oInputs.uniqueField;
var objEditor = new Object({
datasetName: oDataset.datasetName,
fnAfterTableSave: oDataset.fnAfterTableSave,
asyncSubmitter: function (fnCallback, newValue) {
msg('MVRZ.util.render.cellEditor asyncSubmitter()');
MVRZ.util.saveCellEdit(this, fnCallback, newValue);
}
});
var dataValue = null;
var oInput = oInputs.fields[inputName];
if(typeof(oInput)=='undefined') return;
switch(oInput.inputType) {
case(INPUT_TYPE_SELECT):
msg('MVRZ.util.render.cellEditor- select');
// Fill the options
var ddOptions = new Array();
if(typeof(oInput.optionsFunction)=='object') {
if (oInput.optionsFunction instanceof Array) {
msg("render.cellEditor calling setOptions()");
ddOptions = oInput.optionsFunction;
}
else { // Object - assume dataset
//if(/*oInput.isRequired && */ typeof(oInput.optionsFunction.inputs.zeroSelect)=='undefined') {
// oInput.optionsFunction.inputs.zeroSelect = " -- Select --";
//}
var labelField = oInput.optionsFunction.inputs.selectOptionLabelField;
if(typeof(labelField)=='undefined') labelField = 'name';
var valueField = oInput.optionsFunction.inputs.uniqueField;
msg("render.cellEditor oInput.optionsFunction.select(eInput, " + dataValue + "," + oInput.name + ")");
var count=0;
ddOptions[count++] = {value:0, label:"-- Any --"};
for(var i in oInput.optionsFunction.datasetData) {
ddOptions[count++] = {value:oInput.optionsFunction.datasetData[i][valueField], label:oInput.optionsFunction.datasetData[i][labelField]};
}
}
} else if(typeof(oInput.optionsFunction)=='function') {
msg("render.input calling optionsFunction()");
ddOptions = oInput.optionsFunction(null, dataValue);
}
if(ddOptions.length) {
objEditor.dropdownOptions = ddOptions;
var oEditor = new YAHOO.widget.DropdownCellEditor(objEditor);
} else {
oEditor = null;
}
break;
case(INPUT_TYPE_CHECKBOX):
msg('MVRZ.util.render.cellEditor - checkbox');
//var oEditor = new MVRZ.util.checkboxCellEditor(objEditor);
break;
default:
msg('MVRZ.util.render.cellEditor - default');
var oEditor = new YAHOO.widget.TextboxCellEditor(objEditor);
}
msg('MVRZ.util.render.cellEditor - DONE');
return oEditor;
}
MVRZ.util.render._inputListItem = function _inputListItem(id, sItem, listId, aListData, oInput) {
msg("render._inputListItem("+id+","+sItem+","+listId+", aListData, oInput)");
var oContent = document.createElement('div');
oContent.id = 'listContent:'+id;
var oCheckReady = document.createElement('input');
oCheckReady.type = 'checkbox';
oCheckReady.id = listId + '-ready-' + id;
if(typeof(aListData[id])!='undefined' && aListData[id].isSelected.length>0) oCheckReady.checked = true;
oContent.appendChild(oCheckReady);
var oCheck = document.createElement('input');
oCheck.type = 'checkbox';
oCheck.id = listId + '-select-' + id;
oCheck.className = listId+'-list-item'; // Needed to search for these
if(typeof(aListData[id])!='undefined' && aListData[id]['isSelected'] != 0) oCheck.checked = true;
oContent.appendChild(oCheck);
var oText = document.createTextNode(sItem);
oContent.appendChild(oText);
if(typeof(oInput.fnOnChange)=='function') {
msg("render._inputListChildren fnOnChange: oInput.fnOnChange is "+typeof(oInput.fnOnChange));
var fnOnChange = oInput.fnOnChange;
} else var fnOnChange = MVRZ.util.event.handleListInputChange;
YAHOO.util.Event.addListener(oCheckReady.id, "change", fnOnChange, oInput);
YAHOO.util.Event.addListener(oCheck.id, "change", fnOnChange, oInput);
return oContent;
}
MVRZ.util.render._inputListChildren = function _inputListChildren(level, listId, forParentId, oInput, aListData, oData, oListMapping) {
msg("render._inputListChildren("+level+","+forParentId+", oData, oListMapping)");
var oListContent = document.createElement('div');
oListContent.className = 'list-item';
var itemCount = 0;
for(listIndex in oData) {
var parentId = oData[listIndex][oListMapping.parentId];
if(parentId != forParentId) continue;
var id = oData[listIndex][oListMapping.id];
var sItem = oData[listIndex][oListMapping.label];
if(typeof(sItem)=='undefined' || sItem.length==0) continue;
var oContent = MVRZ.util.render._inputListItem(id, sItem, listId, aListData, oInput);
msg("render._inputListChildren:"+level+" - typeof oContent = "+typeof(oContent)+', id='+oContent.id);
var oSubContent = MVRZ.util.render._inputListChildren(level+1, listId, id, oInput, aListData, oData, oListMapping);
if(typeof(oSubContent) == 'object') {
msg("render._inputListChildren("+level+","+forParentId+", oData, oListMapping) - oSubContent");
oContent.appendChild(oSubContent);
oContent.className = 'list-group';
}
msg("render._inputListChildren("+level+","+forParentId+", oData, oListMapping) - oListContent");
oListContent.appendChild(oContent);
itemCount++;
}
msg("render._inputListChildren("+level+","+forParentId+", oData, oListMapping) - END");
if(itemCount) return oListContent;
return;
}
MVRZ.util.render._inputList = function _inputList(listId, oInput, sData) {
// List the items to choose from
////this.inputs.listMapping = {label: 'name', isSearchable: 'isSearchable', parentId: 'parentID', typeId: 'typeID', description: 'description'};
msg("render._inputList "+oInput.name+":"+typeof(oInput.fnOnChange)+", "+typeof(oInput.optionsFunction));
var oListContent = document.createElement('div');
if(typeof(oInput.optionsFunction)=='object') {
// Parse the datafield
msg("render._inputList sData: "+sData);
var aListData = new Array();
var aTmpListData = deserializeArray(sData);
for(dataIndex in aTmpListData) {
msg("render._inputList aListData: "+dataIndex+'='+aTmpListData[dataIndex]);
aValText = aTmpListData[dataIndex].split(":");
if(aValText==null || aValText.length==0) continue;
aListData[dataIndex] = {isSelected: aValText[0], text: aValText[1]};
}
msg("render._inputList aListData: "+serializeArray(aListData));
var oListMapping = oInput.optionsFunction.inputs.listMapping;
// Mapping is {id: '', label: '', isSearchable: '', isNotSelectable: '', parentId: '', typeId: '', description: ''};
msg("render._inputList listMappings: "+oListMapping.label+", "+oListMapping.parentId);
var oData = oInput.optionsFunction.datasetData;
for(listIndex in oData) {
var parentId = oData[listIndex][oListMapping.parentId];
msg("render._inputList data: listIndex="+listIndex+", parentId="+parentId);
if(parentId == 0) {
msg("render._inputList no parent: listIndex="+listIndex+", parentId="+parentId);
var id = oData[listIndex][oListMapping.id];
var sItem = oData[listIndex][oListMapping.label];
if(typeof(sItem)=='undefined' || sItem.length==0) continue;
oContent = MVRZ.util.render._inputListItem(id, sItem, listId, aListData, oInput);
var oSubContent = MVRZ.util.render._inputListChildren(0, listId, id, oInput, aListData, oData, oListMapping);
if(typeof(oSubContent) == 'object') {
oContent.appendChild(oSubContent);
oContent.className = 'list-group';
}
/*
if(!inputExists && !noHandlers && oInput.inputType !== INPUT_TYPE_HIDDEN) {
msg("render.input fnOnChange: oInput.fnOnChange is "+typeof(oInput.fnOnChange));
if(typeof(oInput.fnOnChange)=='function') var fnOnChange = oInput.fnOnChange;
else var fnOnChange = MVRZ.util.event.handleInputChange;
YAHOO.util.Event.addListener(eInput.id, "change", fnOnChange, datasetObject);
}
*/
oListContent.appendChild(oContent);
}
}
}
return oListContent;
}
MVRZ.util.render.inputElement = function inputElement(id, oCfgInput, isDisabled) {
var eInput = document.getElementById(id);
var inputExists = true;
if(typeof(eInput)=='undefined' || eInput==null) inputExists = false;
if(typeof(isDisabled)=='undefined') isDisabled = false;
var inputType = oCfgInput.inputType;
if(!inputExists) {
msg(id+": List does not exist");
if(!oCfgInput.readonly) { // Readonly - draw a div
switch(inputType) {
case(INPUT_TYPE_DROPDOWN):
case(INPUT_TYPE_SELECT):
eInput = document.createElement(INPUT_TYPE_SELECT);
break;
case(INPUT_TYPE_LIST):
case(INPUT_TYPE_TEXTAREA):
var eInput = document.createElement(INPUT_TYPE_TEXTAREA);
break;
case(INPUT_TYPE_HIDDEN):
case(INPUT_TYPE_CHECKBOX):
var eInput = document.createElement('input');
eInput.type = inputType;
break;
case(INPUT_TYPE_DATE):
var eInput = document.createElement('input');
eInput.type = "text";
break;
default:
var eInput = document.createElement('input');
if (YAHOO.env.ua.ie == 0) {
eInput.type = inputType;
} else {
eInput.type = "text";
}
break;
}
eInput.id = id;
eInput.disabled = oCfgInput.disabled | isDisabled;
ret = eInput;
} else { // Readonly - draw a div
switch(inputType) {
case(INPUT_TYPE_DROPDOWN):
case(INPUT_TYPE_SELECT):
eInput = document.createElement(INPUT_TYPE_SELECT);
eInput.className = "mvrz-input-readonly mvrz-input-" + inputType;
eInput.id = id;
break;
default:
eInput = document.createElement('div');
eInput.id = id + "-div";
eInput.className = "mvrz-input-readonly mvrz-input-" + inputType;
break;
}
}
}
return eInput;
}
MVRZ.util.render.input = function input(oInput, id, dataValue, datasetObject, forceRedraw, postponeOptions, idValue, cfg) {
if(typeof(oInput)=='undefined') return;
msg("render.input "+oInput.name+", id="+id+", dataValue="+dataValue+', datasetName='+datasetObject.datasetName+", fnOnChange is "+typeof(oInput.fnOnChange));
//var dataValue = MVRZ.data.object[dataObjectIndex][JSON_RESPONSE_INDEX_DATA][dataRow][input];
//var idValue = MVRZ.data.object[dataObjectIndex][JSON_RESPONSE_INDEX_DATA][dataRow][idField];
//var id = dataRow + ":" + idValue + ":" +input;
if(oInput.noEditRender) return;
if(typeof(postponeOptions) == 'undefined') postponeOptions = false;
if(typeof(oInput.inputType) == 'function') return oInput.inputType(datasetObject, oInput);
var doSave = false;
if(typeof(oInput.setVal)!='undefined') {
if(typeof(oInput.setVal)=='function') {
dataValue = oInput.setVal({idValue: idValue, field: oInput.name});
} else {
dataValue = oInput.setVal; // Default
}
} else {
var setDefault = false;
switch(oInput.inputType) {
case(INPUT_TYPE_DATE):
if(typeof(dataValue) == 'undefined' || dataValue == null || dataValue.length==0 || dataValue==DATE_DB_ZERO) {
setDefault = true;
}
break;
case(INPUT_TYPE_DATETIME):
if(typeof(dataValue) == 'undefined' || dataValue == null || dataValue.length==0 || dataValue==DATETIME_DB_ZERO) {
setDefault = true;
}
break;
default:
if(typeof(dataValue) == 'undefined' || dataValue == null || dataValue.length==0) {
setDefault = true;
}
}
if(setDefault) {
if(typeof(oInput.defaultVal)!='undefined') {
dataValue = oInput.defaultVal; // Default
if(typeof(dataValue) != 'undefined' && dataValue != null) { // It is done, need to save to make sure it's recorded
doSave = true;
var oI = MVRZ.util.decodeInputId(id);
datasetObject.set(oI.datasetRowIndex, oI.input, dataValue); // TODO - fix this to convert dataValue to correct format
}
}
}
}
if(typeof(dataValue) == 'undefined' || dataValue == null) dataValue = ''; // For new entries
if(typeof(forceRedraw)!='undefined' && !forceRedraw) forceRedraw = false;
else forceRedraw = true;
msg("MVRZ.util.render.input "+id+', dataValue='+dataValue+', eInput='+eInput+', forceRedraw='+forceRedraw);
var noHandlers = false;
if(typeof(oInput.noHandlers)!='undefined' && oInput.noHandlers) noHandlers = true;
var doHandlers = false;
if(typeof(oInput.doHandlers)!='undefined' && oInput.doHandlers) doHandlers = true;
var onlyChangeHandler = false;
if(typeof(oInput.onlyChangeHandler)!='undefined' && oInput.onlyChangeHandler) onlyChangeHandler = true;
// Each data object
msg("render.input "+id+' type='+oInput.inputType+', onlyChangeHandler='+onlyChangeHandler);
var oPrepend, oAppend;
var isDisabled = oInput.disabled | false;
if(typeof(datasetObject.inputs.isDisabled)=='function') {
isDisabled |= datasetObject.inputs.isDisabled(idValue);
}
var readonly = oInput.readonly;
var isHidden = (oInput.inputType==INPUT_TYPE_HIDDEN ? true : false) || oInput.isHidden;
var eInput = document.getElementById(id);
var inputExists = true;
if(typeof(eInput)=='undefined' || eInput==null) {
eInput = MVRZ.util.render.inputElement(id, oInput, isDisabled);
inputExists = false;
}
switch(oInput.inputType) {
case(INPUT_TYPE_DROPDOWN):
case(INPUT_TYPE_SELECT):
if(!inputExists) {
msg(id+": Select does not exist");
//eInput = document.createElement(oInput.inputType);
//eInput.id = id;
if (oInput.selectConfig && oInput.selectConfig.preLabel) {
oPrepend = document.createElement("div");
oPrepend.id = id + "-prelabel";
oPrepend.className = "select-prelabel";
oPrepend.innerHTML = oInput.selectConfig.preLabel;
}
if (oInput.selectConfig && oInput.selectConfig.canAddNew && typeof(oInput.optionsFunction)=='object') {
oAppend = document.createElement("div");
oAppend.id = id + "-button";
oAppend.className = "select-new-button";
if(typeof(oInput.selectConfig) && typeof(oInput.selectConfig.addNewLabel)!='undefined') {
var label = oInput.selectConfig.addNewLabel;
} else {
var label = "Add";
}
// Add a "NEW" button?
YAHOO.util.Event.onAvailable(oAppend.id, function() {
var oButton = new YAHOO.widget.Button({
label: label,
value: 1,
container: oAppend.id,
checked: true,
onclick: {
fn: function() {
var newItem = prompt('Enter new '+oInput.label);
if(newItem != null && newItem.length) { // Add it to the DB and then update the display
function fnFailed() {popup(POPUP_TYPE_ERROR, 'Could not add new entry - please check that this does not already exist.');}
function fnSuccess(oOptionsDataset) {
//popupInfo('Added new entry');
// Set the selection to the new entry
oOptionsDataset.newSelectValue = oOptionsDataset.currentDatasetIdValue;
//popupInfo('newSelectValue='+oOptionsDataset.newSelectValue);
//return;
oOptionsDataset.unload();
if(typeof(oInput.selectConfig.addNewFnSuccess)=='function') {
oInput.selectConfig.addNewFnSuccess();
} else {
oOptionsDataset.load('','',oOptionsDataset, function(oOptionsDataset) {
//popupInfo('After Load: newSelectValue='+oOptionsDataset.newSelectValue);
oOptionsDataset.setDatasetId(oOptionsDataset.newSelectValue);
oOptionsDataset.updateMainSelect();
oOptionsDataset.render();
});
}
}
/*
var argArray = new Object();
argArray['newInput'] = id;
argArray['newValue'] = newItem;
argArray['datasetName'] = oInput.optionsFunction.datasetName;
doServerAction(YUI_ACTION_NEW, argArray, fnSuccess, fnFailed);
*/
var oOptionsDataset = oInput.optionsFunction;
// Args
var aNvps = new Object();
aNvps['name'] = newItem;
if (typeof(oInput.addNewArgs) != 'undefined') {
for (argIndex in oInput.addNewArgs) {
aNvps[oInput.addNewArgs[argIndex].name] = eval(oInput.addNewArgs[argIndex].eval);
}
}
// Save the list
var nvps = serializeArray(aNvps);
//oDataset.request.idArray = id;
oOptionsDataset.request.inputArgs = [{
selectId: id
}, {
oInput: oInput
}, {
datasetName: datasetObject.datasetName
}];
//oOptionsDataset.request.saveArgArray = new Array();
////oOptionsDataset.request.saveArgArray[GET_DATASETROWINDEX] = 0;
////oOptionsDataset.request.saveArgArray[GET_INPUTID] = id;
////oOptionsDataset.request.saveArgArray[GET_ID] = 0;
////oOptionsDataset.request.saveArgArray[GET_NVPS] = nvps;
var argArray = {};
argArray[GET_DATASETROWINDEX] = 0;
argArray[GET_INPUTID] = id;
argArray[GET_ID] = 0;
argArray[GET_NVPS] = nvps;
oOptionsDataset.save(argArray, '', oOptionsDataset, fnSuccess, fnFailed);
}
}
}
});
}); // End onAvailable
}
} else {
msg(id+": Select exists - "+typeof(eInput)+', '+dataValue);
//popupInfo(id+": Select exists - "+typeof(eInput)+', '+dataValue);
}
// Fill the options
msg("render.input in select "+oInput.name+":"+typeof(oInput.fnOnChange));
if((doHandlers || !inputExists) && !noHandlers && !isHidden) {
msg("render.input fnOnChange: oInput.fnOnChange is "+typeof(oInput.fnOnChange));
if(typeof(oInput.fnOnChange)=='function') {
var fnOnChange = oInput.fnOnChange;
} else {
if(cfg && typeof(cfg.onChange)!='undefined') {
if(typeof(cfg.onChange)=='function') {
var fnOnChange = function(e, obj) {
cfg.onChange(obj);
MVRZ.util.event.handleInputChange(e, obj);
}
} else {
if(typeof(cfg.onChange.datasetName)!='undefined' && cfg.onChange.datasetName!=null) {
var fnDatasetName = cfg.onChange.datasetName;
} else {
var fnDatasetName = datasetName;
}
var fnName = cfg.onChange.fnName;
var fnOnChange = function(e, obj) {
MVRZ.util.event.handleInputChange(e, obj);
MVRZ.util.event.subscribe(EVENT_CONNECTION_PROCESSED, '', MVRZ.util.haveConnectionsCompleted, function(oArg) {
MY[fnDatasetName][fnName]();
});
//MY[fnDatasetName][fnName]();
}
}
} else {
var fnOnChange = MVRZ.util.event.handleInputChange;
}
}
YAHOO.util.Event.addListener(eInput.id, "change", fnOnChange, datasetObject);
}
break;
case(INPUT_TYPE_LIST):
/*
if(!inputExists) {
msg(id+": List does not exist");
eInput = document.createElement(INPUT_TYPE_TEXTAREA);
eInput.id = id;
} else {
msg(id+": List exists - "+typeof(eInput)+', '+dataValue);
}
*/
eInput.value = dataValue;
var oListContent = MVRZ.util.render._inputList(id, oInput, dataValue);
var oPostInput = document.createElement('div');
oPostInput.appendChild(oListContent);
break;
case('id'):
return;
break;
case(INPUT_TYPE_TEXTAREA):
/*
if(!inputExists) {
var eInput = document.createElement(INPUT_TYPE_TEXTAREA);
eInput.id = id;
}
*/
//eInput.innerHTML = dataValue;
////eInput.value = dataValue;
//var oEditor = new YAHOO.widget.SimpleEditor(id);
//oEditor.render();
if(!readonly && !noHandlers && !onlyChangeHandler) {
//oEditor.on("editorKeyDown", MVRZ.util.event.handleInputKeydown, datasetObject);
//oEditor.on("editorKeyUp", MVRZ.util.event.handleInputKeyup, datasetObject);
//YAHOO.util.Event.addListener(id, "blur", MVRZ.util.event.handleInputBlur, datasetObject);
YAHOO.util.Event.addListener(eInput.id, "keydown", MVRZ.util.event.handleInputKeydown, datasetObject);
YAHOO.util.Event.addListener(eInput.id, "keyup", MVRZ.util.event.handleInputKeyup, datasetObject);
}
//NO BREAK//break;
case(INPUT_TYPE_HIDDEN):
case(INPUT_TYPE_CHECKBOX):
case(INPUT_TYPE_PASSWORD):
case(INPUT_TYPE_DATE):
case(INPUT_TYPE_DATETIME):
case(INPUT_TYPE_TIMESTAMP):
case(INPUT_TYPE_TELEPHONE):
case(INPUT_TYPE_TEXT):
default:
if(!inputExists) {
msg(id+": input does not exist");
//var eInput = document.createElement('input');
//eInput.id = id;
/*
if (oInput.inputType == INPUT_TYPE_CHECKBOX) {
eInput.type = INPUT_TYPE_CHECKBOX;
}
else
*/
if (oInput.inputType == INPUT_TYPE_PASSWORD) {
var oAppend = document.createElement('img');
oAppend.id=id+"-reveal";
oAppend.src = HTTP_ROOT + "/images/node_open.gif";
YAHOO.util.Event.addListener(oAppend.id, 'click', function(e, obj){
el = YAHOO.util.Event.getTarget(e, 1);
oldObject = YAHOO.util.Dom.getPreviousSibling(el);
var curType = oldObject.getAttribute('type');
//var newType = curType==='text' ? 'password' : 'text';
//el.type = 'text';
if (curType === 'text') {
var newType = 'password';
el.src = HTTP_ROOT + "/images/node_open.gif";
}
else {
var newType = 'text';
el.src = HTTP_ROOT + "/images/node_closed.gif";
}
//YAHOO.util.Dom.setAttribute(oldObject, 'type', newType);
oInputInfo = MVRZ.util.decodeInputId(oldObject.id);
oInput = MY[oInputInfo.datasetName].inputs.fields[oInputInfo.input];
var id = oldObject.id;
var dataValue = oldObject.value;
//oInput.inputTypeSet = newType;
//alert('Clicked '+oldObject.id+' old='+curType+', new='+newType);
var newObject = document.createElement('input');
newObject.type = newType;
if(oldObject.size) newObject.size = oldObject.size;
if(oldObject.value) newObject.value = oldObject.value;
if(oldObject.name) newObject.name = oldObject.name;
if(oldObject.id) newObject.id = oldObject.id;
if(oldObject.className) newObject.className = oldObject.className;
var styleList = ['width', 'height'];
for(styleIndex in styleList) {
var styleItem = styleList[styleIndex];
YAHOO.util.Dom.setStyle(newObject, styleItem, YAHOO.util.Dom.getStyle(oldObject, styleItem));
}
el.parentNode.replaceChild(newObject,oldObject);
oInput.doHandlers = true;
//oldObject.parentNode.removeChild(oldObject);
MVRZ.util.render.input(oInput, id, dataValue, MY[oInputInfo.datasetName]);
//oldObject.type = newType;
});
if(typeof(oInput.inputTypeSet) != 'undefined') eInput.type = oInput.inputTypeSet;
else eInput.type = INPUT_TYPE_PASSWORD;
}
/*
else if(oInput.inputType == INPUT_TYPE_HIDDEN) {
isHidden = true;
//eInput.type = INPUT_TYPE_HIDDEN;
//eInput.type = INPUT_TYPE_TEXT; // TESTING
}
else {
//eInput.type = INPUT_TYPE_TEXT;
eInput.type = oInput.inputType; // If unrecognised then defaults to text
}
*/
} else {
msg(id+": input already exists");
}
var inputValue, innerHTML, inputChecked;
// Format the data value?
if(typeof(oInput.formatter)=='function') {
dataValue = oInput.formatter(dataValue);
switch(oInput.inputType) {
case(INPUT_TYPE_CHECKBOX):
inputChecked = typeof(dataValue)=='undefined' || dataValue==0 || dataValue==null ? false : (dataValue?true:false);
break;
case(INPUT_TYPE_TEXTAREA):
case(INPUT_TYPE_TIMESTAMP):
case(INPUT_TYPE_TIME):
case(INPUT_TYPE_DATETIME):
default:
inputValue = dataValue;
break;
}
} else {
switch(oInput.inputType) {
case(INPUT_TYPE_CHECKBOX):
//eInput.type = oInput.inputType;
inputChecked = typeof(dataValue)=='undefined' || dataValue==0 || dataValue==null ? false : true;
break;
case(INPUT_TYPE_DATE):
//eInput.type = INPUT_TYPE_TEXT;
inputValue = MVRZ.util.formatter.date.format(dataValue);
eInput.readOnly = true;
break;
case(INPUT_TYPE_TIMESTAMP):
inputValue = MVRZ.util.formatter.timestamp.format(dataValue);
break;
case(INPUT_TYPE_TIME):
inputValue = MVRZ.util.formatter.time.format(dataValue);
break;
case(INPUT_TYPE_DATETIME):
//eInput.type = INPUT_TYPE_TEXT;
inputValue = MVRZ.util.formatter.datetime.format(dataValue);
break;
default:
//eInput.type = INPUT_TYPE_TEXT;
inputValue = dataValue;
break;
}
}
if(readonly) {
if(typeof(inputChecked)!='undefined') {
eInput.checked = inputChecked;
} else if(typeof(inputValue)!='undefined') {
eInput.innerHTML = inputValue;
} else if(typeof(innerHTML)!='undefined') {
eInput.innerHTML = innerHTML;
}
} else {
if(typeof(inputChecked)!='undefined') {
eInput.checked = inputChecked;
}
if(typeof(inputValue)!='undefined') {
eInput.value = inputValue;
}
if(typeof(innerHTML)!='undefined') {
eInput.innerHTML = innerHTML;
}
}
/*
if(!oInput.readonly && !noHandlers) {
if(!onlyChangeHandler) {
YAHOO.util.Event.addListener(eInput.id, "keydown", MVRZ.util.event.handleInputKeydown, datasetObject);
YAHOO.util.Event.addListener(eInput.id, "keyup", MVRZ.util.event.handleInputKeyup, datasetObject);
}
if(oInput.inputType == INPUT_TYPE_CHECKBOX) {
YAHOO.util.Event.addListener(eInput.id, "change", MVRZ.util.event.handleInputChange, datasetObject);
}
}
*/
}
YAHOO.util.Dom.addClass(eInput, NAME_CLASS_INPUT);
YAHOO.util.Dom.addClass(eInput, NAME_CLASS_INPUT + '-' + datasetObject.datasetName);
msg("render.input "+id+' inputExists='+inputExists+', doHandlers='+doHandlers);
if (!isHidden && !readonly && (!inputExists || doHandlers)) {
msg("render.input "+id+' oInput.readonly='+oInput.readonly+', noHandlers='+noHandlers+', onlyChangeHandler='+onlyChangeHandler);
if(!noHandlers) {
var oHandlerArg = {oDataset:datasetObject, callback: oInput.callback, field: oInput.name, idValue: idValue, id: id};
if(!onlyChangeHandler) {
msg("render.input "+id+' Adding key handlers');
YAHOO.util.Event.addListener(eInput.id, "keydown", MVRZ.util.event.handleInputKeydown, oHandlerArg);
YAHOO.util.Event.addListener(eInput.id, "keyup", MVRZ.util.event.handleInputKeyup, oHandlerArg);
}
if(oInput.inputType == INPUT_TYPE_CHECKBOX) {
msg("render.input "+id+' Adding checkbox handler');
YAHOO.util.Event.addListener(eInput.id, "change", MVRZ.util.event.handleInputChange, oHandlerArg);
} else if(!onlyChangeHandler) {
msg("render.input "+id+' Adding blur & focus handlers');
YAHOO.util.Event.addListener(eInput.id, "blur", MVRZ.util.event.handleInputBlur, oHandlerArg);
YAHOO.util.Event.addListener(eInput.id, "focus", MVRZ.util.event.handleInputFocus, oHandlerArg);
}
}
/*
if(!noHandlers && !onlyChangeHandler) {
msg("render.input "+id+' Adding blur & focus handlers');
YAHOO.util.Event.addListener(eInput.id, "blur", MVRZ.util.event.handleInputBlur, oHandlerArg);
YAHOO.util.Event.addListener(eInput.id, "focus", MVRZ.util.event.handleInputFocus, oHandlerArg);
}
*/
}
/*
if(!inputExists && !noHandlers && !onlyChangeHandler && oInput.type !== INPUT_TYPE_HIDDEN) {
YAHOO.util.Event.addListener(eInput.id, "blur", MVRZ.util.event.handleInputBlur, datasetObject);
YAHOO.util.Event.addListener(eInput.id, "focus", MVRZ.util.event.handleInputFocus, datasetObject);
}
*/
// Initialize valid array for empty fields that are required
var dataObjectIndex = datasetObject.datasetName;
if(typeof(dataObjectIndex)=='undefined') dataObjectIndex = datasetObject.args.what;
MVRZ.util.validation._validate(dataObjectIndex, oInput.name, dataValue, id);
if(!inputExists) {
if (!isHidden) {
// If blank and required then
// Set any input styles
if (typeof(oInput.style) != 'undefined') {
for (style in oInput.style) {
YAHOO.util.Dom.setStyle(eInput, style, oInput.style[style]);
}
if(readonly && oInput.inputType==INPUT_TYPE_TEXTAREA) {
YAHOO.util.Dom.setStyle(eInput, 'height', 'auto');
}
}
if(!readonly) {
var eInputWrapper = document.createElement("div");
//eInputWrapper.className = "inputWrapper " + oInput.inputType + (readonly ? " readonly" : "");
eInputWrapper.className = "inputWrapper " + oInput.inputType;
if (oInput.isRequired)
eInputWrapper.className += " inputRequired";
if (typeof(oPrepend) == 'object')
eInputWrapper.appendChild(oPrepend);
eInputWrapper.appendChild(eInput);
if (typeof(oAppend) == 'object')
eInputWrapper.appendChild(oAppend);
// Set any wrapper styles
if (typeof(oInput.styleWrapper) != 'undefined') {
for (style in oInput.styleWrapper) {
YAHOO.util.Dom.setStyle(eInputWrapper, style, oInput.styleWrapper[style]);
}
}
} else {
msg("Readonly Field - Setting wrapper to raw input");
var eInputWrapper = eInput;
}
} else {
msg("Hidden Field - Setting wrapper to raw input");
var eInputWrapper = eInput;
}
} else {
//var eInputWrapper = YAHOO.util.Dom.getAncestorByTagName(oInput, "div");
var eInputWrapper = null; // Indicates that it was present already
}
// Anything more to do now that the input is in the DOM?
switch(oInput.inputType) {
case(INPUT_TYPE_DROPDOWN):
case(INPUT_TYPE_SELECT):
//alert("renderInput select...");
msg("render.input in end select "+oInput.name+":"+typeof(oInput.optionsFunction));
msg("render.input in end select forceRedraw="+forceRedraw+", inputExists="+inputExists+", postponeOptions="+postponeOptions);
if(forceRedraw || (!inputExists && !postponeOptions)) {
// Fill the options
if(typeof(oInput.optionsFunction)=='object') {
if (oInput.optionsFunction instanceof Array) {
msg("render.input calling setOptions()");
MVRZ.util.select.setOptions(eInput, oInput.optionsFunction, dataValue);
}
else {
//if(/*oInput.isRequired && */ typeof(oInput.optionsFunction.inputs.zeroSelect)=='undefined') {
// oInput.optionsFunction.inputs.zeroSelect = " -- Select --";
//}
msg("render.input oInput.optionsFunction.select(eInput, " + dataValue + "," + oInput.name + ")");
oInput.optionsFunction.select(eInput, dataValue, oInput.name, oInput.selectConfig);
}
} else if(typeof(oInput.optionsFunction)=='function') {
msg("render.input calling optionsFunction()");
oInput.optionsFunction(eInput, dataValue);
}
} else {
msg("render.input setting selected value to: "+ dataValue);
// Set the correct value from the dataValue
//eInput.selectedIndex = dataValue;
for(i=0; i 0) {
var argArray = MY[datasetName].renderInfo[this.editElContentIdLast]['argArray'];
if(typeof(argArray[INPUT_RENDER_FIELDLIST])!='undefined') aInputFieldList = argArray[INPUT_RENDER_FIELDLIST];
}
var oCheckInput = new Object();
for (var item in aInputFieldList) {
var input = item;
if (aInputFieldList instanceof Array) input = aInputFieldList[item];
oCheckInput[input] = true;
}
for(sId in MY[datasetName].inputs.isValid) {
var oInput = MVRZ.util.decodeInputId(sId);
msg("Checking input:"+oInput.input);
if(!oCheckInput[oInput.input]) continue;
var isValid = MY[datasetName].inputs.isValid[sId];
msg('datasetIsValid: '+sId+', isValid='+isValid);
if(!isValid) ret = false;
}
return ret;
}
var ret;
var invalid = '';
var oDataset = MY[datasetName];
if(typeof(datasetName)=='undefined' || datasetName.length==0) {
ret = false;
} else {
ret = _allInputsValidAndPresent(oDataset, idValue);
}
msg('allInputsValidAndPresent: '+datasetName+' - returning '+ret);
return ret;
}
MVRZ.util.validation.datasetIsValid = function datasetIsValid(datasetName, idValue) {
msg('datasetIsValid: '+datasetName);
if(typeof(datasetName)=='undefined' || typeof(MY[datasetName])=='undefined') {
msg('datasetIsValid:: dataset is undefined '+datasetName);
return false;
} else {
var oDataset = MY[datasetName];
if(typeof(oDataset.isValid)=='undefined') oDataset.isValid = new Object();
var count=0;
// Only check for inputs that are displayed
var aInputFieldList = MY[datasetName].inputs.fields;
if (typeof(this.editElContentIdLast) != 'undefined' && this.editElContentIdLast.length > 0) {
var argArray = this.renderInfo[this.editElContentIdLast]['argArray'];
if(typeof(argArray[INPUT_RENDER_FIELDLIST])!='undefined') aInputFieldList = argArray[INPUT_RENDER_FIELDLIST];
}
//popupInfo("aInputFieldList::"+dump(aInputFieldList));
// All the dataset or just a single row
if(typeof(idValue)=='undefined') {
var rowArray = MY[datasetName].getRows();
} else {
var datasetRowIndex = MY[datasetName].getDatasetRowIndex(idValue);
var rowArray = [ ];
rowArray[ datasetRowIndex ] = MY[datasetName].getRow(datasetRowIndex);
}
var ret = true;
for (var rowIndex in rowArray) {
for (var item in aInputFieldList) {
var input = aInputFieldList[item];
count++;
var isValid = MVRZ.util.validation._validate(datasetName, input.name, MY[datasetName].get(rowIndex, input.name));
msg('datasetIsValid: '+input.name+', isValid='+isValid);
if(!isValid) ret = false;
}
}
return ret;
}
}
MVRZ.util.validation.allInputsValid = function allInputsValid(datasetName) {
msg('allInputsValid: '+datasetName);
var ret = true;
var invalid = '';
if (typeof(MY[datasetName].inputs.isValid)=='object') {
for (sId in MY[datasetName].inputs.isValid) {
msg('allInputsValid: ' + sId);
if (!MY[datasetName].inputs.isValid[sId]) {
ret = false;
invalid = sId;
break;
}
}
} else { // Not even set yet so assume empty/unchanged inputs
msg('allInputsValid: None set, assume no need to change');
ret = false;
}
msg('allInputsValid: '+datasetName+' - returning '+ret+ '::'+invalid);
return ret;
}
MVRZ.util.render.setInputError = function(dataObjectIndex, oInput){
if(oInput.curVal==null || oInput.curVal.length==0) return;
var e = document.getElementById(oInput.sId+':Err');
if(typeof(e)== 'undefined' || e == null) return;
if(typeof(MY[dataObjectIndex].inputs.fields[oInput.input])== 'undefined') return;
if(typeof(MY[dataObjectIndex].inputs.fields[oInput.input].validationFunction )!= 'function') return;
var o = MY[dataObjectIndex].inputs.fields[oInput.input];
var msg = o.msg;
e.innerHTML = msg;
e.style.display = "block";
}
MVRZ.util.render.clearInputError = function(dataObjectIndex, oInput){
var e = document.getElementById(oInput.sId+':Err');
if(e == null) return;
e.style.display = "none";
e.innerHTML = '';
}
MVRZ.util.validation.isNull = function isNull(value) {
if (value == "") return (true);
else return (false);
}
MVRZ.util.validation.hasMinLength = function hasMinLength(value, isNotComplete, minlength) {
this.msg = "At least "+minlength+" characters are needed";
if (value.length < minlength) return (false);
else return (true);
}
MVRZ.util.validation.isGEToValue = function isGEToValue(value, isNotComplete, minvalue) {
this.msg = "Value must be greater than or equal to "+minvalue;
if (value >= minvalue) return (true);
else return (false);
}
MVRZ.util.validation.isNumeric = function isNumeric(value, isNotComplete) {
this.msg = "Please enter a number";
re=/^[0-9]*$/
if(re.test(value)) return true;
else return false;
}
MVRZ.util.validation.isAlpha = function isAlpha(value, isNotComplete) {
this.msg = "Please use letters only";
re=/^[a-zA-Z -.,]*$/;
if(re.test(value)) return true;
else return false;
}
MVRZ.util.validation.isAlphaNumeric = function isAlphaNumeric(value, isNotComplete) {
this.msg = "Please use letters or numbers only";
re=/^[a-zA-Z0-9 -.,]*$/;
if(re.test(value)) return true;
else return false;
}
MVRZ.util.validation.isEmail = function isEmail(value, isNotComplete) {
this.msg = "Please enter a valid email address";
if(isNotComplete) return true; // Don't validate until complete
var re=/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
// Next one allows name chars etc at the front
//var re = /^((([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+(\.([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+)*)@((((([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.))*([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.)[\w]{2,4}|(((([0-9]){1,3}\.){3}([0-9]){1,3}))|(\[((([0-9]){1,3}\.){3}([0-9]){1,3})\])))$/;
if(re.test(value)) return true;
else return false;
}
MVRZ.util.validation.isHtml = function isHtml(value, isNotComplete) {
this.msg = "Please use HTML formatted text";
if(isNotComplete) return true; // Don't validate until complete
var re=/^\<[^\>]+\>/;
// Next one allows name chars etc at the front
if(re.test(value)) return true;
else return false;
}
MVRZ.util.validation.isUrl = function isUrl(value, isNotComplete) {
this.msg = "Please enter a valid URL";
if(isNotComplete) return true; // Don't validate until complete
//re=/^\S+\.\S+\.\S+$/;
var re = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
if(re.test(value)) return true;
else return false;
}
MVRZ.util.validation.isPhone = function isPhone(value, isNotComplete) {
this.msg = "Please enter a valid phone number";
if(isNotComplete) return true; // Don't validate until complete
re=/^\(?(\d{3})\)?[\.\-\/ ]?(\d{3})[\.\-\/ ]?(\d{4})$/; //US Numbers
re=/^(\+[ ]*[0-9]{1,3}[\.\-\/ ]?)?[\.\-\/ 0-9()]{10,}[extention ]*(\d)*$/; // World numbers
if(re.test(value)) return true;
else return false;
}
MVRZ.util.validation.isDate = function isDate(value, isNotComplete) {
msg ("MVRZ.util.validation.isDate: "+value+", "+isNotComplete);
this.msg = "Please enter a valid date";
if(isNotComplete) return true; // Don't validate until complete
var ret = false;
if(typeof(value) == 'object') {
if(value instanceof Date) {
if(value.getTime()>0) ret = true;
}
} else {
re1 = DATE_REGEX_DMYY; // World Date: n[n]/m[m]/yy[yy]
re2 = DATE_REGEX_DMMMYY; // d[d]-mmm[m]-yy[yy]
re3 = DATE_REGEX_YYYYMMDD; // yyyy-mm-dd
if(re1.test(value) || re2.test(value) || re3.test(value)) ret = true;
}
return ret;
}
// Util wizard --------------------------------------------------------------------
//MVRZ.util.wizard = new Object();
MVRZ.util.wizard = function wizard(oElAppendTo, contentList) {
// Parse the field list and create the steps
msg('wizard');
this.contentList = contentList;
this.oElAppendTo = oElAppendTo;
this.render = function render() {
msg('wizard render()');
gSteps = new MVRZ.util.steps(this.oElAppendTo);
for(pageIndex in this.contentList) { // Each wizard step
var sIntroText = this.contentList[pageIndex].sIntroText;
var list = this.contentList[pageIndex].list;
var idValue = this.contentList[pageIndex].idValue;
msg(sIntroText);
// Create Step
gSteps.addStep({
//obj: MY[DATASET_ACCOUNTCONTACT],
contentList: this.contentList[pageIndex],
displayType: DISPLAY_TYPE_EDIT,
sIntroHtml: sIntroText
});
}
var startStep = 1;
gSteps.renderSteps(startStep);
msg('gSteps.setToStep()'+startStep);
gSteps.setToStep(startStep);
}
}
// Util steps --------------------------------------------------------------------
MVRZ.util.steps = new Object();
MVRZ.util.steps = function(oContent) {
this.iNumSteps = 0;
if(typeof(oContent) == "object") {
this.oContent = oContent;
} else {
this.oContent = document.getElementById(oContent);
}
this.oStepButtons = document.createElement("div");
this.oStepButtons.id = this.oContent.id + ":buttons";
this.oContent.appendChild(this.oStepButtons);
this.oStepContent = document.createElement("div");
this.oStepContent.id = this.oContent.id + ":content";
this.oContent.appendChild(this.oStepContent);
this.oSteps = new Object();
this.oButtonsId = new Object();
this.oButtons = new Array();
this.addStep = function(argArray) {
this.iNumSteps++;
step = this.iNumSteps;
msg('addStep: '+step);
if(typeof(this.oSteps[step])=='undefined') this.oSteps[step] = new Object();
this.oSteps[step].argArray = argArray;
this.oSteps[step].obj = argArray['obj'];
if(typeof(this.oSteps[step].obj)=='object') this.oSteps[step].obj.oSteps = this;
this.oSteps[step].contentList = argArray['contentList'];
}
/*
this.addStep = function(obj, idValue, displayType, sIntroHtml) {
this.iNumSteps++;
step = this.iNumSteps;
msg('addStep: '+step+': '+typeof(fnRender));
if(typeof(this.oSteps[step])=='undefined') this.oSteps[step] = new Object();
this.oSteps[step].obj = obj;
this.oSteps[step].idValue = idValue;
this.oSteps[step].displayType = displayType;
this.oSteps[step].sIntroHtml = sIntroHtml;
}
*/
this.renderSteps = function(newStep) {
//var oButtons = [];
var s=0;
var stepId = "eStepButton"+s;
msg('renderSteps: '+s+', '+stepId+' :: '+newStep);
this.oButtonsId[stepId] = s;
this.oButtons[s] = new YAHOO.widget.Button({
id: stepId,
type: "radio",
label: "<",
disabled: true,
title: "Go back a Step"
});
for(s++; s<=this.iNumSteps; s++) {
stepId = "eStepButton"+s;
msg('renderSteps: '+s+', '+stepId);
this.oButtonsId[stepId] = s;
this.oButtons[s] = new YAHOO.widget.Button({
id: stepId,
type: "radio",
label: "Step " + s,
title: "This is Step " + s
});
//YAHOO.util.Event.addListener(stepId, 'click', setStep);
}
stepId = "eStepButton"+s;
msg('renderSteps: '+s+', '+stepId);
this.oButtonsId[stepId] = s;
this.oButtons[s] = new YAHOO.widget.Button({
id: stepId,
type: "radio",
label: ">",
title: "Go forward a Step"
});
for(var s=0; s<=this.iNumSteps+1; s++) {
stepId = "eStepButton"+s;
msg('adding listener to'+stepId);
//this.oButtons[s].addListener('click', this.setStep, this);
YAHOO.util.Event.addListener(stepId, 'click', this.handleStepClick, this);
};
var oButtonGroup = new YAHOO.widget.ButtonGroup(this.oStepButtons, {
name: 'currentStep',
value: this.iCurrentStep,
checkedButton: this.oButtons[newStep]
});
oButtonGroup.addButtons(this.oButtons);
//oButtonGroup.addListener('click', this.setStep, this);
//elCenterTop = document.getElementById('centerTop');
//elCenterTop.appendChild(oButtonGroup);
//this.iCurrentStep = newStep;
msg("Done step rendering");
}
this.handleStepClick = function(e, obj){
var oButtonTarget = YAHOO.util.Event.getTarget(e, 1);
var oTarget = YAHOO.util.Dom.getAncestorByClassName(oButtonTarget, 'yui-button');
msg('handleStepClick: '+oTarget.id+', type '+oTarget.type+', node '+oTarget.nodeName+', newValue '+oTarget.newValue);
var newStep;
var clickedStep = obj.oButtonsId[oTarget.id];
if (typeof(clickedStep) == 'undefined') {
newStep = obj.iCurrentStep;
}
else {
if (clickedStep == 0)
newStep = Math.max(obj.iCurrentStep - 1, 1);
else
if (clickedStep == obj.iNumSteps + 1)
newStep = Math.min(obj.iCurrentStep + 1, obj.iNumSteps);
else
newStep = clickedStep;
}
msg(oTarget.id + ',' + obj.iNumSteps + ', ' + obj.oButtonsId[oTarget.id] + ':' + obj.iCurrentStep + ',' + newStep);
obj.setToStep(newStep, obj);
}
this.setActiveButtons = function setActiveButtons(){
//msg('setToStep: ('+obj.iCurrentStep+')'+newStep);
msg('setActiveButtons()');
// Get the max step permitted from the data supplied so far
for(s=1; s<=this.iNumSteps; s++) {
if(typeof(this.oSteps[s].obj)=='object' && !this.oSteps[s].obj.isValid(s)) {
msg('setActiveButtons() - Step '+s+' INvalid');
userInputMsg('Please complete all fields and correct any errors');
break;
} else {
msg('setActiveButtons() - Step '+s+' valid');
userInputMsg('');
}
}
var dataStep = s; // One after the last invalid one
msg('setActiveButtons: dataStep='+dataStep);
//var oStepButtons = oButtonGroup.getButtons();
//alert(this.id + ',' + iNumSteps + ', '+ oButtonsId[this.id]);
msg('setActiveButtons: '+typeof(this.oButtons));
if(typeof(this.oButtons)=='undefined') return;
msg('setActiveButtons: setting buttons');
this.oButtons[0].set('checked', false);
this.oButtons[this.iNumSteps + 1].set('checked', false);
if (this.iCurrentStep > 1)
disabled = false;
else
disabled = true;
this.oButtons[0].set('disabled', disabled);
for (var s = 1; s <= this.iNumSteps; s++) {
var id = "eStepButton" + s;
id = this.oButtons[s].get('id');
//alert(s + ',' + id);
var checked = (s == this.iCurrentStep ? true : false);
var disabled = (s > dataStep ? true : false);
msg('setActiveButtons: setting buttons - step'+s+' checked='+checked);
this.oButtons[s].set('checked', checked);
this.oButtons[s].set('disabled', disabled);
//oButtons[s].set('title', "sss " + s, true);
}
if (this.iCurrentStep < dataStep && this.iCurrentStep < this.iNumSteps)
disabled = false;
else
disabled = true;
this.oButtons[s].set('disabled', disabled);
msg('Updated button status');
}
this.changeCallback = function(){ // A callback function
msg('MVRZ.util.steps:: changeCallback()');
this.setActiveButtons();
}
this.setToStep = function(newStep){
if(typeof(newStep)=='undefined') newStep = this.iCurrentStep;
if(typeof(newStep)=='undefined') newStep = 1;
//msg('setToStep: ('+obj.iCurrentStep+')'+newStep);
msg('setToStep: '+newStep);
// Render the right content
msg('setToStep: setting content ('+this.oStepContent+') ');
if(typeof(this.iCurrentStep)=='undefined' || this.iCurrentStep != newStep) {
//this.oSteps[newStep].obj.render(this.elContent, this.oSteps[newStep].idValue, this.oSteps[newStep].displayType, this.oSteps[newStep].sIntroHtml, this );
if(typeof(this.oSteps[newStep].obj)=='object') {
msg('setToStep: '+newStep+' calling OBJECT function '+this.oStepContent);
this.oSteps[newStep].obj.render(this.oStepContent.id, this.oSteps[newStep].argArray);
} else {
msg('setToStep: '+newStep+' calling contentList function '+this.oStepContent);
this.oStepContent.innerHTML = null;
MVRZ.util.render.contentList(this.oSteps[newStep].contentList, this.oStepContent.id, this.oSteps[newStep].argArray);
}
}
this.iCurrentStep = newStep;
this.setActiveButtons();
msg(newStep + ' - ' + this.iNumSteps);
}
}
MVRZ.DDList = function(id, sGroup, config) {
MVRZ.DDList.superclass.constructor.call(this, id, sGroup, config);
//this.logger = this.logger || YAHOO;
var el = this.getDragEl();
Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent
Dom.setStyle(el, "text-align", "center");
this.setHandleElId(id+'-handle');
this.goingUp = false;
this.lastY = 0;
};
YAHOO.extend(MVRZ.DDList, YAHOO.util.DDProxy, {
startDrag: function(x, y) {
//this.logger.log(this.id + " startDrag");
// make the proxy look like the source element
var dragEl = this.getDragEl();
var clickEl = this.getEl();
Dom.setStyle(clickEl, "visibility", "hidden");
dragEl.innerHTML = clickEl.innerHTML;
Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color"));
Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor"));
Dom.setStyle(dragEl, "border", "2px solid gray");
},
endDrag: function(e) {
var srcEl = this.getEl();
var proxy = this.getDragEl();
// Show the proxy element and animate it to the src element's location
Dom.setStyle(proxy, "visibility", "");
var a = new YAHOO.util.Motion(
proxy, {
points: {
to: Dom.getXY(srcEl)
}
},
0.2,
YAHOO.util.Easing.easeOut
)
var proxyid = proxy.id;
var thisid = this.id;
// Hide the proxy and show the source element when finished with the animation
a.onComplete.subscribe(function() {
Dom.setStyle(proxyid, "visibility", "hidden");
Dom.setStyle(thisid, "visibility", "");
});
a.animate();
var dataObject = MY[DATASET_IMAGES];
// Get list of DD objects (hopefully in the new order)
msg('new order?'+this.id);
oUl = YAHOO.util.Dom.getAncestorByTagName(srcEl, 'ul');
aLi = YAHOO.util.Dom.getChildren(oUl);
var iPosCount = 0;
var aId = new Array();
var aNvp = new Array();
for(var i in aLi) {
var el = aLi[i];
var aOrigIndexId = el.id.toString().split("-");
var origIndexId = aOrigIndexId[aOrigIndexId.length - 1];
var imgId = document.getElementById(dataObject.datasetName+'-input-id-'+origIndexId).value;
if(imgId==0) continue;
var position = parseInt(i) + 1;
aId[i] = imgId;
aNvp[i] = imgId+'='+rawurlencode('position='+ position);
msg('new order:'+el.id+' :: '+i+','+imgId);
//popupInfo('new order:'+el.id+' :: '+i+','+imgId+', position='+position);
}
////dataObject.request.aId = aId;
////dataObject.request.saveArgArray[GET_ID] = aId.join(":");
////dataObject.request.saveArgArray[GET_NVPS] = aNvp.join("&");
var argArray = {};
argArray['aId'] = aId;
argArray[GET_ID] = aId.join(":");
argArray[GET_NVPS] = aNvp.join("&");
dataObject.save(argArray);
// Remove the proxy from the Dom to prevent duplicate IDs
proxy.innerHTML = '';
},
onDragDrop: function(e, id) {
// If there is one drop interaction, the li was dropped either on the list,
// or it was dropped on the current location of the source element.
if (DDM.interactionInfo.drop.length === 1) {
// The position of the cursor at the time of the drop (YAHOO.util.Point)
var pt = DDM.interactionInfo.point;
// The region occupied by the source element at the time of the drop
var region = DDM.interactionInfo.sourceRegion;
// Check to see if we are over the source element's location. We will
// append to the bottom of the list once we are sure it was a drop in
// the negative space (the area of the list without any list items)
if (!region.intersect(pt)) {
var destEl = Dom.get(id);
var destDD = DDM.getDDById(id);
destEl.appendChild(this.getEl());
destDD.isEmpty = false;
DDM.refreshCache();
}
}
},
onDrag: function(e) {
// Keep track of the direction of the drag for use during onDragOver
var y = Event.getPageY(e);
if (y < this.lastY) {
this.goingUp = true;
} else if (y > this.lastY) {
this.goingUp = false;
}
this.lastY = y;
},
onDragOver: function(e, id) {
var srcEl = this.getEl();
var destEl = Dom.get(id);
// We are only concerned with list items, we ignore the dragover
// notifications for the list.
if (destEl.nodeName.toLowerCase() == "li") {
var orig_p = srcEl.parentNode;
var p = destEl.parentNode;
if (this.goingUp) {
p.insertBefore(srcEl, destEl); // insert above
} else {
p.insertBefore(srcEl, destEl.nextSibling); // insert below
}
DDM.refreshCache();
}
}
});
MVRZ.util.callFnWhenLoaded = function callFnWhenLoaded(datasetName, obj, fn) {
if (MY[datasetName].isLoaded()) {
fn(obj);
}
else {
MY[datasetName].load('', '', obj, fn);
}
}
// --------------------------------------------------------------------------------------
//MVRZ.system = new Object();
MVRZ.namespace('MVRZ.system');
MVRZ.system.isConnectionActive = function(oConnection){
msg("MVRZ.system.isConnectionActive()");
var ret = false;
if (typeof(oConnection) == 'object') {
ret = YAHOO.util.Connect.isCallInProgress(oConnection);
} else {
for(datasetName in gConnectionArray) {
msg("MVRZ.system.connectionCount() - checking all connections: "+datasetName);
var oConnection = gConnectionArray[datasetName];
if (YAHOO.util.Connect.isCallInProgress(oConnection)) {
ret = true;
break;
}
}
}
msg("MVRZ.system.connectionCount() - returning " + ret);
return ret;
}
// --------------------------------------------------------------------------------------
MVRZ.util.cloneShallow = function cloneShallow(obj) {
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = new obj.constructor(); // changed (twice)
for(var key in obj)
temp[key] = obj[key];
return temp;
}
MVRZ.util.clone = function clone(obj) {
return YAHOO.lang.JSON.parse( YAHOO.lang.JSON.stringify( obj ) );
}