/**
 * YaDoc(r) Javascript library
 *
 * Until otherwise specified:
 * copyright 2008,2009 medizinagentur GmbH, Heidelberg, Germany
 */



var currently_shown = null;
window.current_full_location = null;



/**
 * General show/hide functions.
 */

function show_element(id) {
	var element = document.getElementById(id);
	if ( element ) {
		element.style.visibility = 'visible';
		element.style.display = 'block';
	}
}

function show_element_inline(id) {
	var element = document.getElementById(id);
	if ( element ) {
		element.style.visibility = 'visible';
		element.style.display = 'inline';
	}
}

function show_element_tr(id) {
	var element = document.getElementById(id);
	if ( element ) {
		element.style.visibility = 'visible';
		element.style.display = '';
		//element.style.display = 'table-row';
	}
}

function hide_element(id) {
	var element = document.getElementById(id);
	if ( element ) {
		element.style.visibility = 'hidden';
		element.style.display = 'none';
	}
}



/**
 * Hover/unhover the navigation header elements
 */

window.active_header_navi_item = null;

function hover_header_navi(id) {
	document.getElementById( 'top_hover_'+id ).style.visibility = 'visible';
}

function unhover_header_navi(id) {
	document.getElementById( 'top_hover_'+id ).style.visibility = 'hidden';
}

function toogle_act_header_navi_item(id) {
	if ( window.active_header_navi_item )
		document.getElementById( 'top_act_' + window.active_header_navi_item ).style.visibility = 'hidden';
	document.getElementById( 'top_act_'+id ).style.visibility = 'visible';
	window.active_header_navi_item = id;
}



/**
 * Active item in left navigation
 */

window.active_left_navi_item = null;

function toogle_act_left_navi_item(id) {
	if ( window.active_left_navi_item && document.getElementById( 'submenu_' + window.active_left_navi_item ) )
		document.getElementById( 'submenu_' + window.active_left_navi_item ).className = 'submenu_item';
		
	window.active_left_navi_item = id;
	var element = document.getElementById( 'submenu_' + window.active_left_navi_item );
	if ( element ) {
		element.className = 'submenu_act_item';
		menu_open( element.parentNode.parentNode.parentNode );
		if ( !menu_active_element )
			menu_active_element = element.parentNode.parentNode.parentNode;
	}
}



/**
 * Editable forms
 */

function edit_field(ids) {
	var editable_fields = getElementsByClass( document, 'editable_edit' );
	var field;
	for ( var ii in editable_fields ) {
		field = editable_fields[ii];
		field.className = 'editable_plain';
	}
	
	var a_ids = ids.split(',');
	for ( var ii in a_ids ) {
		var id = a_ids[ii];
		var element = document.getElementById( 'editable_'+id );
		if ( element ) {
			field = getElementsByClass( element, 'editable_plain' )[0];
			field.className = 'editable_edit';
		}
	}
}



/**
 * Show/hide popup window.
 */

function show_popup(id) {
	if ( window.browser.IE7 && ( id === 'agb' || id === 'datenschutz' ) ) {
		var url = "http://www.yadoc.de/" + id + ".php";
		var popup_window = window.open( url, "YaDocPopup", "width=500,height=400,left=200,top=200,menubar=no,toolbar=no,location=no,status=yes,resizable=yes,scrollbars=yes" );
		popup_window.focus();
	} else {
		document.getElementById('popup_content').innerHTML = document.getElementById(id).innerHTML;
		show_element('popup');
	}
}

function hide_popup(id) {
	hide_element('popup');
}



/**
 * Show help and feedback window.
 */
var help_window = null;

