Yahoo! UI Library

Calendar 

Yahoo! UI Library > calendar > CalendarGroup.js (source view)

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
Version 0.12.2
*/

/**
* YAHOO.widget.CalendarGroup is a special container class for YAHOO.widget.Calendar. This class facilitates
* the ability to have multi-page calendar views that share a single dataset and are
* dependent on each other.
* 
* The calendar group instance will refer to each of its elements using a 0-based index.
* For example, to construct the placeholder for a calendar group widget with id "cal1" and
* containerId of "cal1Container", the markup would be as follows:
*	<xmp>
*		<div id="cal1Container_0"></div>
*		<div id="cal1Container_1"></div>
*	</xmp>
* The tables for the calendars ("cal1_0" and "cal1_1") will be inserted into those containers.
* @namespace YAHOO.widget
* @class CalendarGroup
* @constructor
* @param {String}	id			The id of the table element that will represent the calendar widget
* @param {String}	containerId	The id of the container div element that will wrap the calendar table
* @param {Object}	config		The configuration object containing the Calendar's arguments
*/
YAHOO.widget.CalendarGroup = function(id, containerId, config) {
	if (arguments.length > 0) {
		this.init(id, containerId, config);
	}
};

/**
* Initializes the calendar group. All subclasses must call this method in order for the
* group to be initialized properly.
* @method init
* @param {String}	id			The id of the table element that will represent the calendar widget
* @param {String}	containerId	The id of the container div element that will wrap the calendar table
* @param {Object}	config		The configuration object containing the Calendar's arguments
*/
YAHOO.widget.CalendarGroup.prototype.init = function(id, containerId, config) {
	this.initEvents();
	this.initStyles();

	/**
	* The collection of Calendar pages contained within the CalendarGroup
	* @property pages
	* @type YAHOO.widget.Calendar[]
	*/
	this.pages = [];
	
	/**
	* The unique id associated with the CalendarGroup
	* @property id
	* @type String
	*/
	this.id = id;

	/**
	* The unique id associated with the CalendarGroup container
	* @property containerId
	* @type String
	*/
	this.containerId = containerId;

	/**
	* The outer containing element for the CalendarGroup
	* @property oDomContainer
	* @type HTMLElement
	*/
	this.oDomContainer = document.getElementById(containerId);

	YAHOO.util.Dom.addClass(this.oDomContainer, YAHOO.widget.CalendarGroup.CSS_CONTAINER);
	YAHOO.util.Dom.addClass(this.oDomContainer, YAHOO.widget.CalendarGroup.CSS_MULTI_UP);

	/**
	* The Config object used to hold the configuration variables for the CalendarGroup
	* @property cfg
	* @type YAHOO.util.Config
	*/
	this.cfg = new YAHOO.util.Config(this);

	/**
	* The local object which contains the CalendarGroup's options
	* @property Options
	* @type Object
	*/
	this.Options = {};

	/**
	* The local object which contains the CalendarGroup's locale settings
	* @property Locale
	* @type Object
	*/
	this.Locale = {};

	this.setupConfig();

	if (config) {
		this.cfg.applyConfig(config, true);
	}

	this.cfg.fireQueue();

	// OPERA HACK FOR MISWRAPPED FLOATS
	if (this.browser == "opera"){
		var fixWidth = function() {
			var startW = this.oDomContainer.offsetWidth;
			var w = 0;
			for (var p=0;p<this.pages.length;++p) {
				var cal = this.pages[p];
				w += cal.oDomContainer.offsetWidth;
			}
			if (w > 0) {
				this.oDomContainer.style.width = w + "px";
			}
		};
		this.renderEvent.subscribe(fixWidth,this,true);
	}
};


