//<!--
/************************************************************************
*
*  online.QTAFI - online survey
*
*  Copyright (C) 2008  Martin Guist guist.incher.uni-kassel.de
*
*  This program is free software: you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation, either version 3 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*************************************************************************/

//Scripts für das Hauptformular

function initiation(){
	var len = window.location.href.length;
	if(window.location.href.charAt(len-1) != "/"){
		window.location.href = window.location.href + "/";
	}
}

/**
*
*/
var cv_values = new Object();
var cv_hierachy = new Object();


function getVariable(varstr){
	if( document.qtafi2[varstr] ){
		return document.qtafi2[varstr].value;
	}
	return "-9";
}

function setVariable( varstr, valstr ){
	if( document.qtafi2[varstr] ){
		document.qtafi2[varstr].value = valstr;
	}
}

/*
* does not allow .,
*/
function checkInteger(evt, decimal){
	var charCode = ( evt.which ) ? evt.which : event.keyCode;
	//return ( (charCode >= 48 && charCode <= 57) || charCode < 32 || charCode == decimal );
	return ( (charCode >= 48 && charCode <= 57) || charCode < 32 || charCode == 44 || charCode == 46 );
}

/**
* arguments[0] = var
* arguments[1] = not selected value
* arguments[2] = selected value
* arguments[3] = number
*/
function toggle_CV(){
	var vname = arguments[0];
	var vnum = arguments[2];
	if( document.forms["qtafi2"].elements[arguments[0]].value == arguments[2] ){
		document.forms["qtafi2"].elements["__"+arguments[0]][arguments[3]].checked = false;
		document.forms["qtafi2"].elements[arguments[0]].value = arguments[1];
	}
	else{
		document.forms["qtafi2"].elements[arguments[0]].value = arguments[2];
	}
	valueChanged( arguments[0] );
}

function getCategoryLevel(){
	var level = 0;
	if( ! arguments[0][arguments[1]] ) return -1;
	if( arguments[0][arguments[1]] == "__none" ) return 0;
	var t = arguments[0][arguments[1]];
	while( t != "__none" ){
		t = arguments[0][t];
		level++;
		if( level == 10 ) return -1;
	}
	return level;
}

/**
* arguments[0] = var
* arguments[1] = tempvar
*/
function selectCategory(){
	var selectedvalue = document.forms["qtafi2"].elements[arguments[1]].value;
	document.forms["qtafi2"].elements[arguments[0]].value = selectedvalue;
	
	var l = getCategoryLevel( cv_hierachy[arguments[0]], selectedvalue );
	if( l < 0 ) return;
	for( var n = l; n < 2; n++){
		var levelid = arguments[0] + "_L" + (n+1);
		if( document.getElementById( levelid ) ){
			document.getElementById( levelid ).innerHTML = " ";
		}
	}
	
	var vvv = selectedvalue;
	var levelid = arguments[0] + "_L" + (l+1);
	if( cv_values[arguments[0]][vvv] ){
		document.getElementById( levelid ).innerHTML = cv_values[arguments[0]][vvv].replace( /%%%/g, '\"');
		document.forms["qtafi2"].elements["__"+arguments[0]+"_"+vvv].value = vvv;
	}
	else {
		if( document.getElementById( levelid ) ) document.getElementById( levelid ).innerHTML = " ";
	}
}

/**
* arguments[0] = var
* arguments[1] = temp
*/
function initCategory(){
	var selectedvalue = document.forms["qtafi2"].elements[arguments[0]].value;

	var l = getCategoryLevel( cv_hierachy[arguments[0]], selectedvalue );
	if( l < 0 ) return;
	var vvv = selectedvalue;

	for( var i = 0; i< 5; i++ ){
		var levelid = arguments[0] + "_L" + l;
		var ddd = cv_hierachy[arguments[0]][vvv];
		if( cv_values[arguments[0]][ddd] ){
			document.getElementById( levelid ).innerHTML = cv_values[arguments[0]][ddd].replace( /%%%/g, '\"');
		}
		if( document.forms["qtafi2"].elements["__"+arguments[0]+"_"+ddd] ){
			document.forms["qtafi2"].elements["__"+arguments[0]+"_"+ddd].value = vvv;
			for( var oi = 0; oi < document.forms["qtafi2"].elements["__"+arguments[0]+"_"+ddd].length; oi++ ){
				if( document.forms["qtafi2"].elements["__"+arguments[0]+"_"+ddd].options[oi].value == vvv ){
					document.forms["qtafi2"].elements["__"+arguments[0]+"_"+ddd].selectedIndex = oi;
					break;
				}
			}
		}
		if( ! cv_hierachy[arguments[0]][vvv] ) return;
		vvv = cv_hierachy[arguments[0]][vvv];
		l--;
	}
}

