/*
 * Globala variabler
 */
var hiddenBox = ""; // sparar id:t på eventuellt gömd box
var currentPage = "start.json"; // aktuell sida, sparas i en cookie
var handheld = false;

/*
 * Denna funktion hämtar en sida m h a ajax.
 * Sida = det man kommer till vid val i menyn
 * Vy = en sida kan bestå av flera vyer som man klickar mellan med fram/bak-knapparna. 
 */
function loadPage(href) {
    $.getJSON("sidor/" + href, function(data) {
        currentPage = href;
        showView(data.views, 0);
    });
}

/*
 * Funktion som visar en vy och anropar sig själv när man stegar genom en sidas olika vyer.
 */
function showView(views, viewIndex) {
    window.scrollTo(0, 0); // Börja visningen längst upp

    // När den stora rutan visas göms en av de små
    if (hiddenBox!="") {
        $("#"+hiddenBox).css("display", "inline");
        hiddenBox = "";
    }
    
    // Visa den aktuella vyn genom att iterera över dess boxar
    $.each(views[viewIndex], function() {     
        $("#"+this.position).removeClass("normalbox bigbox");
        $("#"+this.position).addClass(this.type);
        if (this.type=="bigbox") {
            hiddenBox = $("#"+this.position).next(".box").attr("id");
            $("#"+this.position).next(".box").css("display", "none");
        }
        $("#"+this.position).html(this.content);
    } );
    
    // Visa pekarna om det behövs, tar först bort alla tidigare eventhandlers 
    // annars blir det dubbletter som segar ner skriptet.
    $(".pekare").unbind();
    if (viewIndex > 0) {
        $("#pekare_bak").show().click( function() {
            showView(views, viewIndex-1);
        }).hover( function() {
            $(this).css("cursor", "pointer");
        });
    } else {
        $("#pekare_bak").hide();
    }
    if (viewIndex+1 < views.length) {
        $("#pekare_fram").show().click( function() {
            showView(views, viewIndex+1);
        }).hover( function() {
            $(this).css("cursor", "pointer");
        });
    } else {
        $("#pekare_fram").hide();
    }
}
    
/*
 * Initialiserar menyhanteringen
 */    
function setupMenu() {  
    // Visa submenyn när knappen klickas
    $("a.topmenulink").click(function() { 
        if (handheld) {
            $(this).next("ul.submenu").css("top", $(this).height()+12);
        } else {
            $(this).next("ul.submenu").css("top", -$(this).next("ul.submenu").height()-2); // anpassa position efter storlek
        }
        $(this).next("ul.submenu").fadeIn("fast"); 
        $(this).parent("li.topmenubutton").mouseleave(function(){ $("ul.submenu").fadeOut('normal'); });
    });
    
    // Inställning av länkfunktionaliteten
    $("li.menuitem a").click( function(event) {
        event.preventDefault();
    });
    $("li.menuitem").click( function(event) {
        href = $(this).find("a:first").attr("href");
        if (href !="#") {
            $(this).parent("ul.submenu").fadeOut('fast');
            loadPage(href);
        }
    });
}

/*
 * Byter ut instruktionstexten mot ett meddelande
 * msg: meddelandet som ska visas
 * style: "success" eller "error"
 */
function displayContactFormResult(msg, style) {
    $("p.form").prev("p").replaceWith("<p class=\"form_msg form_"+style+"\">"+ msg +"</p>");   
    window.scrollTo(0, 0);
}

/*
 * Denna funktion anropas när man klickar på "skicka"-knappen i kontaktformuläret.
 */
function contactFormSubmitted() {
    // En mycket enkel spamstoppare: ett dolt fält som inte får ha blivit ifyllt
    if ( $("input.luring").attr("value").length > 0) {
        return;    
    }
    
    // Validering
    var felmeddelande = "";
    var formFields = { namn: $(".text_input[name='namn']").attr("value"),
                       epost: $(".text_input[name='epost']").attr("value"),
                       arende: $("select[name='arende']").attr("value"),
                       meddelande: $(".text_input[name='meddelande']").attr("value") };
  
    if (!(/^\w[-\w]*(\.[-\w]+)*@\w[-\w]*(\.[-\w]+)+$/.test(formFields.epost))) {
        felmeddelande = "Ogiltig epostadress. ";    
    }
    if (formFields.namn.length == 0) {
        felmeddelande += "Du har inte skrivit n&aring;got namn. ";    
    }
    if (formFields.meddelande.length == 0) {
        felmeddelande += "Du m&aring;ste skriva ett meddelande.";            
    }
    if (felmeddelande.length > 0) {
        displayContactFormResult(felmeddelande, "error");
        return;    
    }
    
    felmeddelande =  "Ett fel uppstod tyvärr vid s&auml;ndningen av ditt meddelande.";
    $.ajax({ type: "POST",
             url: "kontakt.php",
             data: formFields,
             success: function(result, msg){
                if (result=="1") {
                    displayContactFormResult( "Ditt meddelande har skickats.", "success" );
                    $(".text_input").attr("value", "");
                }
                else {
                    displayContactFormResult( felmeddelande, "error" );
                }
             },
             error: function(http, msg) {
                    displayContactFormResult( felmeddelande, "error" );
             }
        });
}

/*
 * Denna funktion förhindrar att början av innehållet försvinner, p g a den 
 * vertikala anpassningen,  om fönstret minskas.
 */
function handleResize() {
    if ( $(window).height() < 570 ) {
        $("#content").css("margin-top", "0").css("top", "0");        
    } else {
        $("#content").css("margin-top", "-280px").css("top", "50%");    
    }
}

/*
 * Startfunktionen för all JavaScript
 */
function init() {
    // Kikar i css:en för att se om det är en liten skärm eller inte.
    handheld = !( $("#content").css("margin-top") == "-280px" );
    
    // sparar aktuell vy när sidan lämnas
    $(window).unload( function () { 
        $.cookie("currentPage", currentPage);
    } );
    
    // Initialiserar menyn
    setupMenu();
    
    // Laddar startsida, eventuellt från en sessioncookie
    var tmp = $.cookie("currentPage");
    if (tmp) { currentPage = tmp; }
    loadPage(currentPage);
    
    // Resize-handler som inte ska användas i handheld-läge
    if (!handheld) {
        $(window).resize( handleResize );
        handleResize(); // Kolla storleken en gång initialt
    }
    
    setupMp3Player();
    
    // Detta lägger till global ajax-felsökningshjälp
    /*$.ajaxSetup({ 
		error:function(x,e){
			if(x.status==0){
    			alert('You are offline!!\n Please Check Your Network.');
			}else if(x.status==404){
    		  	alert('Requested URL not found.');
	   		}else if(x.status==500){
    	   		alert('Internel Server Error.');
			}else if(e=='parsererror'){
    			alert('Error.\nParsing JSON Request failed.');
			}else if(e=='timeout'){
    			alert('Request Time out.');
			}else {
    			alert('Unknow Error.\n'+x.responseText);
			}
		}
	});*/
}

// Anrop till init-funktionen när sidan är redo.
$(document).ready( init );