function isNumeric(strString, special) {

   var strValidChars = "0123456789" + String(special);
   var strChar;
   var blnResult = true;

   if (strString.length == 0) return false;

   for (i = 0; i < strString.length && blnResult == true; i++) {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1) {
         blnResult = false;
      }
   }
   return blnResult;
}


function isISODate(chk) {
    // YYYY-MM-DD
    if ( chk.length != 10 ) return 0;
    if ( isNumeric(chk, "-") == false ) return 0;
    if ( chk.substr(4,1) != "-" | chk.substr(7,1) != "-" ) return 0;
    return 1;
}

function isISOTime(chk) {
    // HH:MM
    if ( chk.length != 5 ) return 0;
    if ( isNumeric(chk, ":") == false ) return 0;
    if ( chk.substr(2,1) != ":" ) return 0;
    return 1;
}

function pdec(addr) {
	var maddr = addr;
	var mdecf = new Array("/",  "8",  "7",  "6",  "5",  "4");
	var mdect = new Array("#0", "#x", "#p", "#j", "#4", "#u");
	while ( maddr.indexOf('#') >= 0 ) {
	for ( var i = 0; i < mdecf.length; i++ ) {
		maddr = maddr.replace(mdect[i], mdecf[i]);
	}}
	return maddr;
}

function mdec(addr) {
	var maddr = addr;
	var mdecf = new Array(".", "@", "a", "e", "n", "o", "u", "i", "s", "t");
	var mdect = new Array("#0", "#1", "#2", "#3", "#4", "#5", "#6", "#7", "#8", "#9");
	while ( maddr.indexOf('#') >= 0 ) {
	for ( var i = 0; i < mdecf.length; i++ ) {
		maddr = maddr.replace(mdect[i], mdecf[i]);
	}}
	return maddr;
}
function email(addr) {
	location.href = 'm' + 'ailto' + ':' + mdec(addr);
}

function highlight_search_results(pattern) {

if ( pattern.length <= 0 ) return;

var elem = document.getElementById('search_result_html');
if ( elem ) {
if ( typeof elem != 'undefined' ) {

    content = elem.innerHTML;

    //sReg = new RegExp(pattern, "ig");
    //content = content.replace(sReg, '<span class="search_result_marker">' + pattern + '</span>');

    sReg = new RegExp(pattern.toLowerCase(), "g");
    content = content.replace(sReg, '<span class="search_result_marker">' + pattern.toLowerCase() + '</span>');

    sReg2 = new RegExp(pattern.toUpperCase(), "g");
    content = content.replace(sReg2, '<span class="search_result_marker">' + pattern.toUpperCase() + '</span>');
    
    tmp3 = pattern.toUpperCase().substring(0,1) + pattern.toLowerCase().substring(1, pattern.length);
    sReg3 = new RegExp(tmp3, "g");
    content = content.replace(sReg3, '<span class="search_result_marker">' + tmp3 + '</span>');

    elem.innerHTML = content;
}}

}

function validate_radio(elemname) {
	elements = document.getElementsByTagName('input');
	for( j = 0; j < elements.length; j++) {
		if ( elements[j].name == elemname ) {
			if ( elements[j].checked ) {
				return 1;
			}
		}
	}
	return 0;
}

function form_validation(msg, msg_type, alias_arr, required_color, warning_color) {

    SPECIAL_EMAIL = 1000;
    SPECIAL_DATE  = 2000;
    SPECIAL_TIME  = 2001;
    
    var is_special = 0;

    var tag_types = new Array('input', 'textarea', 'select');

    for ( var j=0; j<tag_types.length; j++ ) {

	var elements = document.getElementsByTagName(tag_types[j]);
	for(var i=0; i<elements.length;i++) {
			currentClass = '';
			classattr = elements[i].attributes['class'];
			if ( classattr ) {
			if ( typeof classattr != 'undefined' ) {
				currentClass = classattr.value;
			}}
			if ( currentClass ) {
			if ( currentClass.indexOf('_required') >= 0 ) {

				is_special = 0;
				
				if ( currentClass.indexOf('_email') >= 0 ) {
					is_special = SPECIAL_EMAIL;
				}
                if ( currentClass.indexOf('_date') >= 0 ) {
				    is_special = SPECIAL_DATE;
				}
				if ( currentClass.indexOf('_time') >= 0 ) {
				    is_special = SPECIAL_TIME;
				}

				if ( warning_color != '' ) {
				if ( elements[i].style.background.toLowerCase() == warning_color.toLowerCase() ) {
					elements[i].style.background = required_color;
				}}
				
				var lenCheck = 0;

				var elemtype = "----";
					
				if ( elements[i].attributes['type'] ) {
				if ( typeof elements[i].attributes['type'] != 'undefined' ) {
					elemtype = elements[i].attributes['type'].value;
				}}

				if ( tag_types[j] == 'select' ) {
					var selectedText = elements[i].options[elements[i].selectedIndex].text;
					lenCheck = selectedText.length;
				}
				else {
					
					if ( elemtype.toLowerCase() == 'radio' ) {

						lenCheck = validate_radio(elements[i].name);
					}
					else {
						if ( elemtype.toLowerCase() == 'checkbox' ) {
							if ( elements[i].checked ) lenCheck = 1;
							else lenCheck = 0;
						}
						else {
							// check for special fields
							switch ( is_special ) {

							case 0: 
							   lenCheck = elements[i].value.length;
							   break;
							   
                            case SPECIAL_EMAIL:
                               if ( elements[i].value.indexOf('@') > 0 && elements[i].value.indexOf('.') > 0 ) {
								lenCheck = 1;
							   }
							   break;
							   
							case SPECIAL_DATE:
							   lenCheck = isISODate(elements[i].value);
							   break;
							   
                            case SPECIAL_TIME:
							   lenCheck = isISOTime(elements[i].value);
							   break;

							}
						}
					}
	
				}
				
				if ( lenCheck < 1 ) {
					field = elements[i].name;
					var val = alias_arr[field];
					if ( !val ) { val = field; }
					else { if ( val.length == 0 ) { val = field; }}

					if ( elemtype.toLowerCase() != 'hidden' ) {
						var alert_msg = msg.replace(/##msg##/, val);
						if ( alert_msg.length >= 1 ) {
							if ( msg_type == 0 ) { alert(alert_msg); }
							if ( msg_type == 1 ) {
								msgdiv = document.getElementById('validationmessage');
								if ( msgdiv ) {
								if ( typeof msgdiv != 'undefined' ) {
									msgdiv.innerHTML = alert_msg;	
								}}
							}
						}
						elements[i].focus();
						if ( warning_color != '' ) {
							elements[i].style.background = warning_color;
						}
						return false;
					}
				}
			}
		}
	}}
	return true;
} 

function validate(aliases) {
	return form_validation('Das Feld ##msg## wurde nicht korrekt gesetzt.', 1, aliases, '#FFFFFF', '#FF0000');
}