function show_help( location_hash, acc_type ) {
	var current_location;
	var url;
	
	if ( typeof location_hash == 'undefined' ) 
		current_location = dhtmlHistory.getCurrentLocation().split(',')[0];
	else
		current_location = location_hash;
	
	if ( typeof acc_type == 'undefined' ) {
		var acc_type;
		if ( window.global_values && window.global_values.type )
			acc_type = window.global_values.type;
		else
			acc_type = '';
	}
	
	if ( acc_type == 'patient' )
		url = "http://www.yadoc.de/hilfe_patient.html#" + current_location;
	else if ( acc_type == 'doctor' )
		url = "http://www.yadoc.de/hilfe_arzt.html#" + current_location;
	else
		url = "http://www.yadoc.de/hilfe.html#" + current_location;
	
	if ( help_window && !help_window.closed )
		help_window.location.href = url;
	else
		var help_window = window.open( url, "YaDocHilfe", "width=500,height=400,left=200,top=200,menubar=no,toolbar=no,location=no,status=yes,resizable=yes,scrollbars=yes" );
	if ( help_window ) {
		//help_window.scrollbars.visible = true;
		help_window.focus();
	}
}

var feedback_window = null;

function show_feedback() {
	var current_location = window.location.href;
	var url = "http://www.yadoc.de/index.php?action=feedback&l=" + escape(current_location);
	if ( !feedback_window || feedback_window.closed )
		var feedback_window = window.open( url, "YaDocFeedback", "width=500,height=400,left=200,top=200,menubar=no,toolbar=no,location=yes,status=yes,resizable=yes,scrollbars=yes" );
	if ( feedback_window )
		feedback_window.focus();
}

var videos_window = null;

function show_videos() {
	var url = "http://www.yadoc.de/videos/videos.html";
	if ( !videos_window || videos_window.closed )
		var videos_window = window.open( url, "YaDocVideos", "width=800,height=650,left=200,top=200,menubar=no,toolbar=no,location=yes,status=yes,resizable=yes,scrollbars=yes" );
	if ( videos_window )
		videos_window.focus();
}



/**
 * Call this to change the location. Simulates a 'click'.
 */

function show() {
	args = new Array();
	if ( arguments.length > 0 ) {
		for ( var ii = 0; ii < arguments.length; ii++ ) {
			args[ii] = arguments[ii];
		}
	}
	/**
	 * Make use of the RSH/Ajax infrastructure
	 */
	//window.location.hash = args.join(',');
	handleHistoryChange( args.join(','), null );
}



/**
 * Callback for handleHistoryChange to get some configurations for the new 
 * location.
 */

function get_location_data( new_location, args ) {
	var data = new Object();
	if ( args )
		data.args = args;
	else
		data.args = new Array();
	
	/**
	 * Set default values
	 */
	data.redirect = null;
	data.no_history = false;
	data.container = new_location;
	data.always_update = false;
	data.eval = null;
	var header_navi_items = {0:'empfang', 1:'wartezimmer', 2:'sprechzimmer', 3:'login'};
	data.header_navi_item = window.default_header_navi_item;
	data.left_navi_item = new_location;
	
	/**
	 * Get custom values
	 */
	if ( frames[new_location] ) {
		if ( frames[new_location].default_args ) {
			var default_args = frames[new_location].default_args;
			for ( var ii = data.args.length; ii < default_args.length; ii++ ) {
				if ( default_args[ii].charAt(0) == "$" )
					data.args[ii] = window.global_values[default_args[ii].substring(1)];
				else
					data.args[ii] = default_args[ii];
			}
		}
	
		var url = frames[new_location].url;
		if ( data.args.length > 0 )
			url = sprintf.apply( null, [url].concat(data.args) );
		data.url = url;
		
		if ( frames[new_location].redirect )
			data.redirect = frames[new_location].redirect;
		
		if ( frames[new_location].nohistory )
			data.no_history = true;
		
		if ( frames[new_location].container )
			data.container = frames[new_location].container;
		
		if ( frames[new_location].always_update )
			data.always_update = frames[new_location].always_update;
		
		if ( frames[new_location].eval ) 
			data.eval = frames[new_location].eval;
		
		if ( frames[new_location].header ) 
			data.header_navi_item = header_navi_items[ frames[new_location].header ];
		
		if ( frames[new_location].navi_item ) 
			data.left_navi_item = frames[new_location].navi_item;
	}
	
	return data;
}



/**
 * Toogles display of shown content.
 */

function display(id) {
	if ( id === '' ) id = null;
	
	if ( !id && window.initial ) id = window.initial;
	
	if ( id !== currently_shown ) {
		hide_element(currently_shown);
		show_element(id);
		currently_shown = id;
	}
}



