//
//  g_forms.js
//  trunk
//
//  Copyright (c) 2006 Mathias Winkler. All rights reserved.
//



/* ********************************** */
/* ********* GENERAL STUFF ********** */
/* ********************************** */

function indexOf(needle, haystack) {                // conversion of JavaScripts most awesome
        for (i=0;i<haystack.length;i++) {           // indexOf function.  Searches an array for
                if (haystack[i] == needle) {        // a value and returns the index of the *first*
                        return i;                   // occurance
                }
        }
        return -1;
}


function setElementBlock (elem_id)
{
    elem=getElement (elem_id);
    elem.style.display="block";
}
function setElementHidden (elem_id)
{
    elem=getElement (elem_id);
    elem.style.display="none";
}
function setElementInline (elem_id)
{
    elem=getElement (elem_id);
    logDebug("SetElementInline: "+elem.id);
    elem.style.display="inline";
}

function formFieldGotFocus (elem)
{
    swapElementClass(elem, "form_inactive_fields", "form_active_fields");
}

function formFieldLostFocus (elem)
{
    swapElementClass(elem, "form_active_fields", "form_inactive_fields");
}



formReset =  function (aId) {
    formClearField = function (elem) {
        logDebug("formReset(): in map")
        switch (elem.type) {
            case "text":
            case "textarea":
                elem.value="";
                break;
            case "checkbox":
                elem.checked="";
                break
            case "select-one":
                elem.selectedIndex=0;
        }
    }
    form=getElement(aId);
    logDebug("formReset(): before map")
    map (formClearField,form)
}

function formCheck (aID, formTestFunction, exceptArray) {
        getErrorCode = function (a){
            return a[1];
        }
        testFunctionWrapper = function (b) {
            return formTestFunction(b,exceptArray);
        }
        logDebug("1");
        aForm=getElement(aID);
        logDebug("1");
        elements=aForm.elements;
        logDebug("1");
        aArray=map (testFunctionWrapper,elements);
        logDebug("1");
        return sum (map(getErrorCode,aArray));
    }


    function formTestGeneral (a,exceptionArray)
    {
        rc=0;
        logDebug("formTestGeneral: welcome.")
        if ((typeof(exceptionArray)!="object") || ((indexOf(a.id,exceptionArray) == -1))) { 
                                                                //is exceptionArray an array?
            logDebug("formTestGeneral: if ")

            if ((hasElementClass(a,"form_required")) && (a.type == "select-one")) { // select-one?
                logDebug("formTestGeneral: if if")
                if (a.selectedIndex == 0) {   // its not been altered
                    logDebug("formTestGeneral: if if if")
                    formFieldDisplayError(a);
                    rc=2;
                }                                                                   // checkbox?
            } else if ((hasElementClass(a,"form_required")) && (a.type == "checkbox")) {
                if (!a.checked) {           // its not checked
                    formFieldDisplayError(a);
                    rc=3;
                }
            } else if ((hasElementClass(a,"form_required")) && (a.value=="") ) {    // everything else
                formFieldDisplayError(a);
                rc=1;
            }
        }

        rv=[a.id,rc]
        return rv;
    }

showfunc = function (xelem) {    
    addElementClass(xelem,"form_error_fields");
    switch (xelem.nodeName) {
        case "SELECT":
            xelem.style.backgroundColor="#FF0066"
            break;
        default:
            // fdfd
    }
}
hidefunc = function (xelem) {
    removeElementClass(xelem, "form_error_fields");
    switch (xelem.nodeName) {
        case "SELECT":
            xelem.style.backgroundColor=""
            break;
    }
}

formFieldDisplayError = function (aelem) {

        elem=$(aelem)

        callLater (0.0, partial(showfunc,aelem));
        callLater (3.0, partial(hidefunc,aelem));
        pulsate(elem.id,{duration:1.5})
    }
    

    function onMouseOverEvent(id)
    {
        elem=getElement(id);
        swapElementClass (elem,"event_items", "event_items_selected")
    }

    function onMouseOutEvent(id)
    {
        elem=getElement(id);
        swapElementClass (elem, "event_items_selected", "event_items")
    }

    function onMouseOverSubmitButton(id,label) {
        setNodeAttribute(getElement(id), "src", "/images/buttons/formuar_button_rot.gif");
        $(label).style.color="#FF0066"
    }

    function onMouseOutSubmitButton (id,label) {
        setNodeAttribute(getElement(id), "src", "/images/buttons/formuar_button_blau.gif");
        $(label).style.color="#006699"
    }

    function onMouseOverCancelButton(id,label) {
        setNodeAttribute(getElement(id), "src", "/images/buttons/bad_button_dunkel.gif");
        $(label).style.color="#888888"
    }

    function onMouseOutCancelButton (id,label) {
        setNodeAttribute(getElement(id), "src", "/images/buttons/bad_button_hell.gif");
        $(label).style.color="#CCCCCC"
    }

