// (C) 2007-2012 Qualtrics, Inc.

window.Q_LogicEditorSchema=Class.create();Q_LogicEditorSchema.prototype={elements:null,categories:null,initialize:function(opt_schema)
{this.elements=[];if(opt_schema)
{for(var key in opt_schema)
{if(!opt_schema[key]['id'])
{opt_schema[key]['id']=key;}
this.addElement(opt_schema[key]);}}},addElement:function(schemaElement)
{if(!schemaElement)
{console.error('Cannot add schema element',schemaElement);return;}
if(schemaElement.fields)
{for(var i=0,len=schemaElement.fields.length;i<len;++i)
{if(schemaElement.fields[i]&&schemaElement.fields[i].fieldName=='Type')
{console.error('Schema Error: Type is a reserved schema fieldName');return;}}}
this.elements.push(this.normalize(schemaElement));},addCategory:function(categoryID,categoryDisplayName)
{if(!this.categories)
this.categories={};if(!this.categories[categoryID])
this.categories[categoryID]={description:categoryDisplayName,items:[]};},addElementToCategory:function(categoryID,schemaElement)
{if(this.categories[categoryID])
{if(!schemaElement)
{console.error('Cannot add schema element',schemaElement);return;}
if(schemaElement.fields)
{for(var i=0,len=schemaElement.fields.length;i<len;++i)
{if(schemaElement.fields[i]&&schemaElement.fields[i].fieldName=='Type')
{console.error('Schema Error: Type is a reserved schema fieldName');return;}}}
this.categories[categoryID].items.push(this.normalize(schemaElement));}
else
{console.error("Category doesn't exist");}},normalize:function(schemaElement)
{if(schemaElement.fields)
{for(var i=0,len=schemaElement.fields.length;i<len;++i)
{var field=schemaElement.fields[i];if(field&&!field.fieldName)
{field.fieldName=QualtricsTools.createNewId('FLD');}}}
return schemaElement;},getElementById:function(id)
{var i,len;if(this.categories)
{for(var category in this.categories)
{var categoryElements=this.categories[category].items;for(i=0,len=categoryElements.length;i<len;++i)
{if(categoryElements[i].id==id)
{return categoryElements[i];}}}}
for(i=0,len=this.elements.length;i<len;++i)
{if(this.elements[i].id==id)
{return this.elements[i];}}},getPossibleFieldNames:function()
{var fieldNames={};if(this.categories)
{for(var category in this.categories)
{var categoryElements=this.categories[category];for(var e=0,elen=categoryElements.length;e<elen;++e)
{var element=categoryElements[e];for(var i=0,len=element.fields.length;i<len;++i)
{fieldNames[element.fields[i].fieldName]=true;}}}}
else
{for(var e=0,elen=this.elements.length;e<elen;++e)
{var element=this.elements[e];for(var i=0,len=element.fields.length;i<len;++i)
{fieldNames[element.fields[i].fieldName]=true;}}}
return Object.keys(fieldNames);}}
Qualtrics.schemaElementLibrary={Survey:{id:'Survey',description:getMessage('SiteWide','Survey'),fields:[{type:'select',fieldName:'SurveyID',labelKey:'Description',prompt:'Select Survey...',truncate:20,value:'$logicEditorFunction.getAjaxData(GetSurveyList)'}]},Question:{id:'Question',description:getMessage('SiteWide','Question'),fields:[{type:'select',fieldName:'QuestionID',labelKey:'Description',prompt:getMessage('SelectQuestion')+'...',truncate:50,value:{$ajax:{action:'GetQuestionList',params:{SurveyID:'$logicVariable.surveyId'}}}},{type:'select',fieldName:'ChoiceLocator',depends:'$field.QuestionID',valueKey:'Locator',labelKey:'Description',prompt:getMessage('EditSection','SelectChoice'),truncate:40,value:{$ajax:{action:'GetPipingOptionsByQuestionId',params:{QID:'$field.QuestionID',group:'QuestionLogic',SVID:'$logicVariable.surveyId'}}}},{type:'text',depends:'$field.ChoiceLocator',value:getMessage('Is')},{type:'select',fieldName:'Operator',depends:{$field:'ChoiceLocator'},value:'$expressionFunction.getOperatorListTypeFromChoiceLocator'},{type:'hidden',fieldName:'QuestionIDFromLocator',value:'$function.Q_GlobalLogic.getQuestionIdFromLocator($field.ChoiceLocator)',optional:true},{type:'hidden',fieldName:'LeftOperand',value:'$function.Q_GlobalLogic.getQuestionLeftOperand($field.QuestionIDFromLocator, $field.ChoiceLocator, $field.Operator)'},{type:'textbox',fieldName:'RightOperand',size:7,depends:{$ifAny:['$field.Operator == "GreaterThan"','$field.Operator == "GreaterThanOrEqual"','$field.Operator == "LessThan"','$field.Operator == "LessThanOrEqual"','$field.Operator == "EqualTo"','$field.Operator == "NotEqualTo"','$field.Operator == "Contains"','$field.Operator == "DoesNotContain"','$field.Operator == "MatchesRegex"','$field.Operator == "Extensions"']}},{type:'text',value:'bytes',depends:{$if:['$function.Q_GlobalLogic.getTypeFromLocator($field.ChoiceLocator) == "UploadedFileSize"']}}]},EmbeddedField:{id:'EmbeddedField',description:getMessage('SiteWide','EmbeddedData'),fields:[{type:'textbox',fieldName:'LeftOperand'},{type:'text',value:getMessage('Is')},{type:'select',fieldName:'Operator',value:'$expressionFunction.getOperatorList(Numeric)'},{type:'textbox',fieldName:'RightOperand',depends:{$ifAny:['$field.Operator == "GreaterThan"','$field.Operator == "GreaterThanOrEqual"','$field.Operator == "LessThan"','$field.Operator == "LessThanOrEqual"','$field.Operator == "EqualTo"','$field.Operator == "NotEqualTo"','$field.Operator == "Contains"','$field.Operator == "DoesNotContain"','$field.Operator == "MatchesRegex"']}},{type:'hidden',fieldName:'_HiddenExpression',value:false,optional:true}]},EmbeddedFieldWithDropDowns:{id:'EmbeddedField',description:getMessage('SiteWide','EmbeddedData'),fields:[{type:'combobox',fieldName:'LeftOperand',prompt:'Field Name',action:'GetEmbeddedFieldNames',params:{PID:'$logicVariable.panelId',EmbeddedDataReferenceID:'$logicVariable.embeddedDataReferenceId'}},{type:'text',value:getMessage('Is')},{type:'select',fieldName:'Operator',value:'$expressionFunction.getOperatorList(Numeric)'},{type:'combobox',fieldName:'RightOperand',action:'GetEmbeddedFieldValues',prompt:'Value',params:{PID:'$logicVariable.panelId',EmbeddedDataReferenceID:'$logicVariable.embeddedDataReferenceId',Field:'$field.LeftOperand'},depends:{$ifAny:['$field.Operator == "GreaterThan"','$field.Operator == "GreaterThanOrEqual"','$field.Operator == "LessThan"','$field.Operator == "LessThanOrEqual"','$field.Operator == "EqualTo"','$field.Operator == "NotEqualTo"','$field.Operator == "Contains"','$field.Operator == "DoesNotContain"','$field.Operator == "MatchesRegex"']}}]},Quota:{id:'Quota',description:getMessage('Piping','Quota'),fields:[{type:'select',fieldName:'QuotaID',labelKey:'Name',truncate:30,value:{$ajax:{action:'GetQuotaList'}}},{type:'select',fieldName:'Operator',value:'$expressionFunction.getOperatorList(Quota)'},{type:'textbox',fieldName:'RightOperand',depends:{$ifAll:['$field.Operator != "QuotaMet"','$field.Operator != "QuotaNotMet"']}},{type:'hidden',fieldName:'LeftOperand',value:'$function.Q_GlobalLogic.getLocatorFromData($field.QuotaID, $field.LogicType, $field.Operator)'},{type:'hidden',fieldName:'QuotaName',value:'$logicEditorFunction.getQuotaNameById($field.QuotaID)'}]},PanelData:{id:'PanelData',description:getMessage('Panel'),fields:[{type:'select',fieldName:'LeftOperand',truncate:30,value:{'m://FirstName':'First Name','m://LastName':'Last Name','m://Email1':'Email','m://ExternalDataReference':'External Data'}},{type:'text',value:getMessage('Is')},{type:'select',fieldName:'Operator',value:'$expressionFunction.getOperatorList(Numeric)'},{type:'textbox',fieldName:'RightOperand',depends:{$ifAny:['$field.Operator == "GreaterThan"','$field.Operator == "GreaterThanOrEqual"','$field.Operator == "LessThan"','$field.Operator == "LessThanOrEqual"','$field.Operator == "EqualTo"','$field.Operator == "NotEqualTo"','$field.Operator == "Contains"','$field.Operator == "DoesNotContain"','$field.Operator == "MatchesRegex"']}}]},Date:{id:'Date',description:getMessage('SiteWide','Date')},DateList:{id:'DateList',description:getMessage('SiteWide','DateRange'),fields:[{fieldName:'dateString',type:'select',value:'$logicEditorFunction.getDateList'},{depends:'$field.dateString == "custom"',fieldName:'fromDate',type:'date',optional:true},{depends:'$field.dateString == "custom"',type:'text',value:getMessage('SiteWide','To')},{depends:'$field.dateString == "custom"',fieldName:'toDate',type:'date',optional:true}]},DateRange:{id:'DateRange',description:getMessage('ResultsSection','DateRange'),fields:[{fieldName:'fromDate',type:'date',optional:true},{type:'text',value:getMessage('SiteWide','To')},{fieldName:'toDate',type:'date',optional:true}]},RecipientHistory:{id:'RecipientHistory',description:getMessage('Piping','RecipientHistory'),fields:[{type:'select',fieldName:'LeftOperand',value:{'m://LastSurveyResponse/Date':getMessage('Piping','LastSurveyResponse'),'m://LastSurveyInvitation/Date':getMessage('Piping','LastEmailInvitation')}},{type:'text',value:'was'},{type:'select',fieldName:'Operator',value:'$expressionFunction.getOperatorList(Date)'},{type:'date',fieldName:'RightOperand'}]},RecipientMembership:{id:'RecipientMembership',description:getMessage('Piping','RecipientMembership'),fields:[{type:'select',fieldName:'Operator',value:{'NotArrayContains':getMessage('Piping','NotAMember'),'ArrayContains':getMessage('Piping','Member')}},{type:'text',value:'of sample'},{type:'select',fieldName:'LeftOperand',prompt:'Select Sample...',persistent:true,value:{$ajax:{action:'GetSampleLocators',params:{PID:'$logicVariable.panelId'}}}},{type:'hidden',fieldName:'RightOperand',value:'m://RecipientID'}]},Panel:{id:'Panel',description:getMessage('SiteWide','Panel'),fields:[{type:'select',fieldName:'LibraryID',prompt:'Select Library...',value:{$ajax:{action:'GetLibraries'}}},{type:'select',fieldName:'PanelID',prompt:'Select Panel...',depends:'$field.LibraryID',value:{$ajax:{action:'GetPanels',params:{LID:'$field.LibraryID'}}}}]},Scoring:{id:'ScoringCategory',description:'Scoring',fields:[{type:'select',fieldName:'LeftOperand',labelKey:'Description',prompt:'Select scoring category...',truncate:30,value:'$logicEditorFunction.getScoringCategories($logicVariable.surveyId)'},{type:'text',value:getMessage('Is')},{type:'select',fieldName:'Operator',value:'$expressionFunction.getOperatorList(Numeric)'},{type:'textbox',fieldName:'RightOperand',size:7,depends:{$ifAny:['$field.Operator == "GreaterThan"','$field.Operator == "GreaterThanOrEqual"','$field.Operator == "LessThan"','$field.Operator == "LessThanOrEqual"','$field.Operator == "EqualTo"','$field.Operator == "NotEqualTo"','$field.Operator == "Contains"','$field.Operator == "DoesNotContain"','$field.Operator == "MatchesRegex"']}}]}}
window.Q_LogicEditor=Class.create();Q_LogicEditor.registry={};Q_LogicEditor.getInstance=function(id)
{if(!id)
{for(id in Q_LogicEditor.registry)
{return Q_LogicEditor.registry[id];}}
return Q_LogicEditor.registry[id];}
Q_LogicEditor.getExpressionById=function(id)
{var foundExp=null;for(var logicEditorId in Q_LogicEditor.registry)
{foundExp=Q_LogicEditor.registry[logicEditorId].getExpressionById(id);}
return foundExp;}
Q_LogicEditor.prototype={id:null,logicId:null,name:null,element:null,criteria:null,ajaxDataCache:null,questionList:null,refreshControlsCallback:null,valid:false,parentObj:null,attention:null,saved:null,editMode:true,alwaysShowExpressionSetHeader:true,allowConjunctions:true,percentConjunction:false,numberConjunction:false,numberConjunctionMessage:'',includeDescriptions:true,minExpressions:null,maxExpressions:null,loaded:false,useQMenus:true,availableTypes:{Question:true,EmbeddedField:true,Quota:false,Date:false},options:{},createInitialExpressionText:'Click Here to create an initial expression',initialize:function(parentObj,refreshControlsCallback,opt_booleanExpression,options)
{this.initialRender=true;if(!options)options={};if(options.editLink===undefined)
{options.editLink=true;}
this.options=options||{};this.parentObj=parentObj;if(options.inline)
{this.allowConjunctions=false;this.alwaysShowExpressionSetHeader=false;this.includeDescriptions=false;this.minExpressions=1;this.maxExpressions=1;this.className='InlineLogicEditor';}
if(options.variables)
{for(var id in options.variables)
{if(!this[id])
this[id]=options.variables[id];}}
this.id=QualtricsTools.createNewId('LE');this.refreshControlsCallback=refreshControlsCallback;Q_LogicEditor.registry[this.id]=this;if(options.schema)
{this.schema=options.schema;}
else
{this.schema=new Q_LogicEditorSchema();this.schema.addElement(Qualtrics.schemaElementLibrary.Question);this.schema.addElement(Qualtrics.schemaElementLibrary.EmbeddedField);}
this.criteria=new Q_BooleanExpression(this);if(opt_booleanExpression)
{if(typeof opt_booleanExpression=='string')
{opt_booleanExpression=opt_booleanExpression.evalJSON();}
this.generate(opt_booleanExpression);}
this.numberConjunctionMessage=getMessage('EditSection','Number');},generate:function(json)
{if(json)
{var booleanExpressionData=null;if(json['type']&&json['type']=='BooleanExpression')
{this.criteria=json;this.criteria.parentObj=this;this.saved=true;this.triggerRefresh(false);return;}
else if(json['Type']&&json['Type']=='BooleanExpression')
{booleanExpressionData=json;}
else if(json.push)
{booleanExpressionData=json;}
else
{for(i in json)
{if(json[i]&&typeof json[i]=='object')
{if(json[i]['Type']&&json[i]['Type']=='BooleanExpression')
{booleanExpressionData=json[i];}}}
if(json['Name'])
{this.name=json['Name'];}
if(json['ID'])
{this.logicId=json['ID'];}}
if(booleanExpressionData)
{this.saved=true;this.criteria.generate(booleanExpressionData);this.triggerRefresh(false);}}},reset:function()
{var expressions=this.getAllExpressions(true);if(!expressions||!expressions.length)
{return;}
for(var i=0,len=expressions.length;i<len;++i)
{var resetData={};if(expressions[i].data['LogicType'])
{resetData['LogicType']=expressions[i].data['LogicType'];}
expressions[i].data=resetData;expressions[i].initFields();expressions[i].removeOldData();}
this.refresh(true);},createGUID:function(prefix)
{return QualtricsTools.createNewId(prefix);},setSchema:function(schemaObj)
{this.schema=schemaObj;var expressions=this.getAllExpressions();for(var i=0,len=expressions.length;i<len;++i)
{delete expressions[i].cachedSchema;expressions[i].initFields();expressions[i].removeOldData();}},destroy:function()
{var expressions=this.getAllExpressions();for(var i=0,len=expressions.length;i<len;++i)
{expressions[i].destroy();}
delete Q_LogicEditor.registry[this.id];},getPossibleFieldNames:function()
{return this.schema.getPossibleFieldNames();},getLogicEditor:function()
{return this;},getExpressionCount:function(opt_includeHidden,opt_onlyHidden)
{return this.getAllExpressions(opt_includeHidden,opt_onlyHidden).length;},build:function()
{var classes=this.className||'LogicEditor';if(this.percentConjunction||this.numberConjunction)
classes+=' NumberConjunction';this.element=QBuilder('div',{id:'LogicEditor',className:classes},[this.criteria.buildEditor()]);return this.element;},getDescription:function()
{var desc=QBuilder('div');var expressions=this.getAllExpressions();for(var i=0,len=expressions.length;i<len;++i)
{desc.appendChild(QBuilder('div',null,[expressions[i].buildDescription(this.options.editLink)]));}
return desc;},getData:function()
{var data={};var criteria=[];for(var i=0,len=this.criteria.elements.length;i<len;++i)
{var setObj=this.criteria.elements[i];var setData={};setData['Type']=setObj.type;for(var seti=0,setLen=this.criteria.elements[i].elements.length;seti<setLen;seti++)
{var expObj=this.criteria.elements[i].elements[seti];setData[seti]=expObj.getData();}
criteria.push(setData);}
if(criteria.length)
{for(var i=0,len=criteria.length;i<len;++i)
{data[i]=criteria[i];}}
data['Type']='BooleanExpression';if(this.name)
{data['Name']=this.name;}
if(this.logicId)
{data['LogicID']=this.logicId;}
return data;},getRawData:function()
{var data=[];for(var i=0,len=this.criteria.elements.length;i<len;++i)
{var setData=[];for(var seti=0,setLen=this.criteria.elements[i].elements.length;seti<setLen;seti++)
{var expObj=this.criteria.elements[i].elements[seti];setData[seti]=expObj.getRawData();}
data.push(setData);}
return data;},edit:function()
{this.editMode=true;this.refresh(false);},triggerRefresh:function(userInitiated)
{if(userInitiated)
{this.triggerRefreshUserInitiated=true;}
if(this.refreshTimer)
{clearTimeout(this.refreshTimer);}
this.refreshTimer=this.refresh.bind(this).defer();},refresh:function(userInitiated)
{this.refreshTimer=false;if(this.triggerRefreshUserInitiated)
{userInitiated=this.triggerRefreshUserInitiated;}
var expressions=this.getAllExpressions();for(var i=0,len=expressions.length;i<len;++i)
{expressions[i].cleanup();if(expressions[i].activeQMenu&&expressions[i].activeQMenu.originInfo)
{if(expressions[i].activeQMenu.originInfo.fieldId)
{var fieldObj=expressions[i].getFieldByFieldId(expressions[i].activeQMenu.originInfo.fieldId);expressions[i].activeQMenu.replaceMenuDefinition(fieldObj.getSelectMenuDef(expressions[i].activeQMenu.originInfo.fieldName));}}}
if(this.element)
{deleteChildren(this.element);}
if(this.element&&this.criteria)
{$(this.element).appendChild(this.criteria.buildEditor());this.attentionHighlighter();}
this.validate();this.refreshControls(userInitiated);},refreshControls:function(userInitiated)
{if(this.refreshControlsDelay)
{clearTimeout(this.refreshControlsDelay);}
if(userInitiated)
{this.refreshControlsUserInitiated=true;}
if(this.refreshControlsAction)
{if(!this.bindedRefreshControls)
{this.bindedRefreshControls=this.refreshControlsAction.bind(this);}
this.refreshControlsDelay=setTimeout(this.bindedRefreshControls,100);}},refreshControlsAction:function()
{var userInitiated=false
if(this.refreshControlsUserInitiated)
{userInitiated=true;}
if(typeof this.refreshControlsCallback=='function')
{this.refreshControlsCallback(this,userInitiated);}
else if(this.parentObj&&this.refreshControlsCallback&&this.parentObj[this.refreshControlsCallback])
{this.parentObj[this.refreshControlsCallback](this,userInitiated);}
this.refreshControlsUserInitiated=false;},checkProgress:function()
{this.loaded=false;var expressions=this.getAllExpressions();for(var i=0,len=expressions.length;i<len;++i)
{if(!expressions[i].loaded)
{return false}}
this.loaded=true;return true;},getAdvancedMenuButton:function()
{return QMenu.buildMenuButton(getMessage('EditSection','AddAdvancedLogic'),'Q_LogicEditor.getInstance("'+this.id+'").buildAdvancedMenu()');},buildAdvancedMenu:function()
{var menuDef={items:[{instanceid:this.id,action:'Q_LogicEditor.addExpressionSet(AndIf)',label:getMessage('EditSection','AddANDIFGroup')},{instanceid:this.id,action:'Q_LogicEditor.addExpressionSet(ElseIf)',label:getMessage('EditSection','AddORIFGroup')}]};return menuDef;},updateValues:function()
{var expressions=this.getAllExpressions();console.log('Logic editor expressions:',expressions);for(var i=0,len=expressions.length;i<len;++i)
{expressions[i].updateValues();}},validate:function()
{var valid=true;var uniqueFields={};if(this.criteria&&this.criteria.elements.length)
{for(var i=0,len=this.criteria.elements.length;i<len;++i)
{var expressionSet=this.criteria.elements[i];if(expressionSet.elements.length)
{for(var seti=0,setLen=expressionSet.elements.length;seti<setLen;seti++)
{var expression=expressionSet.elements[seti];if(seti==0)
{if(expression.data['Conjunction']&&!this.percentConjunction&!this.numberConjunction)
{delete(expression.data['Conjunction']);}}
else
{if(!expression.data['Conjunction'])
{expression.data['Conjunction']='And';}}
if(!expression.data['Type'])
{expression.data['Type']='Expression';}
if(!expression.validate())
{this.invalidReason=expression.invalidReason;valid=false;}
if(expression.cachedSchema&&expression.cachedSchema.fields)
{for(var i=0,len=expression.cachedSchema.fields.length;i<len;++i)
{var f=expression.cachedSchema.fields[i];if(f&&f.validation)
{if(f.validation.unique)
{var fieldVal=expression.data[f.fieldName];if(!uniqueFields[f.fieldName])
{uniqueFields[f.fieldName]={};}
if(uniqueFields[f.fieldName][fieldVal])
{expression.invalidReason=f.fieldName;this.invalidReason=expression.invalidReason;expression.valid=false;valid=false;}
uniqueFields[f.fieldName][fieldVal]=1;}}}}
if(expression.node){var wasValid=false;if(expression.node.valid)
{wasValid=true;}
if(wasValid!=expression.valid)
{if(expression.valid)
{$(expression.node).addClassName('Valid');expression.node.valid=true;}
else
{$(expression.node).removeClassName('Valid');expression.node.valid=false}}}}}
else
{valid=false;}}}
else if(this.minExpressions==0)
{}
else
{valid=false;}
this.valid=valid;this.attentionHighlighter(false);this.autoAddExpression();return valid;},autoAddExpression:function()
{if(this.autoAddExpressions&&this.valid)
{this.addExpression();}},getAllExpressions:function(opt_includeHidden,opt_onlyHidden)
{var expressions=[];if(this.criteria&&this.criteria.elements)
{for(var i=0,len=this.criteria.elements.length;i<len;++i)
{var expressionsInSet=this.criteria.elements[i].getExpressions(opt_includeHidden,opt_onlyHidden);for(var seti=0,setLen=expressionsInSet.length;seti<setLen;seti++)
{expressions.push(expressionsInSet[seti]);}}}
return expressions;},attentionHighlighter:function(autoFocus)
{var expressions=this.getAllExpressions();for(var i=0,len=expressions.length;i<len;++i)
{var foundAttention=expressions[i].attentionHighlighter(autoFocus);if(foundAttention)
break;}},removeHiddenExpressions:function()
{var hiddenExpressions=this.getAllExpressions(true,true);for(var i=0,len=hiddenExpressions.length;i<len;++i)
{this.removeExpression(hiddenExpressions[i].id,true);}},removeExpression:function(expressionId,opt_force)
{var expressionObj=this.getExpressionById(expressionId);var len=this.getAllExpressions().length;if(this.minExpressions&&len<=this.minExpressions&&!opt_force)
{return;}
var expressionSet=expressionObj.parentObj;expressionObj.destroy();if(this.percentConjunction)
expressionSet.updatePercentValues();len--;this.validate();this.saved=false;this.refresh(true);if(this.onExpressionRemove)
this.onExpressionRemove();if(this.onChange)
this.onChange();if(len==0&&this.onEmpty)
this.onEmpty();},isEmpty:function()
{return(this.getAllExpressions().length==0);},addExpressionSet:function(type)
{if(type)
{var newSet=new Q_ExpressionSet(type,this.criteria);this.criteria.elements.push(newSet);this.saved=false;this.refresh(true);return newSet;}},addExpression:function(opt_aboveId,opt_expressionObj,opt_event,opt_replaceInvalidExpressions)
{var len=this.getAllExpressions().length;if(this.maxExpressions&&len>=this.maxExpressions)
{return;}
if(opt_event&&!this.percentConjunction&&!this.numberConjunction&&(opt_event.shiftKey||opt_event.metaKey))
{this.addExpressionSet('AndIf');return}
this.saved=false;var expressionSetObj;var siblingExpressionObj;if(opt_aboveId&&typeof opt_aboveId=='string'){siblingExpressionObj=this.getExpressionById(opt_aboveId);expressionSetObj=siblingExpressionObj.parentObj;}
else
{var expressionSetObj=this.criteria.elements.last();}
if(!expressionSetObj)
{var newExpressionSet=this.addExpressionSet('If');var newExpression=newExpressionSet.getExpressions()[0];}
else
{if(opt_expressionObj)
{var newExpression=opt_expressionObj;newExpression.parentObj=expressionSetObj;}
else
{var newExpression=new Q_Expression(expressionSetObj);}
if(!siblingExpressionObj||siblingExpressionObj.getPosition()==expressionSetObj.elements.length-1)
{expressionSetObj.elements.push(newExpression)}
else
{expressionSetObj.elements.splice(siblingExpressionObj.getPosition()+1,0,newExpression);}
if(this.percentConjunction)
expressionSetObj.updatePercentValues();}
if(opt_replaceInvalidExpressions)
{var prev=newExpression.getPrev();if(prev&&!prev.validate())
{this.removeExpression(prev.id);}}
this.refresh(true);if(this.onExpressionAdd)
this.onExpressionAdd(newExpression);if(this.onChange)
this.onChange();return newExpression;},getQuestionList:function(opt_surveyId)
{var params={};if(opt_surveyId)
{params['SurveyID']=opt_surveyId;}
return this.getAjaxData('GetQuestionList',params);},getPipingOptionsByQuestionId:function(SVID,group,QID)
{return this.getAjaxData('GetPipingOptionsByQuestionId',{SVID:SVID,group:group,QID:QID});},getScoringCategories:function(surveyId)
{var categories=this.getAjaxData('GetScoringCategories',{SurveyID:surveyId});var results={};for(var cat in categories)
{categories[cat].Description+=" (Description)";results['sd://'+cat]=categories[cat];}
return results;},getQuotaList:function()
{var quota=this.getAjaxData('GetQuotaList');return quota;},getQuotaNameById:function(quotaId)
{var quotaList=this.getQuotaList();if(quotaList&&quotaList[quotaId])
{return quotaList[quotaId]['Name'];}},isValidURL:function(url)
{return isValidURL(url);},setLogicVariable:function(name,val)
{this[name]=val;},clearCache:function()
{Ajax.CachedRequest.clearCache();this.ajaxDataCache=null;},getAjaxData:function(action,opt_parameters,ajaxDef)
{var options=this.options||{};if(this.parentObj&&typeof this.parentObj.clearTableTypeCache=='function')
{this.parentObj.clearTableTypeCache();}
ajaxDef=ajaxDef||{};var page='Ajax.php';if(ajaxDef.url)
{action='WebService';page='CleanAjax.php';if(!opt_parameters)
{opt_parameters={};}
opt_parameters['url']=ajaxDef.url;}
if(!this.ajaxDataCache)
{this.ajaxDataCache={};}
var uniqueId=action;if(opt_parameters&&$H(opt_parameters).keys().length)
{uniqueId=uniqueId+'_'+$H(opt_parameters).keys().join('|')+'_'+$H(opt_parameters).values().join('|');}
if(options.additionalCacheString)
{uniqueId+=options.additionalCacheString;}
if(!this.ajaxDataCount)
{this.ajaxDataCount=0;}
if(!this.ajaxDataCache[uniqueId])
{var that=this;if(Qualtrics.AjaxUpdateQueue.isWaitingOn(uniqueId))
{Qualtrics.AjaxUpdateQueue.push({id:uniqueId,onComplete:function()
{if(that.tryOnloadEvent)
that.tryOnLoadEvent();},onSuccess:function(transport)
{if(!transport.responseText)
{that.ajaxDataCache[uniqueId]={};that.triggerRefresh();return;}
try{that.ajaxDataCache[uniqueId]=transport.responseText.evalJSON();}catch(e)
{console.error(e);}
that.triggerRefresh(false);if(ajaxDef.onSuccess)
ajaxDef.onSuccess();},onFailure:function(transport)
{that.ajaxDataCache[uniqueId]='#failed#';}});return false;}
else
{Qualtrics.AjaxUpdateQueue.waitOn(uniqueId);}
this.ajaxDataCount++;this.ajaxDataCache[uniqueId]='#loading#';new Ajax.CachedRequest(page+'?action='+action,{parameters:opt_parameters,ajaxDef:ajaxDef,uniqueId:uniqueId,onComplete:this.getLogicEditor().onAjaxComplete.bind(this.getLogicEditor()),onSuccess:this.getLogicEditor().onAjaxSuccess.bind(this.getLogicEditor()),onFailure:function(transport)
{console.error('ajax fail');that.ajaxDataCache[uniqueId]='#failed#';Qualtrics.AjaxUpdateQueue.complete(uniqueId,'onFailure',transport);}});return false;}
if(this.ajaxDataCache[uniqueId]=='#loading#')
{return false;}
if(this.tryOnloadEvent)
this.tryOnLoadEvent();return this.ajaxDataCache[uniqueId];},onAjaxComplete:function(transport)
{var ajaxDef=transport.request.options.ajaxDef;var uniqueId=transport.request.options.uniqueId;try
{this.ajaxDataCount--;if(this.tryOnloadEvent)
this.tryOnLoadEvent();Qualtrics.AjaxUpdateQueue.complete(uniqueId,'onComplete');}
catch(e)
{console.error(e);}},onAjaxSuccess:function(transport)
{var ajaxDef=transport.request.options.ajaxDef;var uniqueId=transport.request.options.uniqueId;if(!transport.responseText)
{this.ajaxDataCache[uniqueId]={};this.triggerRefresh();Qualtrics.AjaxUpdateQueue.complete(uniqueId,'onSuccess',transport);return;}
try{this.ajaxDataCache[uniqueId]=transport.responseText.evalJSON();}catch(e)
{console.error(e)}
this.triggerRefresh(false);if(ajaxDef.onSuccess)
ajaxDef.onSuccess()
Qualtrics.AjaxUpdateQueue.complete(uniqueId,'onSuccess',transport);},concat:function()
{var str='';for(var i=0,ilen=arguments.length;i<ilen;i++)
{str+=arguments[i];}
return str;},buildLocator:function(protocol)
{var str=protocol+'://';for(var i=1,ilen=arguments.length;i<ilen;i++)
{if(arguments[i].lastIndexOf('+')==arguments[i].length-1)
{str+=escape(arguments[i].substr(0,arguments[i].length-1));}
else
{str+=escape(arguments[i]);if(i<(ilen-1))
{str+='/';}}}
return str;},getExpressionById:function(id)
{return this.criteria.getExpressionById(id);},tryOnLoadEvent:function()
{if(this.onLoadTimer)
{window.clearTimeout(this.onLoadTimer)}
this.onLoadTimer=this.tryOnLoadEventAction.bind(this).delay(1.1);},tryOnLoadEventAction:function()
{if(this.ajaxDataCount<1)
{if(this.onLoad)
{this.onLoad();}}},getDateList:function()
{return{'today':'Today','yesterday':'Yesterday','days_7':'Last 7 Days','days_30':'Last 30 Days','days_60':'Last 60 Days','days_120':'Last 120 Days','days_365':'Last 365 Days','custom':'Custom...'}}}
Qualtrics.AjaxUpdateQueue={waitingOn:{},queue:{},waitOn:function(id)
{this.waitingOn[id]=true;},isWaitingOn:function(id)
{return this.waitingOn[id];},push:function(job)
{if(!this.queue[job.id])
{this.queue[job.id]={onComplete:[],onSuccess:[],onFailure:[]};}
if(job.onComplete)
this.queue[job.id].onComplete.push(job.onComplete);if(job.onSuccess)
this.queue[job.id].onSuccess.push(job.onSuccess);if(job.onFailure)
this.queue[job.id].onFailure.push(job.onFailure);},complete:function(id,type,opt_transport)
{try
{this.waitingOn[id]=false;if(this.queue[id])
{var jobs=this.queue[id][type];var job;while(job=jobs.pop())
{job(opt_transport);}}}
catch(e)
{console.error('Error completing ajax queue: '+e)}}};window.Q_BooleanExpression=Class.create();Q_BooleanExpression.prototype={type:'BooleanExpression',elements:null,parentObj:null,initialize:function(parentObj,opt_expressionSets)
{this.parentObj=parentObj;if(opt_expressionSets&&opt_expressionSets.length)
{this.elements=opt_expressionSets;}
else
{this.elements=[new Q_ExpressionSet(getMessage('If'),this)];}
for(var i=0,len=this.elements.length;i<len;++i)
{this.elements[i].parentObj=this;}},generate:function(json)
{this.elements=[];for(var i in json)
{if(!isNaN(i))
{if(json[i]===null){continue;}
var type=json[i]['Type'];var expressionSetObj=new Q_ExpressionSet(type,this);expressionSetObj.generate(json[i]);this.elements.push(expressionSetObj);}}},buildEditor:function()
{this.parentObj.rendering=true;var div=QBuilder('div',{className:'BooleanExpression EditMode_'+this.parentObj.editMode});for(var i=0,len=this.elements.length;i<len;++i)
{div.appendChild(this.elements[i].buildEditor());}
if(this.parentObj.createInitialExpressionText&&(this.elements.length==0)&&(this.parentObj.minExpressions==0))
{div.appendChild(QBuilder('a',{className:'CreateInitialExpressionText',clickcallback:'Q_LogicEditor.addExpression',p1:'',p2:'',p3:'$evt',instanceid:this.parentObj.id},[this.parentObj.createInitialExpressionText]));}
this.parentObj.rendering=false;var logicEditor=this.parentObj;logicEditor.validate();logicEditor.refreshControls(false);return div;},getExpressionById:function(id)
{for(var i=0,len=this.elements.length;i<len;++i)
{var foundExpressionObj=this.elements[i].getExpressionById(id);if(foundExpressionObj)
{return foundExpressionObj;}}}}
window.Q_ExpressionSet=Class.create();Q_ExpressionSet.registry={};Q_ExpressionSet.getInstance=QualtricsTools.getInstanceHelper(Q_ExpressionSet.registry,'id');Q_ExpressionSet.prototype={id:null,type:'If',elements:null,parentObj:null,initialize:function(type,parentObj,opt_expressions)
{if(type)
{this.type=type;}
this.parentObj=parentObj;if(opt_expressions&&opt_expressions.length)
{this.elements=opt_expressions;}
else
{this.elements=[new Q_Expression(this)];}
this.id=this.id=QualtricsTools.createNewId('QEXS');Q_ExpressionSet.registry[this.id]=this;for(var i=0,len=this.elements.length;i<len;++i)
{this.elements[i].parentObj=this;}},generate:function(json)
{this.type=json['Type'];this.elements.length=0;for(i in json)
{if(!isNaN(i))
{var expressionObj=new Q_Expression(this);expressionObj.generate(json[i]);this.elements.push(expressionObj);}}},buildEditor:function()
{var div=QBuilder('div',{className:'ExpressionSet'});var expressionSetCount=this.parentObj.elements.length;if((this.parentObj.parentObj.allowConjunctions)&&((expressionSetCount>1)||this.parentObj.parentObj.alwaysShowExpressionSetHeader))
{div.appendChild(QBuilder('h3',{className:'type_'+this.type,clickcallback:'Q_ExpressionSet.showConjunctionMenu:'+this.id+'($el)'},[QBuilder('span',{},getMessage(this.type))]));}
var expressions=this.getExpressions();for(var i=0,len=expressions.length;i<len;++i)
{div.appendChild(expressions[i].build());}
return div;},showConjunctionMenu:function(el)
{if(this.parentObj.parentObj&&this.parentObj.parentObj.editMode)
{if(this.type!='If')
{Qualtrics.Menu.showMenu({items:[{className:this.type=='AndIf'?'check':'',display:'And If',action:'Q_ExpressionSet.setConjunction:'+this.id+'(AndIf)'},{className:this.type=='ElseIf'?'check':'',display:'Or If',action:'Q_ExpressionSet.setConjunction:'+this.id+'(ElseIf)'}]},el);}}},setConjunction:function(type)
{this.type=type;this.parentObj.parentObj.triggerRefresh();},updatePercentValues:function()
{var percentTotal=100;var percentExpressions=[];for(var i=0,len=this.elements.length;i<len;++i)
{var el=this.elements[i];if(!el.data['Conjunction'])
{el.data['Conjunction']='100%';el.data['AutoPercent']=true;}
var val=parseInt(el.data['Conjunction'].replace("%",""));if(!isNaN(val))
{if(!el.data['AutoPercent'])
percentTotal-=val;else
percentExpressions.push(el);}}
len=percentExpressions.length;if(len>0)
{percentTotal=Math.max(percentTotal/len,0);for(i=0;i<len;i++)
{percentExpressions[i].data['Conjunction']=percentTotal+'%';percentExpressions[i].refresh();}}},getExpressions:function(opt_includeHidden,opt_onlyHidden)
{var list=[];for(var i=0,len=this.elements.length;i<len;++i)
{if(this.elements[i].data['_HiddenExpression'])
{if(opt_includeHidden||opt_onlyHidden)
{list.push(this.elements[i]);}}
else
{if(!opt_onlyHidden)
{list.push(this.elements[i]);}}}
return list;},getExpressionById:function(id)
{for(var i=0,len=this.elements.length;i<len;++i)
{if(this.elements[i].id==id)
{return this.elements[i];}}},getPosition:function()
{if(this.parentObj)
{for(var i=0,len=this.parentObj.elements.length;i<len;++i)
{if(this.parentObj.elements[i].id==this.id)
{return i;}}}},destroy:function()
{this.parentObj.elements.splice(this.getPosition(),1);this.parentObj=null;if(Q_ExpressionSet.registry[this.id])
{delete Q_ExpressionSet.registry[this.id];}}}
window.Q_Expression=Class.create();Q_Expression.registry={};Q_Expression.getInstance=QualtricsTools.getInstanceHelper(Q_Expression.registry,'id');Q_Expression.prototype={id:null,parentObj:null,type:'Expression',conjunction:null,choiceLocator:null,description:null,LogicType:null,RightOperand:null,attention:null,ajaxError:null,data:null,changed:false,loaded:false,progress:null,useQMenus:false,fields:null,activeQMenu:null,initialize:function(parentObj,opt_schema)
{if(opt_schema)
this.schema=opt_schema;this.data={};this.parentObj=parentObj;this.data['LogicType']='Question';var logicEditor=this.getLogicEditor();if(logicEditor&&logicEditor.schema)
{var schemaElements=logicEditor.schema.elements;var nextSchemaIndex=0;if(logicEditor.getAllExpressions)
{var expressionCount=logicEditor.getAllExpressions().length;if(logicEditor.cycle)
{nextSchemaIndex=expressionCount%schemaElements.length;}}
this.data['LogicType']=schemaElements[nextSchemaIndex].id;this.initFields();}
this.id=QualtricsTools.createNewId('QEX');Q_Expression.registry[this.id]=this;},getId:function()
{return this.id;},generate:function(json)
{this.cachedSchema=null;var reMap={Question:'QuestionID',Conjuction:'Conjunction'}
var logicType=json['LogicType'];if(!json['LogicType']&&this.getLogicEditor().schema)
{if(this.getLogicEditor().schema.elements.length==1)
{logicType=this.getLogicEditor().schema.elements[0].id;}}
var validSchema=this.getLogicEditor().schema.getElementById(logicType);if(validSchema)
{for(var key in json)
{if(reMap[key])
{this.data[reMap[key]]=json[key];}
else
{this.data[key]=json[key];}}}
else
{console.error('No valid schema could be found for LogicType: '+json['LogicType']);}
this.initFields();},initFields:function()
{var schema=this.getSchemaElement();this.fields={};if(schema.fields)
{for(var i=0,len=schema.fields.length;i<len;++i)
{if(schema.fields[i]&&Qualtrics.ExpressionField[schema.fields[i]['type']])
{this.fields[i]=new Qualtrics.ExpressionField[schema.fields[i]['type']](this,schema.fields[i]);}}}},removeOldData:function()
{var exemptions={'Type':true,'LogicType':true};var fieldNames={};for(var fieldIndex in this.fields)
{if(this.fields[fieldIndex].fieldDef.fieldName!==undefined)
{fieldNames[this.fields[fieldIndex].fieldDef.fieldName]=true;}}
for(var key in this.data)
{if(fieldNames[key]||exemptions[key])
{}
else
{}}},getFieldByFieldName:function(fieldName,opt_evalDependency)
{if(fieldName=='LogicType')
{return this.logicTypeField;}
for(var fieldIndex in this.fields)
{if(this.fields[fieldIndex].fieldDef['fieldName']==fieldName)
{if(opt_evalDependency&&this.fields[fieldIndex].fieldDef.depends&&!this.resolveDependency(this.fields[fieldIndex].fieldDef.depends))
{continue;}
return this.fields[fieldIndex];}}
return null;},getFieldValue:function(fieldName)
{var fieldObj=this.getFieldByFieldName(fieldName,true);if(fieldObj||fieldName=='LogicType'||!this.fields)
{return this.data[fieldName];}
return undefined;},getFieldMeta:function(fieldName,opt_key)
{var fieldObj=this.getFieldByFieldName(fieldName,true);if(fieldObj||!this.fields)
{if(fieldObj.processedList)
{var value=this.getFieldValue(fieldName);var metaInfo=null;for(var i=0,len=fieldObj.processedList.length;i<len;++i)
{if(fieldObj.processedList[i]['value']==value)
{metaInfo=fieldObj.processedList[i].metaInfo;break;}}
if(metaInfo)
{if(opt_key&&metaInfo[opt_key])
{return metaInfo[opt_key];}}
return metaInfo;}}
return undefined;},getFieldByFieldId:function(fieldId)
{return Qualtrics.ExpressionField.BaseField.getInstance(fieldId);},getCurrentFields:function()
{var expData={};var schema=this.getSchemaElement();if(schema.fields)
{for(var i=0,len=schema.fields.length;i<len;++i)
{if(schema.fields[i])
{if(schema.fields[i].depends&&!this.resolveDependency(schema.fields[i].depends))
{continue;}
var fieldName=schema.fields[i].fieldName;if(fieldName)
{expData[fieldName]=this.data[fieldName];}}}}
return expData;},getCurrentFieldDefs:function()
{var fields={};var schema=this.getSchemaElement();if(schema.fields)
{for(var i=0,len=schema.fields.length;i<len;++i)
{if(schema.fields[i])
{if(schema.fields[i].depends&&!this.resolveDependency(schema.fields[i].depends))
{continue;}
var fieldName=schema.fields[i].fieldName;if(fieldName)
{fields[fieldName]=schema.fields[i];}}}}
return fields},getRawData:function()
{var expData={};var fields=this.getCurrentFieldDefs();if(this.getLogicEditor().schema)
{if(this.getLogicEditor().schema.elements.length>1)
{expData['LogicType']=this.data['LogicType'];}}
for(var fieldName in fields)
{if(fields[fieldName].type=='text')
{continue;}
expData[fieldName]=this.data[fieldName];if(fields[fieldName].type=='textbox')
{if(!expData[fieldName]||expData[fieldName]==fields[fieldName].prompt)
{expData[fieldName]='';}}}
return expData;},getData:function()
{var expData=this.getRawData();expData['Type']='Expression';expData['LogicType']=this.data['LogicType'];var logicEditor=this.getLogicEditor();if(logicEditor.includeDescriptions)
{expData['Description']=this.getDescription();}
if(this.parentObj)
{var firstExpression=this.parentObj.elements[0];if(firstExpression===this&&this.data['Conjunction']&&!logicEditor.percentConjunction&&!logicEditor.numberConjunction)
{console.log("DeleteingConjunction Erroneously!");delete(this.data['Conjunction']);}}
if(this.data.Conjunction)
{expData['Conjuction']=this.data.Conjunction;}
return expData;},setSchema:function(schema)
{this.schema=schema;},getLogicEditor:function()
{if(this.parentObj)
return this.parentObj.parentObj.parentObj;else
{var genericLEObject={schema:this.schema,editMode:true,clearCache:Q_LogicEditor.prototype.clearCache.bind(this),getAjaxData:Q_LogicEditor.prototype.getAjaxData.bind(this),onAjaxComplete:Q_LogicEditor.prototype.onAjaxComplete.bind(this),onAjaxSuccess:Q_LogicEditor.prototype.onAjaxSuccess.bind(this),validate:this.validate.bind(this),refreshControls:Q_LogicEditor.prototype.refreshControls.bind(this),attentionHighlighter:this.attentionHighlighter.bind(this),getExpressionCount:function(){return 1;},options:{}};return genericLEObject;}},getPrev:function()
{return this.parentObj.elements[this.getPosition()-1];},getPosition:Q_ExpressionSet.prototype.getPosition,ajaxData:Q_LogicEditor.prototype.ajaxData,triggerRefresh:function()
{if(this.refreshTimer)
{clearTimeout(this.refreshTimer);}
this.refreshTimer=this.refresh.bind(this).defer();},refresh:function(opt_suppressOnRefresh)
{this.refreshTimer=null
var logicEditor=this.getLogicEditor();if(logicEditor.rendering||!this.node){return;}
try{this.cleanup();deleteChildren(this.node);this.node.appendChild(this.buildEditor());logicEditor.attentionHighlighter(true);}
catch(e)
{console.error(e);}
if(this.onRefresh&&!opt_suppressOnRefresh)
{this.onRefresh();}},build:function()
{this.node=QBuilder('div',{className:this.getClasses()});this.node.appendChild(this.buildEditor());return this.node;},getClasses:function()
{var classes='ExpressionContainer';var pos=this.getPosition();if(pos==0)
{classes+=' First';}
if(this.parentObj&&this.parentObj.elements&&pos==this.parentObj.elements.length-1)
{classes+=' Last';}
if(this.data['Conjunction']=='And')
{classes+=' And'}
else if(this.data['Conjunction']=='Or')
{classes+=' Or'}
else if(this.getLogicEditor().percentConjunction||this.getLogicEditor().numberConjunction)
{classes+=' Number'}
else
{classes+=' If'}
return classes;},refreshClasses:function()
{this.node.setAttribute('class',this.getClasses());},attentionHighlighterAction:function(autoFocus)
{if(autoFocus==undefined)autoFocus=true;var newAttention=null;if(!this.valid)
{var r=this.invalidReason;var id=this.id;if($(r+'_'+id))
{newAttention=$(r+'_'+id);}}
if(newAttention)
{if(this.initialRender&&newAttention.nodeName=='INPUT')
{return;}
if(newAttention.hasAttribute('comboboxinput'))
{var tmp=$(newAttention.getAttribute('comboboxinput'))
if(tmp)
{newAttention=tmp;}}
this.attention=newAttention;$(this.attention).addClassName('Attention');if(this.attention.nodeName=='INPUT')
{if(autoFocus)
{if(this.attention.getAttribute('autoclear')&&this.attention.getAttribute('autoclear')==this.attention.value)
{}
$(this.attention).focus();}}}},attentionHighlighter:function(autoFocus)
{if(this.attention)
{$(this.attention).removeClassName('Attention');this.attention=null;}
if(!this.valid)
{var r=this.invalidReason;var id=this.id;if(r)
{if($(r+'_'+id))
{this.attentionHighlighterAction(autoFocus);}
else
{this.attentionHighlighterAction.bind(this,autoFocus).defer();}
return true;}}
return false;},buildConjuntionSelect:function()
{},buildPercentConjunction:function(opt_isFirst)
{if(!this.data['Conjunction'])
this.data['Conjunction']='100%';var pValue=this.data['Conjunction'];var classNames='TextBox NumberBox';if(!this.data['AutoPercent'])
classNames+=' Manual';var percentInput=QBuilder('input',{className:classNames,id:'Percent_'+this.id,name:'Conjunction',value:pValue,autocomplete:'off',exid:this.id,leid:this.getLogicEditor().id});this.addObserver(percentInput);var changeArrow='';if(!opt_isFirst)
changeArrow=QBuilder('a',{className:'DownArrowButton',downcallback:'Qualtrics.Menu.showMenu(Q_Expression.getConjunctionMenuDef:'+this.id+',$el, {"menuItemSelectCallback":"Q_Expression.performValueChange:'+this.id+'(Conjunction, $value, true)"},$evt)'},[QBuilder('span')]);return QBuilder('span',{className:'NumberChanger'},[percentInput,changeArrow]);},buildNumberConjunction:function(opt_isFirst)
{if(!this.data['Conjunction'])
this.data['Conjunction']='1';var pValue=this.data['Conjunction'];var classNames='TextBox NumberBox';classNames+=' Manual';var numberInput=QBuilder('input',{className:classNames,id:'Number_'+this.id,name:'Conjunction',value:pValue,autocomplete:'off',exid:this.id,leid:this.getLogicEditor().id});this.addObserver(numberInput);var changeArrow='';if(!opt_isFirst)
changeArrow=QBuilder('a',{className:'DownArrowButton',downcallback:'Qualtrics.Menu.showMenu(Q_Expression.getConjunctionMenuDef:'+this.id+',$el, {"menuItemSelectCallback":"Q_Expression.performValueChange:'+this.id+'(Conjunction, $value, true)"},$evt)'},[QBuilder('span')]);return QBuilder('span',{className:'NumberChanger'},[numberInput,changeArrow]);},buildEditor:function()
{var logicEditor=this.getLogicEditor();if(logicEditor.editMode)
{if(!this.progress)
{this.initProgress();}
var conjunctionSelect='';if(logicEditor.allowConjunctions)
{conjunctionSelect=this.buildConjunction();}
var logicTypeSelect='';var schema=this.getSchemaElement();if(schema&&schema.description)
{this.logicTypeField=new Qualtrics.ExpressionField.logictype(this);logicTypeSelect=this.logicTypeField.build();}
var expressionDiv=QBuilder('span');var expressionOuterDiv=QBuilder('div',{className:'Selectors'},[conjunctionSelect,logicTypeSelect,expressionDiv]);expressionDiv.appendChild(this.buildExpressionFromSchema(this.data['LogicType']));expressionDiv.appendChild(QBuilder('div',{className:'clear'}));var buttonClass='';var expCount=logicEditor.getExpressionCount();var removeClass='RemoveExpression';var addClass='AddExpression';if(logicEditor.minExpressions!=undefined)
{if(logicEditor.minExpressions==expCount)
{buttonClass+=' first';removeClass+=' Disabled';}}
if(logicEditor.maxExpressions!=undefined)
{if(logicEditor.maxExpressions==expCount)
{buttonClass+=' last';addClass+=' Disabled';}}
var buttons=QBuilder('div',{className:'Buttons'+buttonClass},[QBuilder('a',{className:removeClass,clickcallback:'Q_LogicEditor.removeExpression',p1:this.id,p2:'',p3:'$evt',instanceid:logicEditor.id}),QBuilder('a',{className:addClass,clickcallback:'Q_LogicEditor.addExpression',p1:this.id,p2:'',p3:'$evt',instanceid:logicEditor.id})]);if(logicEditor.maxExpressions==1&&logicEditor.minExpressions==1)
{buttons='';}
var expressionContainer=QBuilder('div',{className:'Expression '+this.data['LogicType']},[expressionOuterDiv,buttons]);if(this.useQMenus||this.getLogicEditor().useQMenus)
{$(expressionContainer).addClassName('UseQMenus');}
return expressionContainer;}
else
{var orClass='';if(this.data['Conjunction']=='Or'){orClass=' OrIfExpression';}
var desc=QBuilder('div',{className:'Description'+orClass},[this.buildDescription(logicEditor.options.editLink)]);return desc;}},buildConjunction:function()
{var firstMsg=getMessage('If');var andMsg=getMessage('EditSection','AndIf');var orMsg=getMessage('EditSection','OrIf');var percentMsg=getMessage('EditSection','Percentage');if(this.getSchemaElement().conjunction)
{firstMsg=this.getSchemaElement().conjunction.first||firstMsg;andMsg=this.getSchemaElement().conjunction.and||andMsg;orMsg=this.getSchemaElement().conjunction.or||orMsg;}
var logicEditor=this.getLogicEditor();if(logicEditor.percentConjunction)
{firstMsg=this.buildPercentConjunction(true);}
else if(logicEditor.numberConjunction)
{firstMsg=this.buildNumberConjunction(true);}
var conjunctionSelect=QBuilder('span',{className:'ExpressionField ConjunctionField'},[firstMsg]);if(this.getPosition()>0)
{if(logicEditor.percentConjunction&&(!this.data['Conjunction']||!isNaN(parseInt(this.data['Conjunction']))))
{if(!this.data['Conjunction'])
{this.data['AutoPercent']=true;this.data['Conjunction']='100%';}
return this.buildPercentConjunction();}
else if(logicEditor.numberConjunction&&(!this.data['Conjunction']||!isNaN(parseFloat(this.data['Conjunction']))))
{if(!this.data['Conjunction'])
this.data['Conjunction']='1';return this.buildNumberConjunction();}
else if(this.useQMenus||this.getLogicEditor().useQMenus)
{if(!this.data['Conjunction'])
{this.data['Conjunction']=getMessage('Piping','And');}
var menuOptions=this.getConjunctionMenuOptions();return Qualtrics.Menu.buildMenuButton(this.data['Conjunction']||'And','Q_Expression.getConjunctionMenuDef:'+this.id,menuOptions);}
else
{conjunctionSelect=QBuilder('select',{className:'SelectBox ConjunctionField',exid:this.id,leid:this.getLogicEditor().id,name:'Conjunction'},[QBuilder('option',{value:'And'},[andMsg]),QBuilder('option',{value:'Or'},[orMsg])]);if(logicEditor.percentConjunction)
{conjunctionSelect.appendChild(QBuilder('option',{value:'100%'},percentMsg));}
else if(logicEditor.numberConjunction)
{conjunctionSelect.appendChild(QBuilder('option',{value:'1'},logicEditor.numberConjunctionMessage));}
if(this.data['Conjunction'])
{conjunctionSelect.value=this.data['Conjunction'];}
else
{this.data['Conjunction']=getMessage('Piping','And');}
conjunctionSelect.onchange=this.valueChangeHandler;}}
return conjunctionSelect;},getMenuClassName:function()
{var logicEditor=this.getLogicEditor();var autoClass=logicEditor.options.theme?'ThemedElement ThemedElement_'+logicEditor.options.theme:'SelectMenuButton';var logicEditorMenuOptions=logicEditor.options.menuOptions||{};return logicEditorMenuOptions.className||autoClass;},getConjunctionMenuOptions:function()
{var logicEditor=this.getLogicEditor();var logicEditorMenuOptions=logicEditor.options.menuOptions||{};return Object.extend(logicEditorMenuOptions,{buttonId:'Conjunction'+this.id,fieldName:'Conjunction',menuItemSelectCallback:'Q_Expression.performValueChange:'+this.id+'($fieldName, $value, true)',menuType:logicEditorMenuOptions.menuType||'LogicEditorMenuPane',className:this.getMenuClassName()+' FieldName_Conjunction',theme:logicEditor.options.theme});},getConjunctionMenuDef:function()
{var andMsg=getMessage('EditSection','AndIf');var orMsg=getMessage('EditSection','OrIf');if(this.getSchemaElement().conjunction)
{andMsg=this.getSchemaElement().conjunction.and||andMsg;orMsg=this.getSchemaElement().conjunction.or||orMsg;}
var percentItem='';if(this.getLogicEditor().percentConjunction)
{percentItem={value:'100%',display:getMessage('EditSection','Percentage')}}
else if(this.getLogicEditor().numberConjunction)
{percentItem={value:'1',display:this.getLogicEditor().numberConjunctionMessage}}
return{icon:false,items:[percentItem,{value:'And',display:andMsg},{value:'Or',display:orMsg}]}},buildCustomConjunction:function()
{},buildExpressionFromSchema:function()
{var expressionDiv=document.createDocumentFragment();var schema=this.getSchemaElement();if(schema&&schema.fields)
{var fields=schema.fields;for(var i=0,len=fields.length;i<len;++i)
{var fieldNode=this.buildField(fields[i]);if(fieldNode&&fieldNode.nodeType)
{if(i==0&&fieldNode.className)
{fieldNode.className+=' First';}
expressionDiv.appendChild(fieldNode);}
else
{if(fieldNode=='#loading#')
{expressionDiv.appendChild(this.buildLoading());break;}}}}
return expressionDiv;},updateValues:function()
{var fields=this.getSchemaElement().fields;if(fields)
{for(var i=0,len=fields.length;i<len;++i)
{var fieldDef=fields[i];if(fieldDef['type']=='hidden'&&typeof fieldDef.value!='undefined')
{this.data[fieldDef.fieldName]=this.evalSchemaExpressionString(fieldDef.value);}}}},evalSchemaExpression:function(obj,opt_forcedParams)
{for(var key in obj)
{var val=obj[key];if(key=='$logicEditorFunction')
{val=this.preparseFunctionParameters(val);return Qualtrics.Event.executeDotSyntax(val,null,this.getLogicEditor(),opt_forcedParams);}
else if(key=='$logicVariable')
{return this.getLogicEditor()[val];}
else if(key=='$expressionFunction')
{val=this.preparseFunctionParameters(val);return Qualtrics.Event.executeDotSyntax(val,null,this,opt_forcedParams);}
else if(key=='$function')
{val=this.preparseFunctionParameters(val);return Qualtrics.Event.executeDotSyntax(val,null,null,opt_forcedParams,{'$logicEditor':this.getLogicEditor()});}
else if(key=='$field')
{if((val.indexOf('==')!=-1)||(val.indexOf('!=')!=-1))
{return this.processIf([key+'.'+val],false);}
if(val.indexOf('.Meta')!=-1)
{var parts=val.split('.');return this.getFieldMeta(parts[0],parts[2]);}
return this.getFieldValue(val);}
else if(key=='$ajax')
{return this.processAjaxExpression(val);}
else if(key=='$if'||key=='$ifAll')
{return this.processIf(val,false);}
else if(key=='$ifAny')
{return this.processIf(val,true);}}
return obj;},evalSchemaExpressionString:function(str,opt_wrapWithQuotes,opt_forcedParams)
{try
{if(typeof str=='boolean')
{return str;}
if(typeof str=='object')
{return this.evalSchemaExpression(str,opt_forcedParams);}
if(typeof str=='undefined')
return null;if(str.charAt(0)=='$'&&str.indexOf('${')==-1)
{var firstDot=str.indexOf('.');var key=str.substr(0,firstDot);var val=str.substr(firstDot+1);var expressionPkg={};expressionPkg[key]=val;var evaled=this.evalSchemaExpression(expressionPkg,opt_forcedParams);if(evaled===expressionPkg)
{return str;}
if(opt_wrapWithQuotes)
{if(evaled===undefined||evaled===null||evaled===false||evaled===true)
{evaled=""+evaled;}
else
{evaled='"'+evaled+'"';}}
return evaled;}
else if(str.indexOf('${')!=-1)
{var exprs=str.match(/\${(.*?)}/g);for(var i=0,ilen=exprs.length;i<ilen;i++)
{var exp=exprs[i];exp='$'+exp.substr(2,exp.length-3);var firstDot=exp.indexOf('.');var key=exp.substr(0,firstDot);var val=exp.substr(firstDot+1);var expressionPkg={};expressionPkg[key]=val;var evaled=this.evalSchemaExpression(expressionPkg,opt_forcedParams);if(evaled===expressionPkg)
{continue;}
if(opt_wrapWithQuotes)
{if(evaled===undefined||evaled===null||evaled===false||evaled===true)
{evaled=""+evaled;}
else
{evaled='"'+evaled+'"';}}
str=str.replace(/\${(.*?)}/,evaled);}}}
catch(e)
{console.error('Error evalSchemaExpressionString',str);console.error(e);}
return str;},processAjaxExpression:function(pkg)
{var params={};for(var key in pkg.params)
{params[key]=this.evalSchemaExpressionString(pkg.params[key]);}
return this.getLogicEditor().getAjaxData(pkg.action,params,pkg);},processIf:function(ifArray,returnTrueIfAny)
{var allAreTrue=true;for(var i=0,len=ifArray.length;i<len;++i)
{var exp=ifArray[i];if(exp)
{var processedExp=this.evalInternalStringExpressions(exp,' ',true);if(new Function('return '+processedExp)())
{if(returnTrueIfAny)
{return true;}}
else
{allAreTrue=false;}}}
return allAreTrue;},preparseFunctionParameters:function(str)
{if(str.lastIndexOf(')')===str.length-1)
{var openIndex=str.lastIndexOf('(');if(openIndex!=-1)
{var paramsString=str.substring(openIndex+1,str.lastIndexOf(')'));paramsString=this.evalInternalStringExpressions(paramsString,',');str=str.substring(0,openIndex);str+='('+paramsString+')';}}
return str;},evalInternalStringExpressions:function(str,opt_delimiter,opt_wrapWithQuotes)
{var tokens=str.split(opt_delimiter||' ');for(var i=0,len=tokens.length;i<len;++i)
{tokens[i]=tokens[i].strip();tokens[i]=this.evalSchemaExpressionString(tokens[i],opt_wrapWithQuotes);}
return tokens.join(opt_delimiter||' ');},initProgress:function()
{this.progress={};var schema=this.getSchemaElement();if(schema)
{var fields=schema.fields;this.progress={};if(fields)
{for(var i=0,len=fields.length;i<len;++i)
{this.openField(fields[i]);}}}},openProgress:function(type,key)
{this.progress[type+'_'+key]=false;this.checkOverallProgress();},closeProgress:function(type,key)
{this.progress[type+'_'+key]=true;this.checkOverallProgress();},checkOverallProgress:function()
{this.loaded=false;for(key in this.progress)
{if(!this.progress[key])
return false;}
this.loaded=true;var le=this.getLogicEditor();if(le.checkProgress)
{le.checkProgress();}
return this.loaded;},getFieldId:function(fieldDef)
{var fieldId=fieldDef;if(typeof fieldId=='object')
{fieldId=fieldId.fieldName||fieldId.type||'Unknown';}
return fieldId;},openField:function(fieldDef)
{this.openProgress('field',this.getFieldId(fieldDef));},fieldLoaded:function(fieldDef)
{this.closeProgress('field',this.getFieldId(fieldDef));},buildField:function(fieldDef)
{var node=null;if(fieldDef&&fieldDef.depends&&!this.resolveDependency(fieldDef.depends))
{this.fieldLoaded(fieldDef);return false}
else if(fieldDef)
{var fieldObj=this.getFieldByFieldName(fieldDef.fieldName,true);if(fieldObj)
{this.fieldLoaded(fieldDef);node=fieldObj.build();}}
return node;},buildLoading:function()
{return QBuilder('span',{className:'Loading'},'\35\35\35\35');},buildDateInput:function(fieldDef)
{QModules.loadModule('q_calendar.js');var frag=document.createDocumentFragment();var now=new Date();var nowString='';if(this.data[fieldDef.fieldName]===undefined)
{nowString=now.getFullYear()+'-'+String(now.getMonth()+1).leftPad(2)+'-'+String(now.getDate()).leftPad(2);this.data[fieldDef.fieldName]=nowString;}
var valueValue=this.data[fieldDef.fieldName];var valueInput=QBuilder('input',{className:'TextBox',id:fieldDef.fieldName+'_'+this.id,name:fieldDef.fieldName,value:valueValue,size:'10',maxlength:'10',autocomplete:'off',exid:this.id,leid:this.getLogicEditor().id});this.addObserver(valueInput);frag.appendChild(valueInput);var pickerOptions={range:false,monthCount:1,dateFormat:'yyyy-MM-dd'};var range=false;if(fieldDef.fieldName=='fromDate')
{range=true;}
if(range)
{pickerOptions.range=true;pickerOptions.rangeEnd='toDate_'+this.id;pickerOptions.monthCount=2;}
new Control.DatePicker(valueInput,pickerOptions);return frag;},buildLocationInput:function(fieldDef)
{QModules.loadModule("QGeoMap.js");var elements=[];if(Qualtrics.Browser.IE&&Qualtrics.Browser.getVersion()<8)
{fieldDef.prompt="Enter country codes....";fieldDef.size=25;var input=new Qualtrics.ExpressionField.textbox(this,fieldDef);var inputField=input.build();var tip=QBuilder('span',{className:"locationTooltip"},'Please enter ISO-3166 two letter country codes.  Multiple countries can be entered, separated by a comma.  ie US,CA,GB');elements=[inputField,tip];}
else
{var button=QBuilder('a',{href:"javascript:void(0)",className:"LocationButton qbutton positive",id:"LocationButton_"+this.id},'Select Locations');button.setStyle({margin:"1px"});var input=new Qualtrics.ExpressionField.textbox(this,fieldDef);var inputField=input.build();inputField.setStyle({display:"none"});var displayField=QBuilder('input',{type:"text",readonly:"readonly",className:"TextBox ExpressionField readonly"},"Click the button to select locations...");displayField.setStyle({width:"25em"});elements=[displayField,inputField,button];if(this.data[fieldDef.fieldName])
{var selected=this.data[fieldDef.fieldName].evalJSON();var displayNames=Qualtrics.GeoMap.getDisplayNames(selected);displayField.value=displayNames;var options={inputField:inputField,data:selected,displayField:displayField};}
else
var options={data:{},inputField:inputField,displayField:displayField};var geoMap=new Qualtrics.GeoMap(options);Event.observe(button,'click',function(){if(geoMap.loaded)
geoMap.show();});}
return QBuilder('div',{className:"LocationContainer"},elements);},buildComboBoxField:function(fieldDef)
{var action=fieldDef.action;var fieldName=fieldDef.fieldName;var prompt;if(fieldDef.prompt)
{prompt=fieldDef.prompt;}
var paramFunc=function(){var params={};for(key in fieldDef.params)
{params[key]=this.evalSchemaExpressionString(fieldDef.params[key]);}
return params;};var value=this.data[fieldDef.fieldName]||'';var that=this;var cb=new Qualtrics.ComboBox({autoComplete:true,className:'InlineComboBox',list:{type:'ajax',ajaxAction:action,ajaxParameters:paramFunc.bind(this)},hiddenInputId:fieldName+'_'+this.id,hiddenInputName:fieldName,defaultValue:value,prompt:prompt,onHiddenInputChange:function(el)
{that.valueChangeHandler(el,el.value)}});var comboBoxNode=cb.build();cb.input.setAttribute('exid',this.id);cb.input.setAttribute('leid',this.getLogicEditor().id);cb.hiddenInput.setAttribute('exid',this.id);cb.hiddenInput.setAttribute('leid',this.getLogicEditor().id);this.addObserver(cb.input);return comboBoxNode;},buildCheckBoxField:function(fieldDef)
{var fieldName=fieldDef.fieldName;var prompt=fieldDef.prompt;var value=(this.data[fieldDef.fieldName]?1:0);var promptClass=fieldDef.promptClassName;var checkbox=QBuilder('input',{type:'checkbox',id:fieldName+'_'+this.id,name:fieldName,leid:this.getLogicEditor().id,exid:this.id})
if(value)
{checkbox.checked=true;checkbox.defaultChecked=true;}
this.addObserver(checkbox);if(!promptClass)
promptClass="";var label=QBuilder('label',{htmlFor:fieldName+'_'+this.id,className:promptClass},prompt)
return QBuilder('div',{className:'InlineCheckBox ExpressionField'},[checkbox,label]);},buildRadioField:function(fieldDef)
{var fieldName=fieldDef.fieldName;var prompt=fieldDef.prompt;var value=(this.data[fieldDef.fieldName]?1:0);var checkbox=QBuilder('input',{type:'radio',id:fieldName+'_'+this.id,name:fieldName,leid:this.getLogicEditor().id,exid:this.id,value:fieldDef.value})
if(value)
{checkbox.checked=true;checkbox.defaultChecked=true;}
this.addObserver(checkbox);if(prompt)
var label=QBuilder('label',{htmlFor:fieldName+'_'+this.id},prompt);else
var label='';var className='InlineRadio ExpressionField ';if(fieldDef.className)
className+=fieldDef.className;return QBuilder('div',{className:className},[checkbox,label]);},buildWebServiceInput:function(fieldDef)
{var locator=this.data[fieldDef.fieldName];var locatorData=Q_GlobalLogic.getLocatorParts(locator);var fieldName=fieldDef.fieldName;this.WebServiceFieldButton=Qualtrics.Menu.buildMenuButton('Select Field...','Q_Expression.getWebServiceFieldButtonDef:'+this.id,{menuWithinMenu:true,className:'SelectMenuButton'});var wsFieldName='';var url='';if(locatorData.query&&locatorData.query.f)
wsFieldName=decodeURIComponent(locatorData.query.f);if(locatorData.query&&locatorData.query.u)
url=decodeURIComponent(locatorData.query.u);if(wsFieldName)
{this.WebServiceFieldButton.callbackNode.innerHTML=wsFieldName;}
this.WebServiceFieldInput=QBuilder('input',{type:'hidden',id:fieldName+'_FieldName_'+this.id,name:fieldName+'_FieldName',leid:this.getLogicEditor().id,exid:this.id,value:wsFieldName});this.WebServiceLocatorInput=QBuilder('input',{type:'hidden',id:fieldName+'_'+this.id,name:fieldName,leid:this.getLogicEditor().id,exid:this.id,value:locator});var prompt='Enter Web Service URL...';var className='TextBox '
if(!url)
{url=prompt;className+='AutoClearMessage';}
this.WebServiceURLInput=QBuilder('input',{keyupcallback:'Q_Expression.validateWebServiceURL:'+this.id,keyentercallback:'Q_Expression.testWebService:'+this.id,id:fieldName+'_URL_'+this.id,name:fieldName+'_URL',leid:this.getLogicEditor().id,exid:this.id,value:url,type:'text',size:'35',autoclear:prompt,className:className});this.validateWebServiceURL()
this.addObserver(this.WebServiceFieldInput);this.addObserver(this.WebServiceLocatorInput);return QBuilder('div',{className:'WebServiceMenu'},[this.WebServiceURLInput,this.WebServiceFieldButton,this.WebServiceFieldInput,this.WebServiceLocatorInput]);},getWebServiceFieldButtonDef:function()
{return{ajax:{action:"TestWebService",parameters:{url:this.WebServiceURLInput.value},preparser:"Q_Expression.getMenuDefFromWebServiceFields:"+this.id}};},getMenuDefFromWebServiceFields:function(transport)
{transport=Qualtrics.parseJSON(transport);var list=this.parseWebServiceResponse(transport.Response);var items=[];for(var fieldName in list)
{var example=QualtricsCPTools.middleTruncate(list[fieldName],200);items.push({display:QBuilder('div',{bubbleup:true},[fieldName,QBuilder('div',{className:'WebServiceFieldExample',bubbleup:true},example)]),action:'Q_Expression.selectWebServiceField:'+this.id+'('+fieldName+')'})}
return{search:true,items:items};},getWebServiceLocator:function(url,fieldName)
{var locator='';if(fieldName&&url)
locator='ws://WebService?u='+url+'&f='+fieldName;return locator;},selectWebServiceField:function(fieldName)
{var url=encodeURIComponent(this.WebServiceURLInput.value);fieldName=encodeURIComponent(fieldName);this.WebServiceFieldInput.value=fieldName;this.WebServiceFieldButton.callbackNode.innerHTML=fieldName;var locator=this.getWebServiceLocator(url,fieldName);this.WebServiceLocatorInput.value=locator;$(this.WebServiceFieldButton).removeClassName('Attention');},parseWebServiceResponse:function(response)
{var list={};for(var key in response)
{var fieldName=key;var value;if(typeof response[key]=='function')
{continue;}
else if(typeof response[key]=='object')
{var fields=this.parseWebServiceResponse(response[key]);for(var field in fields)
{list[fieldName+'.'+field]=fields[field];}}
else if(typeof response[key]=='string')
{list[fieldName]=response[key];}}
return list;},validateWebServiceURL:function()
{var el=this.WebServiceURLInput;var val=el.value;var valid=false;if(isValidURL(val))
valid=true;if(valid)
{$(this.WebServiceFieldButton).show();$(this.WebServiceURLInput).removeClassName('Attention');if(!this.WebServiceFieldInput.value)
$(this.WebServiceFieldButton).addClassName('Attention');}
else
{$(this.WebServiceFieldButton).hide();this.WebServiceFieldButton.callbackNode.innerHTML='Select Field...';this.WebServiceFieldInput.value='';this.WebServiceLocatorInput.value='';$(this.WebServiceURLInput).addClassName('Attention');}
return valid;},modifyChoiceOption:function(val,desc)
{var locatorData=Q_GlobalLogic.getDataFromLocator(val);if(locatorData.type=='ChoiceTextEntryValue')
{desc+=' '+getMessage('EditSection','TextEntryP');}
return desc;},processSelectFieldValues:function(fieldDef,list)
{var processedList=[];if(fieldDef.listKey)
{list=list[fieldDef.listKey];}
for(var key in list)
{if(typeof list[key]=='function')
{continue;}
var optionValue=null;var entry={};for(var itemAttribute in list[key])
{entry[itemAttribute]=list[key][itemAttribute]}
var desc='';if(fieldDef.labelKey)
{if(list[key][fieldDef.labelKey])
desc=list[key][fieldDef.labelKey];}
else
{desc=list[key];}
if(fieldDef.valueKey)
{if(list[key][fieldDef.valueKey])
optionValue=list[key][fieldDef.valueKey];}
else
{optionValue=key;}
if(fieldDef.useValueAsValue)
{var optionValue=desc;}
desc=String(desc);if(fieldDef.optionModifier)
{desc=this.evalSchemaExpressionString(fieldDef.optionModifier,false,[optionValue,desc]);}
optionValue=this.evalSchemaExpressionString(optionValue);entry['value']=optionValue
entry['display']=desc;entry['metaInfo']=list[key];if(entry.value!==null||entry.display!==''||entry.action||entry.separator)
{processedList.push(entry);}}
if(fieldDef.preparser)
{processedList=Qualtrics.Event.executeDotSyntax(fieldDef.preparser,null,null,[processedList]);}
if(fieldDef.sort)
{processedList=processedList.sort(function(a,b)
{if(a['display'].toLowerCase()>=b['display'].toLowerCase())
return 1;else
return-1;});}
var fieldObj=this.getFieldByFieldName(fieldDef.fieldName);fieldObj.processedList=processedList;return processedList;},buildSuggestField:function(fieldDef)
{QModules.loadModule('QSuggest.js');var options={id:fieldDef.fieldName+'_'+this.id,ajaxAction:'webservice',ajaxParams:fieldDef.params,onChange:this.refreshSuggestHandlerOnType.bind(this,fieldDef),onSelect:this.refreshSuggestHandlerOnSelect.bind(this,fieldDef),onHiddenInputChange:this.refreshSuggestHandlerOnHiddenInputChange.bind(this,fieldDef),allowCustomValues:fieldDef.allowCustomValues};if(fieldDef.prompt)
{options.prompt=fieldDef.prompt;}
if(this.data[fieldDef.fieldName]!==undefined)
{options.hiddenInputValue=this.data[fieldDef.fieldName];}
if(this.data[fieldDef.fieldName])
{options.inputValue=this.data[fieldDef.fieldName];}
if(this.data[fieldDef.fieldName+"_searchtext"]!==undefined)
{options.inputValue=this.data[fieldDef.fieldName+"_searchtext"];}
var suggest=new QSuggest(options);var node=suggest.build();return node;},buildAutoSuggestField:function(fieldDef)
{QModules.loadModule('QAutoSuggest.js');var options={id:fieldDef.fieldName+'_'+this.id,action:'webservice',parameters:fieldDef.params,onSelect:this.autoSuggestOnSelect.bind(this,fieldDef)};if(fieldDef.prompt)
{options.prompt=fieldDef.prompt;}
if(this.data[fieldDef.fieldName]!==undefined)
{options.hiddenInputValue=this.data[fieldDef.fieldName];}
if(this.data[fieldDef.fieldName])
{options.inputValue=this.data[fieldDef.fieldName];}
if(this.data[fieldDef.fieldName+"_searchtext"]!==undefined)
{options.inputValue=this.data[fieldDef.fieldName+"_searchtext"];}
var suggest=new Qualtrics.AutoSuggest(options);var node=suggest.build();return node;},refreshSuggestHandlerOnType:function(fieldDef,key,val)
{this.data[fieldDef.fieldName+"_searchtext"]=val;delete this.data[fieldDef.fieldName];this.getLogicEditor().refreshControls(true);},refreshSuggestHandlerOnSelect:function(fieldDef,key,val)
{this.data[fieldDef.fieldName+"_searchtext"]=val;this.data[fieldDef.fieldName]=key;this.getLogicEditor().refreshControls(true);this.getLogicEditor().validate();},refreshSuggestHandlerOnHiddenInputChange:function(fieldDef,key,val)
{this.getLogicEditor().validate();},autoSuggestOnSelect:function(fieldDef,key,item)
{this.data[fieldDef.fieldName+"_searchtext"]=item.value;this.data[fieldDef.fieldName]=key;this.getLogicEditor().refresh(true);},normalizeList:function(list,fieldDef)
{var returnList={};for(key in list)
{if(typeof list[key]=='function')
{continue;}
var optionValue=key;var desc=list[key];if(fieldDef.labelKey)
{desc=list[key][fieldDef.labelKey];}
if(fieldDef.valueKey)
{if(list[key][fieldDef.valueKey])
optionValue=list[key][fieldDef.valueKey];else
QError('Cannot find valueKey: '+fieldDef.valueKey);}
if(fieldDef.useValueAsValue)
{var optionValue=desc;}
desc=String(desc);if(fieldDef.optionModifier)
{desc=this.evalSchemaExpressionString(fieldDef.optionModifier,false,[optionValue,desc]);}
returnList[optionValue]=desc;}
return returnList;},resolveDependency:function(dependsDef)
{return this.evalSchemaExpressionString(dependsDef);},getDescription:function(opt_editLink)
{var d=this.buildDescription(opt_editLink);if(typeof d=='object'&&d.innerHTML)
{return d.innerHTML;}
else
{return'';}},buildDescription:function(opt_editLink)
{var logicEditor=this.getLogicEditor();var logicId=logicEditor.id;var desc='';if(this.validate())
{var schema=this.getSchemaElement();if(logicEditor.autoGenerateDescription||schema.autoGenerateDescription)
{var descParts=[];if(logicEditor.allowConjunctions)
{var conjString=this.data['Conjunction'];if(!conjString)conjString=getMessage('If');var conjSpan=QBuilder('span',{className:'ConjDesc'},conjString);descParts.push(conjSpan);}
if(schema.description)
{descParts.push(QBuilder('span',{className:'schema_desc'},schema.description));}
if(schema.fields)
{for(var i=0,ilen=schema.fields.length;i<ilen;i++)
{var field=schema.fields[i];if(field.depends&&!this.resolveDependency(field.depends))
{continue;}
switch(field.type)
{case'hidden':break;case'text':if(field.value)
{descParts.push(QBuilder('span',{className:field.type+'_desc '+field.fieldName+'_desc'},field.value));}
break;case'select':if(this.data[field.fieldName])
{var val=this.data[field.fieldName];if(field.value[val])
val=field.value[val];else
{var resolved=this.evalSchemaExpressionString(field.value);if(resolved[val])
val=resolved[val];}
descParts.push(QBuilder('span',{className:field.type+'_val_desc '+field.fieldName+'_desc'},val));}
break;default:if(field.description)
{var resolved=this.evalSchemaExpressionString(field.description);descParts.push(QBuilder('span',{className:field.type+'_desc '+field.fieldName+'_desc'},resolved));}
else if(this.data[field.fieldName])
{descParts.push(QBuilder('span',{className:field.type+'_val_desc '+field.fieldName+'_desc'},this.data[field.fieldName]));}}}}
if(opt_editLink&&typeof opt_editLink=='object')
{descParts.push(opt_editLink.cloneNode(true));}
else if(opt_editLink)
{descParts.push(QBuilder('a',{className:'a',clickcallback:'Q_LogicEditor.edit',instanceid:logicId},getMessage('SiteWide','Edit')));}
desc=QBuilder('span',{className:'InnerDescription AutoDescription',href:'javascript:void(0)'},descParts);}
else
{conjString=this.data['Conjunction'];if(!conjString)conjString=getMessage('If');conjSpan=QBuilder('span',{className:'ConjDesc'},conjString);var questionDescription=this.data.QuestionID
var leftOpDesc=this.data['LeftOperand'];if(window.BaseQuestion)
{var questionObj=BaseQuestion.getQuestionByQuestionId(this.data.QuestionID);if(questionObj)
{questionDescription=questionObj['description'];if(leftOpDesc)
{var choiceLocatorData=Q_GlobalLogic.getDataFromLocator(this.data['ChoiceLocator']);if(choiceLocatorData.choiceId||choiceLocatorData.answerId)
{leftOpDesc='';if(choiceLocatorData.choiceId)
{if(questionObj.getChoiceByChoiceId)
{var choiceObj=questionObj.getChoiceByChoiceId(choiceLocatorData.choiceId);if(choiceObj)
{leftOpDesc+=choiceObj.text;}}}
if(choiceLocatorData.answerId)
{if(questionObj.questionType=='Matrix'&&questionObj.selector=='Profile')
{var seriesItem=choiceObj.series[choiceLocatorData.answerId-1];if(seriesItem)
{leftOpDesc+=' - '+seriesItem;}}
else if(questionObj.questionType=='GAP')
{if(choiceLocatorData.answerId>5)
{var seriesItem=choiceObj.series[choiceLocatorData.answerId-6];if(seriesItem)
{leftOpDesc+=' - '+seriesItem;}}
else
{if(questionObj.selector=='POS')
leftOpDesc+=' - '+this.getGAPColumnName(choiceLocatorData.answerId,true);else
leftOpDesc+=' - '+this.getGAPColumnName(choiceLocatorData.answerId,false);}}
else
{if(questionObj.getAnswerByAnswerId)
{var answerObj=questionObj.getAnswerByAnswerId(choiceLocatorData.answerId);if(answerObj)
{leftOpDesc+=' - '+answerObj.text;}
else
{leftOpDesc+=choiceLocatorData.answerId;}}}}
if(choiceLocatorData.answerIndex)
{if(questionObj.answers[choiceLocatorData.answerIndex])
{answerObj=questionObj.answers[choiceLocatorData.answerIndex];if(answerObj)
{leftOpDesc+=' - '+answerObj.text;}}}}
else if(choiceLocatorData.type=='ChoiceTextEntryValue')
{leftOpDesc='Text Response';}
else if(choiceLocatorData.type=='ChoiceDisplayed')
{leftOpDesc='';}
else if(choiceLocatorData.type=='DisplayableQuestion')
{leftOpDesc='';}
else if(choiceLocatorData.type=='UploadedFile')
{leftOpDesc='File';}
else if(choiceLocatorData.type=='UploadedFileSize')
{leftOpDesc='File Size';var isFileSize=true;}
else if(choiceLocatorData.type=='UploadedFileType')
{leftOpDesc='File Type';}}}}
var rightOperand=null;if(this.data['RightOperand'])
{var rightOpString=' '+this.data['RightOperand']+' ';if(isFileSize)
rightOpString+='bytes ';rightOperand=QBuilder('span',{className:'RightOpDesc'},rightOpString);}
var isString=getMessage('Is')+' ';if(this.data['LogicType']=='Quota')
{choiceLocatorData=Q_GlobalLogic.getDataFromLocator(this.data['ChoiceLocator']);var quotaId=choiceLocatorData.quotaId;questionDescription='Quota';if(this.data['Operator']=='QuotaMet')
{isString='';}
leftOpDesc=quotaId;if(this.data['QuotaName'])
{leftOpDesc=this.data['QuotaName'];}
if(this.quotaName)
{leftOpDesc=this.quotaName;}
else
{this.quotaName=this.getLogicEditor().getQuotaNameById(quotaId);if(this.quotaName)
leftOpDesc=this.quotaName;}}
if(!Q_GlobalLogic.needsValueBox(this.data['Operator']))
{rightOperand=null;}
var operatorString=getMessage(this.data['Operator']);var operator=QBuilder('span',{className:'OpDesc'},operatorString);var leftOperand=QBuilder('span',{className:'LeftOpDesc'},leftOpDesc);var questionSpan=QBuilder('span',{className:'QuestionDesc'},questionDescription);desc=QBuilder('span',{className:'InnerDescription',href:'javascript:void(0)'},[conjSpan,' ',questionSpan,' ',leftOperand,' ',isString,operator,' ']);if(rightOperand)
{desc.appendChild(rightOperand);}
if(opt_editLink&&typeof opt_editLink=='object')
{desc.appendChild(opt_editLink.cloneNode(true));}
else if(opt_editLink)
{desc.appendChild(QBuilder('a',{className:'a',preventdragscroll:'true',downcallback:'Q_LogicEditor.edit',instanceid:logicId},getMessage('EditSection','EditCondition')));}}}
else
{var link=QBuilder('a',{href:'javascript:void(0)',clickcallback:'Q_LogicEditor.edit',instanceid:logicId},getMessage('EditSection','ClickHereToEditLogic'));if(opt_editLink&&typeof opt_editLink=='object')
{link=opt_editLink.cloneNode(true)}
desc=QBuilder('div',{className:'LogicMsg'},[QBuilder('span',{className:'Error'},getMessage('EditSection','InvalidLogic')),' ',link]);}
return desc;},addObserver:function(input)
{input.setAttribute('keyupcallback','Q_Expression.valueChangeHandler:'+this.id+'($evt, $val)');if(!this.observers)
{this.observers=[];}
this.observers.push(new Form.Element.Observer(input,0.5,this.valueChangeHandler));},cleanup:function()
{if(this.rightOperandObserver)
{this.rightOperandObserver.stop();this.rightOperandObserver=null;}
if(this.leftOperandObserver)
{this.leftOperandObserver.stop();this.leftOperandObserver=null;}
if(this.observers)
{for(var i=0,len=this.observers.length;i<len;++i)
{this.observers[i].stop();this.observers[i]=null;}
this.observers=null;}},destroy:function()
{if(this.parentObj.getPosition()==0&&this.parentObj.parentObj.elements.length>1)
{if(this.parentObj.elements.length==1)
{return;}}
this.cleanup();var expressionSet=this.parentObj;expressionSet.elements.splice(this.getPosition(),1);if(expressionSet.elements.length==0)
{expressionSet.destroy();}
this.parentObj=null;expressionSet=null;if(Q_Expression.registry[this.id])
{delete Q_Expression.registry[this.id];}},valueChangeHandler:function(evt,opt_value)
{if(evt&&evt.nodeType)
{var el=evt;}
else
{if(!evt)evt=window.event;var el=Event.element(evt);}
var leid=el.getAttribute('leid');var exid=el.getAttribute('exid');var type=el.getAttribute('name');var expressionObj=Q_Expression.getInstance(exid);var logicEditor=expressionObj.getLogicEditor();if(!logicEditor)
logicEditor=expressionObj;if(el.type=='checkbox'||el.type=='radio')
{opt_value=undefined;}
if(opt_value!==undefined)
{var val=opt_value;if(expressionObj)
{if(logicEditor.percentConjunction&&type=='Conjunction'&&!isNaN(parseInt(val)))
{val=val.replace("%",'')+"%";el.value=val;if(!!document.activeElement&&document.activeElement==el)
QualtricsTools.focusInput(el,val.length-1);}
expressionObj.data[type]=val;logicEditor.saved=false;if(logicEditor.percentConjunction&&type=='Conjunction')
{if(opt_value.replace("%",'')=='')
{$(el).removeClassName('Manual');expressionObj.data['AutoPercent']=true;}
else
{$(el).addClassName('Manual');expressionObj.data['AutoPercent']=false;}
expressionObj.parentObj.updatePercentValues();}
expressionObj.updateValues();logicEditor.validate();logicEditor.attentionHighlighter(false);logicEditor.refreshControls(true);}
expressionObj.handleExternalOnChange();}
else
{logicEditor.initialRender=false;var value=el.value;if(el.type=='checkbox'||el.type=='radio')
{value=el.checked?1:0;}
if(expressionObj)
{expressionObj.performValueChange(type,value,true);}}},performValueChange:function(fieldName,value,userInitiated)
{if(userInitiated)
{this.changed=true;}
if(fieldName=='LogicType')
{var oldConj=this.data['Conjunction'];this.resetSubsequentFields(fieldName);this.data={};this.data['LogicType']=value;this.data['Conjunction']=oldConj;this.cachedSchema=null;this.initFields();}
var logicEditor=this.getLogicEditor();this.data[fieldName]=value;var fieldDef=this.getFieldDef(fieldName);if(fieldDef&&fieldName!='Conjunction'&&fieldDef.type!=='radio'&&fieldDef.cascade!==false)
{this.resetSubsequentFields(fieldName,true);}
var sendUserInitiatedToRefreshControls=userInitiated;if(this.supressedUserInitiatedRefresh)
{sendUserInitiatedToRefreshControls=true;this.supressedUserInitiatedRefresh=false;}
if(userInitiated)
{var willBeValid=this.allEmptyFieldsHaveValidDefaults();if(willBeValid)
{sendUserInitiatedToRefreshControls=false;this.supressedUserInitiatedRefresh=true;}}
logicEditor.saved=false;logicEditor.validate();this.triggerRefresh();if(logicEditor.refreshControls)
{logicEditor.refreshControls(sendUserInitiatedToRefreshControls);}
this.handleExternalOnChange();if(fieldName=='Conjunction')
{this.refreshClasses();if(logicEditor.percentConjunction)
this.parentObj.updatePercentValues();}},handleExternalOnChange:function()
{var logicEditor=this.getLogicEditor();if(logicEditor.onValueChange)
logicEditor.onValueChange();if(logicEditor.onChange)
logicEditor.onChange();if(this.onChange)
this.onChange();},allEmptyFieldsHaveValidDefaults:function()
{var fieldDefs=this.getCurrentFieldDefs();var fieldValues=this.getCurrentFields();var allEmptyFieldsHaveValidDefaults=true;var hasEmptyFields=false;for(var fieldId in fieldValues)
{if(fieldDefs[fieldId]['type']!='text'&&fieldDefs[fieldId]['type']!='hidden'&&fieldDefs[fieldId]['type']!='textbox'&&fieldDefs[fieldId]['type']!='menu'&&fieldDefs[fieldId]['type']!='checkbox'&&fieldDefs[fieldId]['type']!='radio')
{if(fieldValues[fieldId]===undefined)
{hasEmptyFields=true;if(fieldDefs[fieldId]['prompt']&&this.data[fieldId]===undefined)
{allEmptyFieldsHaveValidDefaults=false;break;}}}}
if(!hasEmptyFields)
{allEmptyFieldsHaveValidDefaults=false;}
return allEmptyFieldsHaveValidDefaults;},resetSubsequentFields:function(fieldName,persistApplicableValues)
{var fieldPos=this.getSchemaFieldPosition(fieldName);if(!fieldPos)
{fieldPos=0;}
var schema=this.getSchemaElement();if(schema&&schema.fields)
{var validFieldNames={};for(var i=0;i<fieldPos+1;++i)
{if(schema.fields[i])
validFieldNames[schema.fields[i].fieldName]=true;}
for(var i=fieldPos+1,len=schema.fields.length;i<len;++i)
{var field=schema.fields[i];if(field&&field.persistent)
{continue;}
if(field&&field.fieldName)
{if(!validFieldNames[field.fieldName])
{this.openField(field);if(field.type=='textbox'||field.type=='combobox'||field.type=='hidden')
{if(field.value)
{if(field.depends&&!this.resolveDependency(field.depends))
{delete this.data[field.fieldName];}
else
{this.data[field.fieldName]=this.evalSchemaExpressionString(field.value);}}}
else
{delete this.data[field.fieldName];}}}}}},getDefaultLogicType:function()
{var schema=this.getLogicEditor().schema;for(var i=0,len=schema.elements.length;i<len;++i)
{return schema.elements[i].id;}},getSchemaElement:function()
{if(!this.cachedSchema)
{if(!this.getLogicEditor().schema.getElementById(this.data['LogicType']))
{this.data['LogicType']=this.getDefaultLogicType();}
this.cachedSchema=this.getLogicEditor().schema.getElementById(this.data['LogicType']);}
return this.cachedSchema;},getSchemaFieldPosition:function(fieldName,opt_checkDependency)
{var schema=this.getSchemaElement();if(schema&&schema.fields)
{for(var i=0,len=schema.fields.length;i<len;++i)
{if(schema.fields[i].fieldName==fieldName)
{if(opt_checkDependency&&schema.fields[i].depends&&!this.resolveDependency(schema.fields[i].depends))
{continue;}
return i;}}}},getFieldDef:function(fieldName,opt_checkDependency)
{var fieldPos=this.getSchemaFieldPosition(fieldName,opt_checkDependency);if(fieldPos!==undefined)
{var schema=this.getSchemaElement();if(schema.fields)
return this.getSchemaElement().fields[fieldPos];}},validate:function()
{this.valid=true;this.invalidReason=null;var schema=this.getSchemaElement();if(schema&&schema.fields)
{for(var i=0,len=schema.fields.length;i<len;++i)
{if(schema.fields[i]&&schema.fields[i].depends&&!this.resolveDependency(schema.fields[i].depends))
{continue;}
if(schema.fields[i]&&(schema.fields[i].type=='checkbox'||schema.fields[i].type=='radio'||schema.fields[i].type=='text'||schema.fields[i].type=='menu'||schema.fields[i].type=='link'))
{continue;}
if(schema.fields[i]&&schema.fields[i].fieldName&&!this.data[schema.fields[i].fieldName]&&!schema.fields[i].optional)
{this.invalidReason=schema.fields[i].fieldName;this.valid=false;}}}
if(schema&&schema.validation)
{if(!this.evalSchemaExpressionString(schema.validation))
{this.invalidReason='custom schema validation';this.valid=false;}}
return this.valid;},validateOld:function()
{var valid=false;this.invalidReason=null;if(this.data['LogicType']=='Question'||this.data['LogicType']=='EmbeddedField'||this.data['LogicType']=='Quota')
{if(this.data.QuestionID||this.data['QuotaID']||this.data['LogicType']=='EmbeddedField')
{if(!this.data['LeftOperand']&&this.choiceLocator&&this.data['LogicType']=='Question')
{this.data['LeftOperand']=this.choiceLocator;}
if(this.data['LeftOperand'])
{if(this.data['Operator'])
{if(Q_GlobalLogic.needsValueBox(this.data['Operator']))
{if(this.data['RightOperand']!=null&&this.data['RightOperand']!="")
{valid=true;}
else
{valid=false;this.invalidReason='RightOperand';}}
else
{valid=true;}}
else
{this.invalidReason='operator';}}
else
{this.invalidReason='LeftOperand';}}
else
{this.invalidReason='QuestionID';}}
else if(this.data)
{return true;}
return valid;},getOperatorListTypeFromChoiceLocator:function()
{var locatorData=Q_GlobalLogic.getDataFromLocator(this.data['ChoiceLocator']);var locatorType=locatorData.type;var listType;if(locatorType=='DisplayableQuestion')
{listType='Displayed';}
else if(locatorType=='SelectableAnswer'||locatorType=='SelectableChoice'||locatorType=='DisplayableChoice')
{if(this.getLogicEditor().hideDisplayed)
{listType='Selected';}
else
{listType='SelectedWithDisplayed';}}
else if(locatorType=='ChoiceNumericEntryValue'||locatorType=='ChoiceTextEntryValue'||locatorType=='AnswerNumericEntryValue'||locatorType=='AnswerTextEntryValue'||locatorType=='SelectedAnswerCount'||locatorType=='SelectedChoicesCount')
{if(this.getLogicEditor().hideDisplayed)
{listType='Numeric';}
else
{listType='NumericWithDisplayed';}}
else if(locatorType=='Region')
{listType='Region';}
else if(locatorType=='UploadedFile')
{listType='UploadedFile';}
else if(locatorType=='UploadedFileSize')
{listType='UploadedFileSize';}
else if(locatorType=='UploadedFileType')
{listType='UploadedFileType';}
return this.getOperatorList(listType);},getGUID:function()
{return QualtricsTools.createNewId('QID');},getGAPColumnName:function(index,reverse)
{GAPColumns={};var i=1;if(!reverse)
{GAPColumns[i++]=getMessage('EditSection','VeryHappy');GAPColumns[i++]=getMessage('EditSection','Happy');GAPColumns[i++]=getMessage('EditSection','NeitherHappyNorUnhappy');GAPColumns[i++]=getMessage('EditSection','Unhappy');GAPColumns[i++]=getMessage('EditSection','VeryUnhappy');}
else
{GAPColumns[i++]=getMessage('EditSection','VeryUnhappy');GAPColumns[i++]=getMessage('EditSection','Unhappy');GAPColumns[i++]=getMessage('EditSection','NeitherHappyNorUnhappy');GAPColumns[i++]=getMessage('EditSection','Happy');GAPColumns[i++]=getMessage('EditSection','VeryHappy');}
return GAPColumns[index];},getOperatorList:function(type)
{if(type=='Selected')
{return{Selected:getMessage('Selected'),NotSelected:getMessage('NotSelected')}}
else if(type=='Displayed')
{return{Displayed:getMessage('Displayed'),NotDisplayed:getMessage('NotDisplayed')}}
else if(type=='SelectedWithDisplayed')
{return{Selected:getMessage('Selected'),NotSelected:getMessage('NotSelected'),Displayed:getMessage('Displayed'),NotDisplayed:getMessage('NotDisplayed')}}
else if(type=='Numeric')
{return{EqualTo:getMessage('EqualTo'),NotEqualTo:getMessage('NotEqualto'),GreaterThan:getMessage('GreaterThan'),GreaterThanOrEqual:getMessage('GreaterThanorEqual'),LessThan:getMessage('LessThan'),LessThanOrEqual:getMessage('LessThanorEqual'),Empty:getMessage('Empty'),NotEmpty:getMessage('NotEmpty'),Contains:getMessage('Contains'),DoesNotContain:getMessage('DoesNotContain'),MatchesRegex:getMessage('MatchesRegex')}}
else if(type=='NumericStrict')
{return{EqualTo:getMessage('EqualTo'),NotEqualTo:getMessage('NotEqualto'),GreaterThan:getMessage('GreaterThan'),GreaterThanOrEqual:getMessage('GreaterThanorEqual'),LessThan:getMessage('LessThan'),LessThanOrEqual:getMessage('LessThanorEqual')}}
else if(type=='NumericSimple')
{return{EqualTo:getMessage('EqualTo'),NotEqualTo:getMessage('NotEqualto'),GreaterThan:getMessage('GreaterThan'),LessThan:getMessage('LessThan')}}
else if(type=='String')
{return{Contains:getMessage('Contains'),Is:getMessage('Is'),StartsWith:getMessage('StartsWith'),EndsWith:getMessage('EndsWith')}}
else if(type=='NumericWithDisplayed')
{return{EqualTo:getMessage('EqualTo'),NotEqualTo:getMessage('NotEqualto'),GreaterThan:getMessage('GreaterThan'),GreaterThanOrEqual:getMessage('GreaterThanorEqual'),LessThan:getMessage('LessThan'),LessThanOrEqual:getMessage('LessThanorEqual'),Empty:getMessage('Empty'),NotEmpty:getMessage('NotEmpty'),Contains:getMessage('Contains'),DoesNotContain:getMessage('DoesNotContain'),MatchesRegex:getMessage('MatchesRegex'),Displayed:getMessage('Displayed'),NotDisplayed:getMessage('NotDisplayed')}}
else if(type=='Quota')
{return{QuotaMet:getMessage('QuotaMet'),QuotaNotMet:getMessage('QuotaNotMet'),GreaterThan:getMessage('GreaterThan'),GreaterThanOrEqual:getMessage('GreaterThanorEqual'),LessThan:getMessage('LessThan'),LessThanOrEqual:getMessage('LessThanorEqual'),EqualTo:getMessage('EqualTo'),NotEqualTo:getMessage('NotEqualto')}}
else if(type=='Time')
{return{GreaterThan:getMessage('GreaterThan'),LessThan:getMessage('LessThan')}}
else if(type=='Date')
{return{LessThan:getMessage('Piping','Before'),GreaterThan:getMessage('Piping','After'),EqualTo:getMessage('Piping','Exactly'),NotEqualTo:getMessage('Piping','NotOn')}}
else if(type=='Region')
{return{ClickedIn:getMessage('ClickedIn'),NotClickedIn:getMessage('NotClickedIn')}}
else if(type=='UploadedFile')
{return{Uploaded:getMessage('Uploaded'),NotUploaded:getMessage('NotUploaded')};}
else if(type=='UploadedFileSize')
{return{GreaterThan:getMessage('GreaterThan'),GreaterThanOrEqual:getMessage('GreaterThanorEqual'),LessThan:getMessage('LessThan'),LessThanOrEqual:getMessage('LessThanorEqual')};}
else if(type=='UploadedFileType')
{return{PDF:getMessage('PDF'),Document:getMessage('Document'),Spreadsheet:getMessage('Spreadsheet'),Graphic:getMessage('Graphic'),Extensions:getMessage('Extensions')};}
else if(type=='BucketDisplayLogicVerbs')
{return{Hide:'Hide',Show:'Show'}}
else if(type=='BucketDisplayLogic')
{return{GreaterThan:getMessage('WorkflowSection','MoreThan'),GreaterThanOrEqual:getMessage('WorkflowSection','AtLeast'),EqualTo:getMessage('Piping','Exactly'),LessThan:getMessage('WorkflowSection','FewerThan'),LessThanOrEqual:getMessage('WorkflowSection','AtMost')}}},getOperatorSelect:function(locatorType,opt_operatorName)
{if(locatorType=='DisplayableQuestion')
{var list={Selected:'Selected',NotSelected:'Not Selected',Displayed:'Displayed',NotDisplayed:'Not Displayed'}
if(!list[this.data['Operator']])
{this.data['Operator']='Displayed';}}
else if(locatorType=='SelectableAnswer'||locatorType=='SelectableChoice'||locatorType=='DisplayableChoice')
{list={Selected:'Selected',NotSelected:'Not Selected',Displayed:'Displayed',NotDisplayed:'Not Displayed'}
if(this.getLogicEditor().hideDisplayed)
{list={Selected:'Selected',NotSelected:'Not Selected'}}
if(!list[this.data['Operator']])
{this.data['Operator']='Selected';}}
else if(locatorType=='ChoiceNumericEntryValue'||locatorType=='ChoiceTextEntryValue'||locatorType=='AnswerNumericEntryValue'||locatorType=='AnswerTextEntryValue')
{list={GreaterThan:getMessage('GreaterThan'),GreaterThanOrEqual:getMessage('GreaterThanorEqual'),LessThan:getMessage('LessThan'),LessThanOrEqual:getMessage('LessThanorEqual'),EqualTo:getMessage('EqualTo'),NotEqualTo:getMessage('NotEqualto'),Empty:getMessage('Empty'),NotEmpty:getMessage('NotEmpty'),Displayed:getMessage('Displayed'),NotDisplayed:getMessage('NotDisplayed')}
if(!list[this.data['Operator']])
{this.data['Operator']='NotEmpty';}}
else if(locatorType=='SelectedAnswerCount'||locatorType=='SelectedChoicesCount')
{list={GreaterThan:getMessage('GreaterThan'),GreaterThanOrEqual:getMessage('GreaterThanorEqual'),LessThan:getMessage('LessThan'),LessThanOrEqual:getMessage('LessThanorEqual'),EqualTo:getMessage('EqualTo'),NotEqualTo:getMessage('NotEqualto')}
if(!list[this.data['Operator']])
{this.data['Operator']='EqualTo';}}
else if(locatorType=='EmbeddedField')
{list={GreaterThan:getMessage('GreaterThan'),GreaterThanOrEqual:getMessage('GreaterThanorEqual'),LessThan:getMessage('LessThan'),LessThanOrEqual:getMessage('LessThanorEqual'),EqualTo:getMessage('EqualTo'),NotEqualTo:getMessage('NotEqualto'),Empty:getMessage('Empty'),NotEmpty:getMessage('NotEmpty')}
if(!list[this.data['Operator']])
{this.data['Operator']='EqualTo';}}
else if(locatorType=='Quota')
{list={QuotaMet:getMessage('QuotaMet'),GreaterThan:getMessage('GreaterThan'),GreaterThanOrEqual:getMessage('GreaterThanorEqual'),LessThan:getMessage('LessThan'),LessThanOrEqual:getMessage('LessThanorEqual'),EqualTo:getMessage('EqualTo'),NotEqualTo:getMessage('NotEqualto')}
if(!list[this.data['Operator']])
{this.data['Operator']='QuotaMet';var newLocator=Q_GlobalLogic.getLocatorFromData(this.data['QuotaID'],locatorType,this.data['Operator']);this.data['LeftOperand']=newLocator;}}
else if(locatorType=='_date')
{list={LessThan:getMessage('Piping','Before'),GreaterThan:getMessage('Piping','After'),EqualTo:getMessage('Piping','Exactly'),NotEqualTo:getMessage('Piping','NotOn')}}
else if(locatorType=='_MemberShip')
{list={NotArrayContains:getMessage('Piping','NotAMember'),ArrayContains:getMessage('Piping','Member')}}
else if(locatorType=='Region')
{list={ClickedIn:'Clicked In',NotClickedIn:'Not Clicked In'}}
else if(locatorType=='UploadedFile')
{list={Uploaded:getMessage('Uploaded'),NotUploaded:getMessage('NotUploaded')};if(!list[this.data['Operator']])
{this.data['Operator']='Uploaded';}}
else if(locatorType=='UploadedFileSize')
{list={GreaterThan:getMessage('GreaterThan')+' ('+getMessage('FileSize')+')',GreaterThanOrEqual:getMessage('GreaterThanorEqual')+' ('+getMessage('FileSize')+')',LessThan:getMessage('LessThan')+' ('+getMessage('FileSize')+')',LessThanOrEqual:getMessage('LessThanorEqual')+' ('+getMessage('FileSize')+')'};if(!list[this.data['Operator']])
{this.data['Operator']='GreaterThan';}}
else if(locatorType=='UploadedFileType')
{list={PDF:getMessage('PDF'),Document:getMessage('Document'),Spreadsheet:getMessage('Spreadsheet'),Graphic:getMessage('Graphic'),Extensions:getMessage('Extensions')};if(!list[this.data['Operator']])
{this.data['Operator']='Document';}}
opt_operatorName=opt_operatorName||'Operator';var select=QBuilder('select',{className:'SelectBox',name:opt_operatorName,exid:this.id,leid:this.getLogicEditor().id});for(var name in list)
{select.appendChild(QBuilder('option',{value:name},list[name]))}
return select;},tryFields:function()
{var fields=this.getCurrentFields();var fieldName='';for(var i=0,ilen=arguments.length;i<ilen;i++)
{fieldName=arguments[i];if(fields[fieldName])
return fields[fieldName];}
return'';},onMenuOpen:function(menuPane,fieldName,fieldId)
{var logicOps=this.getLogicEditor().options;if(!!logicOps.menuOptions&&!!logicOps.menuOptions._onMenuOpen)
{Qualtrics.Event.executeDotSyntax(logicOps.menuOptions._onMenuOpen);}
this.activeQMenu=menuPane;this.activeQMenu.originInfo={fieldName:fieldName,fieldId:fieldId};},onMenuClose:function(menuPane,fieldName)
{delete menuPane.originInfo;this.activeQMenu=null;}}
Qualtrics.ExpressionField={};Qualtrics.ExpressionField.BaseField=Class.create();Qualtrics.ExpressionField.BaseField.registry={};Qualtrics.ExpressionField.BaseField.getInstance=QualtricsTools.getInstanceHelper(Qualtrics.ExpressionField.BaseField.registry);Qualtrics.ExpressionField.BaseField.prototype={initialize:function(expressionObj,fieldDef){this.id=QualtricsTools.createNewId('EXF');Qualtrics.ExpressionField.BaseField.registry[this.id]=this;this.fieldDef=fieldDef;this.expressionObj=expressionObj;if(this.setDefaultValue)
{this.setDefaultValue();}},build:function()
{return QBuilder('span',{},'No class called '+this.type+' in Qualtrics.ExpressionField');},getLogicEditor:function()
{return this.expressionObj.getLogicEditor();}}
Qualtrics.ExpressionField.logictype=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{var logicEditor=this.getLogicEditor();var schemaElements=logicEditor.schema.elements;if(this.expressionObj.useQMenus||logicEditor.useQMenus)
{if(schemaElements.length==1)
{var logicTypeSelect=QBuilder('span',{className:'HiddenLogicTypeSelect'});}
else
{var buttonText=this.expressionObj.data['LogicType'];for(var i=0,len=schemaElements.length;i<len;++i)
{if(schemaElements[i].id==this.expressionObj.data['LogicType'])
{buttonText=schemaElements[i].description;break;}}
var logicEditorMenuOptions=this.getLogicEditor().options.menuOptions||{};var menuOptions=Object.extend(logicEditorMenuOptions,{buttonId:'LogicType_'+this.id,fieldName:'LogicType',menuItemSelectCallback:'Qualtrics.ExpressionField.BaseField.onSelectMenuItemSelect:'+this.id+'($fieldName, $value)',menuType:logicEditorMenuOptions.menuType||'LogicEditorMenuPane',className:this.expressionObj.getMenuClassName()+' FieldName_LogicType',theme:logicEditor.options.theme});var logicTypeSelect=Qualtrics.Menu.buildMenuButton(buttonText,'Qualtrics.ExpressionField.BaseField.getMenuDef:'+this.id,menuOptions);}}
else
{var logicTypeSelect=QBuilder('select',{className:'SelectBox',exid:this.expressionObj.id,leid:logicEditor.id,name:'LogicType'});for(var i=0,len=schemaElements.length;i<len;++i)
{logicTypeSelect.appendChild(QBuilder('option',{value:schemaElements[i].id},schemaElements[i].description));}
if(schemaElements.length==1)
{$(logicTypeSelect).hide();}
logicTypeSelect.onchange=this.expressionObj.valueChangeHandler;logicTypeSelect.value=this.expressionObj.data['LogicType'];}
return logicTypeSelect;},getMenuDef:function()
{var schema=this.getLogicEditor().schema;var list=[];if(schema.categories)
{for(var category in schema.categories)
{var categoryList=[];var categoryElements=schema.categories[category].items;for(var i=0,len=categoryElements.length;i<len;i++)
{categoryList.push({value:categoryElements[i].id,display:categoryElements[i].description});}
var categoryDef={icon:false,items:categoryList};list.push({display:schema.categories[category].description,value:category,submenu:categoryDef});}}
var schemaElements=schema.elements;for(var i=0,len=schemaElements.length;i<len;++i)
{if(schemaElements[i].deprecated)
{if(this.expressionObj&&this.expressionObj.data['LogicType']!=schemaElements[i].id)
{continue;}}
list.push({value:schemaElements[i].id,display:schemaElements[i].description});}
return{icon:false,items:list}},onSelectMenuItemSelect:function(fieldName,value,opt_menuDef)
{this.expressionObj.performValueChange(fieldName,value,true);}});Qualtrics.ExpressionField.select=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{if(this.expressionObj.useQMenus||this.getLogicEditor().useQMenus)
{return this.buildQMenuSelectField(this.fieldDef);}
var node=QBuilder('select',{id:this.fieldDef.fieldName+'_'+this.expressionObj.id,className:'SelectBox',name:this.fieldDef.fieldName,exid:this.expressionObj.id,leid:this.getLogicEditor().id});if(this.fieldDef.prompt)
{node.appendChild(QBuilder('option',{value:''},[this.fieldDef.prompt]));}
if(this.fieldDef.value)
{var list=this.expressionObj.evalSchemaExpressionString(this.fieldDef.value);if(list===false)
{return'#loading#';}
var processedList=this.expressionObj.processSelectFieldValues(this.fieldDef,list);for(var i=0,len=processedList.length;i<len;++i)
{node.appendChild(QBuilder('option',{value:processedList[i].value},[processedList[i].display]));}
if(this.expressionObj.data[this.fieldDef.fieldName]!==undefined)
{node.value=this.expressionObj.data[this.fieldDef.fieldName];}
else
{if(node.value)
{this.expressionObj.performValueChange(this.fieldDef.fieldName,node.value,false);}}
if(this.fieldDef.truncate)
{if(Qualtrics.Browser.IE)
{if(window.QualtricsCPTools)
QualtricsCPTools.smartTruncateSelectBox(node,this.fieldDef.truncate);}
else
{$(node).setStyle({maxWidth:(this.fieldDef.truncate*7)+'px'});}}
node.onchange=this.expressionObj.valueChangeHandler;}
return node;},buildQMenuSelectField:function()
{var display='Select ...';var existingValue=null;var menuDef=this.getSelectMenuDef(this.fieldDef.fieldName);if(this.fieldDef.prompt)
{display=this.fieldDef.prompt;}
if(this.expressionObj.data[this.fieldDef.fieldName]!==undefined)
{existingValue=this.expressionObj.data[this.fieldDef.fieldName];}
if(menuDef.items)
{for(var i=0,len=menuDef.items.length;i<len;++i)
{if(!existingValue&&!this.fieldDef.prompt)
{display=menuDef.items[i].display;var userInitiated=false;this.expressionObj.performValueChange(this.fieldDef.fieldName,menuDef.items[i].value,userInitiated);break;}
if(menuDef.items[i])
{if(existingValue&&menuDef.items[i].value==existingValue)
{display=menuDef.items[i].display;}}}}
if(menuDef.items)
{var logicEditor=this.getLogicEditor();var logicEditorMenuOptions=logicEditor.options.menuOptions||{};var menuOptions=Object.extend(logicEditorMenuOptions,{buttonId:this.fieldDef.fieldName+'_'+this.expressionObj.id,fieldName:this.fieldDef.fieldName,menuItemSelectCallback:'Qualtrics.ExpressionField.BaseField.onSelectMenuItemSelect:'+this.id+'($fieldName, $value, $menuDef, $item)',menuType:logicEditorMenuOptions.menuType||'LogicEditorMenuPane',onMenuOpen:'Q_Expression.onMenuOpen:'+this.expressionObj.id+'($menuPane, '+this.fieldDef.fieldName+', '+this.id+')',onMenuClose:'Q_Expression.onMenuClose:'+this.expressionObj.id+'($menuPane, '+this.fieldDef.fieldName+')',className:this.expressionObj.getMenuClassName()+' FieldName_'+this.fieldDef.fieldName,theme:logicEditor.options.theme});if(this.fieldDef.truncate)
{display=QualtricsCPTools.middleTruncate(display,this.fieldDef.truncate);}
return Qualtrics.Menu.buildMenuButton(display,'Qualtrics.ExpressionField.BaseField.getSelectMenuDef:'+this.id+'('+this.fieldDef.fieldName+')',menuOptions);}
return'#loading#';},getSelectMenuDef:function(fieldName)
{var list=this.expressionObj.evalSchemaExpressionString(this.fieldDef.value);for(var i=0;i<list.length;i++)
{if(list[i].Description==="")
{list[i].Description="Choice "+(i+1);}}
if(list)
{var processedList=this.expressionObj.processSelectFieldValues(this.fieldDef,list);if(this.fieldDef.prompt)
{processedList.splice(0,0,{disabled:true,display:this.fieldDef.prompt,className:'prompt',unselectable:this.fieldDef.unselectable});}
var def={icon:false,items:processedList};if(this.fieldDef.truncate)
{def.truncate=this.fieldDef.truncate;}
if(this.fieldDef.search)
{def.search=this.fieldDef.search;}
if(this.fieldDef.className)
{def.className=this.fieldDef.className;}
return def;}
else
{return{loading:true}}},onSelectMenuItemSelect:function(fieldName,value,opt_menuDef,opt_item)
{if(opt_menuDef&&opt_menuDef.menuItemSelectCallback)
{var params=[];var parameterMap={'$value':value,'$fieldName':fieldName};if(opt_item)
{parameterMap['$item']=opt_item;}
Qualtrics.Event.executeDotSyntax.curry(opt_menuDef.menuItemSelectCallback,null,null,params,parameterMap)();}
this.expressionObj.performValueChange(fieldName,value,true);}});Qualtrics.LogicEditorMenuPane=Class.create(Qualtrics.SelectMenuPane,{processItemDisplay:function(display,item)
{return display;}});Qualtrics.ExpressionField.suggest=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{return this.expressionObj.buildSuggestField(this.fieldDef);}});Qualtrics.ExpressionField.autosuggest=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{return this.expressionObj.autosuggest(this.fieldDef);}});Qualtrics.ExpressionField.text=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{var logicEditor=this.getLogicEditor();if(logicEditor.options.theme)
{var className='ThemedElement ThemedText ThemedElement_'+logicEditor.options.theme;return QBuilder('span',{className:className},this.expressionObj.evalSchemaExpressionString(this.fieldDef.value));}
return QBuilder('span',{className:'Text ExpressionField'},this.expressionObj.evalSchemaExpressionString(this.fieldDef.value));}});Qualtrics.ExpressionField.link=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{var attrs={className:'Text'};var logicEditor=this.getLogicEditor();if(logicEditor.options.theme)
{attrs.className+=' ThemedElement ThemedText ThemedElement_'+logicEditor.options.theme;}
if(!!this.fieldDef.clickcallback)
attrs.clickcallback=this.fieldDef.clickcallback;if(!!this.fieldDef.href)
attrs.href=this.fieldDef.href;return QBuilder('a',attrs,this.expressionObj.evalSchemaExpressionString(this.fieldDef.value));}});Qualtrics.ExpressionField.combobox=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{return this.expressionObj.buildComboBoxField(this.fieldDef);}});Qualtrics.ExpressionField.checkbox=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{return this.expressionObj.buildCheckBoxField(this.fieldDef);}});Qualtrics.ExpressionField.date=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{return this.expressionObj.buildDateInput(this.fieldDef);}});Qualtrics.ExpressionField.location=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{return this.expressionObj.buildLocationInput(this.fieldDef);}});Qualtrics.ExpressionField.webservice=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{return this.expressionObj.buildWebServiceInput(this.fieldDef);}});Qualtrics.ExpressionField.radio=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{return this.expressionObj.buildRadioField(this.fieldDef);}});Qualtrics.ExpressionField.menu=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{return Qualtrics.Menu.buildMenuButton(this.expressionObj.evalSchemaExpressionString(this.fieldDef.title),this.expressionObj.preparseFunctionParameters(this.fieldDef.menuCallBack),this.fieldDef.options);}});Qualtrics.ExpressionField.hidden=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{this.setDefaultValue();if(this.fieldDef.show)
{return QBuilder('span',{className:'Left'},this.expressionObj.data[this.fieldDef.fieldName]);}},setDefaultValue:function()
{if(this.expressionObj.data[this.fieldDef.fieldName]===undefined&&this.fieldDef.defaultValue)
{this.expressionObj.data[this.fieldDef.fieldName]=this.expressionObj.evalSchemaExpressionString(this.fieldDef.defaultValue);}
if(typeof this.fieldDef.value!='undefined'&&this.expressionObj.data[this.fieldDef.fieldName]===undefined)
{var val=this.expressionObj.evalSchemaExpressionString(this.fieldDef.value);if(val!==undefined)
{this.expressionObj.data[this.fieldDef.fieldName]=val;}}}});Qualtrics.ExpressionField.textbox=Class.create(Qualtrics.ExpressionField.BaseField,{build:function()
{var valueInput=QBuilder('input',{className:'TextBox ExpressionField',keyentercallback:'Event.stop($evt)',autocomplete:'off',id:this.fieldDef.fieldName+'_'+this.expressionObj.id,name:this.fieldDef.fieldName,exid:this.expressionObj.id,leid:this.getLogicEditor().id});if(this.fieldDef.prompt&&!this.expressionObj.data[this.fieldDef.fieldName])
{valueInput.setAttribute('autoclear',this.fieldDef.prompt);$(valueInput).addClassName('AutoClearMessage');valueInput.value=this.fieldDef.prompt;}
if(this.fieldDef.size)
{valueInput.setAttribute('size',this.fieldDef.size);$(valueInput).setStyle({width:this.fieldDef.size+'em'});}
if(this.expressionObj.data[this.fieldDef.fieldName]===undefined&&this.fieldDef.defaultValue)
{this.expressionObj.data[this.fieldDef.fieldName]=this.expressionObj.evalSchemaExpressionString(this.fieldDef.defaultValue);}
if(this.expressionObj.data[this.fieldDef.fieldName])
{valueInput.value=this.expressionObj.data[this.fieldDef.fieldName];}
this.expressionObj.addObserver(valueInput);return valueInput;}});