/**
 * Called from within a form to submit it.
 */

function submit_form() {
	var container = arguments[0];
	var id;
	if ( arguments.length == 2 )
		id = arguments[1];
	else
		id = container;
	var form = document.forms[id];
	window.current_full_location = id;
	post_data( container, form );
	
	var el = form.elements;
	for ( var ii in el ) {
		var field = el[ii];
		if ( !field || !field.nodeName ) continue;
		
		var field_name = field.nodeName.toLowerCase();
		var field_type;
		if ( field.type )
			field_type = field.type;
		else
			field_type = '';
		
		if ( field_name == 'input' && field_type == 'submit' ) {
			field.disabled = 'disabled';
			field.value = 'Bitte haben Sie einen kurzen Augenblick Geduld...';
		} else if ( field_name == 'input' && field_type == 'image' ) {
			field.src = '/images/icons/yadoc_wait.gif';
		} else if ( field_name == 'button' ) {
			var imgs = field.getElementsByTagName( 'img' );
			if ( imgs.length > 0 ) {
				var img = imgs[0];
				img.src = '/images/icons/yadoc_wait.gif';
			}
		}
	}
	
	return false;
}





/**
 * Expander widgets
 */

function getElementHeight( element ) {
	/**
	 * Move the element to a remote position
	 */
	element.style.position = 'absolute';
	element.style.top = '-1000px';
	element.style.display = 'inline';
	
	/**
	 * Get the height and store it
	 */
	var element_height = element.offsetHeight;
	
	/**
	 * Restore the element's position
	 */
	element.style.position = 'relative';
	element.style.top = '0';
	
	return element_height;
}


var expander_states = Array();

function init_expander( root ) {
	/*var found_element_ids = getElementIdsByClass( root, 'expander' );
	
	for ( var ii in found_element_ids ) {
		var element = document.getElementById(found_element_ids[ii]);*/
	var found_elements = getElementsByClass( root, 'expander' );
	
	for ( var ii in found_elements ) {
		var element = found_elements[ii];
		if ( !isElement(element) )
			continue;
		var actor = getElementsByClass( element, 'expander_actor' )[0];
		var target = getElementsByClass( element, 'expander_target' )[0];
		
		expander_states[element.id] = Array();
		expander_states[element.id].state = 'closed';
		expander_states[element.id].interval = null;
		
		/**
		 * Register event
		 */
		addEvent( actor, 'click', expander_toogle );
		
		/**
		 * Get the target's size
		 */
		expander_states[element.id].height = getElementHeight( target );
	}
}


function expander_toogle( event ) {
	if ( event.target ) element = event.target.parentNode;
	else element = event.srcElement.parentNode;
	
	if ( expander_states[element.id].interval )
		window.clearInterval( expander_states[element.id].interval );
	
	if ( expander_states[element.id].state == 'closed' ) {
		expander_states[element.id].interval = window.setInterval( 'expander_step("' + element.id + '",7)', 40);
		expander_states[element.id].state = 'open';
		expander_states[element.id].current_slide_height = 0;
	} else {
		expander_states[element.id].interval = window.setInterval( 'expander_step("' + element.id + '",-7)', 40);
		expander_states[element.id].state = 'closed';
		expander_states[element.id].current_slide_height = expander_states[element.id].height;
	}
	
	return false;
}

function expander_step( expander_id, step ) {
	var expander = document.getElementById(expander_id);
	var target = getElementsByClass( expander, 'expander_target')[0];
	
	var current_slide_height = expander_states[expander_id].current_slide_height;
	var max_height = expander_states[expander_id].height;
	
	var current_height;
	if ( step > 0 )
		current_height = Math.min( current_slide_height+step, max_height );
	else
		current_height = Math.max( current_slide_height+step, 0 );
	current_slide_height = current_height;
	
	target.parentNode.style.height = current_height + 'px';
	target.style.marginTop = '-' + ( max_height - current_height ) + 'px';
	target.style.top = '-' + ( max_height - current_height ) + 'px';
	
	expander_states[expander_id].current_slide_height = current_slide_height;
	if ( ( step > 0 && current_height == max_height ) || ( step < 0 && current_height === 0 ) )
		window.clearInterval( expander_states[expander_id].interval );
}







