// (c) Benoît PIN 2006-2007
// http://plinn.org
// Licence GPL
// $Id: generic_header_script.js 1296 2008-05-26 09:25:49Z pin $
// $URL: http://svn.cri.ensmp.fr/svn/Plinn/trunk/skins/ajax_scripts/generic_header_script.js $


function initHeaderScript() {
	var toggleButton = document.getElementById("ToggleFormButton");
	if (!toggleButton) return;
	var ob_url = absolute_url();
	var metadataInspector = new InspectorPalette(portal_url(),
												 document.getElementById("ToggleFormButton").childNodes[0],
												 document.getElementById("HeaderArea"));

	metadataInspector.onExpand = function(inspector) {
		var onAfterPopulate = function() {
			// init simple metadata form manager
			var metadataForm = inspector.contentNode.getElementsByTagName('FORM')[0];
			var fm = new FormManager(metadataForm);
			fm.onResponseLoad = function(){inspector.collapse();};
			
			// init event handler to show full metadata form
			var showFullMetadataForm = function(evt) {
				disableDefault(evt);
				disablePropagation(evt);

				var initFullMetadataForm = function () {
					var metadataForm = inspector.contentNode.getElementsByTagName('FORM')[0];
					var fm = new FormManager(metadataForm);
					fm.onResponseLoad = function(){inspector.collapse();};
					
					addListener(document.getElementById('showSimpleMetadataForm'),
								'click',
								function(evt){inspector.expand(); disableDefault(evt); disablePropagation(evt);});
				};
				var fi = new FragmentImporter(absolute_url(), initFullMetadataForm);
				fi.useMacro('header_widgets', 'fullMetadataForm', 'HeaderArea');
			};
			addListener(document.getElementById('showFullMetadataForm'), 'click', showFullMetadataForm);
		};
		var fi = new FragmentImporter(ob_url, onAfterPopulate);
		fi.useMacro('header_widgets', 'titleAndDescForm', 'HeaderArea');
	};

	metadataInspector.onCollapse = function(inspector) {
		var fi = new FragmentImporter(ob_url);
		fi.useMacro('header_widgets', 'viewTitleAndDesc', 'HeaderArea');
	};
}


function MetadataDateManager(baseFieldName, defaultDate) {
	var thisManager = this;
	this.baseFieldName = baseFieldName;
	this.defaultDate = defaultDate;
	this._previousDate = new Date();
	
	var calConfig = [];
	// setup js calendar
	calConfig["inputField"]		=	baseFieldName;		// id of the input field
	calConfig["ifFormat"]		=	"%Y %m %d %H %M";   // format of the input field
	calConfig["date"]			=	function() { return thisManager.builDateFromInputs(); };
	calConfig["showsTime"]		=	true;               // will display a time selector
	calConfig["button"]			=	"show_" + baseFieldName + "_cal";     // trigger for the calendar (button ID)
	calConfig["singleClick"]	=	false;              // double-click mode
	calConfig["showOthers"]		=	true;               // show overlapping months
	calConfig["weekNumbers"]	=	false;
	calConfig["firstDay"]		=	1;
	calConfig["onSelect"]		=	thisManager.splitDate;

	Calendar.setup(calConfig);
	
	//init event listener on checkbox
	var cb = document.getElementById(baseFieldName + "_cb");
	if (cb) {
		addListener(cb, 'click', function(){thisManager.toggleDisplay();});
		if ( this.builDateFromInputs().valueOf() == this.defaultDate.valueOf() ) {
			document.getElementById(baseFieldName + "_fields").style.display = "none";
			cb.checked = true;
		}
	}
}

MetadataDateManager.prototype.builDateFromInputs = function() {
	var baseFieldName = this.baseFieldName;
	var year	=	document.getElementById(baseFieldName + "_year").value;
	var month	=	document.getElementById(baseFieldName + "_month").value;
	var day		=	document.getElementById(baseFieldName + "_day").value;
	var hour	=	document.getElementById(baseFieldName + "_hour").value;
	var minute	=	document.getElementById(baseFieldName + "_minute").value;

	if ( (year && month && day && hour && minute) != "" ) {
		var dateStr = month + "/" + day + "/" +  year + " " + hour + ":" + minute + ":00";
		return new Date(dateStr) ;
	}
	else
		return new Date();
};

MetadataDateManager.prototype.splitDate = function(calendar, date) {
	var inputId = (typeof calendar == "string") ? this.baseFieldName : calendar.params['inputField'].id;

	var tokens;
	if (typeof date == "object") {
		tokens = new Array(5);
		tokens[0] = String( date.getFullYear() );
		var month = date.getMonth() +1;
		tokens[1] = (month <10) ? "0" + String(month) : String(month);
		var day = date.getDate()
		tokens[2] = (day < 10) ? "0" + String(day) : String(day);
		var hours = date.getHours();
		tokens[3] = (hours < 10) ? "0" + String(hours) : String(hours);
		var minutes = date.getMinutes();
		tokens[4] = (minutes < 10) ? "0" + String(minutes) : String(minutes);
	} 
	else
		tokens = date.split(" ");

	document.getElementById(inputId + "_year").value = tokens[0];
	document.getElementById(inputId + "_month").value = tokens[1];
	document.getElementById(inputId + "_day").value = tokens[2];
	document.getElementById(inputId + "_hour").value = tokens[3];
	document.getElementById(inputId + "_minute").value = tokens[4];
};


MetadataDateManager.prototype.toggleDisplay = function() {
	var cb		= document.getElementById(this.baseFieldName + '_cb');
	var fields	= document.getElementById(this.baseFieldName + '_fields');
	if (cb.checked) {
		fields.style.display = "none";
		this._previousDate = this.builDateFromInputs();
		this.splitDate('', this.defaultDate)
	}
	else {
		this.splitDate('', this._previousDate);
		fields.style.display = "block";
	}
};