/**
 * @author eWedia <contact@ewedia.com>
 * @copyright Toute reproduction ou distribution non autorisée du code source est interdite.
 */
(function($){
	$.fn.addOption = function(data, selected){
		var parent 				= $(this).get(0);
		var i 					= 0;
		parent.options.length 	= 0;
		$.each(data, function(value, label){
			parent.options[i] 	= new Option(label, value);
			if(selected && selected!= '' && value == selected){
				$(parent.options[i]).attr('selected', true);
			}
			i++;
		});						
	};
	$.fn.addElement = function(data){
		var $this 	= this;
		var obj		= false;
		var parent 	= $(this).get(0);
		if(parent && data){
			var elem 	= document.createElement(data.tag);
			if(typeof(data.text) != 'undefined'){
				$(elem).text(data.text != '' ? data.text : '');
			}
			else if(typeof(data.html) != 'undefined'){
				$(elem).html(data.html != '' ? data.html : '');
			}
			if(typeof(data.event) != 'undefined'){
				$.each(data.event, function(e, func){
					if(typeof(func) == 'array' || typeof(func) == 'object'){
						var parameters = new Array();
						$.each(func[1], function(i){
							parameters[i] = this;			
						});						
						var callFunc = eval(func[0]);
						if(typeof callFunc != 'function'){
							throw new Error(callFunc + ' is not a valid function');
						}
						func = function(){
							callFunc.apply(null, parameters);
						};
					}
					$(elem).bind(e, func);
				});
			}				
			if(typeof(data.params) != 'undefined'){
				$.each(data.params, function(key, value){
					if(value !== false) elem.setAttribute(key, value);
				});
			}
			if(typeof(data.before) != 'undefined'){
				obj = parent.insertBefore(elem, data.before);
			}
			else{
				obj = parent.appendChild(elem);
			}
			if(typeof(data.element) != 'undefined'){
				$.each(data.element, function(){
					$(obj).addElement(this);
				});
			}
		}
		return obj;
	};
	$.fn.dataFields = function(){
		var data 	= new Object();
		$('input[type=text], input[type=hidden], input[type=password], input[type=checkbox], input[type=radio], select, textarea', $(this)).each(function(){
			if($(this).attr('name') != ''){
				if($(this).attr('type') == 'radio' || $(this).attr('type') == 'checkbox'){
					if($(this).is(':checked')){
						var m = $(this).attr('name').match(new RegExp('^(.+)\\[([^\\]]+)\\]$', 'i'));
						if(m){
							if(!data[m[1]]){
								data[m[1]]				= new Object();
							}
							data[m[1]][m[2]] 			= $(this).val();
						}
						else{
							data[$(this).attr('name')] 	= $(this).val();
						}
					}
				}
				else{
					var m = $(this).attr('name').match(new RegExp('^(.+)\\[([^\\]]+)\\]$', 'i'));
					if(m){
						if(!data[m[1]]){
							data[m[1]]				= new Object();
						}
						data[m[1]][m[2]] 			= $(this).val();						
					}
					else{
						data[$(this).attr('name')] 	= $(this).val();
					}
				}
			}	
		});
		return data;
	};
	$.paramsToObj = function(params){
		if(params){
			var data 	= new Object();
			var fields 	= params.split('&');
			if(fields){
				$.each(fields, function(i,field){
					var items = field.split('=');
					data[items[0]] = items[1];
				});
			}
			return data;
		}
		return false;
	};	
	var cache = [];
	$.preLoadImages = function(){
		var args_len = arguments.length;
		for(var i = args_len; i--;){
			var cacheImage = document.createElement('img');
			cacheImage.src = arguments[i];
			cache.push(cacheImage);
		}
	}
})(jQuery);
