(function($){  
	//var $tfn=$.fn.serializeArray;
	$.fn.aserializeArray= function() {
		var rselectTextarea = /^(?:select|textarea)/i,
		rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i;
		if(!this.get(0).elements){
			jQuery(this).wrap('<form></form>');
			varretval= this.parent().map(function() {
				return this.elements ? jQuery.makeArray(this.elements) : this;
			})
			.filter(function() {
				return this.name && !this.disabled &&
					(this.checked || rselectTextarea.test(this.nodeName) ||
						rinput.test(this.type));
			})
			.map(function( i, elem ) {
				var val = jQuery(this).val();
	
				return val == null ?
					null :
					jQuery.isArray(val) ?
						jQuery.map( val, function( val, i ) {
							return { name: elem.name, value: val };
						}) :
						{ name: elem.name, value: val };
			}).get();
			jQuery(this).unwrap();
			return varretval;
		}else{ 
			return this.map(function() {
				return this.elements ? jQuery.makeArray(this.elements) : this;
			})
			.filter(function() {
				return this.name && !this.disabled &&
					(this.checked || rselectTextarea.test(this.nodeName) ||
						rinput.test(this.type));
			})
			.map(function( i, elem ) {
				var val = jQuery(this).val();
	
				return val == null ?
					null :
					jQuery.isArray(val) ?
						jQuery.map( val, function( val, i ) {
							return { name: elem.name, value: val };
						}) :
						{ name: elem.name, value: val };
			}).get();
		}
		
	}
})(jQuery);
function serializeArray2object(d){
	var rt=$(d).aserializeArray();
	var data=new Object();
	for (var i=0, max=rt.length; i < max; i++){
		if (data[rt[i].name]){
			if (typeof(data[rt[i].name])=="string"){
				var t=data[rt[i].name];
				data[rt[i].name]=[];
				data[rt[i].name].push(t);
				data[rt[i].name].push(rt[i].value);
			}else{
				data[rt[i].name].push(rt[i].value);
			}
		}else{
		    data[rt[i].name]=rt[i].value;
	    }
	}
	return data;
}
/**
 * Utility to record window scroll / dimensions.
 */
var Page = {

	/**
	 * Window object.
	 */
	object: null,

	/**
	 * Initialized?
	 */
	loaded: false,

	/**
	 * Window dimensions.
	 */
	dimensions: {
		width: 0,
		height: 0
	},

	/**
	 * Window scroll.
	 */
	scroll: {
		top: 0,
		width: 0
	},

	/**
	 * Initialized and grab window properties.
	 *
	 * @constructor
	 */
	initialize: function() {
		if (Page.loaded)
			return;

		if (!Page.object)
			Page.object = $(window);

		Page.object
			.resize(Page.getDimensions)
			.scroll(Page.getScrollValues);

		Page.getScrollValues();
		Page.getDimensions();
		Page.loaded = true;
	},

	/**
	 * Get window scroll values.
	 */
	getScrollValues: function() {
		Page.scroll.top  = Page.object.scrollTop();
		Page.scroll.left = Page.object.scrollLeft();
	},

	/**
	 * Get window dimensions.
	 */
	getDimensions: function() {
		Page.dimensions.width  = Page.object.width();
		Page.dimensions.height = Page.object.height();
	}
};

