var DOM1; $(document).ready(function() { DOM1 = (typeof document.getElementsByTagName!='undefined'); if (typeof checkconditions!='undefined') checkconditions(); if (typeof template_onload!='undefined') template_onload(); prepareCellAdapters(); if (typeof(focus_element) != 'undefined') { $(focus_element).focus(); } $(".question").find("select").each(function () { hookEvent($(this).attr('id'),'mousewheel',noScroll); }); }); Array.prototype.push = function() { var n = this.length >>> 0; for (var i = 0; i < arguments.length; i++) { this[n] = arguments[i]; n = n + 1 >>> 0; } this.length = n; return n; }; Array.prototype.pop = function() { var n = this.length >>> 0, value; if (n) { value = this[--n]; delete this[n]; } this.length = n; return value; }; //defined in group.php & question.php & survey.php, but a static function function inArray(needle, haystack) { for (h in haystack) { if (haystack[h] == needle) { return true; } } return false; } //defined in group.php & survey.php, but a static function function match_regex(testedstring,str_regexp) { // Regular expression test if (str_regexp == '' || testedstring == '') return false; pattern = new RegExp(str_regexp); return pattern.test(testedstring) } function cellAdapter(evt,src) { var eChild = null, eChildren = src.getElementsByTagName('INPUT'); var curCount = eChildren.length; //This cell contains multiple controls, don't know which to set. if (eChildren.length > 1) { //Some cells contain hidden fields for (i = 0; i < eChildren.length; i++) { if ( ( eChildren[i].type == 'radio' || eChildren[i].type == 'checkbox' ) && eChild == null) eChild = eChildren[i]; else if ( ( eChildren[i].type == 'radio' || eChildren[i].type == 'checkbox' ) && eChild != null) { //A cell with multiple radio buttons -- unhandled return; } } } else eChild = eChildren[0]; if (eChild && eChild.type == 'radio') { eChild.checked = true; //Make sure the change propagates to the conditions handling mechanism if(eChild.onclick) eChild.onclick(evt); if(eChild.onchange) eChild.onchange(evt); } else if (eChild && eChild.type == 'checkbox') { eChild.checked = !eChild.checked; //Make sure the change propagates to the conditions handling mechanism if(eChild.onclick) eChild.onclick(evt); if(eChild.onchange) eChild.onchange(evt); } } function prepareCellAdapters() { if (!DOM1) return; var formCtls = document.getElementsByTagName('INPUT'); var ptr = null; var foundTD = false; for (var i = 0; i < formCtls.length; i++) { ptr = formCtls[i]; if (ptr.type == 'radio' || ptr.type == 'checkbox') { foundTD = false; while (ptr && !foundTD) { if(ptr.nodeName == 'TD') { foundTD = true; ptr.onclick = function(evt){ return cellAdapter(evt,this); }; continue; } ptr = ptr.parentNode; } } } } function addHiddenField(theform,thename,thevalue) { var myel = document.createElement('input'); myel.type = 'hidden'; myel.name = thename; theform.appendChild(myel); myel.value = thevalue; } function cancelBubbleThis(eventObject) { if (!eventObject) var eventObject = window.event; eventObject.cancelBubble = true; if (eventObject && eventObject.stopPropagation) { eventObject.stopPropagation(); } } function cancelEvent(e) { e = e ? e : window.event; if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.preventDefault(); e.cancelBubble = true; e.cancel = true; e.returnValue = false; return false; } function hookEvent(element, eventName, callback) { if(typeof(element) == "string") element = document.getElementById(element); if(element == null) return; if(element.addEventListener) { if(eventName == 'mousewheel') element.addEventListener('DOMMouseScroll', callback, false); element.addEventListener(eventName, callback, false); } else if(element.attachEvent) element.attachEvent("on" + eventName, callback); } function noScroll(e) { e = e ? e : window.event; cancelEvent(e); } function getkey(e) { if (window.event) return window.event.keyCode; else if (e) return e.which; else return null; } function goodchars(e, goods) { var key, keychar; key = getkey(e); if (key == null) return true; // get character keychar = String.fromCharCode(key); keychar = keychar.toLowerCase(); goods = goods.toLowerCase(); // check goodkeys if (goods.indexOf(keychar) != -1) return true; // control keys if ( key==null || key==0 || key==8 || key==9 || key==27 ) return true; // else return false return false; } function show_hide_group(group_id) { var questionCount; // First let's show the group description, otherwise, all its childs would have the hidden status $("#group-" + group_id).show(); // If all questions in this group are conditionnal // Count visible questions in this group questionCount=$("div#group-" + group_id).find("div[id^='question']:visible").size(); if( questionCount == 0 ) { $("#group-" + group_id).hide(); } }