/**
 * Sliding menu.
 */

var menu_heights = Array();

function init_menu() {
	var top_level_menu = document.getElementById('menu').childNodes;
	for ( var tl_element_id in top_level_menu ) {
		var tl_element = top_level_menu[tl_element_id];
		if ( isElement(tl_element) && tl_element.getElementsByTagName('span').length && getElementsByClass( tl_element, 'submenu_container').length ) {
			addEvent( tl_element.getElementsByTagName('span')[0], 'click', menu_toogle );
			
			var ul = getElementsByClass( tl_element, 'submenu_container')[0].getElementsByTagName('div')[0];
			//var ul = document.getElementById( getElementIdsByClass( tl_element, 'submenu_container')[0] ).getElementsByTagName('div')[0];
			var element_display = ul.parentNode.style.display;
			
			/**
			 * Move the element to a remote position
			 */
			ul.style.position = 'absolute';
			ul.style.top = '-1000px';
			ul.style.display = 'inline';
			
			/**
			 * Get the height and store it
			 */
			menu_heights[tl_element.id] = ul.offsetHeight;
			
			/**
			 * Restore the element's position
			 */
			ul.style.position = 'relative';
			ul.style.top = '0';
			ul.style.display = element_display;
			/*ul.style.display = 'none';*/
		}
	}
}

var menu_active_element = null;
var menu_slide_interval = new Array();
var menu_slide_height = new Array();
var menu_slide_opacity = new Array();

function menu_toogle( event ) {
	if ( event.target ) element = event.target.parentNode.parentNode;
	else element = event.srcElement.parentNode.parentNode;
	
	if ( menu_active_element != element ) {
		if ( menu_active_element )
			menu_close( menu_active_element );
		
		var caption_div = getElementsByClass( document.getElementById(element.id), 'tl_menu_bg')[0];
		if ( caption_div.attributes.href )
			window.location = caption_div.attributes.href.nodeValue;
		
		menu_open(element);
		menu_active_element = element;
	} else if ( element ) {
		menu_close(element);
		menu_active_element = null;
	}
	return false;
}

function menu_open( element ) {
	if ( menu_active_element == element )
		return;
	
	if ( menu_slide_interval[element.id] )
		window.clearInterval( menu_slide_interval[element.id] );
	
	var container = getElementsByClass( document.getElementById(element.id), 'submenu_container')[0];
	if ( container.className.split(' ').contains( 'submenu_container_open' ) ) 
		return;
	
	menu_slide_height[element.id] = 0;
	menu_slide_opacity[element.id] = 0;
	menu_slide_interval[element.id] = window.setInterval( 'menu_slide_step("' + element.id + '",7,' + menu_heights[element.id] + ')', 40);
}

function menu_close( element ) {
	if ( menu_slide_interval[element.id] )
		window.clearInterval( menu_slide_interval[element.id] );
	menu_slide_interval[element.id] = window.setInterval( 'menu_slide_step("' + element.id + '",-7,' + menu_heights[element.id] + ')', 40);
}

function menu_slide_step( element_id, step, element_height ) {
	var ul = getElementsByClass( document.getElementById(element_id), 'submenu_container')[0].getElementsByTagName('div')[0];
	
	var current_height = menu_slide_height[element_id];
	var current_opacity = menu_slide_opacity[element_id];
	
	if ( ( step > 0 && current_height < element_height ) || ( step < 0 && current_height > 0 && current_opacity === 0 ) ) {
		if ( step > 0 ) {
			current_height = Math.min( current_height+step, element_height );
		} else {
			ul.style.display = 'none';
			current_height = Math.max( current_height+step, 0 );
		}
		menu_slide_height[element_id] = current_height;
		
		ul.parentNode.style.height = current_height + 'px';
		ul.style.marginTop = '-' + ( element_height - current_height ) + 'px';
		ul.style.top = '-' + ( element_height - current_height ) + 'px';
	} else if ( ( step > 0 && current_opacity < 1 ) || ( step < 0 && current_opacity > 0 ) ) {
		if ( step > 0 ) {
			ul.style.display = 'inline';
			current_opacity = Math.min( current_opacity+0.1, 1 );
		} else {
			current_opacity = Math.max( current_opacity-0.1, 0 );
		}
		menu_slide_opacity[element_id] = current_opacity;
		
		if ( typeof ul.style.opacity != "undefined" )
			ul.style.opacity = current_opacity;
	} else {		
		window.clearInterval( menu_slide_interval[element_id] );
		menu_slide_interval[element_id] = null;
	}
}




