/*----------------------------------------------------------
	AMAN_RedSYS(R) - Fileinfo:
	$Author: michael $
	$HeadURL: file:///var/svn/redsys/trunk/kernel/system/javascripts/form.class.js $
	$Revision: 3708 $
	$Date: 2008-03-26 15:21:07 +0100 (Wed, 26 Mar 2008) $

	Copyright (c) AMAN Media GmbH 1997 - 2008
	http://www.aman.de | http://www.redsys.de

---------------------------------------------------------*/

// Dies ist der Javascript-Teil der Form-Klasse
var submitedForm = "";
function submitForm(formname) {
	submitedForm = formname;
	translateDateFields(formname);
	exchangeRichFields(formname);
	selectDoubleSelects(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 jscalendar_onSelect(cal) {
	var p = cal.params;
	var update = (cal.dateClicked || p.electric);
	if (update && p.inputField) {
		p.inputField.value = cal.date.print(p.ifFormat);
		if (typeof p.inputField.onchange == "function")
			p.inputField.onchange();
	}
	if (update && p.displayArea) {
		p.displayArea.value = cal.date.print(p.daFormat);
		changed = true;
	}
	if (update && typeof p.onUpdate == "function")
		p.onUpdate(cal);
	if (update && p.flat) {
		if (typeof p.flatCallback == "function")
			p.flatCallback(cal);
	}
	if (update && p.singleClick && cal.dateClicked)
		cal.callCloseHandler();
};

function translateHtmlEntities(html, mshtml, extended, domain) {
	var i = 0;
	var translate = new Array();

	if (mshtml) {
		translate[i++] = new Array(new RegExp(String.fromCharCode(8364),'g'),'&euro;');
		translate[i++] = new Array(new RegExp(String.fromCharCode(196),'g'),'&Auml;');
		translate[i++] = new Array(new RegExp(String.fromCharCode(214),'g'),'&Ouml;');
		translate[i++] = new Array(new RegExp(String.fromCharCode(220),'g'),'&Uuml;');
		translate[i++] = new Array(new RegExp(String.fromCharCode(228),'g'),'&auml;');
		translate[i++] = new Array(new RegExp(String.fromCharCode(246),'g'),'&ouml;');
		translate[i++] = new Array(new RegExp(String.fromCharCode(252),'g'),'&uuml;');
		translate[i++] = new Array(new RegExp(String.fromCharCode(223),'g'),'&szlig;');
		translate[i++] = new Array(new RegExp(String.fromCharCode(39),'g'),'&#039;');
	}

	// specials
	if (typeof(domain) != "undefined" && domain != "")
		translate[i++] = new Array(new RegExp("(src=['\"])(http:\/\/" + domain + "\/)",'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 = true;
	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)) {
				finished = false;
				break;
			}
		}
	} 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, true, eds.domain);
			else
				edFrame.document.body.innerText = translateHtmlEntities(edFrame.document.body.innerText, true, true, eds.domain);
			edFrame.document.body.scrollTop = sTop;
		}
}

function exchangeRichFields(formname) {
	var richfields = eval(formname+'_richfields');
	var eoprofields = eval(formname+'_eoprofields');
	var formobj = document.forms[formname];
	var htmlV = "";
	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, true ,false,eds.domain);
			formobj.elements[formname+'['+richfields[i]+']'].value = htmlV;
		}
	}
	if(eoprofields.length) {
		for(i=0;i<eoprofields.length;i++) {
			var editor = eval("document.edit_on_"+formname+"_"+eoprofields[i]);
			htmlV = editor.getHTMLData("http://") + "";
			htmlV = translateHtmlEntities(htmlV, false, false);
			formobj.elements[formname+'['+eoprofields[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, true, false, eds.domain);
			if(formobj.elements[formname+'['+richfields[i]+']'].value != htmlV)
				return (richeditonly ? richfields[i] : true);
		}
	}
	var eoprofields = eval(formname+'_eoprofields');
	if(eoprofields.length) {
		for(i=0;i<eoprofields.length;i++) {
			var editor = eval("document.edit_on_"+formname+"_"+eoprofields[i]);
			htmlV = editor.getHTMLData("http://") + "";
			htmlV = translateHtmlEntities(htmlV, false, false);
			formobj.elements[formname+'['+eoprofields[i]+']'].value = htmlV;
			if(formobj.elements[formname+'['+eoprofields[i]+']'].value != htmlV)
				return (richeditonly ? eoprofields[i] : true);
		}
	}
	return false;
}

// Initialisiert die Filterwerte eines Selectfeldes (dafuer muessen die Options einen filterValue haben!)
function initFilterValues(selectobj,filterValues) {
	selectobj.orgOptions = new Array();
	for(var i = 0; i < selectobj.options.length; i++) {
		selectobj.orgOptions[i] = selectobj.options[i];
		selectobj.orgOptions[i].filterValue= filterValues[i];
	}
}

// Filtert Werte eines Selectfeldes (daf?r m?ssen die Options einen filterValue haben!)
function filterValues(value, selectobj) {
	var selValue = selectobj.value;
	// Keine Filterwerte vorhanden
	if(typeof selectobj.orgOptions == "undefined")
		return;

	// 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 type="text/javas' + 'cript" src="'+datepickerjspath+'"></scr'+'ipt>');
			write('<link type="text/css" rel="StyleSheet" href="'+datepickercsspath+'">');
			write('<body>datepicker<scr'+'ipt  type="text/javas' + 'cript">');
			write('var dp = new DatePicker(new Date());');
			write('document.body.appendChild(dp.create());');
			write('</scr'+'ipt></body></html>');
			close();
		}
	}
}

function selectDoubleSelects(formname) {
	for (var i = 0; i < eval(formname + "_doubleselectcount");i++) {
		var ot = eval(formname + '_ot_' + i);
		selectAllOptions(ot.right);
	}
}

/**
 * deaktiviert als OnClick die ?bergebenen Buttons mit Ausnahme des ersten eines Formular und schreibt in den ersten einen anderen Text.
 * Weitere Clicks auf den ersten Button werden verhindert, indem false zur?ckgegeben wird.
 **/
function deactivateButtons(form,buttons,text) {
  with (form) {
    if (elements[buttons[0]].value == text)
      return false;
		elements[buttons[0]].value = text;
    for (var i=1; i< buttons.length; i++) {
			elements[buttons[i]].disabled = true;
		}
	}
	return true;
}

function tinyCustomURLConverter(url, node, on_save, filter_ever, filter_never) {
	if (url.substr(0,18) == 'redsys://redsys.de') {
		// RedSYS-Links werden nicht umgewandelt
		return url;
	}
	else if (url.search(/^[a-z]+:\/\//) != 0) {
		// relative Links werden auch nicht umgewandelt
		return url;
	}
	
	for (var i = 0; i < filter_never.length; i++) {
		if (url.substr(0,filter_never[i].length) == filter_never[i]) 
			return url;
	}

	for (var i = 0; i < filter_ever.length; i++) {
		if (url.substr(0,filter_ever[i].length) == filter_ever[i]) {
			url = url.substring(filter_ever[i].length-1);
			break;
		}
	}

	// Return new URL
	return url;
}
