	// -------------------------------------------------------------------
	// Madgex Limited
	// Copyright (c) 2006 Madgex Limited. All Rights Reserved.
	// Web Calendar
	// Glenn Jones
	// 25 Apr 2006
	// Version 1.3 Mixed DHTML/DOM
	// -------------------------------------------------------------------
	
	var CalendarCounter = 0;
	

	function WebCalendar() 
	{

        var me;
        if (this.constructor == WebCalendar){
            me = this
        }else{
            me = arguments[arguments.length-1]
        }
	   
   
	    me.id = 'MCalendar' + CalendarCounter;
	    CalendarCounter += 1;
        
		
		me.aMonthLayout = new Array()
		me.aDayWords = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
		me.aMonthWords = new Array("January","February","March","April","May","June","July","August","September","October","November","December")
		me.iDayChars = 2
		me.iMonthChars = 3
		me.iYearChars = 4

		me.dCurDate = new Date();
    	me.iCurYear = me.dCurDate.getFullYear()
		me.iCurMonth = me.dCurDate.getMonth()
		me.iCurDate = me.dCurDate.getDate()
		me.sCurDay = me.aDayWords[me.dCurDate.getDay()]
		me.sCurMonthName = me.aMonthWords[me.iCurMonth]
		
		me.iSelectedYear = me.dCurDate.getFullYear()
		me.iSelectedMonth = me.dCurDate.getMonth()
		me.iSelectedDate = me.dCurDate.getDate()
		me.sSelectedDay = me.aDayWords[me.dCurDate.getDay()]
		me.sSelectedMonthName = me.aMonthWords[me.dCurDate.getMonth()]
		
		me.iMarkedYear = 0
		me.iMarkedMonth = 0
		me.iMarkedDate = 0
		
		me.sCallBackFunction = null;
		me.onloadFn = null;
		
		
		me.OverCell = function(e){
	        oTD = me.findEventSource(e);
		    if(oTD.innerHTML != '0')
		    {
			    me.sLastStyle = oTD.className
			    oTD.className = "MCalendarCellDateOver"
			    oTD.setAttribute("class","MCalendarCellDateOver");
			    oTDFooter = document.getElementById(me.id + 'Footer');
			    oTDFooter.innerHTML = "Select: " + me.DayText(me.iSelectedYear,me.iSelectedMonth,oTD.innerHTML)
		    }
	    }
    	
	    me.OutCell = function(e){
	        oTD = me.findEventSource(e);
		    if(oTD.innerHTML != '0')
		    {
			    oTD.className = me.sLastStyle
			    oTD.setAttribute("class",me.sLastStyle);
			    oTDFooter = document.getElementById(me.id + 'Footer');
			    oTDFooter.innerHTML = 'Today: ' + me.TodayText()
		    }
	    }
    	
	    me.ClickCell = function(e){
	        oTD = me.findEventSource(e);
		    if(oTD.innerHTML != '0')
		    {
			    me.iSelectedDate = oTD.innerHTML;
			    if( me.sCallBackFunction != null )
			    {
			       me.sCallBackFunction( me.iSelectedDate, me.iSelectedMonth, me.iSelectedYear ); 
			    }
		    }
	    }
    	
	    me.ButtonOutCell = function(e){
	        oTD = me.findEventSource(e);
		    oTDFooter = document.getElementById(me.id + 'Footer')
		    oTDFooter.innerHTML = 'Today: ' + me.TodayText()
	    }
    	
	    me.ButtonOverCell = function(e){
	        oTD = me.findEventSource(e);
	        iType = oTD.innerHTML;
		    oTDFooter = document.getElementById(me.id + 'Footer')
		    if (iType == '&lt;&lt;') oTDFooter.innerHTML = "Display: Previous Year"
		    if (iType == '&lt;') oTDFooter.innerHTML = "Display: Previous Month"
		    if (iType == 'Today') oTDFooter.innerHTML = "Display: Today"
		    if (iType == '&gt;') oTDFooter.innerHTML = "Display: Next Month"
		    if (iType == '&gt;&gt;') oTDFooter.innerHTML = "Display: Next Year"
	    }
    	
	    me.ButtonDownCell = function(e){
	        oTD = me.findEventSource(e);
		    oTD.className = 'MCalendarCellButtonDown'
	    }
    	
	    me.ButtonUpCell = function(e){
	        oTD = me.findEventSource(e);
		    oTD.className = 'MCalendarCellButton'
	    }
	    
	    me.Today = function()
	    {
		    me.iSelectedYear = me.iCurYear 
		    me.iSelectedMonth = me.iCurMonth+1
		    me.iSelectedDate = me.iCurDate 
		    me.iMarkedYear = me.iSelectedYear 
		    me.iMarkedMonth = me.iSelectedMonth
		    me.iMarkedDate = me.iSelectedDate 
		    me.Update(me.iSelectedYear,me.iSelectedMonth)
	    }
	    
	    me.AddYear = function()
	    {
		    me.iSelectedYear += 1;
		    me.Update(me.iSelectedYear,me.iSelectedMonth);
	    }
    	
	    me.SubtractYear = function()
	    {
		    me.iSelectedYear -= 1;
		    me.Update(me.iSelectedYear,me.iSelectedMonth);
	    }

	    me.AddMonth = function()
	    {
		    me.iSelectedMonth += 1
		    if (me.iSelectedMonth > 12)
		    {
			    me.iSelectedYear += 1
			    me.iSelectedMonth = 1
		    } 
		    me.Update(me.iSelectedYear,me.iSelectedMonth)
	    }
    		
	    me.SubtractMonth = function()
	    {
		    me.iSelectedMonth -= 1
		    if (me.iSelectedMonth < 1)
		    {
			    me.iSelectedYear -= 1
			    me.iSelectedMonth = 12
		    } 
		    me.Update(me.iSelectedYear,me.iSelectedMonth)
	    }
	    
	    me.listeners = [];
	    
	    me.addEvent = function( elm, evType, fn, useCapture ) { 
		    if (elm.AddEventListener) 
		    { 
			    elm.AddEventListener(evType, fn, useCapture); 
			    return true; 
		    } else if (elm.attachEvent) { 
			    var r = elm.attachEvent('on' + evType, fn);
			    me.listeners[me.listeners.length] = [ elm, evType, fn ];
			    return r; 
		    } else {
			    elm['on' + evType] = fn;
		    }
	    }
    	
	    me.unload = function(){
		    if( window.attachEvent ){
			    for (var i = 0; i < me.listeners.length; i++) {
				    me.listeners[i][0].detachEvent( 'on' + me.listeners[i][1], me.listeners[i][2] );
			    }
		    }
	    }
	    
	    
	    me.Build = function(){
	        me.oldLoad();
    	    
            me.CalulateDates(me.iSelectedYear,me.iSelectedMonth)
            
		    var holderdiv = document.createElement( 'div' );
		    holderdiv.setAttribute('id',me.id + 'Holder');
		    holderdiv.className = 'MCalendarHolder';
		    me.addEvent(holderdiv, 'mousedown', ieCancelBubble, false);
		    
    		
		    var eltIframe = document.createElement( 'iframe' );
		    eltIframe.setAttribute('id',me.id + 'Iframe');
		    eltIframe.setAttribute('src','blank.htm');
		    eltIframe.setAttribute('frameborder','0');
		    eltIframe.className = 'MCalendarIframe';
    		
		    // Do not add iframe for opera
		    if( navigator.userAgent.indexOf('Opera') < 0 )
		        holderdiv.appendChild( eltIframe );
            
            var table = document.createElement( 'table' );
            table.setAttribute('id',me.id);
            table.setAttribute('cellSpacing','0');
            table.setAttribute('cellPadding','2');
            table.setAttribute('border','0');
            table.className = 'MCalendarTable';
            var tbody = document.createElement( 'tbody' );
            table.appendChild( tbody );
            

            var titleTR = document.createElement( 'tr' );
            tbody.appendChild( titleTR );
            titleTR.appendChild( me.BuildTD( null, me.GetMonthYearText(), 'MCalendarCellHeader', '7', me.id + 'Head'  ) );

            var buttonTR = document.createElement( 'tr' );
            tbody.appendChild( buttonTR );

            btn1 = me.BuildTD( null, '<<', 'MCalendarCellButton', null, null  );
            btn2 = me.BuildTD( null, '<', 'MCalendarCellButton', null, null  );
            today = me.BuildTD( null, 'Today', 'MCalendarCellButton', '3', null  );
            btn3 = me.BuildTD( null, '>', 'MCalendarCellButton', null, null  );
            btn4 = me.BuildTD( null, '>>', 'MCalendarCellButton', null, null  );
    	    
	        me.AddBtnEvents( btn1 );
	        me.AddBtnEvents( btn2 );
	        me.AddBtnEvents( btn3 );
	        me.AddBtnEvents( btn4 );
            me.addEvent(btn1, 'click', me.SubtractYear, false);
            me.addEvent(btn2, 'click', me.SubtractMonth, false);
            me.addEvent(btn3, 'click', me.AddMonth, false);
            me.addEvent(btn4, 'click', me.AddYear, false);
            me.addEvent(today, 'click', me.Today, false);
            
	        buttonTR.appendChild( btn1 );
	        buttonTR.appendChild( btn2 );
	        buttonTR.appendChild( today );
	        buttonTR.appendChild( btn3 );
	        buttonTR.appendChild( btn4 );
    	    
	        var dayTR = document.createElement( 'tr' );
	        tbody.appendChild( dayTR );
    	    
	        for (var i = 0; i < 7; i++) {
	             dayTR.appendChild( me.BuildTD( null, me.aDayWords[i].substring(0,me.iDayChars), 'MCalendarCellHeader', null, null  ) );
		    }
    		
	        for (var i = 1; i < 7; i++) {
		        var weekTR = document.createElement( 'tr' );
	            tbody.appendChild( weekTR );
			    for (var x = 0; x < 7; x++) {
				    var tdID = me.id + "-" + i + "-" + x;		
				    var sText = me.aMonthLayout[i][x];
				    var className = "";
    				
				    if(me.aMonthLayout[i][x] == 0){
				        className = 'MCalendarCellBlank';
				    } else {
					    if ((me.iSelectedYear == me.iMarkedYear) && (me.iSelectedMonth == me.iMarkedMonth) && (me.iMarkedDate == sText)){
						    className = 'MCalendarCellMarkedDate';
					    }else{
						    if ((x==0) || (x==6)) {
						        className = 'MCalendarCellWEnd';
						    }else{
						        className = 'MCalendarCellDate';
						    }
					    }
				    }  
				    var td = me.BuildTD( null, sText, className, null, tdID  ) ; 
    				
                    me.addEvent(td, 'click', me.ClickCell, false);
                    me.addEvent(td, 'mouseover', me.OverCell, false);
                    me.addEvent(td, 'mouseout', me.OutCell, false);
    				
				    weekTR.appendChild( td );
			    }
		    }
    	    
	        var footTR = document.createElement( 'tr' );
	        tbody.appendChild( footTR );
	        me.footerElt = me.BuildTD( null, me.TodayText(), 'MCalendarCellFooter', '7', me.id + 'Footer' ) ;
	        footTR.appendChild( me.footerElt ); 
    	    
	        holderdiv.appendChild( table );
	        document.body.appendChild( holderdiv );
	        
	        if( me.onloadFn != null )
	            me.onloadFn();
    	    
	    }
	    
	    me.oldLoad = (window.onload) ? window.onload :  new Function;
	    me.addEvent(window, 'load', me.Build, false);
	    me.addEvent(window, 'unload', me.unload, false);
	
	    
	}
	
	//------------------------------------------------------------------------
	
	WebCalendar.prototype.Display = function () 
	{
	    if( document.getElementById(this.id + 'Holder') )
	    {
	        holder = document.getElementById(this.id + 'Holder');
	        holder.style.display = 'block';
	    }
	}
	
	WebCalendar.prototype.Hide = function () 
	{
		if( document.getElementById(this.id + 'Holder') )
	    {
	        holder = document.getElementById(this.id + 'Holder');
	        holder.style.display = 'none';
	    }
	}
	
	WebCalendar.prototype.CalulateDates = function (iYear, iMonth) 
	{
		for (var x=0;x<7;x++) {
			this.aMonthLayout[x] = new Array(7);
		}
		var dCalDate = new Date(iYear, iMonth-1, 1);
		var iDayOfFirst = dCalDate.getDay();
		var iDaysInMonth = this.GetDaysInMonth(iMonth, iYear);
		var iVarDate = 1;
		var i, d, w;	
		for (w=1;w < 7; w++) {
			for (d = 0; d < 7; d++) {
				iVarDate = (w==1 && d < iDayOfFirst)  ? 0 : iVarDate;
				if (iVarDate <= iDaysInMonth) {
					this.aMonthLayout[w][d] = iVarDate;
				}else{
					this.aMonthLayout[w][d] = 0;
				}
				iVarDate++;
			} 
		} 
	}
	
	WebCalendar.prototype.GetDaysInMonth = function(iMonth, iYear){
		this.dPrevDate = new Date(iYear, iMonth, 0);
		return this.dPrevDate.getDate();
	}
	
	WebCalendar.prototype.GetMonthYearText = function(){
		if (this.iSelectedMonth > 0 )
			return this.aMonthWords[this.iSelectedMonth-1].substring(0,this.iMonthChars) + ' ' + this.iSelectedYear.toString().substring(0,this.iYearChars);
		else
			return '';
	}

	
	
	WebCalendar.prototype.BuildTD = function(  obj, text, className, colspan, id  ) {
		
		var td = document.createElement( 'td' );
		td.setAttribute('id',id);
		td.setAttribute('unselectable','on');
		
		if( colspan != null )
		    td.setAttribute('colSpan',colspan);
		    
		td.className = className;
		if( obj != null ) {
		    td.appendChild( obj );
		} else {
		    if( text != null ) {
		        td.appendChild( document.createTextNode( text ) );
		    }else{
		        td.appendChild( document.createTextNode( "\u00a0" ) );
		    }
		}
		return td;
	}
	
	
	WebCalendar.prototype.AddBtnEvents = function( btn ) {
	    this.addEvent(btn, 'mousedown', this.ButtonDownCell, false);
	    this.addEvent(btn, 'mouseup', this.ButtonUpCell, false);
	    this.addEvent(btn, 'mouseout', this.ButtonOutCell, false);
	    this.addEvent(btn, 'mouseover', this.ButtonOverCell, false);
	}

	WebCalendar.prototype.TodayText = function()
	{
		return this.DayText(this.iCurYear,this.iCurMonth+1,this.iCurDate)
	}

	WebCalendar.prototype.DayText = function(iYear,iMonth,iDate)
	{
		var dXDate =  new Date((iMonth) + "/" + iDate + "/" +iYear)
		var iXDate = dXDate.getDate()
		var sXDay = this.aDayWords[dXDate.getDay()]
		var sXMonth = this.aMonthWords[iMonth-1]
		return this.aDayWords[dXDate.getDay()] +' ' + iDate + ' ' + sXMonth.substring(0,3) + ' ' + iYear
	}
	
	WebCalendar.prototype.SetSelectedDate = function(sDate)
	{

		aDateItems = sDate.split("/")
		if(aDateItems.length == 3)
		{   
			this.iSelectedDate = parseInt(aDateItems[0],10);
			this.iSelectedMonth = parseInt(aDateItems[1],10);
			this.iSelectedYear = parseInt(aDateItems[2],10);  
			if(this.iSelectedDate < 1) this.iSelectedDate = 1;
			if(this.iSelectedDate > 31) this.iSelectedDate = 1;
			if(this.iSelectedMonth < 1) this.iSelectedMonth = 1;
			if(this.iSelectedMonth > 12) this.iSelectedMonth = 12;
		} else {
			this.iSelectedDate = 0
			this.iSelectedMonth = this.iCurMonth + 1
			this.iSelectedYear = this.iCurYear 
		}
		this.Update(this.iSelectedYear,this.iSelectedMonth);
	}
	
    WebCalendar.prototype.SetMarkedDate = function(sDate)
	{

		aDateItems = sDate.split("/")
		if(aDateItems.length == 3)
		{   
			this.iMarkedDate = parseInt(aDateItems[0],10);
			this.iMarkedMonth = parseInt(aDateItems[1],10);
			this.iMarkedYear = parseInt(aDateItems[2],10);  
			if(this.iMarkedDate < 1) this.iMarkedDate = 1;
			if(this.iMarkedDate > 31) this.iMarkedDate = 1;
			if(this.iMarkedMonth < 1) this.iMarkedMonth = 1;
			if(this.iMarkedMonth > 12) this.iMarkedMonth = 12;
		} else {
			this.iMarkedDate = 0
			this.iMarkedMonth = this.iCurMonth + 1
			this.iMarkedYear = this.iCurYear 
		}
		this.Update(this.iMarkedYear,this.iMarkedMonth);
	}

		
	WebCalendar.prototype.Update = function(iYear,iMonth)
	{
		this.CalulateDates(iYear,iMonth)
		oTDHead = document.getElementById(this.id + 'Head')
		oTDHead.innerHTML = this.GetMonthYearText()
		for (var i = 1; i < 7; i++) 
		{
			for (var x = 0; x < 7; x++) 
			{
				tdID = this.id + "-" + i + "-" + x		
				var sText = this.aMonthLayout[i][x]
				oTD = document.getElementById(tdID)
				if(this.aMonthLayout[i][x] == 0)
				{
					oTD.className = "MCalendarCellBlank"
					oTD.setAttribute("class","MCalendarCellBlank");	
					oTD.innerHTML = sText
				}else{
					if ((this.iSelectedYear == this.iMarkedYear) && (this.iSelectedMonth == this.iMarkedMonth) && (this.iMarkedDate == sText))
					{
						oTD.className = "MCalendarCellMarkedDate"
						oTD.setAttribute("class","MCalendarCellMarkedDate");	
						oTD.innerHTML = sText
					}else{

						if ((x==0) || (x==6)) 
						{
							oTD.className = "MCalendarCellWEnd"
							oTD.setAttribute("class","MCalendarCellWEnd");	
						}else{
							oTD.className = "MCalendarCellDate"
							oTD.setAttribute("class","MCalendarCellDate");	
						}
						oTD.innerHTML = sText
					}
				}
			}
		}
	}
	
	WebCalendar.prototype.findEventSource = function(e) {
		if (typeof e == 'undefined')
			var e = window.event;

		var source;
		if (typeof e.target != 'undefined') 
		{
			source = e.target;
		} else if (typeof e.srcElement != 'undefined') {
			source = e.srcElement;
		} else {
			return true;
		}

		if (source.nodeType == 3)
			source = source.parentNode;
			
		return source;
	}
	
	// --------------------------------------------------
	
	
	
	
	
	function ieCancelBubble(e){
	   if(window.event){
	      window.event.cancelBubble = true
	   }
	   if(e.stopPropagation){
	       e.stopPropagation();
	   }
	}

	function getPageOffsetLeft(elt) {
		var x;
		x = elt.offsetLeft;
		if (elt.offsetParent != null)
			x += getPageOffsetLeft(elt.offsetParent);
		return x;
	}

	function getPageOffsetTop(elt) {
		var y;
		y = elt.offsetTop;
		if (elt.offsetParent != null)
			y += getPageOffsetTop(elt.offsetParent);
		return y;
	}
	
	function insertAfter(node, referenceNode) {
        referenceNode.parent.insertBefore(node, referenceNode.nextSibling);
    }
    
    function Inherit( base, derived ){
        for ( var i in base.prototype ){
            eval( 'derived.prototype.' + i + '= base.prototype.' + i );
        }
    }
	
	
	
	
	
	
 
    // --------------------------------------------------
    
    var IFCalendarArray = new Array();
    
    function InputFieldCalendar( fieldID, imageContainerID ){
        //Car Class
        var me;
        if (this.constructor == InputFieldCalendar){
            me = this
        }else{
            me = arguments[arguments.length-1]
        }
        WebCalendar(me);
        
        me.containerID = imageContainerID;
        me.fieldID = fieldID;
        me.image = null; 
        me.oldMouseDown = null;
        IFCalendarArray[IFCalendarArray.length] = me; 
       
        me.onloadFn = function (){
	        if( document.getElementById( me.fieldID ) && document.getElementById( me.containerID ) )
	        {
	            me.inputField = document.getElementById( me.fieldID );
	            me.container = document.getElementById( me.containerID );
                me.image = document.createElement( 'img' );
                me.image.setAttribute('src','../images/date_button01.gif');	
                me.container.appendChild( me.image );	
                me.currentValue = me.inputField.value;
                me.SetSelectedDate( me.inputField.value );
                me.SetMarkedDate( me.inputField.value );
                me.addEvent(me.image, 'mousedown', me.DisplayIFC, false);
	        } 
	    }
	    
	    me.DisplayIFC = function(e) {
	        ileft = parseInt( getPageOffsetLeft(me.image) );
	        itop = parseInt( getPageOffsetTop(me.image) );
	        var holderdiv = document.getElementById( me.id + 'Holder' );
	        holderdiv.style.left = (ileft + 10) + 'px';
	        holderdiv.style.top = (itop + 10) + 'px';
	        for (var i = 0; i < IFCalendarArray.length; i++){ 
	            IFCalendarArray[i].Hide()
	        }
	        me.SetSelectedDate( me.inputField.value );
	        me.Display();
	        ieCancelBubble(e);
	    }
	    
	    me.sCallBackFunction = function() {
	        var text = 	me.iSelectedDate + '/' + me.iSelectedMonth + '/' + me.iSelectedYear;
	        me.inputField.value = text;
	        me.SetMarkedDate( text );
	        me.Hide();
	    }	 
	
	    
	    me.PageClick = function(e){
	      if( me.oldMouseDown != null ){
	        me.oldMouseDown();
	      }
	      
	      me.Hide();
	    }
	    
	    me.oldMouseDown = (document.onmousedown) ? document.onmousedown :  new Function;
	    me.addEvent(document, 'mousedown', me.PageClick, true);
	  
    }
    
    
    Inherit(WebCalendar, InputFieldCalendar);
    
    


	