// code from json_server.js Drupal.service = function(method, parameters, success) { if (!this.servicesClient) { return new Drupal.service(method, parameters, success); } parameters.method = method; parsed = this.parse(parameters); if (Drupal.Openquest.crossdomain) { this.ajaxc(parsed, success); } else { this.ajax(parsed, success); } } Drupal.service.prototype = { servicesClient: true, parse: function(parameters) { return $.param(this._parse([], [], parameters)); }, _parse: function(currentData, currentNesting, parameters) { for (index in parameters) { data = parameters[index]; currentNesting.push(encodeURIComponent(index)); if (typeof data == 'object') { currentData = this._parse(currentData, currentNesting, data); } else { currentData.push({name: this._makeURI(currentNesting), value: encodeURIComponent(data) }); } currentNesting.pop(); } return currentData; }, _makeURI: function(data) { output = data.shift(); for (i in data) { output += '['+ data[i] +']'; } return output; }, ajax: function(data, success) { $.ajax({ url: Drupal.Openquest.services_url, type: "POST", data: data, success: function(result) { parsed = Drupal.parseJson(result); success(parsed['status'], parsed['data']); } }); }, ajaxc: function(data, success) { $.getJSON(Drupal.Openquest.services_url, data, function(result) { success(result.status, result.data); }); } }; // captcha Drupal.attachCaptcha = function() { $('fieldset.captcha').each(function() { var form_id = '#' + $(this).parents('form').id(); // transform fieldset into simple DIV $(this).children('legend').remove(); $(this).replaceWith( '
'+ ''); $(form_id + ' .form-submit').click(function() { // reset values $('#edit-captcha-pair-id').val(''); $('#edit-captcha-answer').val(''); // show captcha form $(form_id).css({ position: 'relative', font: '12px Arial' }); $('#captcha .form-item').css({ float:'none', border: '0', backgroundColor: '#FFFFFF', padding: '0', margin: '0', width: 'auto' }); $('#captcha .form-item label').css({ float:'none', width: 'auto', color: '#000000', textAlign:'left' }); $('#captcha .form-text').css({ float:'none', width: 'auto', backgroundColor: '#FFFFFF', color: '#000000', border: '1px solid #000000' }); $('#captcha .form-required').css({ float:'none', color:'#000000' }); $('#captcha .description').css({ marginBottom:'15px', textAlign: 'center' }); var _fw = $(form_id).width(); var _fh = $(form_id).height(); $('#captcha-bg').css({top: 0, left: 0, width: _fw, height: _fh}).fadeIn('slow'); $('#captcha').css({ top: (_fh / 2 - ($('#captcha').height() / 2)), left: (_fw / 2 - ($('#captcha').width() / 2)) }).fadeIn('slow'); return false; }); // validate the captcha $('#captcha-button').click(function() { if ($('#edit-captcha-answer').val() == '') { alert('You must answer first!'); return false; } // check captcha response $(this).attr({disabled: 'disabled', value: 'Validating...'}); Drupal.service('captcha.validate', { captcha_id: $('#edit-captcha-id').val(), answer: $('#edit-captcha-answer').val(), nquestion: 1 }, function(status, data) { if (!status || data.message != '') { $('#captcha-button').attr({disabled: '', value: 'Validate'}); if (!status) { alert('Service error! ' + data); return false; } } if (data.message != '') { alert(data.message); $('#edit-captcha-id').val(data.captcha.id); $('#captcha-question').attr('src', data.captcha.question); } else { $('#captcha-button').attr('value', "Submitting..."); $('#edit-captcha-pair-id').val(data.pair_id); $('#edit-captcha-answer').val('Answer is correct!') $('#edit-captcha-answer').parents('form').get(0).submit(); } }); return false; }); }); }; if (Drupal.jsEnabled) { Drupal.Openquest = { services_url: "http://services.openquest.pt/?q=services/json&jsoncallback=?", crossdomain: true }; $(document).ready(function() {Drupal.attachCaptcha()}); };