/*----------------------------------------------------------
	AMAN_RedSYS(R) - Fileinfo:
	$Author: juergen $
	$Source: /home/cvs/redsys/kernel/system/javascripts/form.class.js,v $
	$Revision: 1.5 $
	
	Copyright (C) AMAN Media GmbH 2000 - 2003
	http://www.aman.de | http://www.redsys.de

---------------------------------------------------------*/

// Dies ist der Javascript-Teil der Formklasse
var submitedForm = "";
function submitForm(formname) {
	submitedForm = formname;
	translateDateFields(formname);
	exchangeRichFields(formname);
}
function getDateItem(item,darray) {
	for(k=0;k<darray.length;k++) 
		if(darray[k][0]==item) 
			return darray[k][1]; 
	return false;
}
function stripNull(number) {
	while(String(number).substr(0,1)=='0')
		number = String(number).substr(1);
	return number;
}
function translateDateFields(formname) {
	var datefields = eval(formname+'_datefields');
	var number = 0; var numFormat = new String();
	var word = new String();
	var formobj = document.forms[formname];
	var MyRegExp = new RegExp("[\\.:\\- ]",'g');
	var fFormatArray = new Array();
	var fValueArray = new Array();
	if(datefields.length)
		for(i=0;i<datefields.length;i++) {
			value = formobj.elements['finput'+datefields[i]].value;
			format = formobj.elements['format'+datefields[i]].value;
			if(value.length == 0) { // null-werte zulassen!
				formobj.elements[formname+'['+datefields[i]+']'].value = "";
				continue;
			}
			fFormatArray = String(format).split(MyRegExp);
			fValueArray = String(value).split(MyRegExp);
			fDateArray = new Array();
			for(k=0;k<fFormatArray.length;k++) {
				number = stripNull(fValueArray[k]);
				word = fFormatArray[k];
				if(word.length==2)
					if(number < 10) 		numFormat = '0' + number;
					else if(number < 100) 	numFormat = number;
					else					numFormat = '01';
				if(word.length==4)
					if(number < 10) 		numFormat = '200'+ number;
					else if(number < 100) 	numFormat = '20' + number;
					else if(number < 1000) 	numFormat = '2'  + number;
					else if(number < 10000)	numFormat = number;
					else					numFormat = '2000';
				
				fDateArray[k] = Array(word,numFormat);
			}
			tag = getDateItem('DD',fDateArray);
			monat = getDateItem('MM',fDateArray);
			jahr = getDateItem('YYYY',fDateArray);
			stunde = getDateItem('HH',fDateArray);
			minute = getDateItem('mm',fDateArray);
			sekunde = getDateItem('SS',fDateArray);
			if (formobj.elements['type'+datefields[i]].value == 'textdatumzeit') {
				formobj.elements[formname+'['+datefields[i]+']'].value = jahr+'-'+monat+'-'+tag+' '+stunde+':'+minute+':'+sekunde;
			} else {
				formobj.elements[formname+'['+datefields[i]+']'].value = jahr+'-'+monat+'-'+tag;
			}
		}
}
function translateHtmlEntities(html, extended) {
	var i = 0;
	var translate = new Array();
		translate[i++] = new Array('€','&euro;');
		translate[i++] = new Array('Ä','&Auml;');
		translate[i++] = new Array('Ö','&Ouml;');
		translate[i++] = new Array('Ü','&Uuml;');
		translate[i++] = new Array('ö','&ouml;');
		translate[i++] = new Array('ä','&auml;');
		translate[i++] = new Array('ü','&uuml;');
		translate[i++] = new Array('ß','&szlig;');
		// specials
		translate[i++] = new Array(new RegExp("(src=['\"])(http:\/\/[^\/]*\/)",'gi'), '$1/');
		translate[i++] = new Array(new RegExp("(<p[^>]*>)([.\n]*)(<hr[^>]*>)",'gi'), '$1$2</p>$3$1');
		// Word-Import-Filter
		if(extended) {
			translate[i++] = new Array(new RegExp("(<font[^>]*?>|<\/font>)",'gi'), '');
			translate[i++] = new Array(new RegExp("(<o:p>|<\/o:p>)",'gi'), '');
			translate[i++] = new Array(new RegExp("(<\\?xml[^>]*?>|<\\?[^>]*?\>)",'gi'), '');
			translate[i++] = new Array(new RegExp("<([^>]*?style[ ]?=[\"' ]?[^>]*?)([^; ]*font[^:>]*?:[^>]+?)([; \"'])([^>]*?)>",'gi'), '<$1$3$4>');
			translate[i++] = new Array(new RegExp("<([^>]*?style[ ]?=[\"' ]?[^>]*?)([^; ]*lang[^:>]*?:[^>]+?)([; \"'])([^>]*?)>",'gi'), '<$1$3$4>');
			translate[i++] = new Array(new RegExp("<([^>]*?style[ ]?=[\"' ]?[^>]*?)([^; ]*margin[^:>]*?:[^>]+?)([; \"'])([^>]*?)>",'gi'), '<$1$3$4>');
			translate[i++] = new Array(new RegExp("<([^>]*?style[ ]?=[\"' ]?[^>]*?)([^; ]*tab[^:>]*?:[^>]+?)([; \"'])([^>]*?)>",'gi'), '<$1$3$4>');
			translate[i++] = new Array(new RegExp("<([^>]*?style[ ]?=[\"' ]?[^>]*?)([^; ]*line[^:>]*?:[^>]+?)([; \"'])([^>]*?)>",'gi'), '<$1$3$4>');
			translate[i++] = new Array(new RegExp("<([^>]*?style[ ]?=[\"' ]?[^>]*?)([^; ]*mso[^:>]*?:[^>]+?)([; \"'])([^>]*?)>",'gi'), '<$1$3$4>');
			translate[i++] = new Array(new RegExp("<([^>]*?style[ ]?=[\"' ]?[^>]*?)([^; ]*page[^:>]*?:[^>]+?)([; \"'])([^>]*?)>",'gi'), '<$1$3$4>');
			translate[i++] = new Array(new RegExp("<([^>]*?style[ ]?=[\"' ]?[^>]*?)([; ]{2,})([^>]*?)>",'gi'), '<$1;$3>');
		}
	var finished = false;
	do {
		for(i=0;i<translate.length;i++)
			html = html.replace(translate[i][0],translate[i][1]);
		for(i=0;i<translate.length;i++)
			if(typeof(translate[i][0]) == "object" && translate[i][0].test(html))
				continue;
		finished = true;
	} while(!finished);
	return html;
}
function translateRichFields(formname) {
	var richfields = eval(formname+'_richfields');
	if(typeof(richfields) == "undefined")
		return;
	if(richfields.length)
		for(i=0;i<richfields.length;i++) {
			if(eval('typeof(state_'+richfields[i]+')') == "undefined")
				continue;
			var eds = eval('state_'+richfields[i]);
			var edFrame = eval('EB_'+richfields[i]);
			var sTop = edFrame.document.body.scrollTop;
			eds.save_selection(eds);
			if (eds.Mode) 	
				edFrame.document.body.innerHTML = translateHtmlEntities(edFrame.document.body.innerHTML, true);
			else
				edFrame.document.body.innerText = translateHtmlEntities(edFrame.document.body.innerText, true);
			edFrame.document.body.scrollTop = sTop;
		}
}
function exchangeRichFields(formname) {
	var richfields = eval(formname+'_richfields');
	var formobj = document.forms[formname];
		if(richfields.length)
			for(i=0;i<richfields.length;i++) {
				if(eval('typeof(state_'+richfields[i]+')') == "undefined")
					continue;
				var eds = eval('state_'+richfields[i]);
				var edFrame = eval('EB_'+richfields[i]);
				eds.save_selection(eds);
				if (eds.Mode) 	htmlV = edFrame.document.body.innerHTML;
				else 			htmlV = edFrame.document.body.innerText;
				htmlV = translateHtmlEntities(htmlV);
				formobj.elements[formname+'['+richfields[i]+']'].value = htmlV;
			}
}