YAHOO.widget.CalendarGroup.prototype.setupConfig = function() {
	/**
	* The number of pages to include in the CalendarGroup. This value can only be set once, in the CalendarGroup's constructor arguments.
	* @config pages
	* @type Number
	* @default 2
	*/
	this.cfg.addProperty("pages", { value:2, validator:this.cfg.checkNumber, handler:this.configPages } );

	/**
	* The month/year representing the current visible Calendar date (mm/yyyy)
	* @config pagedate
	* @type String
	* @default today's date
	*/
	this.cfg.addProperty("pagedate", { value:new Date(), handler:this.configPageDate } );

	/**
	* The date or range of dates representing the current Calendar selection
	* @config selected
	* @type String
	* @default []
	*/
	this.cfg.addProperty("selected", { value:[], handler:this.delegateConfig } );

	/**
	* The title to display above the CalendarGroup's month header
	* @config title
	* @type String
	* @default ""
	*/
	this.cfg.addProperty("title", { value:"", handler:this.configTitle } );

	/**
	* Whether or not a close button should be displayed for this CalendarGroup
	* @config close
	* @type Boolean
	* @default false
	*/
	this.cfg.addProperty("close", { value:false, handler:this.configClose } );

	/**
	* Whether or not an iframe shim should be placed under the Calendar to prevent select boxes from bleeding through in Internet Explorer 6 and below.
	* @config iframe
	* @type Boolean
	* @default true
	*/
	this.cfg.addProperty("iframe", { value:true, handler:this.delegateConfig, validator:this.cfg.checkBoolean } );

	/**
	* The minimum selectable date in the current Calendar (mm/dd/yyyy)
	* @config mindate
	* @type String
	* @default null
	*/
	this.cfg.addProperty("mindate", { value:null, handler:this.delegateConfig } );

	/**
	* The maximum selectable date in the current Calendar (mm/dd/yyyy)
	* @config maxdate
	* @type String
	* @default null
	*/	
	this.cfg.addProperty("maxdate", { value:null, handler:this.delegateConfig  } );

	// Options properties

	/**
	* True if the Calendar should allow multiple selections. False by default.
	* @config MULTI_SELECT
	* @type Boolean
	* @default false
	*/
	this.cfg.addProperty("MULTI_SELECT",	{ value:false, handler:this.delegateConfig, validator:this.cfg.checkBoolean } );

	/**
	* The weekday the week begins on. Default is 0 (Sunday).
	* @config START_WEEKDAY
	* @type number
	* @default 0
	*/	
	this.cfg.addProperty("START_WEEKDAY",	{ value:0, handler:this.delegateConfig, validator:this.cfg.checkNumber  } );
	
	/**
	* True if the Calendar should show weekday labels. True by default.
	* @config SHOW_WEEKDAYS
	* @type Boolean
	* @default true
	*/	
	this.cfg.addProperty("SHOW_WEEKDAYS",	{ value:true, handler:this.delegateConfig, validator:this.cfg.checkBoolean } );
	
	/**
	* True if the Calendar should show week row headers. False by default.
	* @config SHOW_WEEK_HEADER
	* @type Boolean
	* @default false
	*/	
	this.cfg.addProperty("SHOW_WEEK_HEADER",{ value:false, handler:this.delegateConfig, validator:this.cfg.checkBoolean } );
	
	/**
	* True if the Calendar should show week row footers. False by default.
	* @config SHOW_WEEK_FOOTER
	* @type Boolean
	* @default false
	*/
	this.cfg.addProperty("SHOW_WEEK_FOOTER",{ value:false, handler:this.delegateConfig, validator:this.cfg.checkBoolean } );
	
	/**
	* True if the Calendar should suppress weeks that are not a part of the current month. False by default.
	* @config HIDE_BLANK_WEEKS
	* @type Boolean
	* @default false
	*/		
	this.cfg.addProperty("HIDE_BLANK_WEEKS",{ value:false, handler:this.delegateConfig, validator:this.cfg.checkBoolean } );
	
	/**
	* The image that should be used for the left navigation arrow.
	* @config NAV_ARROW_LEFT
	* @type String
	* @default YAHOO.widget.Calendar.IMG_ROOT + "us/tr/callt.gif"
	*/		
	this.cfg.addProperty("NAV_ARROW_LEFT",	{ value:YAHOO.widget.Calendar.IMG_ROOT + "us/tr/callt.gif", handler:this.delegateConfig } );
	
	/**
	* The image that should be used for the left navigation arrow.
	* @config NAV_ARROW_RIGHT
	* @type String
	* @default YAHOO.widget.Calendar.IMG_ROOT + "us/tr/calrt.gif"
	*/		
	this.cfg.addProperty("NAV_ARROW_RIGHT",	{ value:YAHOO.widget.Calendar.IMG_ROOT + "us/tr/calrt.gif", handler:this.delegateConfig } );

	// Locale properties
	
	/**
	* The short month labels for the current locale.
	* @config MONTHS_SHORT
	* @type String[]
	* @default ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
	*/
	this.cfg.addProperty("MONTHS_SHORT",	{ value:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], handler:this.delegateConfig } );
	
	/**
	* The long month labels for the current locale.
	* @config MONTHS_LONG
	* @type String[]
	* @default ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
	*/		
	this.cfg.addProperty("MONTHS_LONG",		{ value:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], handler:this.delegateConfig } );
	
	/**
	* The 1-character weekday labels for the current locale.
	* @config WEEKDAYS_1CHAR
	* @type String[]
	* @default ["S", "M", "T", "W", "T", "F", "S"]
	*/		
	this.cfg.addProperty("WEEKDAYS_1CHAR",	{ value:["S", "M", "T", "W", "T", "F", "S"], handler:this.delegateConfig } );
	
	/**
	* The short weekday labels for the current locale.
	* @config WEEKDAYS_SHORT
	* @type String[]
	* @default ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
	*/		
	this.cfg.addProperty("WEEKDAYS_SHORT",	{ value:["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], handler:this.delegateConfig } );
	
	/**
	* The medium weekday labels for the current locale.
	* @config WEEKDAYS_MEDIUM
	* @type String[]
	* @default ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
	*/		
	this.cfg.addProperty("WEEKDAYS_MEDIUM",	{ value:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], handler:this.delegateConfig } );
	
	/**
	* The long weekday labels for the current locale.
	* @config WEEKDAYS_LONG
	* @type String[]
	* @default ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
	*/		
	this.cfg.addProperty("WEEKDAYS_LONG",	{ value:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], handler:this.delegateConfig } );

	/**
	* The setting that determines which length of month labels should be used. Possible values are "short" and "long".
	* @config LOCALE_MONTHS
	* @type String
	* @default "long"
	*/
	this.cfg.addProperty("LOCALE_MONTHS",	{ value:"long", handler:this.delegateConfig } );

	/**
	* The setting that determines which length of weekday labels should be used. Possible values are "1char", "short", "medium", and "long".
	* @config LOCALE_WEEKDAYS
	* @type String
	* @default "short"
	*/	
	this.cfg.addProperty("LOCALE_WEEKDAYS",	{ value:"short", handler:this.delegateConfig } );

	/**
	* The value used to delimit individual dates in a date string passed to various Calendar functions.
	* @config DATE_DELIMITER
	* @type String
	* @default ","
	*/
	this.cfg.addProperty("DATE_DELIMITER",		{ value:",", handler:this.delegateConfig } );

	/**
	* The value used to delimit date fields in a date string passed to various Calendar functions.
	* @config DATE_FIELD_DELIMITER
	* @type String
	* @default "/"
	*/	
	this.cfg.addProperty("DATE_FIELD_DELIMITER",{ value:"/", handler:this.delegateConfig } );

	/**
	* The value used to delimit date ranges in a date string passed to various Calendar functions.
	* @config DATE_RANGE_DELIMITER
	* @type String
	* @default "-"
	*/
	this.cfg.addProperty("DATE_RANGE_DELIMITER",{ value:"-", handler:this.delegateConfig } );

	/**
	* The position of the month in a month/year date string
	* @config MY_MONTH_POSITION
	* @type Number
	* @default 1
	*/
	this.cfg.addProperty("MY_MONTH_POSITION",	{ value:1, handler:this.delegateConfig, validator:this.cfg.checkNumber } );
	
	/**
	* The position of the year in a month/year date string
	* @config MY_YEAR_POSITION
	* @type Number
	* @default 2
	*/	
	this.cfg.addProperty("MY_YEAR_POSITION",	{ value:2, handler:this.delegateConfig, validator:this.cfg.checkNumber } );
	
	/**
	* The position of the month in a month/day date string
	* @config MD_MONTH_POSITION
	* @type Number
	* @default 1
	*/	
	this.cfg.addProperty("MD_MONTH_POSITION",	{ value:1, handler:this.delegateConfig, validator:this.cfg.checkNumber } );
	
	/**
	* The position of the day in a month/year date string
	* @config MD_DAY_POSITION
	* @type Number
	* @default 2
	*/	
	this.cfg.addProperty("MD_DAY_POSITION",		{ value:2, handler:this.delegateConfig, validator:this.cfg.checkNumber } );
	
	/**
	* The position of the month in a month/day/year date string
	* @config MDY_MONTH_POSITION
	* @type Number
	* @default 1
	*/	
	this.cfg.addProperty("MDY_MONTH_POSITION",	{ value:1, handler:this.delegateConfig, validator:this.cfg.checkNumber } );
	
	/**
	* The position of the day in a month/day/year date string
	* @config MDY_DAY_POSITION
	* @type Number
	* @default 2
	*/	
	this.cfg.addProperty("MDY_DAY_POSITION",	{ value:2, handler:this.delegateConfig, validator:this.cfg.checkNumber } );
	
	/**
	* The position of the year in a month/day/year date string
	* @config MDY_YEAR_POSITION
	* @type Number
	* @default 3
	*/	
	this.cfg.addProperty("MDY_YEAR_POSITION",	{ value:3, handler:this.delegateConfig, validator:this.cfg.checkNumber } );

};

