﻿function documentWrite(someData) {
    document.writeln(someData);
}

// Kollar om en viss plugin existerar
// nameOfPlugin (string): namnet på pluginen, t.ex: "Flip4Mac"
function pluginExists(nameOfPlugin) {
    for (var i = 0; i < navigator.plugins.length; i++){
        if (navigator.plugins[i].name.indexOf(nameOfPlugin) != -1) {
            return true;
        }
    }    
    return false;
}

// Skapar ett slideshow-objekt (kräver jQuery)
// bigImageId: id-värdet för den stora bilden som visas (img-element)
// puffingId: id-värdet för ingress-elementet (div-element, null om det inte används)
// articleArray: referens till den array som innehåller artikelobjekten
// playButtonSrc: sökväg till bilden för play-knappen
// pauseButtonSrc: sökväg till bilden för paus-knappen
// counterId: id till element som tar emot det aktuella bildnumret (index + 1)
function Slideshow(bigImageId, puffingId, articleArray, playButtonSrc, pauseButtonSrc, counterId) {
    this.currentSlideshowArticleIndex = 0;
    this.bigImageId = bigImageId;
    this.puffingId = puffingId;            
    this.articleArray = articleArray;
    this.timer = null;
    this.thumbRangeStart = null;
    this.thumbRangeLength = null;            
    this.counterId = counterId;
    
    if (playButtonSrc !== null) {
        this.playButton = new Image();
        this.playButton.src = playButtonSrc;
        this.playButton.alt = "Play-knapp";
        this.playButton.title = "Starta bildspel";
    }
    
    if (pauseButtonSrc !== null) {
        this.pauseButton = new Image();
        this.pauseButton.src = pauseButtonSrc;
        this.pauseButton.alt = "Pause-knapp";
        this.pauseButton.title = "Stoppa bildspel";    
    }
    
    var inst = this;
    
    // Visar en viss artikel (om dir inte är en int) ELLER går till nästa om dir > 0 eller föregående om dir <= 0
    this.show = function(dir) {
        var previousArticle = inst.articleArray[inst.currentSlideshowArticleIndex];
        var slideshowArticle = null;
        if (previousArticle !== null) {
            $("#" + previousArticle.id + "_thumb").removeClass("Current");                            
        }            

        if (isNaN(dir)) {
            // Anta att dir motsvarar idt för artikeln som ska visas,
            for (var i = 0; i < inst.articleArray.length; i++) {
                if (inst.articleArray[i].id == dir) {
                    slideshowArticle = inst.articleArray[i];
                    inst.currentSlideshowArticleIndex = i;
                }
            }
        } else {
            if (dir > 0) {
                inst.currentSlideshowArticleIndex = inst.currentSlideshowArticleIndex + 1 < inst.articleArray.length ? inst.currentSlideshowArticleIndex + 1 : 0;
            } else {
                inst.currentSlideshowArticleIndex = inst.currentSlideshowArticleIndex - 1 >= 0 ? inst.currentSlideshowArticleIndex - 1 : inst.articleArray.length - 1;
            }
            slideshowArticle = inst.articleArray[inst.currentSlideshowArticleIndex];
        }            
                    
        if (slideshowArticle !== null) {  
            if (inst.puffingId) {
                $("#" + String(inst.puffingId)).html(slideshowArticle.content);
            }
            if (inst.bigImageId) {                                                
                if (slideshowArticle.imagePreloadSrc) {
                    slideshowArticle.image.src = slideshowArticle.imagePreloadSrc;
                    slideshowArticle.imagePreloadSrc = null;
                }    
                
                $("#" + String(inst.bigImageId)).attr({
                    alt: slideshowArticle.image.alt, 
                    title: slideshowArticle.image.title, 
                    src: slideshowArticle.image.src});                                 
            }
            $("#" + slideshowArticle.id + "_thumb").addClass("Current");     
        }
        
        if (inst.counterId !== null) {
            $("#" + inst.counterId).html(inst.currentSlideshowArticleIndex + 1);            
        }
    };
    
    // Byter innehållet i puff-elementet mot den aktiva artikelns puff
    this.swapPuffContent = function(elementId, positionId) {
        var articleObject = inst.getArticleObject(elementId);
        var currentObject = inst.currentArticle();
        if (articleObject !== null && currentObject !== null) {
            inst.setPuffContent(positionId, currentObject.id);
            inst.show(articleObject.id);
        }
    };
    
    this.setPuffContent = function(targetId, elementId) {
        var articleObject = inst.getArticleObject(elementId);
        if (articleObject !== null) {
            $("#" + targetId).html(articleObject.puffHtml);            
        }
    };
    
    // Hämtar ett object utifrån ett visst id
    this.getArticleObject = function(elementId) {
        for (i = 0; i < inst.articleArray.length; i++) {                
            if (inst.articleArray[i].id == elementId) {
                return inst.articleArray[i];
            }
        }        
        return null;
    };
    
    // Startar eller stoppar det automatiska bildspelet
    // delay: hur länge varje artikel ska visas (minst 1000 ms)
    // valfri parameter - button: referens till play-knappen så att ikonen kan bytas för att reflektera statusen på bildspelet
    this.toggleAuto = function(delay) {
        if (inst.timer === null) {            
            if (arguments.length > 1) {
                inst.start(delay, arguments[1]);
            } else {
                inst.start(delay);
            }
        } else {            
            if (arguments.length > 1) {
                inst.stop(arguments[1]);
            } else {
                inst.stop();
            }
        }
    };
    
    // Startar bildspelet
    this.start = function(delay) {
        inst.delay = Math.max(1000, delay);
        inst.timer = setInterval(inst.auto, inst.delay);
        if (arguments.length > 1) {
            var buttonElement = arguments[1];
            if (buttonElement !== null) {
                buttonElement.src = this.pauseButton.src;
                buttonElement.alt = this.pauseButton.alt;
                buttonElement.title = this.pauseButton.title;
            }
        }
    };
    
    // Stoppar bildspelet
    this.stop = function() {
        clearInterval(inst.timer);
        inst.timer = null;
        if (arguments.length > 0) {
            var buttonElement = arguments[0];
            if (buttonElement !== null) {
                buttonElement.src = this.playButton.src;
                buttonElement.alt = this.playButton.alt;
                buttonElement.title = this.playButton.title;
            }
        }
    };
    
    // Anger hur många tumnaglar som ska visas
    // index: startindex (0 är första tumnageln)
    // length: anger hur många tumnaglar som ska visas
    this.setThumbRange = function(index, length) {
        index = parseInt(index, 10);
        length = parseInt(length, 10);
        inst.thumbRangeStart = isNaN(index) ? null : Math.max(0, index);
        inst.thumbRangeLength = isNaN(length) ? null : Math.max(0, length);                             
    };
    
    this.setThumbnailVisibility = function(start, length) {        
        if (start !== null && length !== null) {
            start = parseInt(start, 10);
            length = parseInt(length, 10);
            if (isNaN(start) || isNaN(length)) {
                return null;
            }
            
            var array = inst.articleArray;            
            for (var i = 0; i < inst.articleArray.length; i++) {
                var thumbnailId = String(inst.articleArray[i].id) + "_thumb";
                var element = document.getElementById(thumbnailId);
                if (element !== null) {
                    if (i >= start && i < (start + length)) {                        
                        element.style.position = "static";
                        element.style.visibility = "visible";
                    } else {                        
                        element.style.position = "absolute";
                        element.style.visibility = "hidden";
                    }
                }                
            }
        }
    };
    
    // Callback-metod för det automatiska bildspelet
    this.auto = function() {
        inst.show(1);              
    };
    
    // Uppdaterar bildspels-blocket med den aktuella bilden
    this.update = function() {
        var slideshowObj = inst.articleArray[inst.currentSlideshowArticleIndex];
        if (slideshowObj !== null) {
            inst.show(slideshowObj.id);
        }
        
        inst.setThumbnailVisibility(inst.thumbRangeStart, inst.thumbRangeLength, true);
    };
    
    // Returnerar indexet för den aktuella bilden (0-baserat)
    this.currentImage = function() {
        return inst.currentSlideshowArticleIndex;
    };
    
    this.currentArticle = function() {
        return inst.articleArray[inst.currentSlideshowArticleIndex];
    };
}