/* ********************************** */
/* ********* SPECIFIC STUFF ********* */
/* ********************************** */


/* * * * * * * *      * * * * * * * * */
/* * * * * * * * CLUB * * * * * * * * */ 
/* * * * * * * *      * * * * * * * * */

    initalizeClub = function () {

        formReset("club_form");
        elem=$("club_form");
        elem.club_vorname.value=__vorname;
        elem.club_nachname.value=__nachname;
        elem.club_email.value=__email;
        elem.club_tag.value=__tag;
        elem.club_jahr.value=__jahr;
        elem.club_monat.value=__monat;
        
        __vorname=""; __nachname=""; __email="";
        __jahr=""; __monat=""; __tag="";
        onMouseOutCancelButton("club_cancel_button","club_cancel_button_label");   
        onMouseOutSubmitButton("club_submit_button","club_submit_button_label");  
    }
    
    
    club_data_id=0;

    function club_sucess_load_fields (obj)
    {
        setElementHidden('club_activity');
        if (obj.error==1) { /* that submit wasn't that beautiful */
            for (item in obj.fields) {
                field="club_"+obj.fields[item]
                formFieldDisplayError (field)
            }
        } else if (obj.found==1) {  /* data found */
                    club_submit_status = 1;                    
                    clubResponseArrived();
                    form=$("club_form");
                    form.club_plz.value = obj.plz;
                    form.club_stadt.value = obj.stadt;
                    form.club_strasse.value = obj.strasse;
                    form.club_telefon.value = obj.telefon;
                    form.club_email.value = obj.email;
                    club_data_id=obj.id;
                    $('club_submit_button_label').innerHTML="Ändern...";
                } else {
                    club_failed_load_fields();
                }
    }
    
    function club_failed_load_fields (id)
    {
        $('club_submit_button_label').innerHTML="Eintragen";
        setElementHidden('club_activity');
        club_submit_status = 1;
        clubResponseArrived();
    }

    rounded_club_before=0;
    function club_sucess_send_data (obj)
    {
        setElementHidden('club_activity');
        appear($("club_response_field"));
        if (rounded_club_before==0) {
            roundElement("club_response_field")
            rounded_club_before=1;
        }
        
        callLater(3.00,function () {
            fade("club_response_field")
        })
        

    }
    
    function club_failed_send_data (id)
    {
        setElementHidden('club_activity');
    }


    function club_reset ()
    {
        formReset ($('club_form')); 
        $('club_details_container').style.display='none'; 
        club_submit_status=0; 
        $('club_submit_button_label').innerHTML="Suchen...";        
    }

    club_submit_status="0"
    function club_submit (first_argument)
    {
        if (club_submit_status=="0") { // first submit

            if (formCheck("club_form",formTestGeneral,["club_stadt","club_plz","club_strasse","club_checkbox"])==0) {
                form=$("club_form");
                setElementInline('club_activity');
                def=loadJSONDoc("submit",{
                    vorname:form.club_vorname.value,
                    nachname:form.club_nachname.value,
                    tag:form.club_tag.value,
                    monat:form.club_monat.value,
                    jahr:form.club_jahr.value
                    })
                def.addCallback(club_sucess_load_fields);
                def.addErrback(club_failed_load_fields);
            } else {
            }
        } else if (club_submit_status=="1") {
                if (formCheck("club_form",formTestGeneral)==0) {
            		var checkbx = getElement("club_checkbox");
            		if(checkbx.checked){
                	    setElementInline('club_activity');
                	    def=loadJSONDoc("save",{
                            vorname:form.club_vorname.value,
                            nachname:form.club_nachname.value,
                            tag:form.club_tag.value,
                            monat:form.club_monat.value,
                            jahr:form.club_jahr.value,
                            strasse:form.club_strasse.value,
                            plz:form.club_plz.value,
                            stadt:form.club_stadt.value,
                            telefon:form.club_telefon.value,
                            email:form.club_email.value,
                            id:club_data_id}
                        );
                        def.addCallback(club_sucess_send_data);
                        def.addErrback(club_failed_send_data);
                } else {
                    ;
                }
                
                    
          	}
        } 
    }
    
    function clubResponseArrived (first_argument)
    {
        elem=getElement("club_details_container");
        elem.style.display="block";
        /*elem=getElement ; ; elem.style.marginLeft="10px";*/

        setElementHidden('club_activity');
    }

    function clubStartRequest (first_argument)
    {
            setElementInline('club_activity');
            club_submit_status="1"
    }