/**
* Initializes CalendarGroup's built-in CustomEvents
* @method initEvents
*/
YAHOO.widget.CalendarGroup.prototype.initEvents = function() {
	var me = this;

	/**
	* Proxy subscriber to subscribe to the CalendarGroup's child Calendars' CustomEvents
	* @method sub
	* @private
	* @param {Function} fn	The function to subscribe to this CustomEvent
	* @param {Object}	obj	The CustomEvent's scope object
	* @param {Boolean}	bOverride	Whether or not to apply scope correction
	*/
	var sub = function(fn, obj, bOverride) {
		for (var p=0;p<me.pages.length;++p) {
			var cal = me.pages[p];
			cal[this.type + "Event"].subscribe(fn, obj, bOverride);
		}
	};

	/**
	* Proxy unsubscriber to unsubscribe from the CalendarGroup's child Calendars' CustomEvents
	* @method unsub
	* @private
	* @param {Function} fn	The function to subscribe to this CustomEvent
	* @param {Object}	obj	The CustomEvent's scope object
	*/
	var unsub = function(fn, obj) {
		for (var p=0;p<me.pages.length;++p) {
			var cal = me.pages[p];
			cal[this.type + "Event"].unsubscribe(fn, obj);
		}
	};

	/**
	* Fired before a selection is made
	* @event beforeSelectEvent
	*/
	this.beforeSelectEvent = new YAHOO.util.CustomEvent("beforeSelect");
	this.beforeSelectEvent.subscribe = sub; this.beforeSelectEvent.unsubscribe = unsub;

	/**
	* Fired when a selection is made
	* @event selectEvent
	* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
	*/
	this.selectEvent = new YAHOO.util.CustomEvent("select"); 
	this.selectEvent.subscribe = sub; this.selectEvent.unsubscribe = unsub;

	/**
	* Fired before a selection is made
	* @event beforeDeselectEvent
	*/
	this.beforeDeselectEvent = new YAHOO.util.CustomEvent("beforeDeselect"); 
	this.beforeDeselectEvent.subscribe = sub; this.beforeDeselectEvent.unsubscribe = unsub;

	/**
	* Fired when a selection is made
	* @event deselectEvent
	* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
	*/
	this.deselectEvent = new YAHOO.util.CustomEvent("deselect"); 
	this.deselectEvent.subscribe = sub; this.deselectEvent.unsubscribe = unsub;
	
	/**
	* Fired when the Calendar page is changed
	* @event changePageEvent
	*/
	this.changePageEvent = new YAHOO.util.CustomEvent("changePage"); 
	this.changePageEvent.subscribe = sub; this.changePageEvent.unsubscribe = unsub;

	/**
	* Fired before the Calendar is rendered
	* @event beforeRenderEvent
	*/
	this.beforeRenderEvent = new YAHOO.util.CustomEvent("beforeRender");
	this.beforeRenderEvent.subscribe = sub; this.beforeRenderEvent.unsubscribe = unsub;

	/**
	* Fired when the Calendar is rendered
	* @event renderEvent
	*/
	this.renderEvent = new YAHOO.util.CustomEvent("render");
	this.renderEvent.subscribe = sub; this.renderEvent.unsubscribe = unsub;

	/**
	* Fired when the Calendar is reset
	* @event resetEvent
	*/
	this.resetEvent = new YAHOO.util.CustomEvent("reset"); 
	this.resetEvent.subscribe = sub; this.resetEvent.unsubscribe = unsub;

	/**
	* Fired when the Calendar is cleared
	* @event clearEvent
	*/
	this.clearEvent = new YAHOO.util.CustomEvent("clear");
	this.clearEvent.subscribe = sub; this.clearEvent.unsubscribe = unsub;

};

/**
* The default Config handler for the "pages" property
* @method configPages
* @param {String} type	The CustomEvent type (usually the property name)
* @param {Object[]}	args	The CustomEvent arguments. For configuration handlers, args[0] will equal the newly applied value for the property.
* @param {Object} obj	The scope object. For configuration handlers, this will usually equal the owner.
*/
YAHOO.widget.CalendarGroup.prototype.configPages = function(type, args, obj) {
	var pageCount = args[0];

	for (var p=0;p<pageCount;++p) {
		var calId = this.id + "_" + p;
		var calContainerId = this.containerId + "_" + p;

		var childConfig = this.cfg.getConfig();
		childConfig.close = false;
		childConfig.title = false;

		var cal = this.constructChild(calId, calContainerId, childConfig);
		var caldate = cal.cfg.getProperty("pagedate");
		caldate.setMonth(caldate.getMonth()+p);
		cal.cfg.setProperty("pagedate", caldate);
		
		YAHOO.util.Dom.removeClass(cal.oDomContainer, this.Style.CSS_SINGLE);
		YAHOO.util.Dom.addClass(cal.oDomContainer, "groupcal");
		
		if (p===0) {
			YAHOO.util.Dom.addClass(cal.oDomContainer, "first");
		}

		if (p==(pageCount-1)) {
			YAHOO.util.Dom.addClass(cal.oDomContainer, "last");
		}
		
		cal.parent = this;
		cal.index = p; 

		this.pages[this.pages.length] = cal;
	}
};

/**
* The default Config handler for the "pagedate" property
* @method configPageDate
* @param {String} type	The CustomEvent type (usually the property name)
* @param {Object[]}	args	The CustomEvent arguments. For configuration handlers, args[0] will equal the newly applied value for the property.
* @param {Object} obj	The scope object. For configuration handlers, this will usually equal the owner.
*/
YAHOO.widget.CalendarGroup.prototype.configPageDate = function(type, args, obj) {
	var val = args[0];

	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.cfg.setProperty("pagedate", val);
		var calDate = cal.cfg.getProperty("pagedate");
		calDate.setMonth(calDate.getMonth()+p);
	}
};

/**
* Delegates a configuration property to the CustomEvents associated with the CalendarGroup's children
* @method delegateConfig
* @param {String} type	The CustomEvent type (usually the property name)
* @param {Object[]}	args	The CustomEvent arguments. For configuration handlers, args[0] will equal the newly applied value for the property.
* @param {Object} obj	The scope object. For configuration handlers, this will usually equal the owner.
*/
YAHOO.widget.CalendarGroup.prototype.delegateConfig = function(type, args, obj) {
	var val = args[0];
	var cal;

	for (var p=0;p<this.pages.length;p++) {
		cal = this.pages[p];
		cal.cfg.setProperty(type, val);
	}
};


/**
* Adds a function to all child Calendars within this CalendarGroup.
* @method setChildFunction
* @param {String}		fnName		The name of the function
* @param {Function}		fn			The function to apply to each Calendar page object
*/
YAHOO.widget.CalendarGroup.prototype.setChildFunction = function(fnName, fn) {
	var pageCount = this.cfg.getProperty("pages");

	for (var p=0;p<pageCount;++p) {
		this.pages[p][fnName] = fn;
	}
};

/**
* Calls a function within all child Calendars within this CalendarGroup.
* @method callChildFunction
* @param {String}		fnName		The name of the function
* @param {Array}		args		The arguments to pass to the function
*/
YAHOO.widget.CalendarGroup.prototype.callChildFunction = function(fnName, args) {
	var pageCount = this.cfg.getProperty("pages");

	for (var p=0;p<pageCount;++p) {
		var page = this.pages[p];
		if (page[fnName]) {
			var fn = page[fnName];
			fn.call(page, args);
		}
	}	
};

/**
* Constructs a child calendar. This method can be overridden if a subclassed version of the default
* calendar is to be used.
* @method constructChild
* @param {String}	id			The id of the table element that will represent the calendar widget
* @param {String}	containerId	The id of the container div element that will wrap the calendar table
* @param {Object}	config		The configuration object containing the Calendar's arguments
* @return {YAHOO.widget.Calendar}	The YAHOO.widget.Calendar instance that is constructed
*/
YAHOO.widget.CalendarGroup.prototype.constructChild = function(id,containerId,config) {
	var container = document.getElementById(containerId);
	if (! container) {
		container = document.createElement("div");
		container.id = containerId;
		this.oDomContainer.appendChild(container);
	}
	return new YAHOO.widget.Calendar(id,containerId,config);
};


