//var fieldsWithText = new Array();

function createTextField(e_select, question) {
	
	var textdiv = document.getElementById('dropselect_'+question);
	
	if (textdiv == null || e_select == null) {
		return false;
	}
	
	if (e_select.options[e_select.options.selectedIndex].value == '-1' && e_select.options.selectedIndex > 0) {
		// show it
		textdiv.style.display = 'block';
		// set the name on the textfield
		//alert(e_select.name);
		var textfield = document.getElementById('dropselect_'+question+'_text');
		textfield.name = e_select.name;		
	} else {
		// hide it
		textdiv.style.display = 'none';
		// remove the name on the textfield
		document.getElementById('dropselect_'+question+'_text').name = null;
	}
}

function showHideField(e_elem, e_txt, visible, txt_name) {
	var e_elem = document.getElementById(e_elem);
	var e_txt = document.getElementById(e_txt);
	
	if (e_elem != null) {
		e_elem.style.display = visible;		
	}
	if (e_txt != null) {
		e_txt.name = txt_name;
	}
		
}

// MORE UMFRAGEN STUFF
function selectRadio(e_radio) {
	e_radio = document.getElementById(e_radio);	
	if (e_radio != null) {
		e_radio.checked = true;
	}
}

function selectCheckbox(e_checkbox) {
	e_checkbox = document.getElementById(e_checkbox);
	if (e_checkbox != null) {
		e_checkbox.checked = !e_checkbox.checked;
	}
}

function showRecallImage(caller, timeout, imgName) {
	// hide the start link
	caller.style.display = 'none';
	// show the image and jump to it	
	document.getElementById('recallImage').style.display='block';
	window.location.hash = 'recallImg';
	
	// do the timer stuff
	if (timeout > 0) {
		setTimeout("pressAdvance()",timeout*1000);
	}
}

function pressAdvance() {	
	document.getElementById('advanceButton').click();
}

function LoginBoxPassFocus() {
	document.getElementById("passtxt").style.display = "none";
	document.getElementById("password").style.display = "inline";
	document.getElementById("password").focus();
}
	
function LoginBoxExit() {
	if(document.getElementById("password").value == '') {
		document.getElementById("password").style.display = "none";
		document.getElementById("passtxt").style.display = "inline";
	}
}
/* postoffice methods */
function poMarkAsRead(id, answerID) {	
	try {
		document.getElementById('mail-'+id).innerHTML = '<img src="./img/postoffice_ok.gif" width="11" height="12" alt="" border="0" />';
		document.getElementById('trash-'+id).innerHTML = '';
		document.getElementById('postoffice-mail-'+id).value = answerID+'_'+1;
		document.getElementById('postoffice-entry-'+id).className = '';		
		poDecreaseCounter();
	} catch(e) {}	
}

function poMarkAsTrash(id, answerID) {
	try {
		document.getElementById('mail-'+id).innerHTML = '';
		document.getElementById('trash-'+id).innerHTML = '<img src="./img/postoffice_deleted.gif" width="10" height="13" alt="" border="0" />';
		document.getElementById('postoffice-mail-'+id).value = answerID+'_'+2;
		document.getElementById('postoffice-entry-'+id).className = '';
		poDecreaseCounter();
	} catch (e) {}		
}

function poDecreaseCounter() {
	var textCounter = document.getElementById('text-counter');
	var textCounter2 = document.getElementById('text2-counter');	
	
	if (textCounter != null) {		
		var val = parseInt(textCounter.innerHTML.substring(0,1));
		val--;
		text = val;
		if (val == 0) {
			text = 'keine';		
			document.getElementById('actiontext').style.visibility='hidden';
		}
			
		textCounter.innerHTML = text+' neue'+(val == 0 ? 'n' : '')+' E-Mail'+(val != 1 ? 's' : '');
		textCounter2.innerHTML = val+' Mail'+(val != 1 ? 's' : '');
		
	}
}

/* Caroussel Logics */
var mafo = {};
mafo.util = {
	clamp: function(min, max, value) {
		return value < min ? min : value > max ? max : value;
	},
	
	getEvent: function(e) {
		return e || window.event;
	},
	
	getEventTarget: function(e) {
		e = e || window.event;
		return e.target || e.srcElement;
	}
};

