
var apidoc = new function ApiDoc() {

  this.getExampleUrl = function() {
    var f = $('example-form');
    var query_string = f.toQueryString().replace(/[a-zA-Z_]+=&/g, '');
    var selects = f.getElements('select');
    for(var i=0;i<selects.length;i++) {
      var select = selects[i];
      if(select.getProperty('multiple')) {
        var name = select.getProperty('name');
        query_string = query_string.replace(new RegExp('&' + name + '=[a-z0-9_]*', 'gi'), '');
        query_string += '&' + name + '=' + this.getInputValue(select); // values.join(',');
      }
    }
    return query_string;
  };

  this.getInputValue = function(el) {
    if(el.options && el.getProperty('multiple')) {
      var name = el.getProperty('name');
      var values = [];
      for(var j=0;j<el.options.length;j++) {
        if(el.options[j].selected) {
          values.push(el.options[j].value);
        }
      }
      return values.join(','); // query_string += name + '=' + values.join(',');

    } else {
      return el.get('value');
    }
  };

  this.updateExampleUrl = function(param) {
    return function(e) {
      var el = new Element(e.target);
      var value = apidoc.getInputValue(el);
      var new_uri = $('example-uri').get('text');
      var regex = new RegExp('&(<b>)?' + param + '=[^&]+(<\/b>)?');
      if(regex.test(new_uri)) {
        if(value) 
          new_uri = new_uri.replace(regex, '&<b>' + param + '=' + value + '</b>');
        else
          new_uri = new_uri.replace(regex, '');
      } else if(value) {
        new_uri += '&<b>' + param + '=' + value + '</b>';
      }
      $('example-uri').set('html', new_uri.replace('?', '<br/>?'));
    };
  };

  this.formatResponse = function(text, format) {
    if(text.indexOf('<') == 0) {
      return text.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\n/g, '<br/>').replace(/\t/g, '&nbsp;&nbsp;');
    } else {
      return text.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\n/g, '<br/>').replace(/\t/g, '&nbsp;&nbsp;');
    }
  };

};


window.addEvent('domready', function() {
  var f;
  if(f = $('example-form')) {
    f.setProperty('target', '_blank');

    f.getElements('SELECT').each(function(elem) {
      elem.addEvent('change', apidoc.updateExampleUrl(elem.getProperty('name')));
      elem.addEvent('keyup', apidoc.updateExampleUrl(elem.getProperty('name')));
    });

    f.getElements('INPUT').each(function(elem) {
      if(elem.getProperty('type') != 'text') return;

      elem.addEvent('change', apidoc.updateExampleUrl(elem.getProperty('name')));
      elem.addEvent('keyup', apidoc.updateExampleUrl(elem.getProperty('name')));
    });

    f.addEvent('submit', function(e) {
      var ev = new Event(e);
      ev.stop();

      var USE_SYNTAX_HIGHLIGHTING = false;

      $('example-response').empty().fade('show').addClass('response-loading');
      if(USE_SYNTAX_HIGHLIGHTING)
        $('example-response').getAllNext('div.syntaxhighlighter').dispose();

SyntaxHighlighter.all();
      new Request({url: OPENCOLLECTION_BASE_URL + '/api/', method: 'get'}).addEvent('complete', function (response_text) {

        response_text = apidoc.formatResponse(response_text);

        $('example-response').removeClass('response-loading');

        if(USE_SYNTAX_HIGHLIGHTING) {
          $('example-response').fade('hide');
          if(!$('example-response-sh')) {
            var code_viewer = new Element('pre').addClass('code brush: xml; font-size: 80%').setProperty('id', 'example-response-sh');
            code_viewer.inject($('example-response'), 'after');
            code_viewer.setStyle('border','solid red 1px');
          }
          $('example-response-sh').set('html', response_text);
          SyntaxHighlighter.highlight();

        } else {
          $('example-response').set('html', response_text);
        }

        var query_string = apidoc.getExampleUrl();
        var query = '?' + query_string.substring(0,80) + '...';
        $('example-response-footer').set('html','Service URI: <a href="/opencollection/api/?' + query_string + '" target="_blank">' + query + '</a></p>');

      }).send(apidoc.getExampleUrl()); // f.toQueryString());

    });
  }
});

