/**  
 *  Deserialize forms serialized with the Prototype JavaScript framework (version 1.4.0)
 *  (c) 2005 Pierpaolo Follia <pfollia@gmail.com>
 *
 *  This cado is freely distributable under the terms of an MIT-style license.
 *
 *  For details, see the my web site: http://madchicken.altervista.org/tech/
 *  $Id: deserialize.js,v 1.1 2006/05/12 09:40:27 esa50833 Exp $
 */

Object.extend(Form, {
	deserialize: function(form, data) {
		form = $(form);
		data = decodeURIComponent(data);
		var tokens = data.split('&');
	    tokens.each(
	    	function(input, index) {
	    		var data = input.split('=');
	    		var id = data[0];
	    		var value = data[1];
	    		if(id != form.id && value != 'undefined' && value != null)
					Form.Element.deserialize(id, value);
	    	}
	    );
	}
});

Object.extend(Form.Element, {
	deserialize: function(element, data) {
		  

		var someNodeList = document.getElementsByName(element);
		var nodes = $A(someNodeList);
		nodes.each(function(node){

			element = node;
	    if(element != null) {
		    var method = element.tagName.toLowerCase();
		    Form.Element.Deserializers[method](element, data);
		}
				
			});


	}
});

Form.Element.Deserializers = {
  input: function(element, data) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Deserializers.textarea(element, data);
      case 'checkbox':
        return Form.Element.Deserializers.inputSelector(element, data);
      case 'radio':
        return Form.Element.Deserializers.radioSelector(element, data);
    }
    return false;
  },

  inputSelector: function(element, data) {
    
    obj = $(element.id);
    obj.checked = true;
    
  },

  radioSelector: function(element, data) {
    var name = element.name;
    var radiobuttons = Form.getInputs(element.form, 'radio', element.name);
    for(i = 0; i < radiobuttons.length; i++) {
      radiobutton = radiobuttons[i];
      if(radiobutton.value == data)
	radiobutton.checked = true;  
    }
  },

  textarea: function(element, data) {
    element.value = data;
  },

  select: function(element, data) {
    return Form.Element.Deserializers[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element, data);
  },

  selectOne: function(element, data) {
	element.value = data;
  },

  selectMany: function(element, data) {
    for(i = 0; i < element.options.length; i++) {
		op = element.options[i];
		op.selected = false;
        if(op.value == data)
        	op.selected = true;
    }
  }

}