function HeaderMenu(imagePath, namePrefix, hoverSuffix, activeSuffix, imageExtension, startIndex, numImages) {
    this.imageArray = [];
    this.isIE = $.browser.msie;
    var inst = this;
        
    for (img = startIndex; img < (startIndex + numImages); img++) {
        var menuObject = new Object();
        menuObject.normal = new Image();
        menuObject.normal.src = imagePath + namePrefix + String(img) + imageExtension;
        menuObject.hover = new Image();
        menuObject.hover.src = imagePath + namePrefix + String(img) + hoverSuffix + imageExtension;
        menuObject.active = new Image();
        menuObject.active.src = imagePath + namePrefix + String(img) + activeSuffix + imageExtension;        
        inst.imageArray[String(namePrefix) + String(img)] = menuObject;
    }
    
    // Byter en bild i srcImage mot en annan
    this.swapImage = function(swapTo, srcImage) {
        var menuObject = inst.imageArray[srcImage.id];        
        if  (menuObject !== null) {
            if (swapTo == "hover") {
                srcImage.src = menuObject.hover.src;
            } else if (swapTo == "active") {
                srcImage.src = menuObject.active.src;
            } else { // swapTo == "normal"
                srcImage.src = menuObject.normal.src;
            }
        }
    };
    
    this.swapActiveImage = function(eventObject) {
        inst.swapImage("active", inst.isIE ? eventObject.srcElement : eventObject.currentTarget);        
    }
    this.swapNormalImage = function(eventObject) {
        inst.swapImage("normal", inst.isIE ? eventObject.srcElement : eventObject.currentTarget);
    }
    this.swapHoverImage = function(eventObject) {
        inst.swapImage("hover", inst.isIE ? eventObject.srcElement : eventObject.currentTarget);
    }
}

