/*
* Copyright (C) 2009 Simo Niemelä
*/

/* Crmple application url. Example: domain.com/people.xml */
var url           = "http://jasenrekisteri.anandaseva.fi/people.xml";

var peopleForm    = "http://jasenrekisteri.anandaseva.fi/people/new.xml";
var handlerUrl    = "/sites/anandaseva.fi/crmple-remote-client/lib/crmple_remote_client.php?url="+url+"&type=xml";
var statusWrapper = '#status';
var formWrapper   = '#crmple_person';

jQuery_1_4_2(function(){
  jQuery_1_4_2(formWrapper).buildForm(peopleForm).submit(function(){
    var params = buildRailsParams(formWrapper + " :input");
    
    jQuery_1_4_2.post(handlerUrl, {data: params}, function(data){
      handleResponse(data);
    });
  });
  
  function handleResponse(data) {
    if (errors(data)) {
      getErrors(data);
    } else {
      jQuery_1_4_2(statusWrapper).html('<p id="success">Success</p>');
    }
  }
  
  function errors(data) {
    errs = jQuery_1_4_2(data).find('error').length;
    return (errs > 0);
  }

  function getErrors(data) {
    jQuery_1_4_2(statusWrapper).html('<ul>');
    jQuery_1_4_2(data).find('error').each(function(){
      jQuery_1_4_2(statusWrapper + ' ul').append('<li>' + jQuery_1_4_2(this).html() + '</li>');
    });
    jQuery_1_4_2(statusWrapper).append('</ul>');
  }
  
  function buildParams(inputs, model) {
    var $inputs = jQuery_1_4_2(inputs);
    var parts = [];
    $inputs.each(function(i, el) {
      if (jQuery_1_4_2(el).attr('type') != 'submit') {
        var param = model + '[' + el.name + ']=' + jQuery_1_4_2(el).val();
        parts.push(param);
      }
    });
    return parts.join('&');
  }
  
  function buildRailsParams(inputs) {
    var $inputs = jQuery_1_4_2(inputs).map(function(i, e){
      if ((jQuery_1_4_2(e).is(":checkbox") || jQuery_1_4_2(e).is(":radio")) && !jQuery_1_4_2(e).is(":checked")) {
        return;
      } else {
        return e;
      }
    });
    var values = [];
    $inputs.each(function(i, el){
      if (jQuery_1_4_2(el).attr('type') != 'submit') {
        var param = el.name + '=' + jQuery_1_4_2(el).val();
        values.push(param);
      }
    });
    return values.join('&');
  }
});