mafo.carousel = function(settings) {
	
	var that = {};
	var imagesCount = 0;
	var images		= [];
	var	currImage	= null;
	var currIndex	= 0;
	var marker		= { src: null, width: 0, height: 0 };
	var domClick	= null;
	var domActor	= null;
	var domStage	= null;
	var seamlessIndex = 0;
	var indexBar	= [];
	
	// Default Settings
	var defaults = {
		maxClicks:	3,
		domPrev:	'carousel-prev',		
		domNext:	'carousel-next',
		domActor:	'carrousel-actor',
		domStage:	'carrousel-stage',		
		domClick:	'carrousel-click',
		domMarker:	'click-marker',
		domIndexBar: 'carrousel-index',
		images:		[],
		clickable:	true,
		seamless:	true		// beim erreichen der maximalen klickanzahl wird das erste element neu positioniert		
	};
	
	initialize = function() {
		if (settings) {
			for (set in settings) {
				if (defaults.hasOwnProperty(set))
					defaults[set] = settings[set];
			}
		}
		domActor = $(defaults.domActor);
		domStage = $(defaults.domStage);
		
		applyEvents();
		// preload images
		for (var i=0, il=defaults.images.length; i<il; i++) {
			images[i] = new Image();
			images[i].src = defaults.images[i].name;
			//console.log(defaults.images[i].clicks);
			images[i].clicks = [];
			images[i].margin = defaults.images[i].margin;
			images[i].qid	 = defaults.images[i].qid;
			images[i].visited = false;
			
			// apply any existing clicks
			if (defaults.images[i].clicks.length > 0) {	
				//console.log(defaults.images[i].clicks.length);
				for (var c=0, cl=defaults.images[i].clicks.length; c<cl; c++) {
					/*console.log(defaults.images[i].clicks[c].x);
					console.log(defaults.images[i].clicks[c].y);
					console.log('-------------');*/
					
					images[i].clicks[c] = mark(defaults.images[i].clicks[c].x,defaults.images[i].clicks[c].y, null, Boolean(i > 0));
				}
				saveMarks(images[i]);
			}
			
			// get indexBar Element
			indexBar[i] = $(defaults.domIndexBar + '-' + i);
		}
		//console.log(images);
		imagesCount = defaults.images.length;
				// set first image as default
		currImage = images[currIndex];
		currImage.onload = function(img) {	// Closures FTW!
			return function() {
				actorImage(img);
			};
		}(currImage);
		
		return that;
	};
	
	actorImage = function(image) {
		domActor.style.backgroundImage = 'url(' + image.src + ')';
		domActor.style.width = image.width + 'px';
		domActor.style.height = image.height + 'px';
		
		// recalc margin
		//domActor.style.margin = '0px ' + image.margin + 'px';
		domActor.style.margin = '0px ' + ( (800 - image.width) / 2) + 'px';
		
		if (domClick !== null) {
			domClick.style.width = domActor.style.width;
			domClick.style.height = domActor.style.height;
		}
		
		domStage.style.height = domActor.style.height;
	};	
	
	applyEvents = function() {
		var domPrev = $(defaults.domPrev);
		var domNext = $(defaults.domNext);
		
		if (domPrev !== null)
			domPrev.onclick = previous;
		if (domNext !== null)
			domNext.onclick = next;
		
		// clickable?
		if (defaults.clickable === true && defaults.maxClicks > 0) {
			domClick = $(defaults.domClick);
			if (domClick !== null) {
				domClick.onclick = click;
			}			
			// init marker
			var domMarker = $(defaults.domMarker);
			if (domMarker !== null) {
				marker.src = domMarker.src; 
				marker.width = domMarker.width;
				marker.height = domMarker.height;
			}
		}
	};
	
	click = function(e) {
		var target = mafo.util.getEventTarget(e); 
		
		if (target.id !== defaults.domClick)
			return;
		
		e = mafo.util.getEvent(e);
		
		var left = mafo.util.clamp(0,marker.width,(e.offsetX || e.layerX));
		var top = mafo.util.clamp(0,marker.height,(e.offsetY || e.layerY));
		
		var x = (e.offsetX || e.layerX);
		var y = (e.offsetY || e.layerY);
		
		// max clicks erreicht?		
		if (currImage.clicks.length + 1 > defaults.maxClicks && defaults.seamless === true) {
			if (seamlessIndex + 1 > defaults.maxClicks) {
				seamlessIndex = 0;
			}
			currImage.clicks[seamlessIndex] = mark(x,y,currImage.clicks[seamlessIndex]);
			// save positions
			saveMarks(currImage);
			
			seamlessIndex++;
		} else {			
			// save and place a new marker when there is sufficent space
			if (currImage.clicks.length + 1 <= defaults.maxClicks) {
				currImage.clicks[currImage.clicks.length] = mark(x,y);
				// save positions
				saveMarks(currImage);
			}
		}
	};
	
	remove = function(e) {
		var target = mafo.util.getEventTarget(e);
		
		//console.log(target);
		var newClicks = [];
		// remove the image from the list
		for (var i=0, il=currImage.clicks.length; i<il; i++) {			
			if (target !== currImage.clicks[i]) {
				newClicks[newClicks.length] = currImage.clicks[i];
			} else {
				// remove element from DOM
				Element.remove(target);
			}
		}
		currImage.clicks = newClicks;
	};
	
	mark = function(x, y, img, hidden) {		
		x -= (marker.width / 2);
		y -= (marker.height / 2);
		
		if (img) {
			img.style.left = x+'px';
			img.style.top = y+'px';
		} else {
			img = document.createElement('img');
			img.style.left = x+'px';
			img.style.top = y+'px';			
			img.width = marker.width;
			img.height = marker.height;
			img.src = marker.src;
			domClick.appendChild(img);
		}
		if (hidden) {
			img.style.display = 'none';
		}
		// apply unclick event
		img.ondblclick = remove;
		
		return img;
	};
	
	saveMarks = function(img) {
	//	console.log(img);
		try {
			var x, y;			
			for (var i=0, il=img.clicks.length; i<il; i++) {
				x = parseInt(img.clicks[i].style.left) + (marker.width / 2);
				y = parseInt(img.clicks[i].style.top) + (marker.height / 2);
				$('cvq_'+img.qid+'_'+i).value = "{'x': " + x + ", 'y': " + y + "}";
			}
			
		} catch (e) {}
	}
	
	toggleMark = function(clicks, mode) {
		for (var i=0, il=clicks.length; i<il; i++) {
			clicks[i].style.display = mode;
		}
	};
	
	updateIndexBar = function(last, current) {		
		indexBar[last].className = '';
		indexBar[current].className = 'active';
		
		// updated visited, if only viewable
		if (defaults.maxClicks == 0) {
			try {
				// set both..
				$('cvq_'+images[last].qid).value = 1;
				$('cvq_'+images[current].qid).value = 1;
			} catch (e) {}
		}
	};
	
	next = function() {
		var last = currIndex;
		
		toggleMark(currImage.clicks,'none');	// hide current
		currIndex = currIndex + 1 >= imagesCount ? 0 : ++currIndex;
		
		currImage = images[currIndex];		
		actorImage(currImage);
		toggleMark(currImage.clicks,'block');	// show current
		
		// update indexBar
		updateIndexBar(last,currIndex);
	};
	
	previous = function() {
		var last = currIndex;
		
		toggleMark(currImage.clicks,'none');	// hide current
		currIndex = currIndex - 1 < 0 ? imagesCount - 1 : --currIndex;
		
		currImage = images[currIndex];
		actorImage(currImage);
		toggleMark(currImage.clicks,'block');	// show current
		
		// update indexBar
		updateIndexBar(last,currIndex);
	};
	
	// public stuff
	that.debug = function() {
		console.log(defaults);
	};
	
	that.nextImg = next;	
	that.previousImg = previous;
	
	return initialize();
};