function trim(input) {
    if (input) {
        return input.replace(/^\s*/, "").replace(/\s*$/, "");
    } else {
        return "";
    }
}

// Lägg till en trim funktion till String
String.prototype.trim = function () {
    return trim(this.valueOf());
}


// Jämför en sträng med en annan och returner om de är lika eller ej
// valfri andra parameter: ignoreCase (default false)
String.prototype.equals = function(other) {        
    if (this.valueOf().length != other.toString().length) {
        return false;
    }
    var a = this.toString();
    var b = other.toString();
    if (arguments.length > 1 && arguments[1]) {
        // Case insensitive
        a = a.toLowerCase();
        b = b.toLowerCase();   
    }
    
    for (var i = 0; i < a.length; i++) {
        if (a.charAt(i) != b.charAt(i)) {
            return false;
        }
    }
    
    return true;
}


function isValidEmail(input) {
    return input !== null && input.length > 0 && input.search(/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/gi) >= 0;
}

String.prototype.isEmail = function() {
    return isValidEmail(this.valueOf());
}

// Valideringsfunktion för sökformuläret
function SearchFormValidate() {
	var noChoicesMade = "Du har inte gjort några val";
	var monthNeedsYear = "Om du väljer månad måste du också välja år";

	var yearElement = $("#Search_Year");    
	var monthElement = $("#Search_Month");
	var textElement = $("#Search_Text");
	if (yearElement !== null && monthElement !== null && textElement !== null) {
		var year = parseInt(yearElement.val(), 10);
		var month = parseInt(monthElement.val(), 10);
		
		// Månad kräver år
		if (month > 0 && year == 0) {
			alert(monthNeedsYear);
			return false;
		}
		
		// Fritext måste vara ifyll om inte månad eller år är ifyllda
		if (month == 0 && year == 0 && textElement.val().trim().length == 0) {
			alert(noChoicesMade);
			return false;
		}
		
		return true;

	} else {
		return false;
	}	
}

// Ladda huvudmenyn
var menu = null;
function loadMenu() {
   try {
       if (menu === null) {
            menu = new HeaderMenu("images/header/", "meny_", "_hover", "_aktiv", ".gif", 2, 9);
            
            // Lägg till attributen        
            for (var i = 0; i < 9; i++) {
                var imgElement = document.getElementById("meny_" + String(i + 2));
                if (imgElement !== null) {            
                    if (imgElement.src.indexOf("_aktiv") != -1) {
                        if (menu.isIE) {
                            imgElement.attachEvent("onmouseout", menu.swapActiveImage);
                        } else {
                            imgElement.addEventListener("mouseout", menu.swapActiveImage, false);
                        }
                    } else {
                        if (menu.isIE) {
                            imgElement.attachEvent("onmouseout", menu.swapNormalImage);
                        } else {
                            imgElement.addEventListener("mouseout", menu.swapNormalImage, false);
                        }
                    }
                    if (menu.isIE) {
                        imgElement.attachEvent("onmouseover", menu.swapHoverImage);
                    } else {
                        imgElement.addEventListener("mouseover", menu.swapHoverImage, false);
                    }
                }
            }
        }
    } catch (Error) { }
    
    return true;
}

function pollFormValidate() {    
    if ($("input[@type=radio][@name=QOTD_Answer][@checked]").val() !== null) {
        return true;        
    } else {   
        alert("Du har inte valt något svar!");
        return false;
    }
}

function alreadyVoted() {
    alert("Du har redan röstat på den här frågan!");
    return false;
}

function openWindow(url, width, height) {
    return window.open(url, "_blank", "directories=0,height=" + height + ",width=" + width + ",location=0,scrollbars=1,status=0,toolbar=0", true);
}

function printObject(objectId, queryKey) {
    objectId = parseInt(objectId, 10);
    if (!isNaN(objectId) && objectId > 0) {        
        window.open("Print.aspx?" + queryKey + "=" + objectId, "_blank", "directories=0,scrollbars=1,status=0,toolbar=0,width=510,height=500");
    }
}



