// +-------------------------------------------------------------+
// | Zaplife deserialize javascript file
// | All rights reserved. Copyright 2005-2007 Zaplife
// |
// | Rewritten from http://madchicken.altervista.org/tech/ 
// |
// +-------------------------------------------------------------+


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

this.extend({
	deserialize: function(form, element, data) {
		if ($(element)) {
	    	element = $(element);
	    } else {
	    	// Get by name if id does not exist
	    	element = form.getElement('input[name=' + element + ']');
	    }
	    if(element != null) {
		    var method = element.tagName.toLowerCase();
		    Deserializers[method](form, element, data);
		}
	}
});


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

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

    radioSelector: function(form, element, data) {
        var name = element.name;
        //alert(element.getValue());
        var radiobuttons = $(form).getElements('input[name='+name+']');
        for(var i = 0, len = radiobuttons.length; i < len; i++) {
            var radiobutton = radiobuttons[i];
            if(radiobutton.value == data)
                radiobutton.checked = true;
        }
    },

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

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

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

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

}
