/* Sample Handler
 * Jedes Input[type="text" oder "password"] und Textarea Feld mit der Klasse
 * "sample" bekommt einen SampleHandler. Dieser löscht den Sample-Text bei onClick
 * und fügt ihn ggf. wieder an. 
 * Wenn die Input-Elemente innerhalb eines Form-Tags platziert sind, verhindert der SampleHandler das 
 * Abschicken, bis alle Sample-Texte ersetzt wurden und fügt die Klasse "sample-failed" an.
 * Leere Inhalte in einem Feld werden nur akzeptiert, wenn das Element das Attribut "emptyallowed" hat.
 *
 * Klassen- und Attributzusammenfassung:
 * .sample
 * .sample-failed
 * emptyallowed
 *
 * Prototype 1.6 muss eingebunden sein.
 */


Event.observe(window, "load", function(){

    var SampleHandler = Class.create({
        initialize : function(input){
            this.sampleValue = input.getValue();
            this.changed = false;
            this.elementId = input.identify();
            input.observe("click", this.onClick.bindAsEventListener(this));
            input.observe("blur", this.onBlur.bindAsEventListener(this));
            if(input.up("FORM") != null){
                input.up("FORM").observe("submit", this.onSubmit.bindAsEventListener(this));
            }
        },

        _valueHasChanged : function(){
            var input = $(this.elementId)
            if(input.getValue() == this.sampleValue)
                return false;
            else if(input.getValue() == ""){
                if(input.readAttribute("emptyallowed") != null)
                    return true;
                else
                    return false;
            }
            else 
                return true;
        },

        onClick : function(ev){
            var input = ev.element();
            if(input.match("INPUT"))
                input.value = "";
            else if(input.match("TEXTAREA"))
                input.innerHTML = ""
            input.removeClassName("sample");
        },

        onBlur : function(ev){
            var input = ev.element();
            if ( !this._valueHasChanged() ){
                input.addClassName("sample")
                if(input.match("INPUT"))
                    input.value = this.sampleValue;
                else if(input.match("TEXTAREA"))
                    input.innerHTML = this.sampleValue;
            } 
            else 
                input.removeClassName("sample-failed");

        },

        onSubmit : function(ev){
            if(!this._valueHasChanged()){
                $(this.elementId).addClassName("sample-failed");
                ev.stop();
            }
            else
                $(this.elementId).removeClassName("sample-failed");
        }
    });


    $$("INPUT[type='text'].sample")
        .concat($$("INPUT[type='password'].sample"))
        .concat($$("TEXTAREA.sample"))
    .each(function(input){
        new SampleHandler(input);
    })

});



