// Emuliert in_array() von PHP
Array.prototype.in_array = function(needle){

    for (var i = 0; i < this.length; i++) {
        if (needle == this[i]) 
            return true;
    }
    return false;
}

/*****************************************************************************/
/********  Sicherheitsabfrage  ***********************************************/
/*****************************************************************************/
function abfrage(text){
	
	// Wenn Text == TRUE -> "Vorgang-fortsetzen-Text"
    if (text == true) {
        var antwort = confirm('Sind Sie sicher, das Sie den Vorgang fortsetzen wollen?');
    }
    else 
    	// Wenn kein Text (default) ->" Vorgang-abbrechen-Text"
        if (text == false || text == undefined) {
            var antwort = confirm('Sind Sie sicher, das Sie den Vorgang abbrechen wollen?');
        }
        else 
            if (typeof(text) == 'string') {
                var antwort = confirm(text);
            }
    
    if (antwort) {
        // Seite neu starten
        return true;
    }
    else {
        return false;
    }
}

function browserCheck () {
	var check=[
	['window.postMessage',
	 'window.XMLHttpRequest&&(document.postMessage||window.external)',
	 'document.compatMode',
	 '(document.detachEvent||document.contentType)'],
	['window.execScript','window.pkcs11','window.opera',
	                                  'window.navigator&&window.navigator.vendor'],
	[['IE 8','FF 3','Op 9.5','KDE?'],
	 ['IE 7','FF 2','Op 9','KDE?'],
	 ['IE 6','FF 1.5','Op 8','KDE/Safari 3'],
	 ['IE 5x','NN 7','Op 7','KDE/Konqu. 3']]];

	var j; var b; for(n=0;n<check[1].length;n++){if(!eval(check[1][n])==0)b=n;}

	for(n=check[0].length;n>-1;n--){if(!eval(check[0][n])==0)j=n;}

	if (j>-1&&b>-1) {
		var browser = check[2][j][b];
	} else {
		var browser = false;
	}
	
	return browser;
}

/*****************************************************************************/
/********  Formular-Validierung  *********************************************/
/*****************************************************************************/
// Typen:
// u - Uhrzeit
// b - Checkbox
// d - Radio
// s - Select
// e - Leere Felder
// m - E-Mail
// t - Telefon
// n - Zahl
// r - Regex
// p - Preis
// c - Namefelder
// lmax - Max. Länge
// lmin - Min. Länge
//var msg_1 = 'Fehler:';
//var var_1 = new Array();
//var_1[0] = new Array('unternehmen','s','kein Unternehmen ausgewählt',''); // name="unternehmen"
//var_1[1] = new Array('datei','e','keine Datei eingegeben','');
//var_1[2] = new Array('email','r','falsche E-Mail',/^[\w\W]$/);

//<tr id="fehler_tr" style="display: none;">
//	<td colspan="2"><p class="form_error" id="form_error"></p></td>
//</tr>

//<form action="" method="post" name="upload_form" onSubmit="return validate(document.forms[0],var_1)">

