Date.prototype.getNYear = function( ) {
	var y = this.getYear( );
	if( y < 1900 ) y += 1900;
	return y;
	}
	
Date.prototype.getNMonth = function( ) {
	var m = this.getMonth( );
	return m + 1;
	}

Date.prototype.getLYear = function( ) {
	var y = this.getYear( );
	if( y < 1900 ) y += 1900;
	return y - 1;
}

function choose_date( tok ) {
	
	var y; var m; var d;
	
	y = parseInt( getObj( 'date_' + tok + '_year' ).value );
	m = parseInt( getObj( 'date_' + tok + '_month' ).value );
	d = parseInt( getObj( 'date_' + tok + '_day' ).value );
	
	var now = new Date( );
	var cY  = now.getNYear( );
	var cM  = now.getNMonth( );
	
	
	var o = (((y * 12) + m) - ((cY * 12) + cM));
	
	var top     = 100;
	var left    = 300;
	
	years       = getObj( 'date_' + tok + '_year' ).options;
	years_lower = years[0].value;
	years_upper = years[ years.length - 1 ].value;
	
	
	
	_calbox         = document.createElement( 'div' );
	_calbox.id      = 'calendarBox';
	_calbox.first   = true;
	
	_calbox.acquire = function( in_uri ) {
	    XMLReq.pullURI(
	          in_uri
	        , function( xml ) { _calbox.assemble( xml ) }
	    );
	}
	
	_calbox.assemble = function( xml ) {
	    if( this.first ) {
	        litebox.cloakCanvas( );
	    }
	    
	    this.innerHTML = xml.block;
	    
	    if( this.first ) {
	        litebox.updateCanvasPosition( );
            litebox.uncloakCanvas( );
	        this.first = false;
	    }
	}
	
	_calbox.send = function( d, m, y, tok ) {
        select_date( d, m, y, tok );
        litebox.dispose( );
    }
	
	litebox = new Litebox( );
	litebox.setCanvas( _calbox, true ).setIgnoreCanvasClick( true ).setDismissOnClick( true ).show( );
	
	_calbox.acquire(
		  auri(
		     'engine/calendar/calendar.xml.php'
		    +'?o=' + o
		    +'&t=' + tok
		    +'&yl=' + years_lower
		    +'&yu=' + years_upper
		)
    );

}
	
function select_date( d, m, y, tok ) {
	
	getObj( 'date_' + tok + '_year' ).value     = y;
	getObj( 'date_' + tok + '_month' ).value    = m;
	getObj( 'date_' + tok + '_day' ).value      = d;
	
	if( getObj( 'date_end_year' )
	&&  getObj( 'date_end_month' )
	&&  getObj( 'date_end_day' )
	) {
    	check_date( tok );
    	}
	}
	
function check_date( tok ) {
	
	var b = new Date(
		(getObj( 'date_' + 'begin' + '_year' ).value),
		(getObj( 'date_' + 'begin' + '_month' ).value) - 1,
		(getObj( 'date_' + 'begin' + '_day' ).value)
		);
	
	var eY; var eM; var eD;
	var e = new Date(
		(eY = getObj( 'date_' + 'end' + '_year' ).value),
		(eM = getObj( 'date_' + 'end' + '_month' ).value) - 1,
		(eD = getObj( 'date_' + 'end' + '_day' ).value)
		);
	
	if( e.getTime( ) < b.getTime( ) ) {
		if( tok == 'end' ) {
			getObj( 'date_' + 'begin' + '_year' ).value     = eY;
			getObj( 'date_' + 'begin' + '_month' ).value    = eM;
			getObj( 'date_' + 'begin' + '_day' ).value      = eD;
			}
		else {
			b.setTime( b.getTime() + ( 1000 * 60 * 60 * 24 * 7 ) );
			getObj( 'date_' + 'end' + '_year' ).value   = b.getNYear( );
			getObj( 'date_' + 'end' + '_month' ).value  = b.getNMonth( );
			getObj( 'date_' + 'end' + '_day' ).value    = b.getDate( );
			}
		}
	}

function attach_calendars( ) {
	calendar	= new Object();
	
	if( obj = getObj( 'calendarHardpointBegin' ) ) {
		calendar.begin		= new Object();
		calendar.begin.hp	= obj;
		calendar.begin.tok	= 'begin';
	}
	
	if( obj = getObj( 'calendarHardpointEnd' ) ) {
		calendar.end		= new Object();
		calendar.end.hp		= obj;
		calendar.end.tok	= 'end';
	}
	
	for( cal in calendar ) {
		cal = calendar[ cal ];
		
		clearNode( cal.hp );
		
		icon = document.createElement( 'img' );
		
		icon.src		= auri( 'resource/image/icon/calendar.gif' );
		icon.alt		= 'Select Date...';
		icon.onclick	= bind(
			  null
			, choose_date
			, cal.tok
		);
		icon.onkeypress	= icon.onclick;
		
		cal.hp.appendChild( icon );
	}
}
	
//window.select_date = select_date;

document.onload = chainHandlers( attach_calendars, document.onload );