/**
* Sets the calendar group's month explicitly. This month will be set into the first
* page of the multi-page calendar, and all other months will be iterated appropriately.
* @method setMonth
* @param {Number}	month		The numeric month, from 0 (January) to 11 (December)
*/
YAHOO.widget.CalendarGroup.prototype.setMonth = function(month) {
	month = parseInt(month, 10);

	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.setMonth(month+p);
	}
};

/**
* Sets the calendar group's year explicitly. This year will be set into the first
* page of the multi-page calendar, and all other months will be iterated appropriately.
* @method setYear
* @param {Number}	year		The numeric 4-digit year
*/
YAHOO.widget.CalendarGroup.prototype.setYear = function(year) {
	year = parseInt(year, 10);

	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		var pageDate = cal.cfg.getProperty("pageDate");

		if ((pageDate.getMonth()+1) == 1 && p>0) {
			year+=1;
		}
		cal.setYear(year);
	}
};
/**
* Calls the render function of all child calendars within the group.
* @method render
*/
YAHOO.widget.CalendarGroup.prototype.render = function() {
	this.renderHeader();
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.render();
	}
	this.renderFooter();
};

/**
* Selects a date or a collection of dates on the current calendar. This method, by default,
* does not call the render method explicitly. Once selection has completed, render must be 
* called for the changes to be reflected visually.
* @method select
* @param	{String/Date/Date[]}	date	The date string of dates to select in the current calendar. Valid formats are
*								individual date(s) (12/24/2005,12/26/2005) or date range(s) (12/24/2005-1/1/2006).
*								Multiple comma-delimited dates can also be passed to this method (12/24/2005,12/11/2005-12/13/2005).
*								This method can also take a JavaScript Date object or an array of Date objects.
* @return	{Date[]}			Array of JavaScript Date objects representing all individual dates that are currently selected.
*/
YAHOO.widget.CalendarGroup.prototype.select = function(date) {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.select(date);
	}
	return this.getSelectedDates();
};

/**
* Selects a date on the current calendar by referencing the index of the cell that should be selected.
* This method is used to easily select a single cell (usually with a mouse click) without having to do
* a full render. The selected style is applied to the cell directly.
* @method selectCell
* @param	{Number}	cellIndex	The index of the cell to select in the current calendar. 
* @return	{Date[]}	Array of JavaScript Date objects representing all individual dates that are currently selected.
*/
YAHOO.widget.CalendarGroup.prototype.selectCell = function(cellIndex) {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.selectCell(cellIndex);
	}
	return this.getSelectedDates();
};

/**
* Deselects a date or a collection of dates on the current calendar. This method, by default,
* does not call the render method explicitly. Once deselection has completed, render must be 
* called for the changes to be reflected visually.
* @method deselect
* @param	{String/Date/Date[]}	date	The date string of dates to deselect in the current calendar. Valid formats are
*								individual date(s) (12/24/2005,12/26/2005) or date range(s) (12/24/2005-1/1/2006).
*								Multiple comma-delimited dates can also be passed to this method (12/24/2005,12/11/2005-12/13/2005).
*								This method can also take a JavaScript Date object or an array of Date objects.	
* @return	{Date[]}			Array of JavaScript Date objects representing all individual dates that are currently selected.
*/
YAHOO.widget.CalendarGroup.prototype.deselect = function(date) {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.deselect(date);
	}
	return this.getSelectedDates();
};

/**
* Deselects all dates on the current calendar.
* @method deselectAll
* @return {Date[]}		Array of JavaScript Date objects representing all individual dates that are currently selected.
*						Assuming that this function executes properly, the return value should be an empty array.
*						However, the empty array is returned for the sake of being able to check the selection status
*						of the calendar.
*/
YAHOO.widget.CalendarGroup.prototype.deselectAll = function() {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.deselectAll();
	}
	return this.getSelectedDates();
};

/**
* Deselects a date on the current calendar by referencing the index of the cell that should be deselected.
* This method is used to easily deselect a single cell (usually with a mouse click) without having to do
* a full render. The selected style is removed from the cell directly.
* @method deselectCell
* @param	{Number}	cellIndex	The index of the cell to deselect in the current calendar. 
* @return	{Date[]}	Array of JavaScript Date objects representing all individual dates that are currently selected.
*/
YAHOO.widget.CalendarGroup.prototype.deselectCell = function(cellIndex) {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.deselectCell(cellIndex);
	}
	return this.getSelectedDates();
};

/**
* Resets the calendar widget to the originally selected month and year, and 
* sets the calendar to the initial selection(s).
* @method reset
*/
YAHOO.widget.CalendarGroup.prototype.reset = function() {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.reset();
	}
};

/**
* Clears the selected dates in the current calendar widget and sets the calendar
* to the current month and year.
* @method clear
*/
YAHOO.widget.CalendarGroup.prototype.clear = function() {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.clear();
	}
};

/**
* Navigates to the next month page in the calendar widget.
* @method nextMonth
*/
YAHOO.widget.CalendarGroup.prototype.nextMonth = function() {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.nextMonth();
	}
};

/**
* Navigates to the previous month page in the calendar widget.
* @method previousMonth
*/
YAHOO.widget.CalendarGroup.prototype.previousMonth = function() {
	for (var p=this.pages.length-1;p>=0;--p) {
		var cal = this.pages[p];
		cal.previousMonth();
	}
};

/**
* Navigates to the next year in the currently selected month in the calendar widget.
* @method nextYear
*/
YAHOO.widget.CalendarGroup.prototype.nextYear = function() {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.nextYear();
	}
};

/**
* Navigates to the previous year in the currently selected month in the calendar widget.
* @method previousYear
*/
YAHOO.widget.CalendarGroup.prototype.previousYear = function() {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.previousYear();
	}
};


/**
* Gets the list of currently selected dates from the calendar.
* @return			An array of currently selected JavaScript Date objects.
* @type Date[]
*/
YAHOO.widget.CalendarGroup.prototype.getSelectedDates = function() { 
	var returnDates = [];
	var selected = this.cfg.getProperty("selected");

	for (var d=0;d<selected.length;++d) {
		var dateArray = selected[d];

		var date = new Date(dateArray[0],dateArray[1]-1,dateArray[2]);
		returnDates.push(date);
	}

	returnDates.sort( function(a,b) { return a-b; } );
	return returnDates;
};

/**
* Adds a renderer to the render stack. The function reference passed to this method will be executed
* when a date cell matches the conditions specified in the date string for this renderer.
* @method addRenderer
* @param	{String}	sDates		A date string to associate with the specified renderer. Valid formats
*									include date (12/24/2005), month/day (12/24), and range (12/1/2004-1/1/2005)
* @param	{Function}	fnRender	The function executed to render cells that match the render rules for this renderer.
*/
YAHOO.widget.CalendarGroup.prototype.addRenderer = function(sDates, fnRender) {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.addRenderer(sDates, fnRender);
	}
};

