/*******************************************************************
 ***
 ***  Einige JavaScript-Utils für den alltäglichen Gebrauch
 ***  (c) 2007, Markus Feineis
 ***
 *******************************************************************/


    function decrypt(string) {
        var result = r0t13(string);
        result = result.replace(/\#/g, '@');
        result = result.replace(/\*/g, '.');
        window.location.href = "mailto:"+result;
    }



    function r0t13(string) {
        var aCode = 'a'.charCodeAt();
        var zCode = 'z'.charCodeAt();
        var ACode = 'A'.charCodeAt();
        var ZCode = 'Z'.charCodeAt();
        var result='';
        for (var c = 0; c < string.length; c++) {
            var charCode = string.charCodeAt(c);
            if (charCode >= aCode && charCode <= zCode)
                charCode = aCode + (charCode - aCode + 13) % 26;
            else if (charCode >= ACode && charCode <= ZCode)
            charCode = ACode + (charCode - ACode + 13) % 26;
            result += String.fromCharCode(charCode);
        }
        return result;
    }


    function confirmLink(text) {

        var is_confirmed = confirm(text);
        if (is_confirmed) return true;
        else return false;
    }
    
    function linktarget(obj) {
        obj.target = '_blank';
    }
    

   
    
    var base64s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

    function base64_encode(decStr) {
        var bits;
        var dual;
        var i = 0;
        var encOut = '';
        while(decStr.length >= i + 3) {
            bits = (decStr.charCodeAt(i++) & 0xff) <<16 |
                   (decStr.charCodeAt(i++) & 0xff) <<8  |
                    decStr.charCodeAt(i++) & 0xff;
        encOut += base64s.charAt((bits & 0x00fc0000) >>18) +
                  base64s.charAt((bits & 0x0003f000) >>12) +
                  base64s.charAt((bits & 0x00000fc0) >> 6) +
                  base64s.charAt((bits & 0x0000003f));
        }
        if(decStr.length -i > 0 && decStr.length -i < 3) {
            dual = Boolean(decStr.length -i -1);
            bits = ((decStr.charCodeAt(i++) & 0xff) <<16) |
                    (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
            encOut += base64s.charAt((bits & 0x00fc0000) >>18) +
                      base64s.charAt((bits & 0x0003f000) >>12) +
                     (dual ? base64s.charAt((bits & 0x00000fc0) 
                      >>6) : '=') +
                      '=';
        }
    return(encOut);
    }

    
    function isDate(datum) {
  
        //(Schritt 1) Fehlerbehandlung
        if (!datum) return false;
        datum=datum.toString();
        
        //(Schritt 2) Aufspaltung des Datums
        datum=datum.split(".");
        if (datum.length!=3) return false;
        
        //(Schritt 3) Entfernung der fuehrenden Nullen und Anpassung des Monats
        datum[0]=parseInt(datum[0],10);
        datum[1]=parseInt(datum[1],10)-1;
        
               
        if (datum[0].length<2) return false;
        if (datum[1].length<2) return false;
        if (datum[2].length<4) return false;
        
        
        //(Schritt 5) Erzeugung eines neuen Dateobjektes
        var kontrolldatum=new Date(datum[2],datum[1],datum[0]);
        
        //(Schritt 6) Vergleich, ob das eingegebene Datum gleich dem JS-Datum ist
        if (kontrolldatum.getDate()==datum[0] && kontrolldatum.getMonth()==datum[1] && kontrolldatum.getFullYear()==datum[2])
            return true; 
        else return false;
    }
    
    
    
    // prüft, ob date1 vor date2 liegt
    function checkDates(date1, date2) {
        if (!(isDate(date1) && isDate(date2))) {
            date1 = new Date("05 05, 2006 "+date1+":00");  // Monat Tag, Jahr HH:ii:ss
            date2 = new Date("05 05, 2006 "+date2+":00");
        }
        if (date1>=date2) { return false; }
        return true;
    }
    
    
    // prüft, ob Datum 1 vor Datum 2 liegt
    // date1 z.B.: 20.02.2006-16:15
    function checkFullDates(date1, date2) {  
        var d1 = date1.substring(3, 5)+" " + date1.substring(0, 2)+", "+date1.substring(6, 10)+" "+date1.substring(11, 13)+":"+date1.substring(14, 16)+":00";
        var d2 = date2.substring(3, 5)+" " + date2.substring(0, 2)+", "+date2.substring(6, 10)+" "+date2.substring(11, 13)+":"+date2.substring(14, 16)+":00";        
        date1 = new Date(d1);
        date2 = new Date(d2);                     
        if (date1>=date2) { return false; }
        return true;
    }
    
    
    
    
    function checkForm(frm) {
        var elems = frm.getElements('.frm_required');
        var elems2 = frm.getElements('.frm_valid_date');
        var elems3 = frm.getElements('.frm_valid_number');
        elems.concat(elems2);
        elems.concat(elems3);
        
        var labels = frm.getElements('label[for!=""]');
        var err = "";
        
        if (elems != null) {
            for (var t=0; t<elems.length; t++) {
                var id = elems[t].getAttribute('id');
                $(id).removeClass('frm_error');
                
                if (!elems[t].disabled) {    
                    // get name of label
                    var str = elems[t].name;
                    for (var i=0; i<labels.length; i++) {
                        if (labels[i].getAttribute('for') == id) {
                            str = labels[i].innerHTML.replace(/<span(.*)<\/span>/, '');
                            str = str.replace(':', '').trim();
                        }
                    }
                    
                    var hasErr = false;
                    var strErr = "";
                    
                    // Datumsfeld
                    if (elems[t].hasClass('frm_valid_date') && !validateDate(elems[t])) {  
                        hasErr = true;
                        strErr = "Datumsformat: 01.01.2008";
                    
                    // Datumsfeld
                    } else if (elems[t].hasClass('frm_valid_number') && !validateNumber(elems[t])) {  
                        hasErr = true;
                        strErr = "nur Zahlen erlaubt";
                    
                    
                    // Pflichtfeld leer?
                    } else if (elems[t].hasClass('frm_required') && elems[t].value.trim() == "") {  
                        hasErr = true;
                        strErr = "bitte ausfüllen";
                    }
                    
    
                    
                    if (hasErr) {
                        err += "  - " + str + " (" + strErr + ")\n";
                        $(id).addClass('frm_error');
                        if ($('error_' + id) == null && !$(id).hasClass('frm_no_text')) {
                            new Element('div', {
                                'class': 'frm_error_box',
                                'id': 'error_' + id
                            }).injectAfter(id).set('text', ' ' + strErr);
                        }
                    } else if ($('error_' + id) != null) {
                        $('error_' + id).dispose();
                    }
                }
            }
        }
        if (err != "") {
            err = "Bitte füllen Sie alle mit * markierten Felder korrekt aus!";
            alert(err);
            return false;
        }
        return true;
    }
    
    function validateDate(elem) {
        var dd = elem.value.trim().split(".");
        if (dd.length == 3) {
            if (parseInt(dd[0])!=NaN && parseInt(dd[1])!=NaN && parseInt(dd[2])!=NaN && dd[0].length==2 && dd[1].length==2 && dd[2].length==4) {
                return true;
            }
        }
        return false;
    }
    
    function validateNumber(elem) {
        if (parseInt(elem.value.trim())) {
            return true;
        }
        return false;
    }
    
    
    
    // prüft, ob Differenz zwischen Datum maximal 24 Stunden beträgt
    // date1 z.B.: 20.02.2006-16:15
    function checkDateDifference(date1, date2, dateobject) {  
        if (!dateobject) {         
            var d1 = date1.substring(3, 5)+" " + date1.substring(0, 2)+", "+date1.substring(6, 10)+" "+date1.substring(11, 13)+":"+date1.substring(14, 16)+":00";
            var d2 = date2.substring(3, 5)+" " + date2.substring(0, 2)+", "+date2.substring(6, 10)+" "+date2.substring(11, 13)+":"+date2.substring(14, 16)+":00";
            date1 = new Date(d1);
            date2 = new Date(d2);                     
        }
        var date_max = new Date(date1);
        var absolut24 = date_max.getTime() + (1000 * 60 * 60 * 24);  // 24h dürfen nicht überschritten werden;
        date_max.setTime(absolut24);
                          
        if (date2>=date_max) { return false; }
        return true;
    }
    
    
    
    function isTime(time) {
  
        //(Schritt 1) Fehlerbehandlung
        if (!time) return false;
        time=time.toString();
        
        //(Schritt 2) Aufspaltung
        time=time.split(":");
        if (time.length!=2) return false;
        
        
        time[0]=parseInt(time[0],10);
        time[1]=parseInt(time[1],10)-1;
        
               
        if (time[0].length<2) return false;
        if (time[1].length<2) return false;
        
        
        return true;
    }
    
    
    
    function addLeadingZero(str, no) {
        str = str.toString();
        while (str.length < no) str = "0" + str;
        return str;
    }
    
    
    
    function browserCheck() {
        var name = navigator.userAgent.toLowerCase()

        var ie = (name.indexOf("msie") > -1 || name.indexOf("myie") > -1);
        var opera = (name.indexOf("opera") > -1); 
        var mozilla = (name.indexOf("mozilla")!=-1);
        var netscape = (name.indexOf("mozilla")!=-1 && name.indexOf("compatible")==-1 && name.indexOf("opera")==-1);
  
        if (ie) return 'ie';
        if (opera) return 'opera';  
        if (netscape) return 'netscape';
        if (mozilla) return 'mozilla';
              
        return 'unknown';      
    }
    
    
    
    function noTextSelection(item) {
        item.onselectstart = new Function("return false;");   
    }


    function windowWidth() {
        if (window.innerWidth) {
            return window.innerWidth;
        } else if (document.body && document.body.offsetWidth) {
            return document.body.offsetWidth;
        } else {
            return 0;
        }
    }
    
    
    function xor (el1, el2) {        
        return (el1 && !el2) || (!el1 && el2);
    }
    
    
    function chars2type(el) {
        var len = el.value.length;
        if (document.getElementById('chars')!=null) {
            document.getElementById('chars').value = len;    
        }
    }
 

    
    function toggle(id) {
        var item = document.getElementById(id);
        if (item!=null) {
            if (item.style.display == 'none') {
                show(id);
                fadeIn(id, 20, 0, 1);
            } else { 
                fadeOut(id, 20, 0, 1, "hide('"+id+"');");
            }
        }
    }
    function toggle2(id1, id2) {
        var item1 = document.getElementById(id1);
        var item2 = document.getElementById(id2);
        if (item1!=null) {
            if (item1.style.display == 'none') {
                show(id1);
                fadeIn(id1, 20, 0, 1);
            } else { 
                fadeOut(id1, 20, 0, 1, "hide('"+id1+"');");
                hide(id1);
            }
        }
        if (item2!=null) {
            if (item2.style.display == 'none') {
                show(id2);
                fadeIn(id2, 20, 0, 1);
            } else { 
                fadeOut(id2, 20, 0, 1, "hide('"+id2+"');");
                hide(id2);
            }
        }
    }
    function show(id) {
        var item = document.getElementById(id);
        if (item!=null) {
            item.style.opacity = 1;
            item.style.display = 'block'
        }
    }
    function hide(id) {
        var item = document.getElementById(id);
        if (item!=null) {
            item.style.display = 'none';
        }
    }

    
    function addToggleState(item) {
        var el = document.getElementById('fcont_heading');
        if (el != null) {
            var toggle = 0; 
            if (el.offsetHeight == 0) { 
                item.href += "&toggle=" + 1;
            }
        }
    }
    
    function popupGallery(id) {
        var gal = window.open("gallery.php?galID=" + id, "Bildergalerie", "width=900,height=550,resizable=no,scrollbars=no");
        gal.focus();
        return false;
    }
    
    // Mauskoordinaten
    var xpos = 0;
    var ypos = 0;
    if(document.layers) {
        window.captureEvents(Event.MOUSEMOVE);
        window.onmousemove = coordinates;
    } else {
        document.onmousemove = coordinates;
    }
    function coordinates(e) {
        xpos = (document.layers || (document.getElementById && !document.all)) ? e.pageX :     document.body.scrollLeft + event.clientX;
        ypos = (document.layers || (document.getElementById && !document.all)) ? e.pageY :     document.body.scrollTop + event.clientY;
    }
    function getMouseX() {
        return xpos;
    }
    function getMouseY() {
        return ypos;
    }



    function URLEncode(plaintext) {
    
    	var SAFECHARS = "0123456789" +					// Numeric
    					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
    					"abcdefghijklmnopqrstuvwxyz" +
    					"-_.!~*'()";					// RFC2396 Mark characters
    	var HEX = "0123456789ABCDEF";
    
    	var encoded = "";
    	for (var i = 0; i < plaintext.length; i++ ) {
    		var ch = plaintext.charAt(i);
    	    if (ch == " ") {
    		    encoded += "+";				// x-www-urlencoded, rather than %20
    		} else if (SAFECHARS.indexOf(ch) != -1) {
    		    encoded += ch;
    		} else {
    		    var charCode = ch.charCodeAt(0);
    			if (charCode > 255) {
    				encoded += "+";
    			} else {
    				encoded += "%";
    				encoded += HEX.charAt((charCode >> 4) & 0xF);
    				encoded += HEX.charAt(charCode & 0xF);
    			}
    		}
    	} // for
    
    	return encoded;
    };

