YAHOO.namespace("masi.calendar");

YAHOO.masi.calendar.setup_calendars = function() {
	var Dom = YAHOO.util.Dom;
	var fields = YAHOO.util.Dom.getElementsByClassName('date_field');
	for ( i=0 ; i < fields.length ; i++ ) {
		var el = new YAHOO.util.Element(fields[i]);
		var id = el.get('id');

		// parse the id to get custom text number and base_id
		var pattern = /custom_text_(\d+)_(\d+)/;
		var result = id.match(pattern);

		if ( result == null ) { //JGO ADDED 2010 07
			// if we didn't get a pattern match, gracefully skip this element and go
			// to next
			continue;
		}

		var custom_text_number = result[1];
		var base_id = result[2];

		var showBtn = Dom.get("show_" + custom_text_number + '_' + base_id);
		if ( ! showBtn ) {
			YAHOO.masi.util.console_log("\t failed to find show button");
			return;
		}
		// look for a format hidden field
		var formatter = Dom.get("format_" + custom_text_number + '_' + base_id);
		var format = '';
		if ( formatter ) {
			format = formatter.value;
		}

		// look for a format hidden field
		// Title Text - NOT required
		var title = Dom.get("title_" + custom_text_number + '_' + base_id);
		var title_value = '';
		if ( title ) {
			title_value = title.value;
		}

		// look for a format hidden field
		// Minimum required date - NOT required
		var min_date = Dom.get("min_date_" + custom_text_number + '_' + base_id);
		var min_date_value = '';
		if ( min_date ) {
			min_date_value = min_date.value;
		}

		// look for a format hidden field
		// Maximum required date - NOT required
		var max_date = Dom.get("max_date_" + custom_text_number + '_' + base_id);
		var max_date_value = '';
		if ( max_date ) {
			max_date_value = max_date.value;
		}

		// look for a format hidden field
		// comma separated list of blacked-out dates - NOT required
		var block_dates = Dom.get("block_dates_" + custom_text_number + '_' + base_id);
		var block_dates_value = '';
		if ( block_dates ) {
		  var date_array = block_dates.value.split(',');
			block_dates_value = date_array;
		}

		// look for a render_div hidden field
		// comma separated list of blacked-out dates - NOT required
		var render_div = Dom.get("render_div_" + custom_text_number + '_' + base_id);
		var render_div_value = '';
		if ( render_div ) {
			render_div_value = render_div.value;
		}

		var c_obj = {
			"custom_text_number": custom_text_number,
			"base_id": base_id,
			"format": format,
			"title_value": title_value,
			"min_date_value": min_date_value,
			"max_date_value": max_date_value,
			"block_dates_value": block_dates_value,
			"render_div_value": render_div_value
		};
		YAHOO.util.Event.addListener(showBtn, "click", YAHOO.masi.calendar.show_calendar, c_obj);
	}
}