function validate(sender, myarray, err_hd){

    //var err_msg = !err_hd ? new Array('Folgende Fehler sind aufgetreten:\n') : new Array(err_hd + '\n');
    var err_msg = !err_hd ? new Array() : new Array(err_hd + '\n');
    
    var error = false;
    
    for (i = 0; i < myarray.length; i++) {
//        field = document.forms[sender.name].elements[myarray[i][0]];
        field = sender.elements[myarray[i][0]];
        
        /* Block -5 überprüft Uhrzeit */
        if (myarray[i][1].indexOf('lmin') > -1) {
            if (field.value.length < myarray[i][3]) {
                error = true;
                err_msg.push(myarray[i][2] + ' Mind. ' + myarray[i][3] + ' Zeichen.');
            }
        }
        /* Block -4 überprüft Uhrzeit */
        else 
            if (myarray[i][1].indexOf('lmax') > -1) {
                if (field.value.length > myarray[i][3]) {
                    error = true;
                    err_msg.push(myarray[i][2] + ' Max. ' + myarray[i][3] + ' Zeichen.');
                }
            }
            /* Block -3 überprüft Uhrzeit */
            else 
                if (myarray[i][1].indexOf('u') > -1) {
                    if (field.value) {
                        var regex = /^(2[0-3]|[01][0-9]):[0-5][0-9]$/;
                        var myrxp = new RegExp(regex);
                        var check = (myrxp.test(field.value));
                        if (check != true) {
                            error = true;
                            err_msg.push(field.value + " " + myarray[i][2]);
                        }
                    }
                }
                /* Block -2 überprüft Checkboxen */
                else 
                    if (myarray[i][1].indexOf('b') > -1) {
                        var checkbox_anzahl = field.length;
                        var auswahl = false;
                        for (var j = 0; j < checkbox_anzahl; j++) {
                            if (field[j].checked) {
                                auswahl = true;
                                break;
                            }
                        }
                        if (auswahl == false) {
                            error = true;
                            err_msg.push(myarray[i][2]);
                        }
                    }
                    
                    /* Block -1 überprüft Radiobuttons */
                    else 
                        if (myarray[i][1].indexOf('d') > -1) {
                        
                            var radio_test = false;
                            
                            for (var m = 0; m < field.length; m++) {
                                if (field[m].checked == true) {
                                    radio_test = true;
                                    break;
                                }
                            }
                            if (radio_test == false) {
                                error = true;
                                err_msg.push(myarray[i][2]);
                            }
                            
                        }
                        
                        /* Block 0 überprüft Select-Felder, die ausgewählt sein müssen */
                        else 
                            if (myarray[i][1].indexOf('s') > -1) {
                                if (field.options.selectedIndex == 0) {
                                    error = true;
                                    err_msg.push(myarray[i][2]);
                                }
                            }
                            
                            /* Block 1 überprüft Felder, die ausgefüllt sein müssen */
                            else 
                                if (myarray[i][1].indexOf('e') > -1) {
                                    if (!field.value) {
                                        error = true;
                                        err_msg.push(myarray[i][2]);
                                    }
                                }
                                
                                /* Block 2 überprüft, ob die Emailadresse formal richtig ist */
                                else 
                                    if (myarray[i][1].indexOf('m') > -1) {
                                        if (field.value) {
                                            var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
                                            var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
                                            var regex = "^" + usr + "\@" + domain + "$";
                                            var myrxp = new RegExp(regex);
                                            var check = (myrxp.test(field.value));
                                            if (check != true) {
                                                error = true;
                                                err_msg.push(field.value + " " + myarray[i][2]);
                                            }
                                        }
                                    }
                                    
                                    /* Block 2.5 überprüft, ob die Telefonnummer formal richtig ist */
                                    else 
                                        if (myarray[i][1].indexOf('t') > -1) {
                                            if (field.value) {
                                                //var regex = /^(\(?\+?[0-9]*\)?)?[0-9_\- \(\)\/]*$/i;
                                                var regex = /^(\+[0-9]{2,3}|0+[0-9]{2,5}).+[\d \s \/ \( \) -]/;
                                                var myrxp = new RegExp(regex);
                                                var check = (myrxp.test(field.value));
                                                if (check != true) {
                                                    error = true;
                                                    err_msg.push(field.value + " " + myarray[i][2]);
                                                }
                                            }
                                        }
                                        
                                        
                                        /* Block 3 überprüft Felder, deren Wert eine Zahl sein muss */
                                        else 
                                            if (myarray[i][1].indexOf('n') > -1) {
                                                var num_error = false;
                                                if (field.value) {
                                                    var myvalue = field.value;
                                                    var num = myvalue.match(/[^0-9,\.]/gi)
                                                    var dot = myvalue.match(/\./g);
                                                    var com = myvalue.match(/,/g);
                                                    if (num != null) {
                                                        num_error = true;
                                                    }
                                                    else 
                                                        if ((dot != null) && (dot.length > 1)) {
                                                            num_error = true;
                                                        }
                                                        else 
                                                            if ((com != null) && (com.length > 1)) {
                                                                num_error = true;
                                                            }
                                                            else 
                                                                if ((com != null) && (dot != null)) {
                                                                    num_error = true;
                                                                }
                                                }
                                                if (num_error == true) {
                                                    error = true;
                                                    err_msg.push(myvalue + " " + myarray[i][2]);
                                                }
                                            }
                                            
                                            /* Block 4 überprüft Wert anhand eines regulären Audrucks auf bestimmte Muster */
                                            else 
                                                if (myarray[i][1].indexOf('r') > -1) {
                                                    var regexp = myarray[i][3];
                                                    if (field.value) {
                                                        if (!regexp.test(field.value)) {
                                                            error = true;
                                                            err_msg.push(field.value + " " + myarray[i][2]);
                                                        }
                                                    }
                                                }
                                                
                                                /* Block 5 überprüft Felder, die als Preis formatiert sein müssen, ändert die Formatierung eventuell */
                                                else 
                                                    if (myarray[i][1].indexOf('p') > -1) {
                                                        var myvalue = field.value;
                                                        var reg = /,-{1,}|\.-{1,}/;
                                                        var nantest_value = myvalue.replace(reg, "");
                                                        var num = nantest_value.match(/[^0-9,\.]/gi)
                                                        sep = myarray[i][1].substr(1, 1) ? myarray[i][1].substr(1, 1) : ',';
                                                        if (field.value) {
                                                            var myvalue = field.value.replace(/\./, ',');
                                                            if (myvalue.indexOf(',') == -1) {
                                                                field.value = myvalue + sep + '00';
                                                            }
                                                            else 
                                                                if (myvalue.indexOf(",--") > -1) {
                                                                    field.value = myvalue.replace(/,--/, sep + '00');
                                                                }
                                                                else 
                                                                    if (myvalue.indexOf(",-") > -1) {
                                                                        field.value = myvalue.replace(/,-/, sep + '00');
                                                                    }
                                                                    else 
                                                                        if (!myvalue.substring(myvalue.indexOf(',') + 2)) {
                                                                            error = true;
                                                                            err_msg.push(field.value + " " + myarray[i][2]);
                                                                        }
                                                                        else 
                                                                            if (myvalue.substring(myvalue.indexOf(',') + 3) != '') {
                                                                                error = true;
                                                                                err_msg.push(field.value + " " + myarray[i][2]);
                                                                            }
                                                                            else 
                                                                                if (num != null) {
                                                                                    error = true;
                                                                                    err_msg.push(field.value + " " + myarray[i][2]);
                                                                                }
                                                        }
                                                    }
                                                    
                                                    /* Block 6 überprüft Namensfelder, und korrigiert evtl. die Groß-/Kleinschreibung */
                                                    else 
                                                        if (myarray[i][1].indexOf('c') > -1) {
                                                            var noble = new Array("de", "von", "van", "der", "d", "la", "da", "of");
                                                            var newvalue = '';
                                                            var myvalue = field.value.split(/\b/);
                                                            for (k = 0; k < myvalue.length; k++) {
                                                                newvalue += myvalue[k].substr(0, 1).toUpperCase() + myvalue[k].substring(1);
                                                            }
                                                            for (k = 0; k < noble.length; k++) {
                                                                var reg = new RegExp("\\b" + noble[k] + "\\b", "gi");
                                                                newvalue = newvalue.replace(reg, noble[k]);
                                                            }
                                                            field.value = newvalue;
                                                        }
    }
    
    /* im Fehlerfall werden hier die gesammelten Fehlermeldungen verarbeitet und angezeigt. Wenn das
     Formular ohne Beanstandung ist, wird es übertragen */
    if (error) {
        //err_msg = err_msg.join('\n\xB7 ');
        error_tr_sauber();
        $(ValidateSettings.fehler_tr).show();
        //        document.getElementById('fehler_tr').style.display = 'block';
        err_msg = err_msg.join('\<br \/\>');
        $(ValidateSettings.form_error_name).update(err_msg);
        //        document.getElementById('form_error').innerHTML = err_msg;
        return false;
    }
    else {
        return true;
    }
}

