var calStartDate; 
var calEndDate;

/*  Description : to be called on the 'onfocus' event of a textbox
 *                to whom the Zapatec Calendar is to be assigned.
 *  Input 1     : sElId -> Date object or textbox id (Defines valid start date before which dates will be disabled) 
 *  Input 2     : eElId -> Date object or textbox id (Defines valid end date after which dates are disabled)  
 *  
 *  Usage       :eg. <input  id="calendar" name="calendar" type="text" onfocus="setCalStarEndtDate(new Date(),null)">
 *	                 <input  id="calendar_1" name="calendar_1" type="text" onfocus="javascript:setCalStarEndtDate('calendar',null)"> (Create Dependancy On Other Textbox with id 'calendar')
 *					 <input  id="calendar_1" name="calendar_1" type="text" onfocus="javascript:setCalStarEndtDate(null,null)">
 *					 <input  id="calendar_1" name="calendar_1" type="text" onfocus="javascript:setCalStarEndtDate(null,new Date())">
 *
 */
function setCalStarEndtDate(sElId,eElId){
	calStartDate = getElementDateValue(sElId);
	calEndDate = getElementDateValue(eElId);
}

/*  Description : ASSIGNS a Zapatec Calendar Instance to one textbox.
 *                
 *  Input 1     : elId      -> Textbox id 
 *  Input 2     : imgStatus -> true/false, weather calendar image with associated calendar is required
 *   
 *  Usage       : eg. createZapatecCalender('calendar_1')
 *                 OR  createZapatecCalender('calendar_1',true); 
 *  
 *  Note        : The textbox component preferrably with its onfocus event defined, must be available in the page before firing this method 
 */
function createZapatecCalender(elId,imgStatus,months){
	if(imgStatus){
		var lCalObj = document.getElementById(elId);
		var spanObj = document.createElement('span');
		spanObj.innerHTML = "<img src='/media/js/OctaShop/zapatecCalendar/images/calendar2.gif' align='absmiddle' style='margin-left:2px;' onclick=\"triggerElementFocus(this,'"+elId+"')\">"
		insertAfter(spanObj,lCalObj);
	}
	attachCalendarToObject(elId,elId,months)
}

/*  Description : ASSIGNS Zapatec Calendar Instances to multiple textboxes.
 *                
 *  Input 1     : elIdArray      -> Textbox id Array 
 *                                  
 *	Usage       : eg.createZapatecCalenderArray(['myCal','myCal_1','myCal_2',['myCal_3',true],'myCal_4'])
 *	               OR createZapatecCalenderArray([['myCal',false],['myCal_3',true]])
 *				   OR createZapatecCalenderArray([['calendar']])
 * 
 *  Note        : The textbox components preferrably with their onfocus event defined, must be available in the page before firing this method 
 */
function createZapatecCalenderArray(elIdArray){
	for(x=0;x <elIdArray.length;x++){
		var elAry = elIdArray[x];
		if(typeof(elAry)=='object'){
			createZapatecCalender(elAry[0],elAry[1])
		} else {
			createZapatecCalender(elAry,false)
		}
	}
}

function getElementDateValue(el){
	if(el == null || el == '')
		return null;

	if(typeof(el)=='object'){
		el.setHours(0,0,0,0);
		return el;
	}
	var elObj = document.getElementById(el)
	elValue = (elObj.value).split('-');
	if (elValue.length > 1)
		var elDate = new Date(elValue[2],(parseInt(elValue[1],10)-1),elValue[0])
	else
		var elDate = new Date();

	elDate.setHours(0,0,0,0);
	return elDate;
}

function insertAfter(new_node, existing_node) {  
   if (existing_node.nextSibling){  
		if(existing_node.nextSibling.nodeName!='SPAN'){ //Append Image Only After A TextBox
		  existing_node.parentNode.insertBefore(new_node, existing_node.nextSibling);
	    }
	}else
		existing_node.parentNode.appendChild(new_node);
 
} 

function disallowedCalenderDates(dateCheckOut) { 
	dateCheckOut.setHours(0,0,0,0) 
	if (calStartDate != null && calStartDate > dateCheckOut) return true
	if (calStartDate != null && calEndDate != null && calEndDate < dateCheckOut) return true

	if (calEndDate   != null && calEndDate < dateCheckOut) return true
	if (calStartDate == null && calEndDate != null && calEndDate < dateCheckOut) return true

	return false; 
} 

function triggerElementFocus(obj,elId){
	calIpObj = document.getElementById(elId);
	if(calIpObj.focus){
		calIpObj.focus()
	}
	setTimeout('calIpObj.onclick()',10);
}

function attachCalendarToObject(elId,btId,months){
	if(!months){
	  months =2;
	}
	Zapatec.Calendar.setup({
		showOthers        : false,
		singleClick       : true,
		inputField        : elId,
		button            : btId,
		dateStatusFunc    : disallowedCalenderDates,
		ifFormat          : "%d/%m/%Y",
		daFormat          : "%Y/%m/%d",
		numberMonths      : months,
		monthsInRow       : 1,
		vertical          : false,
		noHelp            : true
	});
}



