/*
 * Main Javascript 
 */
// increase the default animation speed to exaggerate the effect
$.fx.speeds._default = 1000;

$(function(){
    $('#ajaxLoad').hide();
    if($('#normal').length >0){
        //initialisierung Materialgallery
        initGallery();
        
        initVideos();
    }

    //initialisierung Navigation
    initNavigation();
});

Array.prototype.deletePos = function(position) {
    for (var x = 0; x < this.length; ++x) {
        if (x >= position) {
            this[x] = this[x + 1];
        }
    }
    this.pop();
};

Array.prototype.find = function(searchStr) {
    var returnArray = false;
    for (i=0; i<this.length; i++) {
        if (typeof(searchStr) == 'function') {
            if (searchStr.test(this[i])) {
                if (!returnArray) {
                    returnArray = []
                }
                returnArray.push(i);
            }
        } else {
            if (this[i]===searchStr) {
                if (!returnArray) {
                    returnArray = []
                }
                returnArray.push(i);
            }
        }
    }
    return returnArray;
};

function getCorrectHrefData(link){
    var cdata="";
    if($.support.hrefNormalized){
        cdata=$(link).attr("href");
    }else{
        var help=$(link).attr("href").split('/');
        cdata=help[help.length-1];
    }
    return cdata;
}

/*
 * Erstellen einer neuen JQuery-Methode für das erstellen der Fehler-Sprachblase
 * um User zu Informieren, welche Fehler er beim Formular gemacht hat
 * 1.Parameter: STRING 'show'=Sprechblase öffnen,'close'=Sprechblase schließen
 * 2.Parameter: STRING ID des Elements von dieser der Inhalt der Sprechblase
 * herkommt.
 */
$.fn.alertInfoBox = function(option,textsource){
    //Abfrage ob Fehler-Sprechblase angezeigt werden soll
    if(option=="show"){
        /*Abfrage ob bereits eine Fehler-Sprechblase schon aufgerufen wurde
          wenn ja wird die gefunden Sprechblase gelöscht*/
        if($('#ibspan').length>0){
            $('#ibspan').remove();
        }
        //Erstellen eines SPAN Elements
        var infoBox=$('<span></span>');
        //Einstellen der Attribute für das neue Element
        infoBox.addClass('ib');
        infoBox.attr('id', 'ibspan');
        //Verstecken der Sprechblase
        infoBox.hide();
        //Erhalten der Textinput Position zum positionieren Sprechblase
        var position=$(this).position();
        /*Abfrage ob eine Quelle dieser Methode übergeben wurde in dieser der
          Inhalt der Sprechblase steht*/
        if(textsource == undefined){
            /*Abfrage ob das nächste Element des Inputfeldes eine Quelle für den
              Inhalt der Sprechblase ist, wenn ja wird das voherige Element als
              Quelle verwendet*/
            if($(this).next().is(':empty')){
                infoBox.text($(this).prev().text());
            }else{
                infoBox.text($(this).next().text());
            }
        }else{
            infoBox.text($(textsource).text());
        }
        //Einstellen der CSS Eigenschaften der Sprechblase
        infoBox.css({
            'position':'absolute',
            'border':'solid 1px #EC008C',
            'backgroundColor':'#f6c',
            'opacity':'0.90',
            'padding':'5px',
            'color':'#fff',
            '-moz-border-radius':'6px',
            '-khtml-border-radius':'6px',
            'width':'200px',
            'height':'auto',
            'z-index':3000
        });
        //Einfügen der Sprechblase vor dem Textinputfeld
        $(this).before(infoBox);
        //Positionieren der Sprechblase über dem Textinputfeld
        infoBox.css({
            'left':position.left,
            'top': position.top-infoBox.height()-12
        });
        //Anzeigen der Sprechblase
        infoBox.show();
    }else if(option=='close'){
        //Löschen der Sprechblase dieses Textinputfeld
        $(this).prev('.ib').remove();
    }
};

$.fn.urlParamValue = function(param){
    var cdata="";
    var params=new Object();
    var help=new Array();
    var help2=new Array();

    if($.support.hrefNormalized){
        cdata=$(this).attr("href");
    }else{
        help=$(this).attr("href").split('/');
        cdata=help[help.length-1];
    }
    help=cdata.split('?');
    cdata=help[help.length-1];
    help=cdata.split('&');
    for(var i=0;i<help.length;i++){
        help2.push(help[i]);
    }
    for(var i=0;i<help2.length;i++){
        help=help2[i].split('=');
        params[help[0]]=help[1];
    }
    if(params.hasOwnProperty(param)){
        return params[param];
    }else{
        return null;
    }
};

