( function() { 
YAHOO.namespace('Isvy');

function dbg() {
	return;
	if( YAHOO.env.ua.ie ) return;
	if( console && console.log ) console.log( arguments );
	return;
}

YAHOO.Isvy = {};
YAHOO.Isvy.contentTrans = {};

YAHOO.Isvy.contentTrans.CONFIG = {
	wiping_animation_duration: 1.4, //number of seconds the wipe animation should take, increasing this will slow down the animation
	
	//see http://developer.yahoo.com/yui/docs/YAHOO.util.Easing.html
	wiping_animation_easing_in: YAHOO.util.Easing.easeBothStrong,
	wiping_animation_easing_out: YAHOO.util.Easing.easeInStrong,
	
	wiper_line_thickness: 1,      //thickness of the "wiper" line
	wiper_line_color: '#005595'  //color of the "wiper" line
	
};

YAHOO.Isvy.contentTrans._pageChanging = 0;
YAHOO.Isvy.contentTrans._current_content = '';
YAHOO.Isvy.contentTrans._current_nav = '';
YAHOO.Isvy.contentTrans._cached_content = {};
YAHOO.Isvy.contentTrans.initNavs = function (e) {
	var navs = YAHOO.util.Dom.getElementsByClassName('leftnav-link');
	for( ni in navs ) {
		var nid = navs[ni].id.replace(/^(nav-(sub-)?)/, '');		
		YAHOO.otorg.DomCollapse.init( '', navs[ni] );
		//~ YAHOO.otorg.DomCollapse.toggle( '', 'nav-sub-' + nid , 'nav-' + nid , 1 );
		//~ YAHOO.otorg.DomCollapse.toggleComplete();
	}
	YAHOO.otorg.DomCollapse.toggle( '', {
		tid: 'nav-sub-' + YAHOO.Isvy.contentTrans._current_nav, 
		pid: 'nav-' + YAHOO.Isvy.contentTrans._current_nav, 
		expanding: 1, 
		noToggleProtection: 1,
		dontAnimateParent: 1
	});
	YAHOO.Isvy.contentTrans.selectNav( YAHOO.Isvy.contentTrans._current_content, 1 );
	//~ YAHOO.otorg.DomCollapse.toggleComplete();
}

YAHOO.Isvy.contentTrans.show_navs = function (e, content_id ) {
	if( YAHOO.Isvy.contentTrans._current_content == content_id ) 	return false;
	if( YAHOO.otorg.DomCollapse.isToggling() ) return false;
	
	if( YAHOO.Isvy.contentTrans._current_nav != content_id  ) {
		var oldnavlink = document.getElementById('nav-' + YAHOO.Isvy.contentTrans._current_nav);
		if( oldnavlink ) {
			YAHOO.otorg.DomCollapse.toggle( '', {
				tid: 'nav-sub-' + YAHOO.Isvy.contentTrans._current_nav, 
				pid: 'nav-' + YAHOO.Isvy.contentTrans._current_nav, 
				expanding: -1, 
				noToggleProtection: 1,
				dontAnimateParent: 1
			});

			 //~ YAHOO.otorg.DomCollapse.toggle( '', 'nav-sub-' + YAHOO.Isvy.contentTrans._current_nav, 'nav-' + YAHOO.Isvy.contentTrans._current_nav, 0, 1 );
			 YAHOO.otorg.DomCollapse.toggleComplete();
		}

		var navlink = document.getElementById('nav-' + content_id);
		if( navlink ) {
			dbg( 'toggle: ' + content_id );
			//~ YAHOO.otorg.DomCollapse.toggle( '', 'nav-sub-' + content_id, 'nav-' + content_id, 0, 1 );
			YAHOO.otorg.DomCollapse.toggle( '', {
				tid: 'nav-sub-' + content_id, 
				pid: 'nav-' + content_id, 
				expanding: 1, 
				noToggleProtection: 1,
				dontAnimateParent: 1
			});

			dbg( 'toggle done: ' +  content_id );
			YAHOO.Isvy.contentTrans._current_nav = content_id;
			//~ YAHOO.otorg.DomCollapse.toggleComplete();
		}
	}
	YAHOO.Isvy.contentTrans.show_content(content_id);
	return false;
}

YAHOO.Isvy.contentTrans.show_content = function ( content_id ) {
	if(  YAHOO.Isvy.contentTrans._pageChanging ) return false;
	if(  YAHOO.Isvy.contentTrans._current_content == content_id ) return false;
	
	this._pageChanging = 1;
	YAHOO.Isvy.contentTrans.selectNav(content_id);
	
	if( this._cached_content[content_id] ) {
		this.populate_content( content_id );
	}
	else {
		var content_url = window.location.toString().replace(/#.*$/, '').replace(/&?content=[^&]+/, '') + '&T=' + Math.random() + '&aj=1&content=' + content_id;
		var transaction = YAHOO.util.Connect.asyncRequest('GET', content_url, {
			success: function(o) {
				YAHOO.Isvy.contentTrans._cached_content[ content_id ] = o.responseText;
				YAHOO.Isvy.contentTrans.populate_content( content_id );
			},
			failure: function(o) {}
		}); 
	}
	

	return false;
}

YAHOO.Isvy.contentTrans.selectNav = function ( content_id, force ) {

	var oldnavlink = document.getElementById('nav-' + YAHOO.Isvy.contentTrans._current_content);
	if( !force )
		if( !oldnavlink || oldnavlink.id == content_id ) return;
		
	if( oldnavlink ) {
		YAHOO.util.Dom.removeClass( oldnavlink, 'selected-nav' );		
	} 
	//
	var navlink = document.getElementById('nav-' + content_id);
	if( navlink ) {
		YAHOO.util.Dom.addClass( navlink.id, 'selected-nav' )
	}
	YAHOO.Isvy.contentTrans._current_content = content_id;
}


YAHOO.Isvy.contentTrans.populate_content = function ( content_id ) {
	var html = this._cached_content[content_id];
	var contentdiv = document.getElementById('maincontent');
	//~ contentdiv.innerHTML = html; YAHOO.otorg.DomCollapse.init();return;
	//
	
	//~ console.log( YAHOO.Isvy.contentTrans._current_content + ' => ' + content_id );

	//
	
	
	var stagecontent = document.getElementById('stage-div');
	stagecontent.style.width = contentdiv.offsetWidth;		
	contentdiv.style.overflow = 'hidden';	
	var wiper = new YAHOO.util.Anim('maincontent', { height: { from: contentdiv.offsetHeight, to: 0 }}, YAHOO.Isvy.contentTrans.CONFIG.wiping_animation_duration/2, YAHOO.Isvy.contentTrans.CONFIG.wiping_animation_easing_in); 
	var unwiper = new YAHOO.util.Anim('maincontent', { height: { from: 0, to: 0 }}, YAHOO.Isvy.contentTrans.CONFIG.wiping_animation_duration/2, YAHOO.Isvy.contentTrans.CONFIG.wiping_animation_easing_out); 
	wiper.onTween.subscribe( function() { //this is here so IE doesn't prematurely show the element before it's supposed to have height
		if( parseInt(YAHOO.util.Dom.getStyle(contentdiv,'height').replace( /px$/, '' )) <= 2 ) 
			YAHOO.util.Dom.setStyle(contentdiv,'display','none');
	});
	wiper.onStart.subscribe( function() {
		contentdiv.style.borderBottom = YAHOO.Isvy.contentTrans.CONFIG.wiper_line_thickness.toString() + 'px solid ' + YAHOO.Isvy.contentTrans.CONFIG.wiper_line_color.toString();
	});
	wiper.onComplete.subscribe( function() {
		stagecontent.innerHTML = html;
		contentdiv.innerHTML = '';				
		YAHOO.otorg.DomCollapse.init();
		var good_height_ids = [];
		var good_heights = {};
		var h;
		for( h in YAHOO.otorg.DomCollapse._heights ) {
			if(!h.match(/^yui-gen/)) continue;
			good_height_ids.push( parseInt(h.replace(/^yui-gen/, '')) );
		}
		function numsort(a,b) { return a - b };
		for( h in good_height_ids.sort( numsort ) ) {
			var hid = 'yui-gen' + good_height_ids[h.toString()].toString();
			good_heights[ hid ] = YAHOO.otorg.DomCollapse._heights[ hid ];
		}
		unwiper.init( 'maincontent', { height: { from: 0, to: stagecontent.offsetHeight }}, YAHOO.Isvy.contentTrans.CONFIG.wiping_animation_duration/2, YAHOO.Isvy.contentTrans.CONFIG.wiping_animation_easing_out);
		contentdiv.innerHTML = html;		
		stagecontent.innerHTML = '';		
		YAHOO.otorg.DomCollapse.init();
		unwiper.onTween.subscribe( function() { //this is here so IE doesn't prematurely show the element before it's supposed to have height
			if( parseInt(YAHOO.util.Dom.getStyle(contentdiv,'height').replace( /px$/, '' )) >= 2 ) 
				YAHOO.util.Dom.setStyle(contentdiv,'display','');
		});
		unwiper.onComplete.subscribe( function() {
			contentdiv.style.height = '';
			contentdiv.style.borderBottom = '';
			contentdiv.style.overflow = '';
			YAHOO.Isvy.contentTrans._pageChanging = 0;
			var bad_height_ids = [];
			var bad_heights = [];
			var h;		
			for( h in YAHOO.otorg.DomCollapse._heights ) {
				if(!h.match(/^yui-gen/)) continue;
				bad_height_ids.push( parseInt(h.replace(/^yui-gen/, '')) );
			}
			function numsort(a,b) { return a - b };
			for( h in bad_height_ids.sort(numsort) ) {	
				var good_val = good_heights[ 'yui-gen' + good_height_ids[h.toString()].toString() ];
				YAHOO.otorg.DomCollapse._heights[ 'yui-gen' + bad_height_ids[ h.toString() ] ] = good_val;
			}
		});
		unwiper.animate();
	});
	//~ contentdiv.innerHTML = html;	
	wiper.animate();
	//
}

YAHOO.util.Event.onDOMReady(YAHOO.Isvy.contentTrans.initNavs);

} )();