function error_tr_sauber() {

    $(ValidateSettings.form_error_name).update();
    if ( $('form_error_php') != null && $('form_error_php') != undefined ) {
	    $('form_error_php').update();
    }
    $(ValidateSettings.fehler_tr).hide();
}

// Ist notwendig, wenn das Error-Feld nicht "form_error" heisst
var ValidateSettings = {
	
	form_error_name : 'form_error',
	
	fehler_tr : 'fehler_tr',
	
	setFormErrorName : function (new_name) {
		this.form_error_name = new_name;
	},
	
	setFehlerTr : function (new_tr) {
		this.fehler_tr = new_tr;
	}
}

/**
 * ZEICHENZÄHLER
 * 
 * @aufruf:
 * <textarea name="pm_inhalt" id="pm_inhalt" cols="75" rows="20"><?php echo $pm_inhalt; ?></textarea>
 * <p class="content"><span id="zeichenanzahl"></span> Zeichen</p>
 * <input type="hidden" name="hidden_count" id="hidden_count" value="" />
 */
var CountChar = {
	
	textarea_id : '',
	
	anzeigefeld_id : '',
	
	hiddenfield_id : false,
	
	laenge : 0,
	
	init : function () {
		// Beim ersten Start Zeichen zählen
		CountChar.trigger();
		
		var events = ['keyup','mousemove'];
		for ( var i = 0; i < events.length; i++ ) {
			Event.observe(CountChar.textarea_id, events[i], CountChar.trigger);
		}
	},
	
	trigger : function () {
		
		CountChar.countField();
		CountChar.showNumber();
	},
	
	showNumber : function () {
		$(CountChar.anzeigefeld_id).update(CountChar.laenge);
		
		// Wenn hidden_field definiert ist -> schreibe zusätzlich sein Wert
		if ( CountChar.hiddenfield_id != false ) {
			$(CountChar.hiddenfield_id).value = CountChar.laenge;
		}
	},
	
	countField : function () {
		var text = $(CountChar.textarea_id).value;
		var new_text = text.replace(/(\n\r)|(\n)|(\r)|(\t)/g,"");
		var laenge = new_text.length;
		CountChar.laenge = laenge;
	}
}