/**
 * Notifications
 */

window.notifications_shown_element_hash = null;
function notifications_show_details( element_hash ) {
	notifications_hide_details( window.notifications_shown_element_hash );
	
	var class_name = 'notification_details_' + element_hash;
	var els = getElementsByClass( document, class_name );
	for ( var ii in els ) {
		var el = els[ii];
		if ( typeof el === 'function' ) continue;
		el.className = el.className.replace( 'notifications_hidden_details', 'notifications_shown_details' );
	}
	show_element_inline( 'notifications_hide_details_' + element_hash );
	hide_element( 'notifications_show_details_' + element_hash );
	
	window.notifications_shown_element_hash = element_hash;
}

function notifications_hide_details( element_hash ) {
	if ( element_hash ) {
		var class_name = 'notification_details_' + element_hash;
		var els = getElementsByClass( document, class_name );
		for ( var ii in els ) {
			var el = els[ii];
			if ( typeof el === 'function' ) continue;
			el.className = el.className.replace( 'notifications_shown_details', 'notifications_hidden_details' );
		}
		show_element_inline( 'notifications_show_details_' + element_hash );
		hide_element( 'notifications_hide_details_' + element_hash );
	}
	
	window.notifications_shown_element_hash = null;
}




/**
 * RSH (ReallySimpleHistory) functions
 * http://code.google.com/p/reallysimplehistory/
 */

if ( window.dhtmlHistory )
	window.dhtmlHistory.create();

function init_rsh() {
	if ( !window.dhtmlHistory )
		return;
	
	window.dhtmlHistory.initialize();
	window.dhtmlHistory.addListener( handleHistoryChange );
	
	var initial_location = dhtmlHistory.getCurrentLocation();
	if ( initial_location )
		handleHistoryChange( initial_location, null );
	else if ( window.initial ) {
		window.location.hash = window.initial;
		if ( window.browser.IE )
			handleHistoryChange( window.initial, null );
	}
		/*handleHistoryChange( window.initial, null );
	if ( !initial_location && window.initial )*/
}

function handleHistoryChange( new_location, hist_data ) {
	var new_location_args = null;
	if ( new_location.indexOf(',') > -1 ) {
		var tmp = new_location.split(',');
		new_location = tmp[0];
		new_location_args = tmp.slice(1);
	}
	
	hist_data = get_location_data( new_location, new_location_args );
	
	if ( hist_data.redirect ) {
		window.location.hash = hist_data.redirect;
		handleHistoryChange( hist_data.redirect, null );
		return;
	}
	
	var new_full_location = new_location;
	if ( hist_data.args ) 
		new_full_location = [new_location].concat(hist_data.args.join(",")); 
	
	if ( !hist_data.always_update && new_full_location == window.current_full_location )
		return;
	window.current_full_location = new_full_location;
	
	if ( hist_data.url )
		get_data( hist_data.container, hist_data.url );
	else
		display(new_location);
	
	if ( hist_data.eval )
		eval( hist_data.eval );
	
	if ( hist_data.header_navi_item )
		toogle_act_header_navi_item( hist_data.header_navi_item );
	if ( hist_data.left_navi_item )
		toogle_act_left_navi_item( hist_data.left_navi_item );
}



/**
 * Additional array functionality
 */

Object.prototype.contains = function ( element ) {
	for ( var ii in this )
		if ( this[ii] == element ) return true;
	return false;
} 



/**
 * Get IDs of elements being of the given class.
 * Based on: http://www.dustindiaz.com/getelementsbyclass
 */