/* * * * * * * *         * * * * * * * * */
/* * * * * * * * MEINUNG * * * * * * * * */ 
/* * * * * * * *         * * * * * * * * */


initalizeMeinung = function (id) {
    formReset($('meinung_form'));
    onMouseOutCancelButton("meinung_cancel_button","meinung_cancel_button_label");   
    onMouseOutSubmitButton("submit_button","submit_button_label");  
}

meinung_failed_submit_fields = function (msg) {
//    alert (msg)
}

rounded_meinung_before=0;
meinung_sucess_submit_fields = function (obj) {
    setElementHidden("meinung_activity");
    if (obj.status==0) {
            elem=$('meinung_response_field')
            appear (elem);
            if (rounded_meinung_before==0) {
                roundElement(elem)
                rounded_meinung_before=1;
            }
            callLater(6.00,function () {
                fade("meinung_response_field")
            })

            if ($('meinung_form').meinung_checkbox.checked) {
                $("meinung_response_text").innerHTML="Vielen Dank, sie werden weitergeleitet."
                callLater(4.00,function () {
                    form=$("meinung_form");
                    qs= (queryString({
                        vorname:form.meinung_vorname.value,
                        nachname:form.meinung_nachname.value,
                        email:form.meinung_email.value
                    }));
                    location.href=__LOCATION_PREFIX+"/service/club/?"+qs;
                })
            }
            
        
    } else {
        for (s in obj.fields) {
            formFieldDisplayError($("meinung_"+obj.fields[s]))
        }
    }
}


function meinungSubmit() {
    if (formCheck("meinung_form",formTestGeneral)==0) {
        form=$("meinung_form");
        setElementInline("meinung_activity");
        def=loadJSONDoc("/service/meinung/submit",{
            vorname:form.meinung_vorname.value,
            nachname:form.meinung_nachname.value,
            email:form.meinung_email.value,
            text:form.meinung_textarea.value,
            club_checked:form.meinung_checkbox.checked,
            location_code:__LOCATION_CODE
            })
        def.addCallback(meinung_sucess_submit_fields);
        def.addErrback(meinung_failed_submit_fields);
        
    }
}

/* * * * * * * *         * * * * * * * * */
/* * * * * * * NEWSLETTER * * * * * * * */ 
/* * * * * * * *         * * * * * * * * */



initalizeNewsletter = function (id) {
//    formReset("newsletter_form");
    onMouseOutCancelButton("cancel_button","cancel_button_label");    
    onMouseOutSubmitButton("submit_button","submit_button_label");
    $("newsletter_form")._id.value=0;
    
}

newsletter_sucess_submit_fields = function (obj) {
    newsletterMode=1;
    setElementHidden('newsletter_activity')
    if (obj.gefunden==1) {
        $("newsletter_form").email.value=obj.email;
        $("newsletter_form")._id.value=obj._id;
        $("newsletter_form").checkbox_send.checked=(obj.newsletterAbo == 1)
        if ($("newsletter_form").checkbox_send.checked) {
            MochiKit.Visual.appear("newsletter_options");
        }
        $("submit_button_label").innerHTML="Ändern...";
    } else {
        $("submit_button_label").innerHTML="Eintragen";
    }
}


newsletter_failed_submit_fields = function (id) {
    setElementHidden('newsletter_activity')
    alert ("Fehler bei der Übertragung: Versuchen Sie es zu einem späteren Zeitpunkt nochmals: "+id)
}
rounded_newsletter_before=0;
newsletter_succes_create_or_add = function (id) {
    setElementInline("newsletter_activity");
    setElementHidden("newsletter_activity");
/*          alert ("status="+id.status)*/
          if (true) {
                elem=$('newsletter_response_field')
                appear (elem);
                if (rounded_newsletter_before==0) {
                    roundElement(elem)
                    rounded_newsletter_before=1;
                }
                callLater(6.00,function () {
                    fade("newsletter_response_field")
                })


        }
        if ($('newsletter_form').checkbox_club.checked) {

            $("newsletter_response_text").innerHTML="Vielen Dank, sie werden weitergeleitet."
            callLater(4.00,function () {
                form=$("newsletter_form");
                qs= (queryString({
                    vorname:form.vorname.value,
                    nachname:form.nachname.value,
                    email:form.email.value,
                    jahr:form.jahr.value,
                    monat:form.monat.selectedIndex,
                    tag:form.tag.value
                }));
                location.href=__LOCATION_PREFIX+"/service/club/?"+qs;
            })
        }
    
    
}