var scroll_y = 0;
function popup_CV(ev, cvnr){
	//scroll_y = (document.all ? document.scrollTop : window.pageYOffset);
	scroll_y = getScrollXY()[1];
	var el = document.getElementById(cvnr+'_popup');
	el.style.display = 'block';
	el.style.visibility = 'visible';
	window.scrollTo(0,0);
}

function popdown_CV(cvvar,cvnr){
	var el = document.getElementById(cvnr+'_popup');
	el.style.display = 'none';
	el.style.visibility = 'hidden';
	var sel = getVariable(cvvar);
	//document.getElementById(cvnr + '_show').firstChild.data = document.getElementById(cvvar+'_'+sel).firstChild.data;
	document.getElementById(cvnr + '_show').innerHTML = document.getElementById(cvvar+'_'+sel).innerHTML;
	/*if(scroll_y>0) */ window.scrollTo(0, scroll_y);
}

function getScrollXY(){
	var scrOfX = 0, scrOfY = 0;
	if(typeof(window.pageYOffset) == 'number'){
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	}
	else if(document.body && (document.body.scrollLeft || document.body.scrollTop)){
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	}
	else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)){
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [scrOfX, scrOfY];
}


/**
* arguments[0] = var
* arguments[1] = not selected value
* arguments[2] = selected value
*/
function toggle_MD(){
	if( document.forms["qtafi2"].elements["__"+arguments[0]].checked == true ){
		document.forms["qtafi2"].elements[arguments[0]].value = arguments[2];
	}
	else{ 
		document.forms["qtafi2"].elements[arguments[0]].value = arguments[1];
	}
	valueChanged( arguments[0] );
}

/**
* arguments[0] = var
* arguments[1] = not selected value
* arguments[2] = selected value
* arguments[3] = number
*/
function toggle_OR(){
	var vname = arguments[0];
	var vnum = arguments[2];
	if( document.forms["qtafi2"].elements[arguments[0]].value == arguments[2] ){
		document.forms["qtafi2"].elements["__"+arguments[0]][arguments[3]].checked = false;
		document.forms["qtafi2"].elements[arguments[0]].value = arguments[1];
	}
	else{
		document.forms["qtafi2"].elements[arguments[0]].value = arguments[2];
	}
	valueChanged( arguments[0] );
}

/**
* arguments[0] = var
* arguments[1] = value
*/
function set_value(){
	if( document.forms["qtafi2"].elements[arguments[0]] ){
		document.forms["qtafi2"].elements[arguments[0]].value = arguments[1];
	}
	if( document.forms["qtafi2"].elements["__"+arguments[0]] ){
		if( document.forms["qtafi2"].elements["__"+arguments[0]][0] ){//array
			if( document.forms["qtafi2"].elements["__"+arguments[0]][0].type == "radio" ){
				for( var i = 0; i < document.forms["qtafi2"].elements["__"+arguments[0]].length; i++ ){
					if( arguments[1] == '-9' ){
						document.forms["qtafi2"].elements["__"+arguments[0]][i].checked = false;
					}
					else{
						if( document.forms["qtafi2"].elements["__"+arguments[0]][i].value == arguments[1] ){
							document.forms["qtafi2"].elements["__"+arguments[0]][i].checked = true;
						}
					}
				}
			}
		}
		else {//kein array
			if( document.forms["qtafi2"].elements["__"+arguments[0]].type == "checkbox" ){//MD
				if( arguments[1] == '-9' ){
					document.forms["qtafi2"].elements["__"+arguments[0]].checked = false;
				}
				else if( document.forms["qtafi2"].elements["__"+arguments[0]].value == arguments[1] ){
					document.forms["qtafi2"].elements["__"+arguments[0]].checked = true;
				}
			}
			else {
				document.forms["qtafi2"].elements["__"+arguments[0]].value = arguments[1];
			}
		}
	}
	valueChanged( arguments[0] );
}