var cbCallerElement = null;
var cbTargetElementId = null;
var cbArticleId = 0;
function cbProcessData(input) {    

    var parent = cbCallerElement.parentNode;
    if (parent !== null) {
        parent.removeChild(cbCallerElement);
    }
    
    var element = $("#" + cbTargetElementId);
    element.html(element.html() + input);    
    
    cbCallerElement = null;
    cbTargetElementId = null;
    cbArticleId = 0;
}

function getAllChildren(callerElement, targetElementId, articleId, offset) {
    cbCallerElement = callerElement;
    cbTargetElementId = targetElementId;
    cbArticleId = articleId; 
    IFK.RelatedArticles.GetAllChildren(articleId, offset, cbProcessData);        
}

function getAllPuffArticles(callerElement, targetElementId, folderId, offset) {
    cbCallerElement = callerElement;
    cbTargetElementId = targetElementId;
    cbArticleId = folderId; 
    IFK.RelatedArticles.GetAllPuffArticles(folderId, offset, cbProcessData);        
}

function flashObject(moviePath, width, height) {
    return '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="' + width + '" height="' + height + '">'+
          '<param name="movie" value="' + moviePath  + '" />'+
          '<param name="quality" value="high" />'+
          '<param name="menu" value="false" />'+
          '<param name="loop" value="true" />'+
          '<param name="bgcolor" value="#222222" />'+
          '<param name="statusbarcolor" value="#f58220" />'+
          '<param name="wmode" value="opaque" />'+
          '<embed src="' + moviePath  + '" width="' + width + '" height="' + height + '" bgcolor="#222222" statusbarcolor="#f58220" loop="true" wmode="opaque" quality="high" pluginspage="http://www.adobe.com/go/getflashplayer" type="application/x-shockwave-flash" menu="false"></embed>'+
        '</object>';
}


function audioObject(fileUrl, mimeType) {
    return '<embed src="' + fileUrl + '" width="400" height="20" autoplay="true" loop="false" type="' + mimeType + '"></embed>';
}


function documentWriteln(output) {
    document.writeln(output);
}

function reloadPage() {
    document.location.href = document.location.href;
}

// För spamskydd
function sendMessage(username, hostname) {
    document.location.href = "mailto:" + username + "@" + hostname;
}

// För spamskydd
function getMail(username, hostname) {
    return username + "@" + hostname;
}
function CountdownTimer(year, month, day, hour, minute) {
    var inst = this;
    
    inst.targetDateUTC = Date.UTC(year, month, day, hour, minute, 0, 0);
    
    this.update = function() {
        var now = new Date();
        var diffMs = Math.max(0, inst.targetDateUTC + (now.getTimezoneOffset() * 60000) - now.getTime());        
        var totalDays = diffMs / (24 * 3600 * 1000);
        var days = parseInt(Math.floor(totalDays), 10);            
        var partialDay = parseFloat(Math.max(0, totalDays - days));
        var partialHours = 24 * partialDay;
        var hours = parseInt(Math.floor(partialHours), 10);            
        var partialMinutes = parseFloat(Math.max(0, partialHours - hours));
        var minutes = parseInt(Math.floor(partialMinutes * 60), 10);            
        var seconds = parseInt(Math.floor(parseFloat((partialMinutes * 60) - minutes) * 60), 10);         
     
        $("p#TimerDays").html(padLeft(days.toString(), 3, "0"));
        $("p#TimerHours").html(padLeft(hours.toString(), 2, "0"));
        $("p#TimerMinutes").html(padLeft(minutes.toString(), 2, "0"));
        $("p#TimerSeconds").html(padLeft(seconds.toString(), 2, "0"));        
     
        setTimeout(inst.update, 500);
    }
    
    this.start = function() {
        setTimeout(inst.update, 500);
    }    
}

function padLeft(input, length, padCharacter) {
    if (typeof(input) == "undefined" || input.length >= length) {
        return input;
    }
    var padList = [];
    for (i = 0; i < (length - input.length); i++) {
        padList.push(padCharacter);
    }
    return padList.join("") + input;
}

function hide(selector) {
    $(selector).addClass("Hidden");
}

function show(selector) {
    $(selector).removeClass("Hidden");
}

function toggleHidden(selector) {
    $(selector).toggleClass("Hidden");
}

function displayFlashPlayer(sender, flashPlayerIframeId) {
    $("#" + flashPlayerIframeId).attr("src", $("#" + flashPlayerIframeId + "_src").val());
    $("#" + flashPlayerIframeId).removeClass("Hidden");
    $(sender).remove();
}
