function MiniSurvey() { var clientDebug; var miniSurveyTitle; var partnerLogoURL; var thankYouMessage; var startupDelayTime; var finishAutoCloseDelayTime; var noActivityAutoCloseTime; var scriptCheckInterval = 1000; this.surveyModel; this.surveyNavigator; this.error = null; this.loadRetries = 0; this.init = function() { try { clientDebug = false; surveyName = 'Changes in Loyalty'; partnerLogoURL = 'http://surveys.insyncsurveys.com.au/surveys/MiniSurveys/AngerManagement/partnerLogo.png'; thankYouMessage = 'Thank you for taking the time to complete this survey. See the results on insyncsurveys.com.au in a few weeks.'; startupDelayTime = 2000; finishAutoCloseDelayTime = 10000; noActivityAutoCloseTime = 10000; this.surveyNavigator = new surveyNavigator(this.surveyModel); this.loadSurvey(); } catch(e) { this.error = e; this.reportError("miniSurvey:init()", e); } } /* ** Error Handling Functions */ this.reportError = function(msg, e) { if(!clientDebug) { this.loadJsCssFile("http://surveys.insyncsurveys.com.au/surveys/MiniSurveys/AngerManagement/index.asp?jsaction=reportjserror&" + this.getErrorDetails(e) + "&errInfo=" + msg, "js"); } else { throw(e); } } this.getErrorDetails = function(e) { var errorDetails = ""; var delimiter = ""; for(member in e) { errorDetails += delimiter + member + "=" + e[member]; delimiter = "&"; } return errorDetails; } /* ** Functions to build format and show mini survey */ this.loadSurvey = function() { try { var self = this; if(this.loadRetries >= 30) { this.reportError("Did not load survey as mochikit was unavailabe after " + this.loadRetries + " tries" , new Error()); return; } if(typeof MochiKit.DOM == "undefined") { setTimeout(function() {self.loadSurvey();},scriptCheckInterval); this.loadRetries++; return; } var miniSurveyContainer = this.getMiniSurveyContainer(); miniSurveyContainer.innerHTML += this.surveyModel.htmlContent; document.body?document.body.appendChild(miniSurveyContainer): document.documentElement.appendChild(miniSurveyContainer); this.setStyle(); this.attachEvents(); this.buildNavigationButton(); this.hideSections(); this.buildControls(); setTimeout(function() {self.showSurvey();}, (startupDelayTime-(this.loadRetries * scriptCheckInterval))>0?(startupDelayTime-(this.loadRetries * scriptCheckInterval)):0); } catch(e) { this.error = e; this.reportError("miniSurvey:loadSurvey()", e); } } this.getMiniSurveyContainer = function() { var miniSurveyContainer = document.getElementById("miniSurveyContainer"); if(!miniSurveyContainer)// create the div { var miniSurveyContainer = document.createElement("div"); miniSurveyContainer.id = "miniSurveyContainer"; miniSurveyContainer.style.display = "none"; miniSurveyContainer.appendChild(this.getMiniSurveyHeader()); miniSurveyContainer.appendChild(document.createElement("br")); } return miniSurveyContainer; } this.getMiniSurveyHeader = function() { var headerDiv = document.createElement("div"); headerDiv.id = "miniSurveyHeader"; var closeImage = document.createElement("img"); closeImage.setAttribute("src","http://surveys.insyncsurveys.com.au/library/code/minisurvey/images/close.gif"); closeImage.setAttribute("align", "right"); closeImage.setAttribute("alt", "Close MiniSurvey"); closeImage.id = "miniSurveyCloseImg"; headerDiv.appendChild(closeImage); var partnerLogo = document.createElement("img"); partnerLogo.setAttribute("src",partnerLogoURL); partnerLogo.setAttribute("alt",""); partnerLogo.id = "partnerLogoImg"; headerDiv.appendChild(partnerLogo); var miniSurveyTitle = document.createElement("span"); miniSurveyTitle.id = "miniSurveyTitle"; miniSurveyTitle.appendChild(document.createTextNode(surveyName)); headerDiv.appendChild(miniSurveyTitle); headerDiv.appendChild(document.createElement("br")); return headerDiv; } this.setStyle = function() { var miniSurveyContainer = this.getMiniSurveyContainer(); var contentDiv = MochiKit.Selector.findChildElements(miniSurveyContainer, ["div.content"])[0]; } this.attachEvents = function() { var miniSurveyContainer = this.getMiniSurveyContainer(); var surveySections = MochiKit.Selector.findChildElements(miniSurveyContainer, ["div.section"]); var self = this; MochiKit.Iter.forEach(surveySections, function(section) { self.connectAll(MochiKit.Selector.findChildElements(section, ["input[type=radio]"]), "onclick", self, self.navigateNext); section.style.display = "none"; }); MochiKit.Signal.connect(MochiKit.DOM.$("miniSurveyCloseImg"), "onclick", this, this.closeMiniSurvey); } this.hideSections = function() { var miniSurveyContainer = this.getMiniSurveyContainer(); var surveySections = MochiKit.Selector.findChildElements(miniSurveyContainer, ["div.section"]); MochiKit.Iter.forEach(surveySections, function(section) { section.style.display = "none"; }); surveySections[0].style.display = "block"; } this.buildControls = function() { var miniSurveyContainer = this.getMiniSurveyContainer(); var surveySections = MochiKit.Selector.findChildElements(miniSurveyContainer, ["div.section"]); var self = this; MochiKit.Iter.forEach(surveySections, function(section) { self.resizeTextAreas(section); }); } this.resizeTextAreas = function(section) { var textAreas = MochiKit.Selector.findChildElements(section, ['textarea']); MochiKit.Iter.forEach(textAreas, function(textArea) { textArea.cols = 24; textArea.rows = 4; }); } this.buildNavigationButton = function() { var textAreas = MochiKit.Selector.findChildElements(this.getCurrentUiSection(), ['textarea']); if(textAreas.length > 0) { var miniSurveyNavDiv = document.createElement("div"); miniSurveyNavDiv.id = "miniSurveyNavDiv"; var miniSurveyNavButton = document.createElement("input"); miniSurveyNavButton.type = "button"; miniSurveyNavButton.id = "miniSurveyNavButton"; if(this.surveyNavigator.atEnd()) { miniSurveyNavButton.value = "Finish >>"; } else { miniSurveyNavButton.value = "Next >>"; } MochiKit.Signal.connect(miniSurveyNavButton, "onclick", this, this.navigateNext); miniSurveyNavDiv.appendChild(miniSurveyNavButton); this.getCurrentUiSection().appendChild(miniSurveyNavDiv); } } this.getCurrentUiSection = function () { var currentSectionId = "section_" + (this.surveyNavigator.index() +1); return MochiKit.DOM.$(currentSectionId); } this.setFocus = function() { var textAreas = MochiKit.Selector.findChildElements(this.getCurrentUiSection(), ['textarea']); if(textAreas.length > 0) { textAreas[0].focus(); } } this.noActivityTimeout = function() { try { if(this.surveyNavigator.currentState().toLowerCase() == "start") { this.hideMiniSurvey(); } } catch(e) { this.reportError("miniSurvey:noActivityTimeout",e); } } this.showSurvey = function() { try { if(this.error != null) return; MochiKit.Visual.toggle(this.getMiniSurveyContainer(),"blind"); var self = this; setTimeout(function() {self.noActivityTimeout();}, noActivityAutoCloseTime); } catch(e) { this.reportError("miniSurvey:showSurvey()", e); } } /* ** Functions to save response */ this.saveResponse = function(surveyStateInfo) { var response = this.getResponse(); this.loadJsCssFile("http://surveys.insyncsurveys.com.au/surveys/MiniSurveys/AngerManagement/index.asp?jsaction=saveresponse&" + this.buildQueryStringParams([response,surveyStateInfo]), "js"); } this.getResponse = function() { var response = new Object(); MochiKit.Iter.forEach(MochiKit.Selector.findChildElements( MochiKit.DOM.$('miniSurveyContainer'), ["input[type=radio]", "textarea"]), function(element) { switch(element.type) { case 'radio': if(element.checked) response[element.name] = element.value break; case 'textarea': response[element.name] = element.value; break; } }); return response; } this.buildQueryStringParams = function (paramObjects) { var keyValuePair = ""; var delimiter = ""; MochiKit.Iter.forEach(paramObjects, function(object) { for(member in object) { keyValuePair += delimiter + member + '=' + escape(object[member]); delimiter = "&" } }); keyValuePair += "&partnerUrl=" + escape(window.location.href); return keyValuePair; } this.navigateNext = function() { var currentSection = this.surveyNavigator.section(); MochiKit.Visual.slideUp(MochiKit.DOM.$('section_' + currentSection.sectionNumber)); this.surveyNavigator.next(); var nextSection = this.surveyNavigator.section(); var self = this; if(nextSection !== null) { this.buildNavigationButton(); MochiKit.Visual.blindDown(MochiKit.DOM.$('section_' + nextSection.sectionNumber), {afterFinish: function () {self.setFocus();}}); } else { setTimeout(function() {self.finishSurvey();}, 1000); } } this.finishSurvey = function() { try { var miniSurveyFinishDiv = document.createElement("div"); miniSurveyFinishDiv.id = "miniSurveyFinishDiv"; miniSurveyFinishDiv.innerHTML = thankYouMessage; this.getMiniSurveyContainer().appendChild(miniSurveyFinishDiv); this.hideMiniSurvey(finishAutoCloseDelayTime); this.closeMiniSurveyAction(); } catch(e) { this.reportError("miniSurvey:finishSurvey()",e); } } this.closeMiniSurvey = function(delay) { this.hideMiniSurvey(delay); this.closeMiniSurveyAction(true); } this.hideMiniSurvey = function(delay) { try { if(delay) { var self = this; setTimeout(function(){self.hideMiniSurvey();},delay); } else { var miniSurveyContainer = this.getMiniSurveyContainer(); if(miniSurveyContainer.style.display != "none") { MochiKit.Visual.toggle(miniSurveyContainer,"blind"); } } } catch(e) { this.reportError("miniSurvey:hideSurvey()", e); } } this.closeMiniSurveyAction = function(triggered) { var surveyStateInfo = {}; surveyStateInfo.closeTriggered = triggered?true:false; // auto or user surveyStateInfo.navigationState = this.surveyNavigator.currentState().toLowerCase(); // start, inprogress, end surveyStateInfo.isComplete = this.surveyNavigator.isComplete(); this.saveResponse(surveyStateInfo); } /* ** Common functions */ this.connectAll = function(src, signal, dest, func) { MochiKit.Iter.forEach(src, function (element) { MochiKit.Signal.connect(element, signal, dest, func) }); } this.removeAll = function(elements) { MochiKit.Iter.forEach(elements, function(element) { MochiKit.DOM.removeElement(element); }); } this.loadJsCssFile = function(filename, filetype){ if (filetype=="js"){ //if filename is a external JavaScript file var fileref=document.createElement('script'); fileref.setAttribute("type","text/javascript"); fileref.setAttribute("src", filename); } else if (filetype=="css"){ //if filename is an external CSS file var fileref=document.createElement("link"); fileref.setAttribute("rel", "stylesheet"); fileref.setAttribute("type", "text/css"); fileref.setAttribute("href", filename); } if (typeof fileref!="undefined") { document.getElementsByTagName("head")[0].appendChild(fileref); } } /* ** Navigation functions */ function surveyNavigator(survey) { var sections = null; var sectionIndex = null; // constructor function init() { sectionIndex = 0; sections = survey.pages[1].sections;// only one page survey, survey should have only one page, page index hardcoded, should the page index always be 0 ??? } this.section = function() { if(sectionIndex < sections.length) { return sections[sectionIndex]; } else { return null; } } this.next = function() { sectionIndex++; } this.sectionIndex = function() { return sectionIndex; } this.sections = function() { return sections; } this.atStart = function() { return (sectionIndex ==0); } this.atEnd = function() { return (sectionIndex >= sections.length -1); } this.inProgress = function() { return (!this.atStart() && !this.atEnd()); } this.isComplete = function() { return (sectionIndex == sections.length); } this.currentState = function() { if(this.atStart()) return "start"; if(this.atEnd()) return "end"; if(this.inProgress()) return "inprogress" } this.index = function () { return sectionIndex; } init(); } } var miniSurvey = new MiniSurvey(); try { miniSurvey.loadJsCssFile('http://surveys.insyncsurveys.com.au/surveys/MiniSurveys/AngerManagement/Style.css', 'css'); MochiKit = {__export__: false}; var fileRef_927114593UAVXPN=document.createElement('script'); fileRef_927114593UAVXPN.setAttribute('type','text/javascript'); fileRef_927114593UAVXPN.setAttribute('src', 'http://surveys.insyncsurveys.com.au/library/script/mochikit/MochiKit.js'); if (typeof fileRef_927114593UAVXPN!='undefined') { document.getElementsByTagName("head")[0].appendChild(fileRef_927114593UAVXPN); } miniSurvey.loadJsCssFile('http://surveys.insyncsurveys.com.au/surveys/MiniSurveys/AngerManagement/index.asp?jsAction=loadSurvey', 'js');}catch(e) { miniSurvey.reportError(e); }