YAHOO.masi.calendar.show_calendar = function(e, obj) {
	var Dom = YAHOO.util.Dom;

	var dialog = YAHOO.masi.util.get_object('dialog_' + obj.custom_text_number + '_' + obj.base_id);
	if ( dialog ) {
		dialog.destroy();
	}
	var calendar = YAHOO.masi.util.get_object('calendar_' + obj.custom_text_number + '_' + obj.base_id);
	if ( calendar ) {
		calendar.destroy();
	}

	function resetHandler() {
		// Reset the current calendar page to the select date, or
		// to today if nothing is selected.
		var selDates = calendar.getSelectedDates();
		var resetDate;

		if (selDates.length > 0) {
			resetDate = selDates[0];
		} else {
			resetDate = calendar.today;
		}

		calendar.cfg.setProperty("pagedate", resetDate);
		calendar.render();
	}

	function closeHandler() {
		dialog.hide();
	}

	dialog = new YAHOO.widget.Dialog("container_" + obj.custom_text_number + '_' + obj.base_id, {
		zIndex:1001,
		width:"205px",
		visible:false,
		context:["show_" + obj.custom_text_number + '_' + obj.base_id, "tl", "bl"],
		buttons:[ {text:"Reset", handler: resetHandler, isDefault:true}, {text:"Close", handler: closeHandler}],
		draggable:false,
		close:true
	});
	// Set header text.
	if (obj.title_value == ''){
	  // Default text
	  dialog.setHeader('Pick A Date');
	} else {
	  // Custom Text
	  dialog.setHeader(obj.title_value);
	}

	dialog.setBody('<div id="cal_' + obj.custom_text_number + '_' + obj.base_id + '"></div>');
	if ( obj.render_div_value ) {
		dialog.render(obj.render_div_value);
	} else {
		dialog.render(document.body);
	}

	dialog.showEvent.subscribe(function() {
		if (YAHOO.env.ua.ie) {
			// Since we're hiding the table using yui-overlay-hidden, we
			// want to let the dialog know that the content size has changed, when
			// shown
			dialog.fireEvent("changeContent");
		}
	});
	YAHOO.masi.util.add_object('dialog_' + obj.custom_text_number + '_' + obj.base_id, dialog);

	calendar = new YAHOO.widget.Calendar("cal_" + obj.custom_text_number + '_' + obj.base_id, {
		iframe:false,          // Turn iframe off, since container has iframe support.
		hide_blank_weeks:true  // Enable, to demonstrate how we handle changing height, using changeContent
	});

	// Process min_date, if given.
	if (!obj.min_date_value == '') {
		calendar.cfg.setProperty("mindate",obj.min_date_value);
	}
	// Process max_date, if given.
	if (!obj.max_date_value == '') {
		calendar.cfg.setProperty("maxdate",obj.max_date_value);
	}
	// Process block_dates, if given.
	if (!obj.block_dates_value == '') {
		for (blockDate in obj.block_dates_value) {
			calendar.addRenderer(obj.block_dates_value[blockDate],calendar.renderOutOfBoundsDate);
		}
	}

	calendar.render();

	calendar.selectEvent.subscribe(function() {
		if (calendar.getSelectedDates().length > 0) {

			var selDate = calendar.getSelectedDates()[0];

			// Pretty Date Output, using Calendar's Locale values: Friday, 8 February 2008
			var dStr  = calendar.cfg.getProperty("WEEKDAYS_LONG")[selDate.getDay()];
			var dNum  = selDate.getDate();
			var dNum0 = dNum;
			var mStr  = calendar.cfg.getProperty("MONTHS_LONG")[selDate.getMonth()];
			var mNum  = selDate.getMonth() + 1;
			var mNum0 = mNum;
			var yNum  = selDate.getFullYear();

			if (dNum0 < 10) {
				dNum0 = '0' + dNum0;
			}

			if (mNum0 < 10) {
				mNum0 = '0' + mNum0;
			}

			if (obj.format && obj.format.match('dNum0')) {
				dNum = dNum0;
			}

			if (obj.format && obj.format.match('mNum0')) {
				mNum = mNum0;
			}

			var el = Dom.get('custom_text_' + obj.custom_text_number + '_' + obj.base_id);
			if ( obj.format ) {
				eval('el.value = ' + obj.format);
			} else {
				el.value = mStr + " " + dNum;
			}
		} else {
			Dom.get('custom_text_' + obj.custom_text_number + '_' + obj.base_id).value = "";
		}

		dialog.hide();
	});

	calendar.renderEvent.subscribe(function() {
		// Tell Dialog it's contents have changed, which allows 
		// container to redraw the underlay (for IE6/Safari2)
		dialog.fireEvent("changeContent");
	});
	YAHOO.masi.util.add_object('calendar_' + obj.custom_text_number + '_' + obj.base_id, calendar);

	var seldate = calendar.getSelectedDates();
	if (seldate.length > 0) {
		// Set the pagedate to show the selected date if it exists
		calendar.cfg.setProperty("pagedate", seldate[0]);
		calendar.render();
	}
	dialog.show();
}

