// Cookie Functions

var cookiejar = new Object();

cookiejar.get = function(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
};

cookiejar.set = function(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
};

cookiejar.erase = function(name) {
	cookiejar.set(name,"",-1);
};

// Console Functions

var pageconsole = new Object();

pageconsole.init = function() {
	var consoleStatus = cookiejar.get('consoleStatus') || 'maximized';
	if (!$('console')) {
		return;
	}
	
	if (consoleStatus == 'maximized') {
		pageconsole.maximize();
	} else {
		pageconsole.minimize();
	}
}

pageconsole.minimize = function() {
	cookiejar.set('consoleStatus', 'minimized', 365);
	Effect.Fade('console', {duration: 0.3, afterFinish:function() {
		$('console_content').hide();
		$('console_button').blur();
		$('console_button').className = 'maximize';
		$('console_button').onclick = pageconsole.maximize;
		$('console').style.left = "18px";
		$('console').style.width = "160px";
		Effect.Appear('console', {duration: 0.3});
	}});
}

pageconsole.maximize = function() {
	cookiejar.set('consoleStatus', 'maximized', 365);
	Effect.Fade('console', {duration: 0.3, afterFinish:function() {
		$('console_content').show();
		$('console_button').blur();
		$('console_button').className = 'minimize';
		$('console_button').onclick = pageconsole.minimize;
		$('console').style.left = "202px";
		$('console').style.width = "780px";
		Effect.Appear('console', {duration: 0.5});
	}});
}

Event.observe(window, 'load', pageconsole.init);


// Page scan for popups

var pagelinks = new Object();

pagelinks.init = function() {
	var anchors = document.getElementsByTagName('a');

	// loop through all anchor tags
	for (var i=0; i<anchors.length; i++){
		var anchor = anchors[i];
		var relAttribute = String(anchor.getAttribute('rel'));
		var optionData = relAttribute.split(';')[1];
		optionData = eval('(' + optionData + ')');

		// use the string.match() method to catch 'popup' references in the rel attribute
		if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('popup'))){
			var width = optionData.width || 320;
			var height = optionData.height || 240;
			anchor.onclick = function () {openWindow(this.href + '&layout=popup', 'popup', width, height); return false;}
		}
	}
}

Event.observe(window, 'load', pagelinks.init);

// Page scan for input filters

// <input type='text' name='bla' size='20' onKeyPress="return numbersonly(this, event)">

var pagefilters = new Object();

pagefilters.init = function() {
	var inputs = $$('input.numeric');
	
	inputs.each( function(input) {
		// Event.observe(input, 'keypress', pagefilters.run);
		input.onkeypress = pagefilters.run.bindAsEventListener(input);
	} );
};

pagefilters.run = function(event) {
	var dec = false;
	var code = event.keyCode || event.charCode;
	var myfield = Event.element(event);
	
	if (event.ctrlKey || event.metaKey) {
		return true;
	}
		
	switch (code) {
	case Event.KEY_BACKSPACE:
	case Event.KEY_TAB:
	case Event.KEY_RETURN:
	case Event.KEY_ESC:
	case Event.KEY_LEFT:
	case Event.KEY_UP:
	case Event.KEY_RIGHT:
	case Event.KEY_DOWN:
	case Event.KEY_DELETE:
	case Event.KEY_HOME:
	case Event.KEY_END:
	case Event.KEY_PAGEUP:
	case Event.KEY_PAGEDOWN:
		return true;
		break;
	default:
		var keychar = String.fromCharCode(code);
		
		if ((("0123456789").indexOf(keychar) > -1)) {
		   return true;
		} else if (dec && (keychar == ".")) {
		   myfield.form.elements[dec].focus();
		   return false;
		} else {
			return false;
		}
	}
}

Event.observe(window, 'load', pagefilters.init);


// Page scan for tabs

var pagetabs = new Object();

pagetabs.init = function() {
	var lists = document.getElementsByTagName('ul');
	var first = null;

	for (var i=0; i<lists.length; i++) {
		var list = lists[i];
		if (list.className != 'tabs') continue;
		
		var items = $A(list.getElementsByTagName('li'));
		items.each( function(item) {
			var form = $(item.getAttribute('value'));
			if (form) {
				form.hide();
				item.onclick = pagetabs.tabClicked.bind({list:list, item:item});
			}
		} );
		
		if (items.length > 0) {
			items[0].onclick();
		}
	}
}

pagetabs.selectItem = function(list, item) {
	var items = $A(list.getElementsByTagName('li'));
	items.each( function(loopItem) {
		loopItem.className = '';
		var form = $(loopItem.getAttribute('value'));
		form.hide();
	} );
	item.className = 'selected';
	var targetForm = $(item.getAttribute('value'));
	Effect.Appear(targetForm, {duration: 0.5});
}

pagetabs.tabClicked = function() {
	pagetabs.selectItem(this.list, this.item);
}

Event.observe(window, 'load', pagetabs.init);

// Form Tools

var FormKit = new Object();

FormKit.setGroup = function(inputElement, selector) {
	var groupMasterInputs = $(inputElement.form).select('[name="'+ inputElement.name +'"]');
	groupMasterInputs.each( function(masterInput) {
		var childInputs = masterInput.up(selector).select('input', 'textarea');
		childInputs.each( function(childInput) {
			if (childInput != masterInput) {
				childInput.disabled = (masterInput != inputElement);
			}
		} );
	} );
}