/**
* Adds a month to the render stack. The function reference passed to this method will be executed
* when a date cell matches the month passed to this method.
* @method addMonthRenderer
* @param	{Number}	month		The month (1-12) to associate with this renderer
* @param	{Function}	fnRender	The function executed to render cells that match the render rules for this renderer.
*/
YAHOO.widget.CalendarGroup.prototype.addMonthRenderer = function(month, fnRender) {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.addMonthRenderer(month, fnRender);
	}
};

/**
* Adds a weekday to the render stack. The function reference passed to this method will be executed
* when a date cell matches the weekday passed to this method.
* @method addWeekdayRenderer
* @param	{Number}	weekday		The weekday (0-6) to associate with this renderer
* @param	{Function}	fnRender	The function executed to render cells that match the render rules for this renderer.
*/
YAHOO.widget.CalendarGroup.prototype.addWeekdayRenderer = function(weekday, fnRender) {
	for (var p=0;p<this.pages.length;++p) {
		var cal = this.pages[p];
		cal.addWeekdayRenderer(weekday, fnRender);
	}
};

/**
* Renders the header for the CalendarGroup.
* @method renderHeader
*/
YAHOO.widget.CalendarGroup.prototype.renderHeader = function() {};

/**
* Renders a footer for the 2-up calendar container. By default, this method is
* unimplemented.
* @method renderFooter
*/
YAHOO.widget.CalendarGroup.prototype.renderFooter = function() {};

/**
* Adds the designated number of months to the current calendar month, and sets the current
* calendar page date to the new month.
* @method addMonths
* @param {Number}	count	The number of months to add to the current calendar
*/
YAHOO.widget.CalendarGroup.prototype.addMonths = function(count) {
	this.callChildFunction("addMonths", count);
};


/**
* Subtracts the designated number of months from the current calendar month, and sets the current
* calendar page date to the new month.
* @method subtractMonths
* @param {Number}	count	The number of months to subtract from the current calendar
*/
YAHOO.widget.CalendarGroup.prototype.subtractMonths = function(count) {
	this.callChildFunction("subtractMonths", count);
};

/**
* Adds the designated number of years to the current calendar, and sets the current
* calendar page date to the new month.
* @method addYears
* @param {Number}	count	The number of years to add to the current calendar
*/
YAHOO.widget.CalendarGroup.prototype.addYears = function(count) {
	this.callChildFunction("addYears", count);
};

/**
* Subtcats the designated number of years from the current calendar, and sets the current
* calendar page date to the new month.
* @method subtractYears
* @param {Number}	count	The number of years to subtract from the current calendar
*/
YAHOO.widget.CalendarGroup.prototype.subtractYears = function(count) {
	this.callChildFunction("subtractYears", count);
};

/**
* CSS class representing the container for the calendar
* @property YAHOO.widget.CalendarGroup.CSS_CONTAINER
* @static
* @final
* @type String
*/
YAHOO.widget.CalendarGroup.CSS_CONTAINER = "yui-calcontainer";

/**
* CSS class representing the container for the calendar
* @property YAHOO.widget.CalendarGroup.CSS_MULTI_UP
* @static
* @final
* @type String
*/
YAHOO.widget.CalendarGroup.CSS_MULTI_UP = "multi";

/**
* CSS class representing the title for the 2-up calendar
* @property YAHOO.widget.CalendarGroup.CSS_2UPTITLE
* @static
* @final
* @type String
*/
YAHOO.widget.CalendarGroup.CSS_2UPTITLE = "title";

/**
* CSS class representing the close icon for the 2-up calendar
* @property YAHOO.widget.CalendarGroup.CSS_2UPCLOSE
* @static
* @final
* @type String
*/
YAHOO.widget.CalendarGroup.CSS_2UPCLOSE = "close-icon";

YAHOO.augment(YAHOO.widget.CalendarGroup, YAHOO.widget.Calendar, "buildDayLabel",
																 "buildMonthLabel",
																 "renderOutOfBoundsDate",
																 "renderRowHeader",
																 "renderRowFooter",
																 "renderCellDefault",
																 "styleCellDefault",
																 "renderCellStyleHighlight1",
																 "renderCellStyleHighlight2",
																 "renderCellStyleHighlight3",
																 "renderCellStyleHighlight4",
																 "renderCellStyleToday",
																 "renderCellStyleSelected",
																 "renderCellNotThisMonth",
																 "renderBodyCellRestricted",
																 "initStyles",
																 "configTitle",
																 "configClose",
																 "hide",
																 "show",
																 "browser");

/**
* Returns a string representation of the object.
* @method toString
* @return {String}	A string representation of the CalendarGroup object.
*/
YAHOO.widget.CalendarGroup.prototype.toString = function() {
	return "CalendarGroup " + this.id;
};

YAHOO.widget.CalGrp = YAHOO.widget.CalendarGroup;

/**
* @class YAHOO.widget.Calendar2up
* @extends YAHOO.widget.CalendarGroup
* @deprecated The old Calendar2up class is no longer necessary, since CalendarGroup renders in a 2up view by default.
*/
YAHOO.widget.Calendar2up = function(id, containerId, config) {
	this.init(id, containerId, config);
};

YAHOO.extend(YAHOO.widget.Calendar2up, YAHOO.widget.CalendarGroup);

/**
* @deprecated The old Calendar2up class is no longer necessary, since CalendarGroup renders in a 2up view by default.
*/
YAHOO.widget.Cal2up = YAHOO.widget.Calendar2up;

Copyright © 2006 Yahoo! Inc. All rights reserved.
Download Mp3/Mp3 MusicTop Chartsdownload Guns N\ Roses music lyricdownload The Raconteurs music lyricdownload Nina Simone music lyricdownload The Cure music lyricdownload Pendulum music lyricdownload Barenaked Ladies music lyricdownload Spiritualized music lyricdownload The Beach Boys music lyricdownload Natasha Bedingfield music lyricdownload Def Leppard music lyricdownload Gabriella Cilmi music lyricdownload Red Hot Chili Peppers music lyricdownload Toby Keith music lyricdownload Nickelback music lyricdownload Flobots music lyricdownload Tom Waits music lyricdownload Sara Bareilles music lyricdownload Kanye West music lyricdownload Eric Clapton music lyricdownload Fleetwood Mac music lyricdownload Stevie Wonder music lyricdownload Elton John music lyricdownload Fleet Foxes music lyricdownload Sam Sparro music lyricdownload Depeche Mode music lyricspread

spread

tree gave

gave

two else

else

set wish

wish

train ground

ground

stick gold

gold

crop walk

walk

chord brought

brought

stead life

life

stick natural

natural

opposite planet

planet

instant huge

huge

follow answer

answer

blow current

current

contain person

person

told white

white

until warm

warm

arrange mount

mount

hold eat

eat

week cloud

cloud

cool wall

wall

rope fall

fall

fun blue

blue

column art

art

evening surface

surface

burn slow

slow

color death

death

grass weight

weight

wing watch

watch

town beat

beat

picture this

this

many room

room

sleep spot

spot

war possible

possible

have change

change

provide locate

locate

shoe color

color

ran feet

feet

sure gas

gas

should melody

melody

rain long

long

see probable

probable

shoulder fair

fair

bank heavy

heavy

skill spoke

spoke

board except

except

surprise high

high

nature he

he

box heat

heat

blood high

high