/**
* arguments[0] = the question id
* arguments[1] = variable to send with request
* arguments[2] = variable to send with request
* 		variable to send with request
*/
function asynchronRequest(){
	var httpRequest;
	var nodeid = arguments[0];
	
	if( window.XMLHttpRequest ){ //Mozilla, Safari, ...
		httpRequest = new XMLHttpRequest();
	} 
	else if( window.ActiveXObject ){ //IE
		httpRequest = new ActiveXObject( "Microsoft.XMLHTTP" );
	}
	
	httpRequest.onreadystatechange = function(){
		if( httpRequest.readyState == 4 ){//complete
			if(nodeid){
				var node = document.getElementById( nodeid );
				node.innerHTML = httpRequest.responseText;
				evalScript(httpRequest.responseText);
			}
		}
	};
	
	var postrequest = "";
	for( var i = 1; i < (arguments.length); i++ ){
		if( document.forms["qtafi2"].elements[arguments[i]] ){
			postrequest += '&'+arguments[i]+'='+document.forms["qtafi2"].elements[arguments[i]].value;
		}
	}
	//alert(postrequest);
	httpRequest.open( 'POST', '?asynchronrequest=' + arguments[0], true );
	httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	httpRequest.send( '__id='+document.qtafi2.__id.value+'&__project='+document.qtafi2.__project.value +'&__page='+document.qtafi2.__page.value+'&'+postrequest );
}


function evalScript(scripts){	
	try {	
		if(scripts != ''){	
			var script = "";
			scripts = scripts.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){
				if(scripts !== null) script += arguments[1] + '\n'; return '';});
				if(script) (window.execScript) ? window.execScript(script) : window.setTimeout(script, 0);
		}
		return false;
	}
	catch(e){	
		alert(e)
	}
}

/**
* toggles the visibility of the element (space is required)
*
* argument[0] = the element id
*/
function toggle_visibility(nr){
	if (document.layers){
		vista = (document.layers[nr].visibility == 'hide') ? 'show' : 'hide'
		document.layers[nr].visibility = vista;
	}
	else if (document.all){
		vista = (document.all[nr].style.visibility == 'hidden') ? 'visible'	: 'hidden';
		document.all[nr].style.visibility = vista;
	}
	else if (document.getElementById){
		vista = (document.getElementById(nr).style.visibility == 'hidden') ? 'visible' : 'hidden';
		document.getElementById(nr).style.visibility = vista;

	}
}

/**
* toggles the visibility of the element
*
* argument[0] = the element id
* argument[1] = the visibility
* arguments[2]= init true|false
*/
function display_id(){
	if( document.getElementById ){
		if( ! arguments[1] ){
			if( document.getElementById(arguments[0]) ){
				//document.getElementById(arguments[0]).style.display = 'none';
				if( arguments[2] ) new Fx.Slide( arguments[0], { duration: 500 } ).hide();//initiation
				else new Fx.Slide( arguments[0], { duration: 500 } ).slideOut();
			}
			if( document.getElementById(arguments[0]+'__') ){
				//document.getElementById(arguments[0]+'__').style.display = 'block';
				if( arguments[2] ) new Fx.Slide( arguments[0]+'__', { duration: 500 } ).show();
				else new Fx.Slide( arguments[0]+'__', { duration: 500 } ).slideIn();
			}
		}
		else {
			if( document.getElementById(arguments[0]) ){
				//document.getElementById(arguments[0]).style.display = 'block';
				if( arguments[2] ) new Fx.Slide( arguments[0], { duration: 500 } ).show();
				else new Fx.Slide( arguments[0], { duration: 500 } ).slideIn();
			}
			if(document.getElementById(arguments[0]+'__') ){
				//document.getElementById(arguments[0]+'__').style.display = 'none';
				if( arguments[2] ) new Fx.Slide( arguments[0]+'__', { duration: 500 } ).hide();
				else new Fx.Slide( arguments[0]+'__', { duration: 500 } ).slideOut();
			}
		}
	}
}