function getElementIdsByClass( node, searchClass ) {
	var elementIds = new Array();
	var els = node.getElementsByTagName('*');
	for (i = 0, j = 0; i < els.length; i++) {
		if ( els[i].className.split(' ').contains( searchClass ) ) {
			var classId;
			if ( els[i].id ) {
				classId = els[i].id;
			} else {
				classId = Math.round( Math.random() * 1000 ).toString();
				els[i].id = classId;
			}
			elementIds[j] = classId;//els[i];
			j++;
		}
	}
	return elementIds;
}

function getElementsByClass( node, searchClass ) {
	if ( !node )
		return new Array();
	
	var found_elements = new Array();
	var els = node.getElementsByTagName('*');
	for ( var ii = 0, jj = 0; ii < els.length; ii++ ) {
		if ( els[ii].className.split(' ').contains(searchClass) ) {
			var class_id;
			if ( els[ii].id ) {
				class_id = els[ii].id;
			} else {
				class_id = Math.round( Math.random() * 1000 ).toString();
				els[ii].id = class_id;
			}
			found_elements[jj] = document.getElementById(class_id);
			jj++;
		}
	}
	return found_elements;
}


/**
 * Add event listener. IE compatible.
 * http://ejohn.org/projects/flexible-javascript-events/
 */

function addEvent( obj, type, fn ) {
	if ( obj.addEventListener ) {
		obj.addEventListener( type, fn, false );
	} else if ( obj.attachEvent ) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}



/**
 * Check, whether an object is an element. IE compatible.
 */

function isElement( obj ) {
	if ( window.Element && !window.browser.IE8 )
		return obj instanceof window.Element;
	else
		return obj && typeof obj === "object" && obj.nodeType == 1 && typeof obj.tagName === "string";
}



/**
 * Ajax functionality.
 */

/**
 * Callback for get_data and post_data.
 */
function handle_ajax_response( xmlHttp, container ) {
	if ( xmlHttp.readyState == 4  && xmlHttp.status == 200 ) {
		var response = xmlHttp.responseText;
		var chunks;
		if ( response.substr( 0, 8 ) == 'REDIRECT' ) {
			chunks = response.split(' ', 2);
			window.location.href = chunks[1];
		} else if ( response.substr( 0, 6 ) == 'RELOAD' ) {
			window.history.back();
			window.location.reload();
		} else if ( response.substr( 0, 4 ) == 'SHOW' ) {
			chunks = response.split(' ', 2);
			var new_location_hash = '#' + chunks[1];
			if ( window.location.hash == new_location_hash )
				show(chunks[1]); // needed for the case chunks[1] == window.current_full_location
			else
				window.location.hash = new_location_hash;
		} else {
			document.getElementById(container).innerHTML = response;
			display(container);
			
			/**
			 * http://www.galileocomputing.de/katalog/buecher/htmlleseproben/gp/htmlprobID-78#level3~12
			 */
			var reg = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
			var match = new RegExp( reg, 'img' );
			var scripts  = response.match(match);
			var match2 = new RegExp( reg, 'im' );
			if ( scripts ) {
				for ( var i = 0; i < scripts.length; i++ ) {
					eval( scripts[i].match(match2)[1] );
				}
			}
			init_expander( document.getElementById(container) );
			fix_input_classnames();
		}
	}
}



/**
 * http://de.wikipedia.org/wiki/XMLHttpRequest
 */

function get_data( container, url ) {
	if ( !document.getElementById(container) )
		container = 'container';
	var xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP");
	if ( xmlHttp ) {
		xmlHttp.open( 'GET', url, true );
		xmlHttp.onreadystatechange = function() { handle_ajax_response( xmlHttp, container ) };
		xmlHttp.send(null);
	}
}