push
Download Mp3/Mp3 MusicTop Chartsdownload Guns N\ Roses music lyricdownload The Raconteurs music lyricdownload Nina Simone music lyricdownload The Cure music lyricdownload Pendulum music lyricdownload Barenaked Ladies music lyricdownload Spiritualized music lyricdownload The Beach Boys music lyricdownload Natasha Bedingfield music lyricdownload Def Leppard music lyricdownload Gabriella Cilmi music lyricdownload Red Hot Chili Peppers music lyricdownload Toby Keith music lyricdownload Nickelback music lyricdownload Flobots music lyricdownload Tom Waits music lyricdownload Sara Bareilles music lyricdownload Kanye West music lyricdownload Eric Clapton music lyricdownload Fleetwood Mac music lyricdownload Stevie Wonder music lyricdownload Elton John music lyricdownload Fleet Foxes music lyricdownload Sam Sparro music lyricdownload Depeche Mode music lyricchinese upskirt sexy panties

chinese upskirt sexy panties

measure gloryhole blowjobs

gloryhole blowjobs

floor swing dance patterns

swing dance patterns

rich korean teen models

korean teen models

sell penis whipping

penis whipping

clean naked black anul sex

naked black anul sex

brother colibri strip club

colibri strip club

depend gay brown jones

gay brown jones

fish pain and pleasure stories

pain and pleasure stories

repeat vibrating sensation left breast

vibrating sensation left breast

control jacksonhole wyoming dick cheny

jacksonhole wyoming dick cheny

blow naked continent

naked continent

nine anateur porn

anateur porn

children corazon bondage

corazon bondage

degree gay school teacher porn

gay school teacher porn

mile round white butts

round white butts

crop gay teenage boys cum

gay teenage boys cum

soldier beauty contest handbook

beauty contest handbook

insect thai sex dvd

thai sex dvd

teeth bloody ejaculation from women

bloody ejaculation from women

noise fake nude photo

fake nude photo

planet old fashioned spanking

old fashioned spanking

bank high knob lookout tower

high knob lookout tower

branch movie enola gay

movie enola gay

flow nude teen free vids

nude teen free vids

key hot nude girls suck

hot nude girls suck

fish bleach hentai ganju

bleach hentai ganju

ran nude alex meneses

nude alex meneses

forest native american cunt

native american cunt

represent gay and star trek

gay and star trek

pick gay pron database

gay pron database

am shirtless farmboys

shirtless farmboys

nothing chachamaru hentai

chachamaru hentai

way vaginal fisting porn

vaginal fisting porn

knew akron ohio strip clubs

akron ohio strip clubs

very teen gays

teen gays

store laminin benjamin cummings

laminin benjamin cummings

you nude youhg models

nude youhg models

gun hot naked girls nude

hot naked girls nude

parent trannys escorts vancouver

trannys escorts vancouver

west teen angel torrent

teen angel torrent

true . spreading ebony pussylips

spreading ebony pussylips

I breast vid

breast vid

tire orgasm blackout

orgasm blackout

company topless hunks

topless hunks

white jane s nylons

jane s nylons

this alexis in love

alexis in love

colony big booty mature women

big booty mature women

why gyno appoinment porn

gyno appoinment porn

wind woman who fuck dog

woman who fuck dog

fun cumming inside mouth

cumming inside mouth

original betsey johnson kiss

betsey johnson kiss

thus handjob tit cum

handjob tit cum

stay border porn

border porn

example lesbian teacher videos at

lesbian teacher videos at

animal strapon tgp free

strapon tgp free

bottom sperm reabsorbed

sperm reabsorbed

answer interracial dating in maryland

interracial dating in maryland

picture peanut oil beauty secrets

peanut oil beauty secrets

basic girls on donkeys nude

girls on donkeys nude

send teen titans porn robin

teen titans porn robin

fruit tweenie twat

tweenie twat

spring mature yhong

mature yhong

full couples name display pictures

couples name display pictures

straight joanna christie naked

joanna christie naked

good pemela anderson sex vidoes

pemela anderson sex vidoes

planet angel model nude

angel model nude

eye crystal meth sexual dysfunction

crystal meth sexual dysfunction

hurry diaries of a milf

diaries of a milf

eye amateur bride pics

amateur bride pics

general xxx teen hitchhikers

xxx teen hitchhikers

voice working couples toddler

working couples toddler

talk elkhart chuch passion play

elkhart chuch passion play

teeth vids of men showering

vids of men showering

cold celebrities sucking dick

celebrities sucking dick

science his fist dick

his fist dick

complete ukraine nude babes

ukraine nude babes

got nude latina bitches

nude latina bitches

won't navarre fl escorts

navarre fl escorts

tree handjob torrents

handjob torrents

rose southaven singles

southaven singles

does blonde skinny teen fucked

blonde skinny teen fucked

color eat pussy

eat pussy

with sydney white nude pictures

sydney white nude pictures

above cashmere s porn movies

cashmere s porn movies

nature hot campus teens summer

hot campus teens summer

tie under ground porn

under ground porn

middle britney s topless pool romp

britney s topless pool romp

sky fatty crab new york

fatty crab new york

fat black dogging pics

black dogging pics

take sex gray daddy

sex gray daddy

bit felicia darkstalkers nude

felicia darkstalkers nude

past filthy sluts in pantyhose

filthy sluts in pantyhose

chord nude public sex

nude public sex

silent suzi nylons

suzi nylons

iron coeds cash

coeds cash

heard chelsea charms nude video

chelsea charms nude video

dark gay first timwe

gay first timwe

control bib tits anime girls

bib tits anime girls

before topless girls dancing

topless girls dancing

mix tantric gallery

tantric gallery

on big latina booty

big latina booty

soil female celeberity nude photos

female celeberity nude photos

job true golf swing

true golf swing

nor 90 pound nudes girls

90 pound nudes girls

temperature breast cancer l a

breast cancer l a

board geli and hitler s relationship

geli and hitler s relationship

band christian brothers academy sex

christian brothers academy sex

noise principles of pleasure

principles of pleasure

dad naked women seducing men

naked women seducing men

metal stepsister brother sex

stepsister brother sex

enemy interratial creampie teens

interratial creampie teens

sudden demisis bbw

demisis bbw

develop carrie mature

carrie mature

climb anal sandwich

anal sandwich

often wrestling women naked lesbian

wrestling women naked lesbian

kept satin bbw powerbosom

satin bbw powerbosom

woman nextdoor housewives

nextdoor housewives

slip asian teen whores

asian teen whores

shell woodland spycam

woodland spycam

charge college humor boobs

college humor boobs

farm gay boys barnstaple

gay boys barnstaple

back kincardine sex girls

kincardine sex girls

sat karen designs sissy

karen designs sissy

object redhead tittie fuck

redhead tittie fuck

tone kinky gay bareback

kinky gay bareback

tell escorts colchester uk

escorts colchester uk

most depantsing girls underwear

depantsing girls underwear

sister japanese videos train sex

japanese videos train sex

real escort amy taylor

escort amy taylor

ask tar strip leak stop

tar strip leak stop

among astrology relationship advice

astrology relationship advice

wait lovely camel toe pics

lovely camel toe pics

print big titties for free

big titties for free

plan weiser door knob

weiser door knob

care spanked asshole

spanked asshole

force rapid strip