var newsletterMode=0;
function newsletterSubmit() {
    if (newsletterMode <1) {
        if (formCheck("newsletter_form",formTestGeneral,["newsletter_checkbox_send","newsletter_plz",
                                "newsletter_stadt","newsletter_strasse"])==0) {
            setElementInline("newsletter_activity")
            d=loadJSONDoc("suche",$("newsletter_form"));
            d.addCallback(newsletter_sucess_submit_fields);
            d.addErrback(newsletter_failed_submit_fields);
            
            
        }
    } else {
/*        alert (newsletterMode)*/
        if (formCheck("newsletter_form",formTestGeneral)==0) {
            newsletterMode=2;
            setElementInline("newsletter_activity");
            d=loadJSONDoc("submit",$("newsletter_form"));
            d.addCallback(newsletter_succes_create_or_add);
        }
    }
}

newsletter_cancel_success = function (obj) {
    $('newsletter_options_text').innerHTML = "Newsletter wurde abbestellt.";
    callLater(6.00, function () {
        MochiKit.Visual.fade("newsletter_options")
    })
}

newsletter_cancel_failed = function (id) {
    alert ("Fehler bei der Übertragung: Versuchen Sie es zu einem späteren Zeitpunkt nochmals. ("+id+")");
}

newsletter_submit_cancel = function ()
{
    d=loadJSONDoc("cancel",$("newsletter_form"));
    d.addCallback(newsletter_cancel_success);
    d.addErrback(newsletter_cancel_failed);
}
/* * * * * * * *         			* * * * * * * * */
/* * * * * * * * RESERVIERUNG * * * * * * * * */ 
/* * * * * * * *        		  * * * * * * * * */


initializeReservierung = function (id) {
	
    formReset("gebtag_reserv_form");
    onMouseOutCancelButton("reserv_cancel_button","reserv_cancel_button_label");   
    onMouseOutSubmitButton("reserv_submit_button","reserv_submit_button_label");
}

function vorschlagen(){
	
	var tag = document.getElementById("gebtag_reserv_wunschtermin_tag");
	var monat = document.getElementById("gebtag_reserv_wunschtermin_monat");
	var jahr = document.getElementById("gebtag_reserv_wunschtermin_jahr");
	
	tag.value = parseInt(tag.value);
	monat.value = parseInt(monat.value);
	jahr.value = parseInt(jahr.value);
	
//	<!-- insert whatever is needed here... -->
	
	document.getElementById("gebtag_reserv_feedBackTermin").style.display="block";	
}

function terminSelected(){
	
	var selector = document.getElementById("gebtag_reserv_feedBackTermin");
	selector.style.display="none";
	document.getElementById("gebtag_reserv_termin_div").style.display="block";
	
	document.getElementById("gebtag_reserv_termin").value = document.getElementById("gebtag_reserv_terminSelect").value;
	
}

function gebtag_reserv_submit(){
		
   {
        $("gebtag_reserv_form").action=__LOCATION_PREFIX+"/service/party/submit";
        $("gebtag_reserv_form").submit();
        d=loadJSONDoc("/service/party/submit",$("gebtag_reserv_form"));
     }
    
/*	global_gebtag_termin = document.getElementById("gebtag_reserv_termin").value;
	
	var document.getElementById("gebtag_reserv_vorname_kind");
	var document.getElementById("gebtag_reserv_nachname_kind");
	var document.getElementById("gebtag_reserv_gebDat_tag");
	var document.getElementById("gebtag_reserv_gebDat_monat");
	var document.getElementById("gebtag_reserv_gebDat_jahr");
	
	var document.getElementById("gebtag_reserv_vorname_erzieh");
	var document.getElementById("gebtag_reserv_nachname_erzieh");
	
	var document.getElementById("gebtag_reserv_plz");
	var document.getElementById("gebtag_reserv_stadt");
	var document.getElementById("gebtag_reserv_strasse");
	
	var document.getElementById("gebtag_reserv_tel");
	var document.getElementById("gebtag_reserv_mail");
	
	var document.getElementById("gebtag_reserv_ja");
	
	gebtag_reserv_ja
	
	
	var valid = true;
	
	if(valid){
		changeTo("main_content_gebtag_danke");
		return false;
	}
	*/
}

/* * * * * * * *         * * * * * * * * */
/* * * * * * * *   TOYS  * * * * * * * * */ 
/* * * * * * * *         * * * * * * * * */


initalizeToys = function (id) {
    // formReset($('toys_form'));
    // onMouseOutCancelButton("toys_cancel_button","toys_cancel_button_label");   
    // onMouseOutSubmitButton("toys_submit_button","toys_submit_button_label");  
}