/**
* arguments[0] = question element (not variable)
* arguments[1] = init true |false
*/
function hideQuestion(){
	if( arguments[1] ){//initation
		new Fx.Slide( arguments[0], { duration: 0 } ).hide();//initiation
	}
	else {
		if( navigator.appVersion.search(/MSIE 6.0/) > 0 ){
			new Fx.Slide( arguments[0], { duration: 0 } ).hide();
		}
		else{
			new Fx.Slide( arguments[0], { duration: 500 } ).slideOut();
		}
	}
}

function showQuestion(){
	if( arguments[1] ){
		new Fx.Slide( arguments[0], { duration: 0 } ).show();//initiation
	}
	else {
		if( navigator.appVersion.search(/MSIE 6.0/) > 0 ){
			new Fx.Slide( arguments[0], { duration: 0 } ).show();
		}
		else {
			new Fx.Slide( arguments[0], { duration: 500 } ).slideIn();
		}
	}
}

/**
* arguments[0] = variable
*/
function enableVariable(){
	if( document.forms["qtafi2"].elements[arguments[0]]){
		if( document.forms["qtafi2"].elements[arguments[0]].type != "hidden" ){
			document.forms["qtafi2"].elements[arguments[0]].disabled = false;
		}
		if( document.forms["qtafi2"].elements['__'+arguments[0]] ){
			if( document.forms["qtafi2"].elements['__'+arguments[0]][0] ){//Array
				for( var i = 0; i < document.forms["qtafi2"].elements['__'+arguments[0]].length; i++ ){
					document.forms["qtafi2"].elements['__'+arguments[0]][i].disabled = false;
				}
			}
			else {
				document.forms["qtafi2"].elements['__'+arguments[0]].disabled = false;
			}
		}
	}
}

function disableVariable(){
	if( document.forms["qtafi2"].elements[arguments[0]]){
		if( document.forms["qtafi2"].elements[arguments[0]].type != "hidden" ){
			document.forms["qtafi2"].elements[arguments[0]].disabled = true;
		}
		if( document.forms["qtafi2"].elements['__'+arguments[0]] ){
			if( document.forms["qtafi2"].elements['__'+arguments[0]][0] ){//Array
				for( var i = 0; i < document.forms["qtafi2"].elements['__'+arguments[0]].length; i++ ){
					document.forms["qtafi2"].elements['__'+arguments[0]][i].disabled = true;
				}
			}
			else{
				document.forms["qtafi2"].elements['__'+arguments[0]].disabled = true;
			}
		}
	}
}


var variableListener = new Array();

function onLoadHook(){
	for( var i in variableListener ) valueChanged( i, true );
}

function requestPIN(){
	var httpRequest;
	
	if( window.XMLHttpRequest ){ //Mozilla, Safari, ...
		httpRequest = new XMLHttpRequest();
	} 
	else if( window.ActiveXObject ){ //IE
		httpRequest = new ActiveXObject( "Microsoft.XMLHTTP" );
	}
	
	httpRequest.onreadystatechange = function(){
		if( httpRequest.readyState == 4 ){//complete
			document.body.innerHTML = httpRequest.responseText
			var scn = document.getElementById("enablejavascript");
			if( scn ) scn.parentNode.removeChild(scn);
		}
	};
	
	httpRequest.open( 'POST', '?', true );
	httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	httpRequest.send( '__action=requestPIN' );
}

/**
* arguments[0] = url
* arguments[1] = width
* arguments[2] = height
*/
function smallWindow(){
	if( arguments[1] && arguments[2] ){
		window.open( arguments[0], "smallWindow", "width="+arguments[1]+", height="+arguments[2]+", left=100, top=100, scrollbars=no" );
	}
	else{
		window.open( arguments[0], "smallWindow", "width=550, height=450, left=100, top=100, scrollbars=yes" );
	}
}