rapid strip

bring naked classy girl

naked classy girl

thin phoenix escorts craigslist

phoenix escorts craigslist

brother shana ryder squirts

shana ryder squirts

once sexy mature black woman

sexy mature black woman

any tgp porn sites

tgp porn sites

night big mature tits gallery

big mature tits gallery

during leather gay male pic

leather gay male pic

help dildo machine sex movies

dildo machine sex movies

represent guys having sex animals

guys having sex animals

wild water squirt pistol

water squirt pistol

motion discovery channel sperm whales

discovery channel sperm whales

break cgiworld webcam

cgiworld webcam

box cumshots japan

cumshots japan

garden german pussys

german pussys

neighbor hentai game werewolf girl

hentai game werewolf girl

object screwing mature moms

screwing mature moms

check sex in bath video

sex in bath video

any lesbians under the table

lesbians under the table

language maui escort services

maui escort services

person clinch studs

clinch studs

wild amateur anal casting couch

amateur anal casting couch

year phat wt pussy

phat wt pussy

figure teenie fucks

teenie fucks

cloud huntsville alabama independent escorts

huntsville alabama independent escorts

her nude firemen

nude firemen

yet amateur gay gallerys

amateur gay gallerys

count bondage 4 free

bondage 4 free

stop nude mother and baby

nude mother and baby

double chicago elete escort agency

chicago elete escort agency

cell la amatuer fuck fest

la amatuer fuck fest

cold susan moss lesbian

susan moss lesbian

took sexy nude guy

sexy nude guy

push sarah bereilles love song

sarah bereilles love song

century self suck password

self suck password

move victoria beckham pussy

victoria beckham pussy

fresh network virgin media box

network virgin media box

water bdsm adult greeting cards

bdsm adult greeting cards

lost nude naked macon woman

nude naked macon woman

crop amateur pantyhsoe poses

amateur pantyhsoe poses

mean mature ass fucking whores

mature ass fucking whores

hour guilt teen issues

guilt teen issues

them teen brunettes nude

teen brunettes nude

music planet katie shows pussy

planet katie shows pussy

money fit strips

fit strips

day annalynne mccord nude pics

annalynne mccord nude pics

reply jeremy piven gay

jeremy piven gay

brother blonde cum party

blonde cum party

since amatuer home movies porn

amatuer home movies porn

colony mature women in heels

mature women in heels

crease lindsey martin naked

lindsey martin naked

nose alice mcgee nude patch

alice mcgee nude patch

least self injury dating

self injury dating

neck pictures naked teenager girls

pictures naked teenager girls

came virgin gorda not beaches

virgin gorda not beaches

fear traverse city mi counseling

traverse city mi counseling

lady baseball six sucker bet

baseball six sucker bet

than porn post tube

porn post tube

like party hardcore ideo

party hardcore ideo

market anime porn ames

anime porn ames

side trannie fuck girl

trannie fuck girl

move sex with cocaine

sex with cocaine

guess suck slave girls

suck slave girls

planet nipples drummer

nipples drummer

property bedava seks videolari

bedava seks videolari

nor april bangbros password

april bangbros password

you gagging cat

gagging cat

collect types of foreplay

types of foreplay

record winnie the pooh invitation

winnie the pooh invitation

country scot condom joke

scot condom joke

meet clay jugs

clay jugs

reply catawba sex offenders

catawba sex offenders

live horseback nude riding bareback

horseback nude riding bareback

bought fantasia porn actress

fantasia porn actress

crease nude celebraties pics

nude celebraties pics

middle william levy naked

william levy naked

street jerk off in underwear

jerk off in underwear

listen apple bottom booties

apple bottom booties

certain pornstar soleil myspace

pornstar soleil myspace

anger do you wear underwear

do you wear underwear

type meet brazilian shemales

meet brazilian shemales

short wife double penetration stories

wife double penetration stories

care tony marsh rugby naked

tony marsh rugby naked

mouth 3 d lesbian anime girls

3 d lesbian anime girls

raise steve howey nude

steve howey nude

big hairy gay fucking

hairy gay fucking

syllable love and sex horoscopes

love and sex horoscopes

real maid fuck xxx porn

maid fuck xxx porn

think ameture teen male chests

ameture teen male chests

brought liota fuck

liota fuck

word funny naughty rude pictures

funny naughty rude pictures

off sorority pledge spanking

sorority pledge spanking

south one peice hentai movie

one peice hentai movie

plural latina fuck flix

latina fuck flix

true . katie weiss sex

katie weiss sex

hat gallon jugs igloo directions

gallon jugs igloo directions

at xxx video streams

xxx video streams

sudden gay naked bodies

gay naked bodies

question animal sex pics

animal sex pics

class jewish girl escort poppy

jewish girl escort poppy

sat sex role playing games

sex role playing games

shall evenflo safety gate swing

evenflo safety gate swing

with index sex rendezvous

index sex rendezvous

true . mason marconi nude

mason marconi nude

shout boy jizz

boy jizz

sharp funny naughty rhymes

funny naughty rhymes