// gibt true zurück, wenn sich die daten verändert haben
function checkChanged(formname, richeditonly) {
	if(!richeditonly) {
		if(submitedForm != "") return false;
		if(changed) return true;
	}
	// Richedits checken
	if(eval('typeof('+formname+'_richfields)') == "undefined")
		return false;
	var richfields = eval(formname+'_richfields');
	var formobj = document.forms[formname];
	if(richfields.length)
		for(i=0;i<richfields.length;i++) {
			if(eval('typeof(state_'+richfields[i]+')') == "undefined")
				continue;
			var eds = eval('state_'+richfields[i]);
			var edFrame = eval('EB_'+richfields[i]);
			eds.save_selection(eds);
			if (eds.Mode) 	htmlV = edFrame.document.body.innerHTML;
			else 			htmlV = edFrame.document.body.innerText;
			htmlV = translateHtmlEntities(htmlV);
			if(formobj.elements[formname+'['+richfields[i]+']'].value != htmlV)
				return (richeditonly ? richfields[i] : true);
		}
	return false;
}

// Filtert werde eines Selectfeldes (dafür müssen die Options einen filterValue haben!)
function filterValues(value, selectobj) {
	var selValue = selectobj.value;
	// Options einmalig sichern
	if(typeof selectobj.orgOptions == "undefined") {
		selectobj.orgOptions = new Array();
		for(var i = 0; i < selectobj.options.length; i++)
			selectobj.orgOptions[i] = selectobj.options[i];
	}
	// Options ausleeren
	selectobj.options.length = 0;
	// Per Filter wieder einsetzen
	var k=0;
	for(var i = 0; i < selectobj.orgOptions.length; i++) {
		if(selectobj.orgOptions[i].filterValue == value || !value)
			selectobj.options[k++] = selectobj.orgOptions[i];
	}
	// SelectedIndex wieder herstellen
	for(var i = 0; i < selectobj.options.length; i++)
		if(selectobj.options[i].value == selValue)
			selectobj.selectedIndex = i;
}

// Öffnet den Datepicker... für Ns ein altes PHP-Script, für DOM-Browser ein Javascript!
function openFormDatePicker(alturl) {
	openwin(alturl, 150, 150, 'dependent=yes,scrollbars=no');
	return;
	if(!datepickeravailable) {
		openwin(alturl, 150, 150, 'dependent=yes,scrollbars=no');
	} else {
		var datepickerwin = window.open("","thisdatepicker","width=172,height=172");
		with(datepickerwin.document) {
			open();
			write('<html><head><title>Datepicker</title></head>');
			write('<scr'+'ipt language="javasc'+'ript" src="'+datepickerjspath+'"></scr'+'ipt>');
			write('<link type="text/css" rel="StyleSheet" href="'+datepickercsspath+'">');
			write('<body>datepicker<scr'+'ipt  language="javascr'+'ipt">');
			write('var dp = new DatePicker(new Date());');
			write('document.body.appendChild(dp.create());');
			write('</scr'+'ipt></body></html>');
			close();
		}
	}
}