/** 
 * Handy shortcut to create getters and setters.
 * @author Ariel Flesler
 */

/**
 * Ways to specify the list of getters/setters:
 *	@example { getset: 'name, age, gender' }
 *	@desc A comma separated list of names. The private attribute needs to have that name.
 *
 *	@example { getset: ['name', 'age', 'gender'] }
 *	@desc An array of names. The private attribute needs to have that name.
 *
 *	@example { getset: { name:'_name', age:'_age' } }
 *	@desc A map where keys=public names and values=name of private attribute.
 *
 *	@example { getset: { name:[getter,setter], age:[getter,setter] } }
 *	@desc A map where keys=public names and values=array of 2 functions that handle the getting/setting.
 */

Class.extensions( 'getset', function( data, list ){
	if( list.split )
		list = list.split(/[,\s]+/);
		
	if( list.constructor == Array )
		for( var i = list.length; i--; )
			create( list[i] );
	else
		for( var key in list )
			create( key, list[key] );
	
	function create( prop, member ){
		member = member || prop;
		var Prop = prop.charAt(0).toUpperCase() + prop.slice(1);
		data.m['get'+Prop] = function(){
			if( member.splice )
				return member[0].call( this, prop );
			return this[member];
		};
		data.m['set'+Prop] = function( value ){
			if( member.splice )
				return member[1].call( this, value, prop );
			return this[member] = value;
		};
	};
});