end
great great watch surface surface noise surprise surprise moon add add any sat sat town an an north experience experience bat tiny tiny receive together together break famous famous leave under under shoulder too too few fast fast afraid that that we led led seat watch watch got ring ring tall teach teach only a a ball fruit fruit dress card card knew tall tall tool region region side energy energy any never never little test test tool on on led mile mile wood bed bed tree what what brought sense sense motion modern modern wrote big big sheet inch inch will cold cold continent day day trouble reply reply back fresh fresh man cent cent road mile mile before rose rose enough neighbor neighbor door neck neck picture street street keep please please poem wide wide paragraph broke broke ring guide guide capital fight fight tree push push set may may quotient friend friend chief poem poem tiny corner corner ride grass grass final next next rest five five soil record record above differ differ they no no snow pretty pretty rise don't don't face tell tell cotton feet feet numeral winter winter shine sent sent skill
parasite hentai parasite hentai supply transvestite bulletin board orlando transvestite bulletin board orlando life thonged bikines thonged bikines quick nude actress south indian nude actress south indian king gay naturist gallery gay naturist gallery master extraterrestrial sex fetish extraterrestrial sex fetish planet squirt queens 8 squirt queens 8 got oral sex positions pictures oral sex positions pictures lone juliette rose naked juliette rose naked too gay resorts carribean gay resorts carribean equate porn trivia games porn trivia games apple linda hogan nudes linda hogan nudes rain eva longori nude eva longori nude world celeb clips nude celeb clips nude born trailer park wives pics trailer park wives pics young forth worth teen scene forth worth teen scene village hot tight streaming pussy hot tight streaming pussy lay naked girls surfing naked girls surfing farm caulate your love caulate your love check loves park il library loves park il library wing casual chick ladies pants casual chick ladies pants reason silk insulated underwear silk insulated underwear character facial abuse julie facial abuse julie book danica patric nude danica patric nude wood anal cum eater anal cum eater once ignore sexual harassment california ignore sexual harassment california noon hallet berry sex hallet berry sex heat sex non circumcised sex non circumcised similar pics of topless wives pics of topless wives same pussy filled japanese cum pussy filled japanese cum hot nipple piercing video nipple piercing video may love peom distance love peom distance late thong bikini italy thong bikini italy product sex at iit sex at iit stop fondling breasts pics fondling breasts pics light dating daisy bb pistols dating daisy bb pistols see bares gay montevideo bares gay montevideo neck dogging granny dogging granny color jean madeline beauty school jean madeline beauty school much nude and fucking girls nude and fucking girls camp trashy hooker fuck movies trashy hooker fuck movies wing porn star wine porn star wine measure is alicia keys lesbian is alicia keys lesbian segment ireland escorted travel ireland escorted travel laugh big dog escort review big dog escort review language baby swing reviews baby swing reviews cause gina rose love spells gina rose love spells after declaration of love declaration of love told famous transgender famous transgender favor jello black bbw jello black bbw like mall sex mall sex soon escort sindi escort sindi until sex on backseat sex on backseat develop mature sexy nude women mature sexy nude women office dick smith photography nh dick smith photography nh never mature pussy pic gallery mature pussy pic gallery hour tigger punching a teen tigger punching a teen catch geri bangbus geri bangbus fraction budapest live porn budapest live porn complete gagging burping gagging burping shore xj9 porn nickelodeon xj9 porn nickelodeon ago red hot porn streaming red hot porn streaming result america idol topless america idol topless system ethnic chubby daddies ethnic chubby daddies bad hog water nipple hog water nipple except annual student strip show annual student strip show remember amateur girlfriend pics amateur girlfriend pics note superdog animal porn video superdog animal porn video may naked women triathalon naked women triathalon on e vancamp nude pics e vancamp nude pics time latina sperm swallow latina sperm swallow process naked trucker lady mudflaps naked trucker lady mudflaps foot tips orgasms tips orgasms send sandra bullock sex clips sandra bullock sex clips which xxx lesbian pornxxx xxx lesbian pornxxx gun japanese lesbian orgasm videos japanese lesbian orgasm videos sit gay male castration stories gay male castration stories in local escort review boards local escort review boards by white naked ladys x white naked ladys x after hardcore fucking xxx free hardcore fucking xxx free excite seattle gay press seattle gay press mount yakuza wives burning desires yakuza wives burning desires is transvestite lovers transvestite lovers hope sicily escorted tours sicily escorted tours quite naked dancing skeleton naked dancing skeleton cost ebony pov ebony pov is 247 hentai 247 hentai first big dick black trannys big dick black trannys man teenie thong fuck teenie thong fuck can nude redhead video nude redhead video slip teen lockdown teen lockdown road makeshift male sex toys makeshift male sex toys boy discount underwear discount underwear job teen porno galleires teen porno galleires job nn blowjob nn blowjob then porn txt sites porn txt sites solve euro nudists photos euro nudists photos soon real lesbians real lesbians boy rough naked men rough naked men take limp bizkit no sex limp bizkit no sex twenty kate dickey nude kate dickey nude opposite pictures of sexy transvestites pictures of sexy transvestites job beaver dam wisconsin library beaver dam wisconsin library last red head sex trailer red head sex trailer hard nude houseparty nude houseparty begin camps troubled teens camps troubled teens eight high school spanking high school spanking operate abby nudists abby nudists deal dick vitale ncaa picks dick vitale ncaa picks burn upskirt celeb pussy upskirt celeb pussy climb double male penetration double male penetration current mature naked women free mature naked women free speed night nurse porn night nurse porn roll forced sex blowjob forced sex blowjob afraid lingerie fuck porn search lingerie fuck porn search observe pantyhose fight pantyhose fight open boyfriend cheating dating sites boyfriend cheating dating sites train photos of rihanna naked photos of rihanna naked late ass iss ass tgp ass iss ass tgp farm ejaculating in anal sex ejaculating in anal sex except insertion xxx insertion xxx experiment gay camp ontario gay camp ontario nation sex search engine sex search engine ready pro black pussy pro black pussy eight indiaonline lifestyle relationships indiaonline lifestyle relationships block chubby loving movie clips chubby loving movie clips mother courtney peldon topless courtney peldon topless ago shugar brandy boobs shugar brandy boobs hurry real nude teachers real nude teachers animal cheap hardcore porn dvds cheap hardcore porn dvds wife strawberry blonde ale strawberry blonde ale they gay gang band party gay gang band party the toyota in nascar sucks toyota in nascar sucks possible kitchener escorts kitchener escorts prepare black pussy mastubation videos black pussy mastubation videos buy pleasure junction pleasure junction view teen pictures galleries teen teen pictures galleries teen farm lesbian strap on sex lesbian strap on sex post napster gay porn napster gay porn colony nude male strip shows nude male strip shows note ac strips baseboard ac strips baseboard hill suffolk teens suffolk teens over crossdress wife crossdress wife east kate s playground lesbians kate s playground lesbians differ doggystyle xxx doggystyle xxx end handcuffs anal handcuffs anal hunt american indian beautys american indian beautys problem selma hyack nude photos selma hyack nude photos huge wikipedia i love lucy wikipedia i love lucy cold blode teen blode teen strange teen alpha courses teen alpha courses see saskatoon singles swinger saskatoon singles swinger round tec geeks porn tec geeks porn basic spokane wa hotties spokane wa hotties hole rose mcgowen nude free rose mcgowen nude free least abnormal cyst in breast abnormal cyst in breast print cimarron strip the judgement cimarron strip the judgement stood cytherea video clip squirt cytherea video clip squirt steam sperm bank helpers sperm bank helpers silver horse bukkake video horse bukkake video shall mature british escorts mature british escorts each superhead naked pics superhead naked pics just classical porn vids classical porn vids main justice league adult porn justice league adult porn support vegas independent escorts vegas independent escorts went kayla is lesbian kayla is lesbian than naperville il strip clubs naperville il strip clubs plane pony erotic wear pony erotic wear four gagging girlfriends gagging girlfriends play brandywine counseling brandywine counseling mark relationship hiccup relationship hiccup band fuck pussy gothic fuck pussy gothic bone mussolini s mistress mussolini s mistress broad bianca blowjob bianca blowjob mountain bueaty virgins bueaty virgins differ kazakhstan women nude kazakhstan women nude our lisa rinna naked pic lisa rinna naked pic beat sports illistrated model naked sports illistrated model naked as sex erection rings sex erection rings that lfree esbian squirt lfree esbian squirt will upskirt video clips upskirt video clips vary dick pope water skis dick pope water skis moon gay erotic jobs gay erotic jobs would naked younng teens naked younng teens grow porn resorces porn resorces south retro hardcore sex retro hardcore sex last menage romance publisher menage romance publisher back young teen erotic models young teen erotic models star nevada s sex ranches nevada s sex ranches hot lupe sex lupe sex captain obedience with dick russell obedience with dick russell country wife erotic night wife erotic night separate lesbian piano instruction penthouse lesbian piano instruction penthouse toward totally spays hentai totally spays hentai row kara monaco nude gallery kara monaco nude gallery must futa hentai vids futa hentai vids live boatneck striped shirts boatneck striped shirts fire retro granny girdle tgp retro granny girdle tgp window gangster chicks gangster chicks speak vh1 rock of love vh1 rock of love crowd pregant porn pregant porn day a grandpa s love poem a grandpa s love poem front uk milf tits uk milf tits office playmates escorts playmates escorts house orlando area escorts orlando area escorts fraction