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

Qualtrics.Event={preventEvents:function(duration)
{Qualtrics.Event.preventingEvents=true;setTimeout(Qualtrics.Event.stopPreventingEvents,duration||100);},stopPreventingEvents:function()
{Qualtrics.Event.preventingEvents=false;},addBubbleUp:function(domNode)
{var descendants=$(domNode).descendants();for(var i=0,len=descendants.length;i<len;++i)
{descendants[i].setAttribute('bubbleup',true);}},preventingEvents:false,baseDistributerReader:function(evt,el,callbackType,opt_rootObject)
{if(window.QualtricsCPTools)
{QualtricsCPTools.resetTimeoutTimer();}
if(el&&el.getAttribute)
{if(el.getAttribute('disabled')=='disabled')
return;var callback=null;var bubble=el.getAttribute('bubbleup')||null;if(bubble==='false')
{bubble=false;}
if(el&&el.getAttribute&&el.getAttribute(callbackType))
{callback=el.getAttribute(callbackType);}
else if((el.tagName=='SPAN'||el.tagName=='EM'||el.tagName=='IMG'||el.tagName=='P'||el.tagName=='B'||el.tagName=='STRONG'))
{if(bubble!==false&&el.parentNode)
{bubble=true;el=el.parentNode;}}
if(bubble)
{var node=el;while(node)
{if(node.getAttribute(callbackType))
{callback=node.getAttribute(callbackType);el=node;node=null;}
else if(node.getAttribute('bubbleup')||node.tagName=='SPAN')
{node=node.parentNode;}
else
{node=null;}}}
if(callback)
{Qualtrics.Event.baseDistributer(evt,el,callback,opt_rootObject);}}},baseDistributer:function(event,clickedEl,clickCallBack,opt_rootObject)
{if(Qualtrics.Event.preventingEvents)return;if(typeof clickCallBack!='string')
{return;}
var params=Qualtrics.Event.packageParameters(clickedEl);var parameterMap={'$el':clickedEl||(event&&Event.element(event)),'$evt':event,'$val':this.getInputValue(clickedEl)}
var instanceId=clickedEl.getAttribute('instanceid');if(clickedEl.getAttribute('defer'))
{Qualtrics.Event.executeDotSyntax.curry(clickCallBack,instanceId,opt_rootObject,null,parameterMap,params).defer();}
else
{Qualtrics.Event.executeDotSyntax(clickCallBack,instanceId,opt_rootObject,null,parameterMap,params);}},getInputValue:function(el)
{if(el)
{if(el.type=='checkbox')
{return el.checked;}
return el.value;}},packageParameters:function(el)
{var paramIndex=1;var params=[];while(paramIndex!==null)
{var param=el.getAttribute('p'+paramIndex);if(param!==null)
{if(param==='false')
param=false;if(param==='true')
param=true;params.push(param);paramIndex++;}
else
{paramIndex=null;}}
return params;},parseParam:function(param,evt,opt_target)
{opt_target=opt_target||(evt&&Event.element(evt));if(param=='$evt')
{param=evt;}
else if(param=='$el')
{param=opt_target;}
else if(param=='$val')
{if(opt_target.type=='checkbox')
{param=opt_target.checked;}
else
{param=opt_target.value;}}
return param;},globalClickHandler:function(evt)
{if(!evt){evt=window.event}
var el=Event.element(evt);if(el.tagName=='INPUT')
{if(el.getAttribute('autoselect'))
{if(el.value==el.getAttribute('autoselect'))$(el).activate();}
if(el.getAttribute('autoclear'))
{if(el.value==el.getAttribute('autoclear')){QualtricsTools.focusInput(el,0);}}
else if(el.getAttribute('autohide'))
{if(Qualtrics.Inputs)
Qualtrics.Inputs.autoHideClick(el);}
else if(el.getAttribute('autoclearonclick'))
{if(el.value==el.getAttribute('autoclearonclick')){el.value='';$(el).removeClassName('AutoClearMessage');}}}
if(el.getAttribute&&el.getAttribute('distancedragged')&&el.getAttribute('distancedragged')>3)
{return;}
Qualtrics.Event.baseDistributerReader(evt,el,'clickcallback');},globalOverHandler:function(evt)
{evt=evt||window.event;var el=Event.element(evt);Qualtrics.Event.baseDistributerReader(evt,el,'overcallback');},globalOutHandler:function(evt)
{evt=evt||window.event;var el=Event.element(evt);Qualtrics.Event.baseDistributerReader(evt,el,'outcallback');},globalDownHandler:function(evt)
{evt=evt||window.event;var el=Event.element(evt);Qualtrics.Event.baseDistributerReader(evt,el,'downcallback');},globalUpHandler:function(evt)
{evt=evt||window.event;var el=Event.element(evt);if(Event.isLeftClick(evt))
{Qualtrics.Event.baseDistributerReader(evt,el,'mouseupcallback');if(window.customMouseUp)
{window.customMouseUp(evt);}}},globalDblClickHandler:function(evt)
{evt=evt||window.event;var el=Event.element(evt);Qualtrics.Event.baseDistributerReader(evt,el,'doubleclickcallback');},globalKeyDownHandler:function(evt)
{if(!evt){evt=window.event}
var el=Event.element(evt);if(el&&el.getAttribute)
{if(Qualtrics.Menu)
{Qualtrics.Menu.handleKeyDown(evt);}
if(el.getAttribute('keyentercallback'))
{if(evt.keyCode==Event.KEY_RETURN)
{Event.stop(evt);Qualtrics.Event.baseDistributer(evt,el,el.getAttribute('keyentercallback'));}}
if(el.getAttribute('keytabcallback'))
{if(evt.keyCode==Event.KEY_TAB)
{Event.stop(evt);Qualtrics.Event.baseDistributer(evt,el,el.getAttribute('keytabcallback'));}}
if(el.getAttribute('keydowncallback'))
{Qualtrics.Event.baseDistributerReader(evt,el,'keydowncallback');}
if(el.getAttribute('autoclear'))
{if(el.value==el.getAttribute('autoclear')){el.value='';$(el).removeClassName('AutoClearMessage');}}
if(el.getAttribute('autohide'))
{if(Qualtrics.Inputs)
Qualtrics.Inputs.autoHideKeyDown(el,evt);}
if(el.getAttribute('numericupdown'))
{Qualtrics.Event.numericUpDown(el,evt);}
if(el.getAttribute('validation'))
{if(!Qualtrics.alphaNumericValidation(el,evt))
return false;}}
if(Qualtrics.customKeyDown)
{Qualtrics.customKeyDown(evt);}
if(evt.keyCode==Event.KEY_BACKSPACE&&!Qualtrics.Reporting)
{if(el.nodeName=='INPUT'||el.nodeName=='TEXTAREA'||window.inlineEditor.getInstance())
{}
else
{Event.stop(evt);}}
if(evt.keyCode==90)
{if(el&&el.nodeName=='INPUT'||el.nodeName=='TEXTAREA')
{}
else
{if(evt.metaKey||evt.ctrlKey)
{if(evt.shiftKey)
{Qualtrics.History.getInstance().redo();}
else
{Qualtrics.History.getInstance().undo();}}}}
if(evt.keyCode==32)
{if(el&&el.nodeName=='INPUT'||el.nodeName=='TEXTAREA')
{}
else
{if(Q_Window.getWindowCount())
Event.stop(evt);}}
if(Qualtrics.savePage)
{if(evt.keyCode==83&&(evt.ctrlKey||evt.metaKey))
{Event.stop(evt);Qualtrics.savePage(true);return false;}}},globalKeyUpHandler:function(evt)
{var el=Event.element(evt);if(el.getAttribute('autohide'))
{if(Qualtrics.Inputs)
Qualtrics.Inputs.autoHideKeyUp(el,evt);}
if(el.getAttribute('qautosuggest'))
{QModules.loadModule('QAutoSuggest.js');if(el.qAutoSuggest)
{el.qAutoSuggest.handleKeyPress(evt);}
else
{var instanceid=el.getAttribute('instanceid');var list=Qualtrics.Event.executeDotSyntax(el.getAttribute('qautosuggest'),instanceid);var as=new Qualtrics.AutoSuggest(el,{keycallback:true,list:list});as.handleKeyPress(evt);el.qAutoSuggest=as;}}
if(el.getAttribute('qautocomplete'))
{QModules.loadModule('QAutoComplete.js');if(el.qAutoComplete)
{el.qAutoComplete.handleKeyPress(evt);}
else
{instanceid=el.getAttribute('instanceid');list=Qualtrics.Event.executeDotSyntax(el.getAttribute('qautocomplete'),instanceid);var ac=new QAutoComplete(el,{keycallback:true,list:list});ac.handleKeyPress(evt);el.qAutoComplete=ac;}}
if(el.getAttribute('numericmax')||el.getAttribute('numericmin'))
{Qualtrics.Event.limit(el,evt);}
Qualtrics.Event.baseDistributerReader(evt,el,'keyupcallback');if(evt.keyCode==Event.KEY_DELETE||evt.keyCode==Event.KEY_BACKSPACE)
{if(el.getAttribute('autoclear'))
{if(el.value=='')
{el.value=el.getAttribute('autoclear');$(el).addClassName('AutoClearMessage');QualtricsTools.focusInput(el,0);}}}},executeDotSyntax:function(command,opt_instanceId,opt_root,opt_forcedParams,opt_parameterMap,opt_defaultParams)
{if(command)
{if(command.indexOf(';')!=-1)
{var commands=command.split(';');var lastValue=null;for(var i=0,len=commands.length;i<len;++i)
{lastValue=Qualtrics.Event.executeDotSyntax(commands[i].strip(),opt_instanceId,opt_root,opt_forcedParams,opt_parameterMap,opt_defaultParams);}
return lastValue;}
var pkg=Qualtrics.Event.getDotSyntaxParts(command,opt_instanceId,opt_root);var params=pkg[3]||opt_defaultParams||[];if(opt_forcedParams&&opt_forcedParams.length)
{params=opt_forcedParams;}
if(opt_parameterMap)
{for(var i=0,len=params.length;i<len;++i)
{var param=params[i];if(opt_parameterMap[params[i]]!==undefined)
{params[i]=opt_parameterMap[params[i]];}
if(params[i]=='$availableVariables')
{params[i]=opt_parameterMap;}
if(typeof param=='string'&&param.indexOf('.')!==-1)
{var dotSyntaxParts=param.split('.');var base=dotSyntaxParts[0];var newParam=dotSyntaxParts[1];if(opt_parameterMap[base]&&opt_parameterMap[base][newParam])
{params[i]=opt_parameterMap[base][newParam];}
else if(opt_parameterMap[base])
{params[i]=undefined;}}}}
var returnVal=pkg[0].apply(pkg[1],params);return returnVal;}},getDotSyntaxValue:function(command,opt_root)
{var pkg=Qualtrics.Event.getDotSyntaxParts(command,null,opt_root,true);if(pkg&&pkg.root&&pkg.callBack)
{return pkg.root[pkg.callBack];}},callbackHasParams:function(command)
{if(command.lastIndexOf(')')===command.length-1)
{return true;}
return false;},getDotSyntaxParts:function(command,opt_instanceId,opt_alternateRoot,opt_quiet)
{var params;if(Qualtrics.Event.callbackHasParams(command))
{var openIndex=command.indexOf('(');if(openIndex!=-1)
{var paramsString=command.substring(openIndex+1,command.lastIndexOf(')'));var str=paramsString;if(str)
{var tokens=[];var i=-1;do{i=str.indexOf(',');var openP=str.indexOf('(');var closeP=str.indexOf(')');if(openP>-1&&openP<i)
{i=str.indexOf(',',closeP);}
if(i>-1)
{tokens.push(str.substring(0,i));str=str.substring(i+1);}}while(i>-1)
tokens.push(str);params=tokens;params=params.invoke('strip');}
command=command.substring(0,openIndex)}}
if(command.lastIndexOf(':')!=-1)
{opt_instanceId=command.substring(command.lastIndexOf(':')+1);command=command.substring(0,command.lastIndexOf(':'));}
var parts=command.split('.');var root=opt_alternateRoot||window;var method=null;var _this=window;var callBack=null;for(i=0,len=parts.length;i<len;++i)
{method=root[parts[i]];if(parts[i+1])
{if(!method)
{if(!opt_quiet)
{console.error('getDotSyntaxParts: Cannot find object: '+parts[i]+' in: '+command);}
return;}
root=method;method=root[parts[i+1]];}
else
{method=root[parts[i]];callBack=parts[i];_this=root;}}
if(root.getInstance)
{if(root.getInstance(opt_instanceId)&&root.getInstance(opt_instanceId)[callBack]!==undefined)
{method=root.getInstance(opt_instanceId)[callBack];_this=root.getInstance(opt_instanceId);}}
if(method===undefined)
{if(!opt_quiet)
{console.error('getDotSyntaxParts 2: Cannot find object: '+callBack+' in: '+command);}
return;}
if(params)
{for(i=0,len=params.length;i<len;++i)
{if(params[i]=='null')
{params[i]=null;}}}
var pkg={};pkg.method=method;pkg.callBack=callBack;pkg.root=_this;pkg.params=params;pkg[0]=method;pkg[1]=pkg.root;pkg[2]=callBack;pkg[3]=params;return pkg;},numericUpDown:function(el,evt)
{var val=el.value;if(!isNaN(val))
{val*=1;switch(evt.keyCode)
{case Event.KEY_DOWN:if(val>0)
el.value=val-1;Event.stop(evt);break;case Event.KEY_UP:el.value=val+1;Event.stop(evt);break;}}},limit:function(el,evt)
{var max=el.getAttribute('numericmax');var min=el.getAttribute('numericmin');var val=el.value;if(val!==null&&isNaN(val))
{return;}
val*=1;if(max!==null&&!isNaN(max))
{max*=1;if(val>max)
{el.value=max;}}
if(min!==null&&!isNaN(min))
{min*=1;if(val<min)
{el.value=min;}}}}
Event.observe(document,'click',Qualtrics.Event.globalClickHandler);Event.observe(document,'dblclick',Qualtrics.Event.globalDblClickHandler);Event.observe(document,'mousedown',Qualtrics.Event.globalDownHandler);Event.observe(document,'mouseup',Qualtrics.Event.globalUpHandler);Event.observe(document,'keydown',Qualtrics.Event.globalKeyDownHandler);Event.observe(document,'keyup',Qualtrics.Event.globalKeyUpHandler);var mousePos=new Array();Event.observe(document,'mousemove',updateMousePos);function updateMousePos(event,forcedY){if(event){mousePos[0]=((event.pageX)||(event.clientX+window.scrollInfo[0]));mousePos[1]=((event.pageY)||(event.clientY+window.scrollInfo[1]));if(forcedY)
{mousePos[1]=forcedY;}
if(window.Q_Window)
{var chopped=Q_Window.getChopOffset();if(chopped)
{if(chopped[0])mousePos[0]=mousePos[0]-chopped[0];if(chopped[1])mousePos[1]=mousePos[1]-chopped[1];}}
if(window.updateCustomMousePos)
{window.updateCustomMousePos(event);}}}