var general ={
    //Einstellung der Fehler-Meldung beim validieren der Inputfelder
    errorPlacement: function(error, element) {},
    //Einstellung der Highlight Optionen beim validieren der Inputfelder
    highlight: function(element, errorClass) {
        // Ändern des Farbrahmen
        $(element).css({
            "border-color": "#EC008C"
        //Hinzufügen einer 'error'-Klasse an diese Element
        }).addClass('error');
        //Abfrage ob dieses Inputfeld eine Fehler-Sprechblase haben soll
        if(!$(element).hasClass('nobox')){
            /*Anbinden von Events an das Inputfeld für das erstellen von
              Sprechblasen*/
            $(element).bind('focus keyup keydown keypress change',function(e){
                // Abfrage ob das Element einen Validierungsfehler hat
                if($(element).hasClass('error')){
                    //Anzeigen der Sprachblase
                    $(element).alertInfoBox('show');
                }else{
                    //Zerstören der Sprechblase
                    $(element).alertInfoBox('close');
                }
            });
        }
        //Highlighten des zuständigen Labels zu diesen Inputfeld
        $(element.form).find("label[for=" + element.id + "]").css("color", "#EC008C");
    },
    //Einstellung für das unhighlight für das validieren der Inputfelder
    unhighlight: function(element, errorClass) {
        //Ändern des Farbrahmen
        $(element).css({
            "border-color": "#39c"
        //Löschen der 'error'-Klasse vom Element
        }).removeClass('error');
        //unhighlight des zuständigen Lables zum Inputfeld
        $(element.form).find("label[for=" + element.id + "]").css("color", "#39c");
    },
    //Einstellung des Debug zum validieren beim Formular
    debug: true
};

//Allgemeine Validierungs-Einstellungen für das Validieren der Formulare
var allRules={
    passrem:{
        email:{
            //E-Mail Adresse ist pflicht
            required:true,
            //Muss den allgemeinen E-Mail-Format haben
            email:true
        }
    },
    //Validierungsoptionen für das Formular der Registrierung
    user:{
        email:{
            //Ausfüllen der E-Mail Adresse ist Pflicht
            required:true,
            //E-Mail Adresse muss den allgemeinen E-Mail-Format passen
            email:true
        },
        password: {
            //Ausfüllen des Passwortfelds ist pflicht
            required: true,
            //Minimal Länge des Passwort darf nur 3 Zeichen sein
            minlength: 3
        },
        passwordrep:{
            //Ausfüllen des Passwort wiederholen-Felds ist pflicht
            required: true,
            //Minimal Länge des Passwort darf nur 3 Zeichen sein
            minlength: 3,
            //muss gleich mit dem Passwort sein
            equalTo: "#rpassword"
        }
    },
    euser:{
        email:{
            //Ausfüllen der E-Mail Adresse ist Pflicht
            required:true,
            //E-Mail Adresse muss den allgemeinen E-Mail-Format passen
            email:true
        },
        password: {
            //Minimal Länge des Passwort darf nur 3 Zeichen sein
            minlength: 3
        },
        passwordrep:{
            //Minimal Länge des Passwort darf nur 3 Zeichen sein
            minlength: 3,
            //muss gleich mit dem Passwort sein
            equalTo: "#rpassword"
        }
    },
    registration:{
        zip:{
            //Zeichenlänge darf nur zwischen 4-5 Zeichen sein
            rangelength: [4, 5],
            //Der wert darf nur aus numerischen Zahlen bestehen
            number:true
        },
        email:{
            //Ausfüllen der E-Mail Adresse ist Pflicht
            required:true,
            //E-Mail Adresse muss den allgemeinen E-Mail-Format passen
            email:true,
            availability:"#checkem"
        },
        password: {
            //Ausfüllen des Passwortfelds ist pflicht
            required: true,
            //Minimal Länge des Passwort darf nur 3 Zeichen sein
            minlength: 3
        },
        passwordrep:{
            //Ausfüllen des Passwort wiederholen-Felds ist pflicht
            required: true,
            //Minimal Länge des Passwort darf nur 3 Zeichen sein
            minlength: 3,
            //muss gleich mit dem Passwort sein
            equalTo: "#rpassword"
        },
        //Homepage muss richtige URL haben (z.B.:http://meine.homepage.de)
        homepage:"url"
    }
};

/*
 * Validationsmethode zum herausfinden ob bereits der eingegeben Benutzername
 * schon verwendet wird.
 * Rückgabeparamater: false wenn Username schon bereits existiert sonst true
 */
$.validator.addMethod("availability",function(value,element,param){
    return !($(param).is(":contains('"+value+"')"));
},"not available");