function post_data( container, form ) {
	var url = form.action;
	if ( !document.getElementById(container) )
		container = 'container';
	
	var data = "";
	for ( var ii = 0; ii < form.elements.length; ii++ ) {
		var el = form.elements[ii];
		if ( el.disabled ) {
			continue;
		} else if ( el.type == "text" || el.type == "password" || el.type == "textarea" || el.type == "hidden" ) {
			if ( ii > 0 ) data += "&";
			data += encodeURIComponent(el.name) + "=" + encodeURIComponent(el.value);
		} else if ( el.type == "checkbox" && el.checked ) {
			if ( ii > 0 ) data += "&";
			data += encodeURIComponent(el.name) + "=" + encodeURIComponent(el.value);
		} else if ( el.type == "radio" && el.checked ) {
			if ( ii > 0 ) data += "&";
			data += encodeURIComponent(el.name) + "=" + encodeURIComponent(el.value);
		} else if ( el.options ) {
			if ( ii > 0 ) data += "&";
			//data += encodeURIComponent(el.name) + "=" + encodeURIComponent(el.options[el.options.selectedIndex].value);
			var selectedvalues = new Array();
			for ( var jj = 0; jj < el.options.length; jj++ ) {
				if ( el.options[jj].selected )
					selectedvalues.push( encodeURIComponent(el.options[jj].value) );
			}
			data += encodeURIComponent(el.name) + "=" + selectedvalues.join(',');

		}
	}
	
	var xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP");
	if ( xmlHttp ) {
		xmlHttp.open( 'POST', url, true );
		xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		xmlHttp.onreadystatechange = function() { handle_ajax_response( xmlHttp, container ) };
		xmlHttp.send(data);
	}
}



/**
 * sprintf()
 *
 * Based loosely on http://www.naden.de/blog/javascript-printf
 */

function sprintf() {
	function replace_tag( str, tag, offset, s ) {
		var output;
		switch ( tag ) {
    		case 'b': // binary
       			output = '0b' + data.pop().toString(2);
       			break;
            case 'o': // octal
				output = '0' + data.pop().toString(8);
				break;
            case 'x': // hex
				output = '0x' + data.pop().toString(16);
				break;
            default: // 'd', 'i', or 's'
				output = data.pop().toString();
		}
		return output;
	}

	if ( arguments.length === 0 )
		return "";
	else if ( arguments.length === 1 )
		return arguments[0];
	
	var data = Array.prototype.slice.call(arguments).reverse();
	var format = data.pop();
	var myregexp = /%([bdisox])/;
	
	while (	myregexp.test( format ) && data.length > 0 )
		format = format.replace( myregexp, replace_tag );
	return format;
}


function fix_input_classnames() {
	/**
	 * IE does not support attribute selectors in CSS (input[type=<type>]. This 
	 * fix will add a class name to each input tag, so it can be accessed as 
	 * input.<type> in CSS.
	 */
	if ( document.getElementsByTagName ) {
		var found_elements = document.getElementsByTagName('input');
		
		for ( ii = 0; ii < found_elements.length; ii++ ) {
			var element = found_elements[ii];
			
			var input_type = element.getAttribute('type');
			if ( element.className.indexOf(input_type) == -1 )
				element.className = input_type + ' ' + element.className;
		}
	}
}

function detect_browser() {
	var ua = navigator.userAgent.toLowerCase();
	
	window.browser = {
		IE: /msie/.test(ua),
		IE6: /msie 6.0/.test(ua),
		IE7: /msie 7.0/.test(ua),
		IE8: /msie 8.0/.test(ua)
	};
		
		/*Gecko: /gecko/.test(ua),
		Gecko18: /rv:1\.8[^.].*gecko/.test(ua),
		Gecko181: /rv:1\.8\.1.*gecko/.test(ua),
		Gecko19: /rv:1\.9[^.].*gecko/.test(ua),
		Gecko191: /rv:1\.9\.1.*gecko/.test(ua),
		
		FF: /firefox/.test(ua),
		FF2: /firefox\/2.0/.test(ua),
		FF3: /firefox\/3.0/.test(ua),
		FF35: /firefox\/3.5/.test(ua),
		
		Safari: /safari/.test(ua),
		Safari2: /safari\/41/.test(ua),
		Safari3: /safari\/52[235]/.test(ua),
		Safari4: /safari\/52[68]/.test(ua),
		
		Opera: /opera/.test(ua),*/
}


function init_yadoc() {
	detect_browser();
	
	/*if ( window.initial ) {
		currently_shown = window.initial;
		display(window.initial);
	}*/
	
	if ( window.active_header_navi_item )
		toogle_act_header_navi_item( window.active_header_navi_item );
	
	init_expander( document );
	init_menu();
	init_rsh();
	fix_input_classnames();
}

function init() {
	init_yadoc();
}