/**
* arguments[0] = the result element
* arguments[1] = count of vars
* arguments[2..x] = the vars to sum
*/
function sumPercent(){
	var res = 0;
	for( n = 0; n < arguments[1]; n++ ){
		checkPercent( arguments[n+2] );
		if( isNaN( document.forms["qtafi2"].elements[arguments[n+2]].value ) ){
			document.forms["qtafi2"].elements[arguments[0]].style.color = "red";
			document.forms["qtafi2"].elements[arguments[0]].value = "keine Zahl";
			return;
		}
		res += Number( document.forms["qtafi2"].elements[arguments[n+2]].value );
	}
	document.forms["qtafi2"].elements[arguments[0]].value = res+"%";
	if( res > 100 ){
		document.forms["qtafi2"].elements[arguments[0]].style.color = "red";
	}
	else{
		document.forms["qtafi2"].elements[arguments[0]].style.color = "black";
	}
}

/**
* arguments[0] = the var
* 
*/
function checkPercent(){
	if( isNaN( document.forms["qtafi2"].elements[arguments[0]].value ) ){
		alert( "Bitte eine Zahl eingeben" );
		document.forms["qtafi2"].elements[arguments[0]].value = "";
		return;
	}
	else if( Number( document.forms["qtafi2"].elements[arguments[0]].value ) > 100 ){
		alert( "Bitte eine Zahl zwischen 0 und 100 eingeben" );
		document.forms["qtafi2"].elements[arguments[0]].value = "";
		return;
	}
}

/**
* arguments[0] = the var
* 
*/
function checkNumber(){
	if( isNaN( document.forms["qtafi2"].elements[arguments[0]].value ) ){
		alert( "Bitte eine Zahl eingeben" );
		document.forms["qtafi2"].elements[arguments[0]].value = "";
		return;
	}
}

/**
* Eingabekontrolle
*
*/

/**
* array mit Bedingungen
*
* [1] = "x < 1"
*
*
* [1][left] = [VAR:X] 
* [1][right] = 1
* [1][condition] = '<'
*
* [1] = 'methodenname' -> Object mit methodenprototyp
*
* Beisspiel
*
* ValueListenerObject = function(){ }
* ValueListenerObject.prototype.checkInput = function(){
*	return confirm("mach was ");
* }
* attachValidater( new ValidaterObject() );
*
*/
function equals(){
	if( arguments[0] == arguments[1] ) return true;
	return false;
}

function not_equals(){
	if( arguments[0] != arguments[1] ) return true;
	return false;
}

function AND(){
	for( var i = 0; i < arguments.length; i++ ){
		if( ! arguments[i] ) return false;
	}
	return true;
}

function OR(){
	for( var i = 0; i < arguments.length; i++ ){
		if( arguments[i] ) return true;
	}
	return false;
}

function lt(){
	return arguments[0] < arguments[1];
}

function gt(){
	return arguments[0] > arguments[1];
}



/**
* arguments[0] = the cariable
* arguments[1] = the ListenerObject
*
* VariableListenerObject = function(){ }
* VariableListenerObject.prototype.notifyVariableChanged = function(){
*	alert("changed ");
* }
*  attachVariableListener( new VariableListenerObect() );
*/
function attachVariableListener(){
	if( ! variableListener[arguments[0]] ){
		variableListener[arguments[0]] = new Array();
		variableListener[arguments[0]].push( arguments[1] );
	}
	else{
		variableListener[arguments[0]].push( arguments[1] );
	}
}
/**
* arguments[0] = variable which has chenged
* has to be called whenever a variable was changed
* prevent recursion
*/
var ontherun = 0;
function valueChanged(){
	if( ontherun > 2 ) return
	ontherun++;
	var varchanged = arguments[0];
	if( variableListener[arguments[0]] ){
		for( var i = 0; i < variableListener[arguments[0]].length; i++ ){
			if( variableListener[arguments[0]][i] ){
				variableListener[arguments[0]][i].notifyVariableChanged( arguments[0], arguments[1] );
			}
		}
	}
	ontherun = 0;
}

/**
* Validator
*/
var valuelistener_Objects = new Array();

function attachValidator(){
	valuelistener_Objects.push( arguments[0] );
}

function onFormSubmit(){
	for( var i = 0;  i < valuelistener_Objects.length; i++ ){
		var re = valuelistener_Objects[i].checkInput();
		if( re == false ) return false;
	}
	return true;
}

//-->