mafo.carousel.image = function(settings) {
	
	var that = {};
	var img = new Image();
	
	// Default Settings
	var defaults = {
			src:	null,
			clicks: []
	};
	
	initialize = function() {
		if (settings) {
			for (set in settings) {
				if (defaults.hasOwnProperty(set))
					defaults[set] = settings[set];
			}
		}
		if (defaults.src !== null)
			img.src = defaults.src;
		
		return that;
	};
	
	return initialize();
	
}



/*
new Control.Slider('track_<?php echo $quest->id ?>','slider_<?php echo $quest->id ?>',
{ range: $R(0,10), sliderValue: <?php echo ($pre[0] == -1 ? '5' : $pre[0]) ?>,
onSlide: function(v) { $('answer_<?php echo $quest->id ?>').value = v; },
onChange: function(v) {
	var obj = $('track_<?php echo $quest->id ?>');
	if (obj.hasClassName('black_handle')) {
		obj.removeClassName('black_handle');
		obj.addClassName('red_handle');
	}
	$('answer_<?php echo $quest->id ?>').value = v;
	// disable checkbox
	var chk = $('answer_not_<?php echo $quest->id ?>');								
	if (chk !== null && typeof chk !== null && !chk.disabled) {
		chk.disabled = true;								
	}
}} );
*/

// mafo slider
function createSlider(question, value) {
	new Control.Slider('track_' + question,'slider_' + question, {
		range: $R(0,10), sliderValue: value,
		onSlide: function(v) { $('answer_' + question).value = v; },
		onChange: function(v) {
			var obj = $('track_' + question);
			if (obj.hasClassName('black_handle')) {
				obj.removeClassName('black_handle');
				obj.addClassName('red_handle');
			}
			$('answer_' + question).value = v;
			// disable checkbox
			var chk = $('answer_not_' + question);								
			if (chk !== null && typeof chk !== null && !chk.disabled) {
				chk.disabled = true;								
			}
		}}
	);
}

// mafo text-number input
function allowNumericKeys(e) {
	var evt = e || window.event;

	var key = evt.keyCode;
	if (evt.altKey || evt.ctrlKey || evt.shiftKey)
		return false;
	
	if (key == 9 || key == 46 || key == 8 || key == 37 || key == 39 || (key >= 44 && key <= 57) || (key >= 96 && key <= 105)
		|| key == 188 || key == 110 || key == 190) {			
		return true;
	}
	return false;
}
