Feedback lets you send us suggestions about our products. We welcome problem reports, feature ideas and general comments.<\/p>
Start by writing a brief description:<\/p><\/textarea><p>Next we\\'ll let you identify areas of the page related to your description.<\/p><button id=\"feedback-welcome-next\" class=\"feedback-next-btn feedback-btn-gray\">Next<\/button><div id=\"feedback-welcome-error\">Please enter a description.<\/div><div class=\"feedback-wizard-close\"><\/div><\/div>',\n highlighter: '<div id=\"feedback-highlighter\"><div class=\"feedback-logo\">Feedback<\/div><p>Click and drag on the page to help us better understand your feedback. You can move this dialog if it\\'s in the way.<\/p><button class=\"feedback-sethighlight feedback-active\"><div class=\"ico\"><\/div><span>Highlight<\/span><\/button><label>Highlight areas relevant to your feedback.<\/label><button class=\"feedback-setblackout\"><div class=\"ico\"><\/div><span>Black out<\/span><\/button><label class=\"lower\">Black out any personal information.<\/label><div class=\"feedback-buttons\"><button id=\"feedback-highlighter-next\" class=\"feedback-next-btn feedback-btn-gray\">Next<\/button><button id=\"feedback-highlighter-back\" class=\"feedback-back-btn feedback-btn-gray\">Back<\/button><\/div><div class=\"feedback-wizard-close\"><\/div><\/div>',\n overview: '<div id=\"feedback-overview\"><div class=\"feedback-logo\">Feedback<\/div><div id=\"feedback-overview-description\"><div id=\"feedback-overview-description-text\"><h3>Description<\/h3><h3 class=\"feedback-additional\">Additional info<\/h3><div id=\"feedback-additional-none\"><span>None<\/span><\/div><div id=\"feedback-browser-info\"><span>Browser Info<\/span><\/div><div id=\"feedback-page-info\"><span>Page Info<\/span><\/div><div id=\"feedback-page-structure\"><span>Page Structure<\/span><\/div><\/div><\/div><div id=\"feedback-overview-screenshot\"><h3>Screenshot<\/h3><\/div><div class=\"feedback-buttons\"><button id=\"feedback-submit\" class=\"feedback-submit-btn feedback-btn-blue\">Submit<\/button><button id=\"feedback-overview-back\" class=\"feedback-back-btn feedback-btn-gray\">Back<\/button><\/div><div id=\"feedback-overview-error\">Please enter a description.<\/div><div class=\"feedback-wizard-close\"><\/div><\/div>',\n submitLoading: '<div id=\"feedback-submit-loading\"><div class=\"feedback-logo\">Feedback<\/div><p>Loading...<\/p><\/div>',\n submitSuccess: '<div id=\"feedback-submit-success\"><div class=\"feedback-logo\">Feedback<\/div><p>Thank you for your feedback. We value every piece of feedback we receive.<\/p><\/p><button class=\"feedback-close-btn feedback-btn-blue\">OK<\/button><div class=\"feedback-wizard-close\"><\/div><\/div>',\n submitError: '<div id=\"feedback-submit-error\"><div class=\"feedback-logo\">Feedback<\/div><p>Sadly an error occured while sending your feedback. Please try again.<\/p><button class=\"feedback-close-btn feedback-btn-blue\">OK<\/button><div class=\"feedback-wizard-close\"><\/div><\/div>'\n },\n onClose: function() {},\n screenshotStroke: true,\n highlightElement: true,\n initialBox: false\n }, options);\n var supportedBrowser = !!window.HTMLCanvasElement;\n var isFeedbackButtonNative = settings.feedbackButton == '.feedback-btn';\n var _html2canvas = false;\n if (supportedBrowser) {\n if(isFeedbackButtonNative) {\n $('body').append('<button class=\"feedback-btn feedback-btn-gray feedback-btn-native\">' + settings.initButtonText + '<\/button>');\n }\n $(document).on('click.feedback', settings.feedbackButton, function(){\n if(isFeedbackButtonNative) {\n $(this).hide();\n }\n if (!_html2canvas) {\n $.getScript(settings.html2canvasURL, function() {\n _html2canvas = true;\n });\n }\n var canDraw = false,\n img = '',\n h = $(document).height(),\n w = $(document).width(),\n tpl = '<div id=\"feedback-module\">';\n\n if (settings.initialBox) {\n tpl += settings.tpl.description;\n }\n\n tpl += settings.tpl.highlighter + settings.tpl.overview + '<canvas id=\"feedback-canvas\"><\/canvas><div id=\"feedback-helpers\"><\/div><input id=\"feedback-note\" name=\"feedback-note\" type=\"hidden\"><\/div>';\n\n $('body').append(tpl);\n\n moduleStyle = {\n 'position': 'absolute',\n 'left': '0px',\n 'top': '0px'\n };\n canvasAttr = {\n 'width': w,\n 'height': h\n };\n\n $('#feedback-module').css(moduleStyle);\n $('#feedback-canvas').attr(canvasAttr).css('z-index', '30000');\n\n if (!settings.initialBox) {\n $('#feedback-highlighter-back').remove();\n canDraw = true;\n $('#feedback-canvas').css('cursor', 'crosshair');\n $('#feedback-helpers').show();\n $('#feedback-welcome').hide();\n $('#feedback-highlighter').show();\n }\n\n if(settings.isDraggable) {\n $('#feedback-highlighter').on('mousedown.feedback', function(e) {\n var $d = $(this).addClass('feedback-draggable'),\n drag_h = $d.outerHeight(),\n drag_w = $d.outerWidth(),\n pos_y = $d.offset().top + drag_h - e.pageY,\n pos_x = $d.offset().left + drag_w - e.pageX;\n $d.css('z-index', 40000).parents().on('mousemove.feedback', function(e) {\n _top = e.pageY + pos_y - drag_h;\n _left = e.pageX + pos_x - drag_w;\n _bottom = drag_h - e.pageY;\n _right = drag_w - e.pageX;\n\n if (_left < 0) _left = 0;\n if (_top < 0) _top = 0;\n if (_right > $(window).width())\n _left = $(window).width() - drag_w;\n if (_left > $(window).width() - drag_w)\n _left = $(window).width() - drag_w;\n if (_bottom > $(document).height())\n _top = $(document).height() - drag_h;\n if (_top > $(document).height() - drag_h)\n _top = $(document).height() - drag_h;\n\n $('.feedback-draggable').offset({\n top: _top,\n left: _left\n }).on(\"mouseup\", function() {\n $(this).removeClass('feedback-draggable');\n });\n });\n e.preventDefault();\n }).on('mouseup.feedback', function(){\n $(this).removeClass('feedback-draggable');\n $(this).parents().off('mousemove mousedown');\n });\n }\n\n var ctx = $('#feedback-canvas')[0].getContext('2d');\n\n ctx.fillStyle = 'rgba(102,102,102,0.5)';\n ctx.fillRect(0, 0, $('#feedback-canvas').width(), $('#feedback-canvas').height());\n\n rect = {};\n drag = false;\n highlight = 0, \/\/ made it 0 so default is blackout - remui\n post = {};\n\n if (settings.postBrowserInfo) {\n post.browser = {};\n post.browser.appCodeName = navigator.appCodeName;\n post.browser.appName = navigator.appName;\n post.browser.appVersion = navigator.appVersion;\n post.browser.cookieEnabled = navigator.cookieEnabled;\n post.browser.onLine = navigator.onLine;\n post.browser.platform = navigator.platform;\n post.browser.userAgent = navigator.userAgent;\n post.browser.plugins = [];\n\n $.each(navigator.plugins, function(i) {\n post.browser.plugins.push(navigator.plugins[i].name);\n });\n $('#feedback-browser-info').show();\n }\n\n if (settings.postURL) {\n post.url = document.URL;\n $('#feedback-page-info').show();\n }\n\n if (settings.postHTML) {\n post.html = $('html').html();\n $('#feedback-page-structure').show();\n }\n\n if (!settings.postBrowserInfo && !settings.postURL && !settings.postHTML)\n $('#feedback-additional-none').show();\n\n \/\/ \/\/ We can add the extra data \n \/\/ $(document).ready(function(){\n \/\/ var serviceName = 'theme_remui_handle_bug_feedback_report';\n \/\/ var getusagedata = Ajax.call([{\n \/\/ methodname: serviceName,\n \/\/ args: {}\n \/\/ }]);\n \/\/ getusagedata[0].done(function(response) {\n \/\/ response = JSON.parse(response);\n \/\/ console.log(\"Response : \");\n \/\/ console.log(response);\n \/\/ post.siteurl = response.siteurl;\n \/\/ delete response.siteurl;\n\n \/\/ post.databasename = response.databasename;\n \/\/ delete response.databasename;\n \n \/\/ post.php = response.php_version;\n \/\/ delete response.php_version;\n \n \/\/ post.web_server = response.web_server;\n \/\/ delete response.web_server;\n\n \/\/ post.server_os = response.server_os;\n \/\/ delete response.server_os;\n \n \/\/ post.system_version = response.system_version;\n \/\/ delete response.system_version;\n \/\/ }).fail(Notification.exception);\n \/\/ });\n\n\n $(document).on('mousedown.feedback', '#feedback-canvas', function(e) {\n if (canDraw) {\n\n rect.startX = e.pageX - $(this).offset().left;\n rect.startY = e.pageY - $(this).offset().top;\n rect.w = 0;\n rect.h = 0;\n drag = true;\n }\n });\n\n $(document).on('mouseup.feedback', function(){\n if (canDraw) {\n drag = false;\n\n var dtop = rect.startY,\n dleft = rect.startX,\n dwidth = rect.w,\n dheight = rect.h;\n dtype = 'highlight';\n\n if (dwidth == 0 || dheight == 0) return;\n\n if (dwidth < 0) {\n dleft += dwidth;\n dwidth *= -1;\n }\n if (dheight < 0) {\n dtop += dheight;\n dheight *= -1;\n }\n\n if (dtop + dheight > $(document).height())\n dheight = $(document).height() - dtop;\n if (dleft + dwidth > $(document).width())\n dwidth = $(document).width() - dleft;\n\n if (highlight == 0)\n dtype = 'blackout';\n\n $('#feedback-helpers').append('<div class=\"feedback-helper\" data-type=\"' + dtype + '\" data-time=\"' + Date.now() + '\" style=\"position:absolute;top:' + dtop + 'px;left:' + dleft + 'px;width:' + dwidth + 'px;height:' + dheight + 'px;z-index:30000;\"><\/div>');\n\n redraw(ctx);\n rect.w = 0;\n }\n\n });\n\n $(document).on('mousemove.feedback', function(e) {\n if (canDraw && drag) {\n $('#feedback-highlighter').css('cursor', 'default');\n\n rect.w = (e.pageX - $('#feedback-canvas').offset().left) - rect.startX;\n rect.h = (e.pageY - $('#feedback-canvas').offset().top) - rect.startY;\n\n ctx.clearRect(0, 0, $('#feedback-canvas').width(), $('#feedback-canvas').height());\n ctx.fillStyle = 'rgba(102,102,102,0.5)';\n ctx.fillRect(0, 0, $('#feedback-canvas').width(), $('#feedback-canvas').height());\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'highlight')\n drawlines(ctx, parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n });\n if (highlight==1) {\n drawlines(ctx, rect.startX, rect.startY, rect.w, rect.h);\n ctx.clearRect(rect.startX, rect.startY, rect.w, rect.h);\n }\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'highlight')\n ctx.clearRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n });\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'blackout') {\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.fillRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height())\n }\n });\n if (highlight == 0) {\n ctx.fillStyle = 'rgba(0,0,0,0.5)';\n ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);\n }\n }\n });\n\n if (settings.highlightElement) {\n var highlighted = [],\n tmpHighlighted = [],\n hidx = 0;\n\n $(document).on('click.feedback', '#feedback-canvas',function(e) {\n if (canDraw) {\n redraw(ctx);\n tmpHighlighted = [];\n\n $('#feedback-canvas').css('cursor', 'crosshair');\n\n $('* :not(body,script,iframe,div,section,.feedback-btn,#feedback-module *)').each(function(){\n if ($(this).attr('data-highlighted') === 'true')\n return;\n\n if (e.pageX > $(this).offset().left && e.pageX < $(this).offset().left + $(this).width() && e.pageY > $(this).offset().top + parseInt($(this).css('padding-top'), 10) && e.pageY < $(this).offset().top + $(this).height() + parseInt($(this).css('padding-top'), 10)) {\n tmpHighlighted.push($(this));\n }\n });\n\n var $toHighlight = tmpHighlighted[tmpHighlighted.length - 1];\n\n if ($toHighlight && !drag) {\n $('#feedback-canvas').css('cursor', 'pointer');\n\n var _x = $toHighlight.offset().left - 2,\n _y = $toHighlight.offset().top - 2,\n _w = $toHighlight.width() + parseInt($toHighlight.css('padding-left'), 10) + parseInt($toHighlight.css('padding-right'), 10) + 6,\n _h = $toHighlight.height() + parseInt($toHighlight.css('padding-top'), 10) + parseInt($toHighlight.css('padding-bottom'), 10) + 6;\n\n if (highlight == 1) {\n drawlines(ctx, _x, _y, _w, _h);\n ctx.clearRect(_x, _y, _w, _h);\n dtype = 'highlight';\n }\n\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'highlight')\n ctx.clearRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n });\n\n if (highlight == 0) {\n dtype = 'blackout';\n ctx.fillStyle = 'rgba(0,0,0,0.5)';\n ctx.fillRect(_x, _y, _w, _h);\n }\n\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'blackout') {\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.fillRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n }\n });\n\n if (e.type == 'click' && e.pageX == rect.startX && e.pageY == rect.startY) {\n $('#feedback-helpers').append('<div class=\"feedback-helper\" data-highlight-id=\"' + hidx + '\" data-type=\"' + dtype + '\" data-time=\"' + Date.now() + '\" style=\"position:absolute;top:' + _y + 'px;left:' + _x + 'px;width:' + _w + 'px;height:' + _h + 'px;z-index:30000;\"><\/div>');\n highlighted.push(hidx);\n ++hidx;\n redraw(ctx);\n }\n }\n }\n });\n }\n\n $(document).on('mouseleave.feedback', 'body,#feedback-canvas', function() {\n redraw(ctx);\n });\n\n $(document).on('mouseenter.feedback', '.feedback-helper', function() {\n redraw(ctx);\n });\n\n $(document).on('click.feedback', '#feedback-welcome-next', function() {\n if ($('#feedback-note').val().length > 0) {\n canDraw = true;\n $('#feedback-canvas').css('cursor', 'crosshair');\n $('#feedback-helpers').show();\n $('#feedback-welcome').hide();\n $('#feedback-highlighter').show();\n }\n else {\n $('#feedback-welcome-error').show();\n }\n });\n\n $(document).on('mouseenter.feedback mouseleave.feedback', '.feedback-helper', function(e) {\n if (drag)\n return;\n\n rect.w = 0;\n rect.h = 0;\n\n if (e.type === 'mouseenter') {\n $(this).css('z-index', '30001');\n $(this).append('<div class=\"feedback-helper-inner\" style=\"width:' + ($(this).width() - 2) + 'px;height:' + ($(this).height() - 2) + 'px;position:absolute;margin:1px;\"><\/div>');\n $(this).append('<div id=\"feedback-close\"><\/div>');\n $(this).find('#feedback-close').css({\n 'top' : -1 * ($(this).find('#feedback-close').height() \/ 2) + 'px',\n 'left' : $(this).width() - ($(this).find('#feedback-close').width() \/ 2) + 'px'\n });\n\n if ($(this).attr('data-type') == 'blackout') {\n \/* redraw white *\/\n ctx.clearRect(0, 0, $('#feedback-canvas').width(), $('#feedback-canvas').height());\n ctx.fillStyle = 'rgba(102,102,102,0.5)';\n ctx.fillRect(0, 0, $('#feedback-canvas').width(), $('#feedback-canvas').height());\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'highlight')\n drawlines(ctx, parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n });\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'highlight')\n ctx.clearRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n });\n\n ctx.clearRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height())\n ctx.fillStyle = 'rgba(0,0,0,0.75)';\n ctx.fillRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n\n ignore = $(this).attr('data-time');\n\n \/* redraw black *\/\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-time') == ignore)\n return true;\n if ($(this).attr('data-type') == 'blackout') {\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.fillRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height())\n }\n });\n }\n }\n else {\n $(this).css('z-index','30000');\n $(this).children().remove();\n if ($(this).attr('data-type') == 'blackout') {\n redraw(ctx);\n }\n }\n });\n\n $(document).on('click.feedback', '#feedback-close', function() {\n if (settings.highlightElement && $(this).parent().attr('data-highlight-id'))\n var _hidx = $(this).parent().attr('data-highlight-id');\n\n $(this).parent().remove();\n\n if (settings.highlightElement && _hidx)\n $('[data-highlight-id=\"' + _hidx + '\"]').removeAttr('data-highlighted').removeAttr('data-highlight-id');\n\n redraw(ctx);\n });\n\n $('#feedback-module').on('click.feedback', '.feedback-wizard-close,.feedback-close-btn', function() {\n close();\n });\n\n $(document).on('keyup.feedback', function(e) {\n if (e.keyCode == 27)\n close();\n });\n\n $(document).on('selectstart.feedback dragstart.feedback', function(e) {\n e.preventDefault();\n });\n\n $(document).on('click.feedback', '#feedback-highlighter-back', function() {\n canDraw = false;\n $('#feedback-canvas').css('cursor', 'default');\n $('#feedback-helpers').hide();\n $('#feedback-highlighter').hide();\n $('#feedback-welcome-error').hide();\n $('#feedback-welcome').show();\n });\n\n $(document).on('mousedown.feedback', '.feedback-sethighlight', function() {\n highlight = 1;\n $(this).addClass('feedback-active');\n $('.feedback-setblackout').removeClass('feedback-active');\n });\n\n $(document).on('mousedown.feedback', '.feedback-setblackout', function() {\n highlight = 0;\n $(this).addClass('feedback-active');\n $('.feedback-sethighlight').removeClass('feedback-active');\n });\n\n $(document).on('click.feedback', '#feedback-highlighter-next', function() {\n canDraw = false;\n $('#feedback-canvas').css('cursor', 'default');\n var sy = $(document).scrollTop(),\n dh = $(window).height();\n $('#feedback-helpers').hide();\n $('#feedback-highlighter').hide();\n $('#feedback-loading-icon').show(); \/\/ show loading icon after the next button is pressed on highlighter\n if (!settings.screenshotStroke) {\n redraw(ctx, false);\n }\n html2canvas($('body'), {\n onrendered: function(canvas) {\n if (!settings.screenshotStroke) {\n redraw(ctx);\n }\n _canvas = $('<canvas id=\"feedback-canvas-tmp\" width=\"'+ w +'\" height=\"'+ dh +'\"\/>').hide().appendTo('body');\n _ctx = _canvas.get(0).getContext('2d');\n _ctx.drawImage(canvas, 0, sy, w, dh, 0, 0, w, dh);\n img = _canvas.get(0).toDataURL();\n $(document).scrollTop(sy);\n post.img = img;\n settings.onScreenshotTaken(post.img);\n if(settings.showDescriptionModal) {\n $('#feedback-canvas-tmp').remove();\n $('#feedback-loading-icon').hide(); \/\/ hide loading icon when the overview modal with screenshot is loaded\n $('#feedback-overview').show();\n $('#feedback-overview-description-text>textarea').remove();\n $('#feedback-overview-screenshot>img').remove();\n $('<textarea class=\"form-control\" id=\"feedback-overview-note\">' + $('#feedback-note').val() + '<\/textarea>').insertAfter('#feedback-overview-description-text h3:eq(0)');\n $('#feedback-overview-screenshot').append('<img class=\"feedback-screenshot border-0\" src=\"' + img + '\" \/>');\n }\n else {\n $('#feedback-module').remove();\n close();\n _canvas.remove();\n }\n },\n proxy: settings.proxy,\n letterRendering: settings.letterRendering\n });\n });\n\n \/\/ skip screenshot creation via html2canvas and only send text feedback\n \/\/ Bharat\n \/\/ Custom added for RemUI\n $(document).on('click.feedback', '#feedback-skiphighlighter-next', function() {\n canDraw = false;\n $('#feedback-canvas').css('cursor', 'default');\n \/\/ unset any screenshot data\n img = '';\n post.img = '';\n\n $('#feedback-helpers').hide();\n $('#feedback-highlighter').hide();\n $('#feedback-loading-icon').show(); \/\/ show loading icon after the next button is pressed on highlighter\n $('#feedback-canvas-tmp').remove();\n $('#feedback-loading-icon').hide(); \/\/ hide loading icon when the overview modal with screenshot is loaded\n $('#feedback-overview').show();\n $('#feedback-overview-description-text>textarea').remove();\n $('#feedback-overview-screenshot>img').remove();\n $('<textarea class=\"form-control\" id=\"feedback-overview-note\">' + $('#feedback-note').val() + '<\/textarea>').insertAfter('#feedback-overview-description-text h3:eq(0)');\n $('#feedback-overview-screenshot').append('<img class=\"feedback-screenshot border-0\" src=\"' + M.util.image_url('no_screenshot', 'theme_remui') + '\" \/>');\n });\n\n $(document).on('click.feedback', '#feedback-overview-back', function(e) {\n canDraw = true;\n $('#feedback-canvas').css('cursor', 'crosshair');\n $('#feedback-overview').hide();\n $('#feedback-helpers').show();\n $('#feedback-highlighter').show();\n $('#feedback-overview-error').hide();\n $('#feedback-email-error').hide();\n });\n\n $(document).on('keyup.feedback', '#feedback-note-tmp,#feedback-overview-note', function(e) {\n var tx;\n if (e.target.id === 'feedback-note-tmp')\n tx = $('#feedback-note-tmp').val();\n else {\n tx = $('#feedback-overview-note').val();\n $('#feedback-note-tmp').val(tx);\n }\n\n $('#feedback-note').val(tx);\n });\n\n $(document).on('click.feedback', '#feedback-submit', function() {\n canDraw = false;\n\n $('#feedback-overview-error').hide();\n $('#feedback-email-error').hide();\n\n if ($('#feedback-note').val().length > 0 && validateFeedbackEmail($('#feedback_person_email_id_field').val()) !== false) {\n $('#feedback-submit-success,#feedback-submit-error').remove();\n $('#feedback-overview').hide();\n $(\"#feedback-module\").append(settings.tpl.submitLoading);\n\n post.img = img;\n post.note = $('#feedback-note').val();\n post.customer_email = $('#feedback_person_email_id_field').val();\n var data = {feedback: JSON.stringify(post)};\n \/\/ $.ajax({\n \/\/ url: settings.ajaxURL,\n \/\/ dataType: 'json',\n \/\/ type: 'POST',\n \/\/ data: data,\n \/\/ success: function(response) {\n \/\/ \tvar success = '<div id=\"feedback-submit-success\"><div class=\"feedback-logo\">Feedback<\/div><p>Thank you for your feedback. We value every piece of feedback we receive.<\/p>';\n \/\/ \tsuccess += '<p><b>Feedback Reference ID : '+response+' <\/b><\/p>';\n \/\/ \tsuccess += '<button class=\"feedback-close-btn feedback-btn-blue\">OK<\/button><div class=\"feedback-wizard-close\"><\/div><\/div>';\n \/\/ $('#feedback-module').append(success);\n \/\/ },\n \/\/ error: function(){\n \/\/ $('#feedback-module').append(settings.tpl.submitError);\n \/\/ }\n \/\/ });\n\n \/\/ Bharat\n \/\/ Replaces the AJAX send function with Moodle Ajax API\n var handle_report = Ajax.call([{\n methodname: settings.ajaxURL,\n args: {\n 'feedbackdata': JSON.stringify(post)\n }\n }]);\n handle_report[0].done(function(response) {\n\n \/\/ check for feedback ID\n if(response != false && response > 0) {\n var success = '<div id=\"feedback-submit-success\"><div class=\"feedback-logo\">Feedback<\/div><p>Thank you for your feedback. We value every piece of feedback we receive.<\/p>';\n success += '<p><b>Feedback Reference ID : '+response+' <\/b><\/p>';\n success += '<button class=\"feedback-close-btn feedback-btn-blue\">OK<\/button><div class=\"feedback-wizard-close\"><\/div><\/div>';\n $('#feedback-module').append(success);\n } else {\n $('#feedback-module').append(settings.tpl.submitError); \n }\n }).fail(function(ex) {\n \/\/ do something with the exception\n $('#feedback-module').append(settings.tpl.submitError);\n });\n }\n else {\n if($('#feedback-note').val().length <= 0) {\n $('#feedback-overview-error').show();\n }\n if(validateFeedbackEmail($('#feedback_person_email_id_field').val()) === false) {\n $('#feedback-email-error').show();\n }\n }\n });\n });\n }\n\n function close() {\n canDraw = false;\n $(document).off('mouseenter.feedback mouseleave.feedback', '.feedback-helper');\n $(document).off('mouseup.feedback keyup.feedback');\n $(document).off('mousedown.feedback', '.feedback-setblackout');\n $(document).off('mousedown.feedback', '.feedback-sethighlight');\n $(document).off('mousedown.feedback click.feedback', '#feedback-close');\n $(document).off('mousedown.feedback', '#feedback-canvas');\n $(document).off('click.feedback', '#feedback-highlighter-next');\n $(document).off('click.feedback', '#feedback-highlighter-back');\n $(document).off('click.feedback', '#feedback-welcome-next');\n $(document).off('click.feedback', '#feedback-overview-back');\n $(document).off('mouseleave.feedback', 'body');\n $(document).off('mouseenter.feedback', '.feedback-helper');\n $(document).off('selectstart.feedback dragstart.feedback');\n $('#feedback-module').off('click.feedback', '.feedback-wizard-close,.feedback-close-btn');\n $(document).off('click.feedback', '#feedback-submit');\n\n if (settings.highlightElement) {\n $(document).off('click.feedback', '#feedback-canvas');\n $(document).off('mousemove.feedback', '#feedback-canvas');\n }\n $('[data-highlighted=\"true\"]').removeAttr('data-highlight-id').removeAttr('data-highlighted');\n $('#feedback-module').remove();\n $('.feedback-btn').show();\n\n settings.onClose.call(this);\n }\n\n function redraw(ctx, border) {\n border = typeof border !== 'undefined' ? border : true;\n ctx.clearRect(0, 0, $('#feedback-canvas').width(), $('#feedback-canvas').height());\n ctx.fillStyle = 'rgba(102,102,102,0.5)';\n ctx.fillRect(0, 0, $('#feedback-canvas').width(), $('#feedback-canvas').height());\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'highlight')\n if (border)\n drawlines(ctx, parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n });\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'highlight')\n ctx.clearRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n });\n $('.feedback-helper').each(function() {\n if ($(this).attr('data-type') == 'blackout') {\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.fillRect(parseInt($(this).css('left'), 10), parseInt($(this).css('top'), 10), $(this).width(), $(this).height());\n }\n });\n }\n\n function drawlines(ctx, x, y, w, h) {\n ctx.strokeStyle = settings.strokeStyle;\n ctx.shadowColor = settings.shadowColor;\n ctx.shadowOffsetX = settings.shadowOffsetX;\n ctx.shadowOffsetY = settings.shadowOffsetY;\n ctx.shadowBlur = settings.shadowBlur;\n ctx.lineJoin = settings.lineJoin;\n ctx.lineWidth = settings.lineWidth;\n\n ctx.strokeRect(x,y,w,h);\n\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = 0;\n ctx.lineWidth = 1;\n }\n\n \/\/ validate email adderess\n function validateFeedbackEmail(sEmail) {\n var reEmail = \/^(?:[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\\/\\=\\?\\^\\`\\{\\|\\}\\~]+\\.)*[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!\\.)){0,61}[a-zA-Z0-9]?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\\[(?:(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]))$\/;\n \n if(!sEmail.match(reEmail)) {\n return false;\n }\n return true; \n }\n\n };\n});\n"],"file":"feedback.min.js"}