/**************	Allgemeine add-ons	***********************************************************************************/

//Object with js-extensions
var _epl = new Object();

/**
* Check if var is empty
* 
* @param mixed eingabe
* @return bool
*/
_epl.empty = function (eingabe) {
	
	var key;
	
	if (eingabe === "" ||
			eingabe === 0 ||
			eingabe === "0" ||
			eingabe === null ||
			eingabe === false ||
			eingabe === undefined
	) {
		return true;
	}
	
	if (typeof eingabe == 'object') {
		for (key in eingabe) {
			return false;
		}
		return true;
	}
	
	return false;
};

/**
* Get properties names of an object
* 
* @param obj
* @return string
*/
_epl.getProperties = function (obj) {
	
	if (typeof obj != 'object') return '"' + obj + '" is not a object!'; 
	
	var properties = '';
	for (ele in obj) properties += ele + "\n";
	return properties;
};


/**************	jQuery modification	***********************************************************************************/

//Add js-extensions to jQuery
if (jQuery) {
	
	jQuery.extend({
		_epl : _epl
	});
	
	jQuery.fn.etoggle = function () {
		if (jQuery(this).is(':hidden')) {
			jQuery(this).slideDown('fast');
		} else {
			jQuery(this).hide();
		}
	};
	
	jQuery.fn.eshow = function () {
		jQuery(this).slideDown('fast');
	};
}

/**************	For CallBack	***************************************************************************************/
function showBackCall () {
	
	var browser = browserCheck();

	// Beim IE 6 und 5 wird der graue Layer entfernt
	if ( browser == 'IE 6' || browser == 'IE 5x' ) {
		/*$('unterlayer').remove();*/
		$('backcalllayer').show();
	} else {
		$('unterlayer').setOpacity(0.2);
		$('backcalllayer','unterlayer').invoke('show');
	}

//	document.write('<div id="unterlayer" class="unterlayer" style="display: none;"></div>');
	
	return false;
}

function hideBackCall () {


	ValidateSettings.setFormErrorName('form_error_callback');
	ValidateSettings.setFehlerTr('fehler_tr_callback');
	
	$(ValidateSettings.form_error_name).update();
	
	var browser = browserCheck();
	
	if ( browser != 'IE 6' && browser != 'IE 5x' ) {
		$('unterlayer').hide();
	}
	$('backcalllayer').hide();
	
	return false;
}

function sendBackCall () {

	ValidateSettings.setFormErrorName('form_error_callback');
	ValidateSettings.setFehlerTr('fehler_tr_callback');
	
	var var_1 = new Array();
	var_1[0] = new Array('name','e','Name fehlt.','');
	var_1[1] = new Array('unternehmen','e','Unternehmen fehlt.','');
	var_1[2] = new Array('telefon','e','Telefonnummer fehlt.','');
	var_1[3] = new Array('telefon','t','Falsche Telefonnummer.','');
	var_1[4] = new Array('callbacktermin','e','Rückruftermin fehlt.','');
	var_1[5] = new Array('email','e','E-Mail fehlt.','');
	var_1[6] = new Array('email','m','Falsche E-Mail-Adresse.','');
	
	var formular = document.forms['callbackform'];

	var antwort = validate(formular,var_1);
	
	var browser = browserCheck();
	
	if ( antwort == true ) {
		if ( browser != 'IE 6' && browser != 'IE 5x' ) {
			$('unterlayer').hide();
		}
		$('backcalllayer').hide();
		return true;
	} else {
		return false;
	}
}