// Utility Functions

	
function selectAllNone(sender) {
	var checkboxes = Form.getInputs(sender.form, 'checkbox', sender.value);
	checkboxes.each( function(checkbox) {
		checkbox.checked = sender.checked;
	} );
}


function setFormRequirements(form, fields, callback)
{
	var formElement = $(form);
	var fieldArray = $A(fields);
	var onSuccess = callback || Prototype.emptyFunction;
	formElement.onsubmit = function() {
		for (var i=0; i<fieldArray.length; i++) {
			var field = formElement[fieldArray[i]];
			if (field.value == '') {
				alert('Fehlende Angabe: ' + field.title);
				field.focus();
				return false;
			}
		} 
		onSuccess();
		return true;
	};
}

function confirmDelete(target)
{
	if(confirm("Click on OK to permanently delete the record.")) {
		window.location.href = target;
	}
}

/** Form checker **/
function checkForm(formElement, requiredFields, prefix)
{
	for (field in requiredFields) {
		var inputName = (prefix) ? prefix + '[' + field + ']' : field;
		var value = formElement[inputName].value;
		var label = requiredFields[field];
		if (value == '' || value == 'null') {
			alert("Fehlende Eingabe: " + label + ".");
			formElement[inputName].focus();
			return false;
		}
	}
	return true;
}

function parentElementHidden(element) {
	while (element.tagName && element.tagName != 'FORM') {
		if (!element.visible()) {
			return true;
		}
		element = element.up();
	}
	return false;
}

function checkFormRequirements(formElement, callback) {
	
	formElement = $(formElement);
	var emptyInput = null;
	var inputs = formElement.getElementsBySelector('select','textarea').concat(Form.getInputs(formElement));

	inputs.each( function(inputElement) { 
		
		var emptyInputValue = (inputElement.type == 'checkbox') ? (inputElement.checked == false) : (inputElement.value == '');
		
		var activeElement = !parentElementHidden(inputElement) && (inputElement.disabled == false);
					
		if (!emptyInput && (inputElement.hasClassName('required') && emptyInputValue && activeElement)) {
			emptyInput = inputElement;
		}
		
		
		var validatorFunction = window['validate' + inputElement.id];
		if (!emptyInput && validatorFunction) {
			var valid = validatorFunction(inputElement);
			if (!valid) {
				emptyInput = inputElement;
			}
		};
	
		if (!emptyInput && inputElement.hasClassName('email') && activeElement) {
			var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
			if (!filter.test(inputElement.value)) {
				emptyInput = inputElement;
			}
		}
		
		if (!emptyInput && inputElement.hasClassName('min') && activeElement) {
			var relAttribute = Number(String(inputElement.getAttribute('rel')));
			if(inputElement.value < relAttribute) {
				emptyInput = inputElement;
			}
		}
		
	} );
		
	if (emptyInput) {
		emptyInput.focus();
		var container = emptyInput.up('tr') || emptyInput.up();
		new Effect.Highlight(container, {startcolor: '#cac6a2'}); // , restorecolor: '#32393d'
		return false;
	}
	
	if (callback) {
		callback();
	}
	
	return true;	
}

function optionsForFileType(fileInput)
{
	if (fileInput.value.match(/\.pdf$/i)) {
		Element.show('convert_options');
	} else {
		Element.hide('convert_options');		
	}
}

function checkAll(fieldName)
{
	var fieldCount = document.forms[0].elements[fieldName].length;
	
	for (var i=0;i<fieldCount;i++) {
		document.forms[0].elements[fieldName][i].checked = true;
	}
}

function unCheckAll(fieldName)
{
	var fieldCount = document.forms[0].elements[fieldName].length;
	
	for (var i=0;i<fieldCount;i++) {
		document.forms[0].elements[fieldName][i].checked = false;
	}
}

function openWindow(theURL,winName,winWidth,winHeight,sb,rs)
{
	
	var winLeft = ((screen.availWidth - winWidth) / 2);
	var winTop = ((screen.availHeight - winHeight) / 2);
	if (sb == "no") {
		sb_string = ",scrollbars=no";
	} else {
		sb_string = ",scrollbars=yes";
	}
	if (rs == "yes") {
		rs_string = ",resizable=yes";
	} else {
		rs_string = ",resizable=no";
	}
	var options = 'toolbar=no,scrollbars=yes,status=no,menubar=no' + rs_string + ',location=no,dependent=yes,width=' + winWidth + ',height=' + winHeight + ',left=' + winLeft + ',top=' + winTop;
	window.open(theURL, winName, options);
}

function setActiveStyleSheet(link, title)
{
	var i, a, main;
	for (i=0; (a = document.getElementsByTagName("link")[i]); i++) {
		if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
			a.disabled = true;
			if(a.getAttribute("title") == title) a.disabled = false;
		}
	}
	return false;
}

function emailOnly(myfield, e, dec)
{
	var key;
	var keychar;
	
	if(window.event) {
	   key = window.event.keyCode;
	} else if(e) {
	   key = e.which;
	} else {
	   return true;
	}
	
	keychar = String.fromCharCode(key);
	
	if((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27)) {
	   return true;
	} else if ((("0123456789.-@abcdefghijklmnopqrstuvwxyz").indexOf(keychar) > -1)) {
	   return true;
	} else if (dec && (keychar == ".")) {
	   myfield.form.elements[dec].focus();
	   return false;
	} else {
	   return false;
	}
}

function closer() {
	opener.location.reload();
	self.close();
}

