/*------------------------------------------------------------------------
 Modulnamn: 
 CommonAdmin.js
------------------------------------------------------------------------
 Funktioner:
				BrowserCheck
				getWindowWidth
				getWindowHeight
				getLayerById
				collectLayers
				createCss
				positionLayers
				showLayers
				createColumn
				cssObject
				mGetLeft
				mGetTop
				mSetLeft
				mSetTop
				mGetHeight
				mSetHeight
				mShow
				mHide
				postForm
				lstSelectAdmList_onchange
				displayErrorMsg
				DisplayMessage
				moveSelectedOption
				removeSelectedOption
				init
				CreateProfile
				checkLength
				checkLengthSpecial
				checkBody
				checkBodySpecial
				checkSelect
				ConfirmInsert
				ConfirmDelete
				isDate
				y2k
				DateDiff
				testForScroll
				keepAlive
				doLoad
				onPageLoad
				sizeImage
				
------------------------------------------------------------------------
Beskrivning:
Innehåller generella javascript för administrationssidor
------------------------------------------------------------------------
 Versionshistorik:
 Version	Datum		Namn				Beskrivning
 1.0		2002-03-06	P Fagerström		Skapade filen
 1.1		2002-08-28  T Rolfsman			Versionshantering
------------------------------------------------------------------------
*/




/***** begin browsertest ******/
function BrowserCheck() {
	this.ie4 = (document.all && (!(document.getElementById)))? true:false;
	this.ie = (navigator.appName == 'Microsoft Internet Explorer')? true:false;
	this.ns = (navigator.appName == 'Netscape')? true:false; 
	this.dom = (document.getElementById)? true:false;
}
// automatiskt skapa ett browsercheckobjekt.
is = new BrowserCheck();

//om inte explorer5 eller högre eller NS6 eller högre.
if (!(is.dom && (is.ie || is.ns)))
{
	alert('Du behöver Internet Explorer 5 eller högre \nalternativt Netscape 6 för att använda \nintranätet');
	window.history.go(-1);
}
/***** end browsertest ******/

/******** begin API *************/
//API för att placera ut och visa lager.
//Syftar till att man på ett enklet sätt ska kunna ge stöd åt 
//flera browserversioner i framtiden idå det gäller att placera
//ut och visa de "spalter" som portalen är uppbyggd av rent grafiskt. 
/********************************/
function getWindowWidth()
{
	var width = 0;
	
	if(is.dom) 
		width = window.innerWidth;
	else if (is.ie)
		width = document.body.clientWidth;

	return width;
}

function getWindowHeight()
{
	var height = 0;
	
	if(is.dom) 
		height = window.innerHeight;
	else if (is.ie)
		height = document.body.clientHeight;
		
	return height;
}
function getLayerById(id){
	if(is.ie)
		return document.all(id);
	else if(is.dom)
		return document.getElementById(id);
}
//(del_av_lagers_id_namn)
//Samlar ihop och returnerar all lager som är namngivna enligt string+nr. 
//Exempel: skicka in "left" och få tillbaka en kollektion
//som innehåller alla lager på sidan vars id:n är "left" plus ett nummer.
//Antar att numren börjar på 1. Siffran 0 är ej tillåten.
function collectLayers(name){
	var collection = new Array();
	var i = 0;
	if(getLayerById(name + (i+1))){
			do{
				collection[i] = getLayerById(name + (i+1));
			}while(getLayerById(name + ((++i)+1)))
		}
	if(collection[0])
		return collection;
	else
		return false;
}
//Tar emot en lista av lager.
//Gör om dessa till objekt av klassen cssObject och returnerar
//en lista med dessa nya objekt.
function createCss(collection){
	var cssObj = new Array();
	for(var i=0; i<collection.length; i++){
		cssObj[i] = new cssObject(collection[i]);
	}
	return cssObj;	
}
//Placerar ut en kollektion av lager/cssObjekt.
//Inparam: (listaAvKlassenCssObject, yPosIPixlar, xPosIPixlar, mellanrumMellanLagren)
function positionLayers(collection, firstTop, firstLeft, space){
	for(var i=0; i<collection.length; i++){
		if(i==0){
			collection[i].setTop(firstTop);
			collection[i].setLeft(firstLeft);
		}
		else{
			var top = collection[i-1].getTop();
			var height = collection[i-1].getHeight();
			var left = collection[i-1].getLeft();
			collection[i].setTop(top+height+space);
			collection[i].setLeft(left);
		}
	}
}
//Visar kollektion av lager/cssObjekt.
//Inparam: (listaAvKlassenCssObject)
function showLayers(collection){
	for(var i=0; i<collection.length; i++){
		collection[i].show();
	}	
}
//Skapar en "kolumn" av lager på sidan. Dvs behandalar dem som en och samma grupp
//och placerar ut nr 1 ovanför nr 2 osv.
//Exempel: skicka in ("left",30,20,10) Då bli alla lager som har id:n enligt: left1, left2, left3 osv.
//del av samma grupp. left1 kommer att hamna ovanför left2 och left2 ovanför left3.
//Den första gruppmedlemmen (left1) hamnar 30px från toppen, 20px från vänster och styr de andras placering.
//Alla fruppmedlemmar hamnar med 10px avstånd i höjdled till varandra.
//Inparam: (delAvId,topPos,leftPos,melllanrumMellanLager)
function createColumn(strId,topPos,leftPos,hSpace){
	var collection= collectLayers(strId);
	if(collection){
		var cssColl = createCss(collection);
		positionLayers(cssColl, topPos, leftPos, hSpace);
		showLayers(cssColl);
	}	
}
/*************************/
//Objekt för att styra lagers placering och utseende.
/**** begin cssObject ****/
function cssObject(obj)
{
	if (is.ie || is.dom)
		this.style = obj.style;
		
	this.obj = obj;
	
	this.getLeft = mGetLeft;
	this.setLeft = mSetLeft;	
	this.getTop = mGetTop;
	this.setTop = mSetTop;
	this.getHeight = mGetHeight;
	this.setHeight = mSetHeight;
	this.show = mShow;
	this.hide = mHide;	
}
function mGetLeft()
{
	var left = this.style.left;

	if (left == '')
		this.style.left = '0px';
			
	return parseInt(this.style.left);
}
function mGetTop()
{
	var top = this.style.top;

	if (top == '')
		this.style.top = '0px';
			
	return parseInt(this.style.top);
}
function mSetLeft(left)
{
	this.style.left = left + 'px';
}
function mSetTop(top)
{
	this.style.top = top + 'px';
}
function mGetHeight()
{
	var height = this.style.height;

	height = parseInt('0' + this.style.height, 10);
	if (height == 0)
		height = this.obj.offsetHeight;
	return height;
}
function mSetHeight(height)
{
	this.style.height = height + 'px';
}
function mShow(){
	this.style.visibility = "visible";
}
function mHide(){
	this.style.visibility = "hidden";
}
/**** end cssObject ****/
/***********************/

/******** end API *************/

/******** common functions *************/
/*
Funktionsnamn:
postForm()
Inparametrar:
namn på formulär att posta
sidnamn att posta till plus eventuella parametrar.

Beskrivning:
Tar ett formulär och postar det till angiven sida.
*/ 
function postForm(fId,fAction){
	var form = false;
	form = document.forms[fId];
	var defaultAction = form.action;
	if(form && fAction){
		form.action = fAction;
		form.submit();
		form.action = defaultAction;
	}
	else{
		return false;
	}
}

/*
Funktionsnamn: lstSelectAdmList_onchange()
Inparametrar:
Selectbox med sidnamn att omdirigera till

Beskrivning:
Byter sida i administrationsfilen

*/
function lstSelectAdmList_onchange(lSelect) {
	iIndex = lSelect.selectedIndex;
	sUrl = lSelect[iIndex].value;
	if (sUrl ==0){
		sUrl = '/admin/ConnectAdminPage.asp';
		document.location.replace(sUrl);
	}
	else if (sUrl ==1){}
	else	{
		document.location.replace(sUrl);}
}
function displayErrorMsg(str){
	alert(str);
}
/*function DisplayMessage(){
	var strMessage, strBuffer, strErrorCode;
	strMessage = location.search.substring(1);
	if(strMessage != ''){
		strBuffer = strMessage.split('=');
		if(strBuffer[0] == 'strMsg'){
			strErrorCode = parseInt(strBuffer[1]);
			switch(strErrorCode){
				case 1: 
					DisplayMsgString('Ej tillåtet att ta bort eller byta namn på\nnyckelord som är refererade på andra ställen.');
					break;
				case 111:
					DisplayMsgString('Ej tillåten åtgärd.\nNyckelord måste innehålla bokstäver.');
					break;
				case 112:
					DisplayMsgString('Ej tillåten åtgärd.\nNyckelord får max vara 50 tecken långt.');
				case 113:
					DisplayMsgString('Ej tillåten åtgärd.\nOmladdningstiden får endast anges med siffror.');
					break;
				default:
					if(strBuffer[1] != ''){
						DisplayMsgString('Okänt fel med nummer: ' + strBuffer[1]);
					}
					break;
			}
		}
	}

}
*/

/*
Funktionsnamn:
removeSelectedOption()
Inparametrar:
lstSelect, lstNew

Beskrivning:
Flyttar markerat alternativ från en selectbox till en annan

*/ 

function moveSelectedOption(lstSelect, lstNew)
{
	//alert('moveSelectedOption(' + lstSelect + ', ' + lstNew + ')');
	
	if (lstSelect.selectedIndex == -1)
	{
		alert("Du måste välja något i listan!");
		return true;
	}
	
	var fLenght = lstSelect.length;
	var fOption = lstSelect.options; 
	//alert(fLenght + fOption + lstSelect.selectedIndex);
	
	for (var i = 0; i < fLenght ; i++)
	{
		//alert(fOption[i].value);
		if (fOption[i].selected == true)
		{
			var sOption =  fOption[i].value;
			
			if (sOption == '')
			{
				alert("Inte tillåtet val");
				return true;
			}
			
			//var iValueLength = sOption.length;
			//var iOptionLenght = lstSelect.length;
			
			var bInsert = true;
			//var alreadyInList = new Array();
			
			if (lstNew.options[0] && lstNew.options[0].value == '')
			{
				lstNew.options[0]= null;
			}
			else
			{
				//var iLenght = lstNew.length;
				var nOption = lstNew.options;
				
				for (var j = 0; j < lstNew.length ; j++)
				{
					if (nOption[j].value == fOption[i].value)
					{
						bInsert = false;
					}
				}
			}
			
			if (bInsert)
			{
				var oOption = document.createElement("option");
				oOption.text = fOption[i].text;
				oOption.value = fOption[i].value;
				//oOption.defaultSelected = true;
				
				if (document.getElementById && !document.all)
				{//This is DOM
					{
					if (lstSelect.name == 'lstGroups')
						{
						document.ForumForm.lstChosenGroups.appendChild(oOption);
						}
					else if (lstSelect.name == 'lstUsers')
						{
						document.ForumForm.lstChosenUsers.appendChild(oOption);
						}
					else
						{
						document.GroupForm.lstGroupMember.appendChild(oOption);
						}
					}
				}
				else if (document.getElementById && document.all)
				{//This is IE5
					{
					if (lstSelect.name == 'lstGroups')
						{
						document.ForumForm.lstChosenGroups.add(oOption);
						}
					else if (lstSelect.name == 'lstUsers')
						{
						document.ForumForm.lstChosenUsers.add(oOption);
						}
					else
						{
						document.GroupForm.lstGroupMember.add(oOption);
						}
					}
				}
				else
				{
					alert('!ninjaCompatible');
				}
			}
			else
			{
				alert(fOption[i].value + " finns redan med i listan");
				return true;
			}
		} // end if selected = true
	}// end for each option i gamla listan
}// end function

/*
Funktionsnamn:
removeSelectedOption()
Inparametrar:
lstSelect

Beskrivning:
Tar bort markerat alternativ från en selectbox.
*/ 

function removeSelectedOption(lstSelect) {
		if (lstSelect.selectedIndex == -1)
				alert("Du måste välja något i listan!");
			else
			{
				var iLenght = lstSelect.length;
				var nOption = lstSelect.options; 
				for (i = 0; i < iLenght ; i++)
				{
				  //alert(i + ' ' + iLenght);
				  if(lstSelect.selectedIndex != -1)
				  if (nOption[i].selected == true){
					nOption[i]= null;
					iLength = iLenght -1;
					i--
					//alert(i+i + ' ' + iLenght);
					}
				}
			}

}

/******** /common functions *************/


/******** initialize page****************/
function init(){
	//skapa vänster respektive höger kolumner.	
	//(div_id-nr, top_pos, left_pos, space_between_layers_in_height)
	createColumn('left',30,20,10);
	createColumn('right',30,605,10);
	
	//syncMenu();
	//displayPage är definierad längst ned på alla "nyhetssid-mallar"
	/*if(typeof(displayPage)!='undefined'){
		sizeImage();
	}*/
}

window.onload = init;

/******** end initialize page****************/
/**********Create bookmarks and subscription*/

function CreateProfile(mode, strURL)
{
	if (mode == 0)
	{
		var msg = 'Bokmärke för sidan skapas';
	}
	else if (mode == 1)
	{
		var msg = 'Prenumeration på sidan skapas';
	}
	else if (mode == 2)
	{
		var msg = 'Prenumeration på sidans löpsedel skapas';
	}
	else
	{
		alert('ERROR');
		return false;
	}
	alert(msg);
	document.location = strURL;
	
}
/**********end Create bookmarks and subscription*/

/******** form validation *****************/


function checkLength(bodytext,name,maxL)
{
	var emptyString = bodytext.substr(0,1);
	if (emptyString == ' ')
			return name+' måste börja med ett giltigt tecken\n';
	var oGiltigaTecken = "<>'|{}[]\/#¤" + '"';
	for(var i = 0; i < bodytext.length; i++){
		if(oGiltigaTecken.indexOf(bodytext.charAt(i))>-1)
			return name+' innehåller ogiltiga tecken\n';
	}
	if(bodytext.length>maxL)
		return name+' får vara max '+maxL+' tecken\n';
	else
		return '';
}

function checkLengthSpecial(bodytext,name,maxL)
{
	var emptyString = bodytext.substr(0,1);
	if (emptyString == ' ')
			return name+' måste börja med ett giltigt tecken\n';
	var oGiltigaTecken = "<>|{}[]\/#¤";
	for(var i = 0; i < bodytext.length; i++){
		if(oGiltigaTecken.indexOf(bodytext.charAt(i))>-1)
			return name+' innehåller ogiltiga tecken\n';
	}
	if(bodytext.length>maxL)
		return name+' får vara max '+maxL+' tecken\n';
	else
		return '';
}

function checkBody(bodytext,name,maxL)
{
var emptyString = bodytext.substr(0,1);
	if(bodytext=='')
			return 'Du måste skriva in '+name+'\n';
	else if (emptyString == ' ')
			return name+' måste börja med ett giltigt tecken\n';
			
	var oGiltigaTecken = "<>'|{}[]#¤" + '"';
	for(var i = 0; i < bodytext.length; i++){
		if(oGiltigaTecken.indexOf(bodytext.charAt(i)) > -1)
			return name+' innehåller ogiltiga tecken\nTecken :"'+ bodytext.charAt(i)+'"\n';
	}
	if(bodytext.length>maxL)
		return name+' får vara max '+maxL+' tecken\n';
	else
			return '';
	
}
function checkBodySpecial(bodytext,name,maxL)
{
var emptyString = bodytext.substr(0,1);
	if(bodytext=='')
			return 'Du måste skriva in '+name+'\n';
	else if (emptyString == ' ')
			return name+' måste börja med ett giltigt tecken\n';
			
	var oGiltigaTecken = "<>|{}[]#¤";
	for(var i = 0; i < bodytext.length; i++){
		if(oGiltigaTecken.indexOf(bodytext.charAt(i)) > -1)
			return name+' innehåller ogiltiga tecken\nTecken :"'+ bodytext.charAt(i)+'"\n';
	}
	if(bodytext.length>maxL)
		return name+' får vara max '+maxL+' tecken\n';
	else
			return '';
	
}
function checkSelect(selSubject, name)
{

	// om inget är selected
	// returnera ett felmeddelande
	if (selSubject.selectedIndex == -1 || selSubject.options(selSubject.selectedIndex).value == '')
		return "Du måste välja "+ name +"\n";
	else
		return '';
}

/*
Funktionsnamn:
ConfirmInsert(thisform) 
Inparametrar:
thisform

Beskrivning:
Kollar om några chkAdd är ikryssad, i så fall varna.
*/ 

function ConfirmInsert(thisform) 
{
	var i = 0;
	var cRemove = 0;
	if (!thisform.chkAdd)
		return false;
	if (!thisform.chkAdd.length){
		if (thisform.chkAdd.checked == true)
		cRemove++;
	}
	else {
		len = 0 + (thisform.chkAdd.length);
		//alert(len);
		for (i=0 ;i<len;i++)
			{
				//alert(i  + 'ta bort '+ thisform.chkDelete[i].checked +'? '+ len);
				if (thisform.chkAdd[i].checked == true)
					cRemove++;
			}
	}
	// alert(cRemove)
	if (cRemove!=0)
		return(confirm('Vill du lägga till dessa valda rader?'));
	else 
		return false ;

}

/*
Beskrivning:
Kollar om några chkDelete är ikryssad, i så fall varna.
*/ 

function ConfirmDelete(thisform) 
{
	var i = 0;
	var cRemove = 0;
	if (!thisform.chkDelete)
		return false;
	if (!thisform.chkDelete.length){
		if (thisform.chkDelete.checked == true)
		cRemove++;
	}
	else {
		len = 0 + (thisform.chkDelete.length);
		//alert(len);
		for (i=0 ;i<len;i++)
			{
				//alert(i  + 'ta bort '+ thisform.chkDelete[i].checked +'? '+ len);
				if (thisform.chkDelete[i].checked == true)
					cRemove++;
			}
	}
	//alert(cRemove)
	if (cRemove!=0)
		return(confirm('Vill du verkligen ta bort valda rader?'));
	else 
		alert('Du måste kryssa för en eller flera rader först!');
		return false ;

}

/*
Kontrollera om angivna parametrar blir ett datum
*/

function isDate (year,month,day)
{
    var today = new Date();
    year = ((!year) ? y2k(today.getYear()):year);
    month = ((!month) ? today.getMonth():month-1);
    if (!day) return false
    var test = new Date(year,month,day);
    if ((y2k(test.getYear()) == year) &&
         (month == test.getMonth()) &&
         (day == test.getDate())
       )
        return true;
    else
        return false;
}
function y2k(number){return (number < 1000) ? number + 1900 : number;}


/* Funktion för att kontrollera att startdatum är före slutdatum
*/

function DateDiff(Stopdate,Startdate)
{
    var difference = Stopdate.getTime() - Startdate.getTime();
    var daysDifference = Math.floor(difference/1000/60/60/24);
	return daysDifference;
}

	
/******** end form validation *************/

var isAdmin =true;

//********************
//TRO 20020416
//För hantering av flytande meny i Netscape
//********************
if(is.ns){
	var oldPageYOffset = window.pageYOffset;
	var tid = setInterval('testForScroll()', 25);
}
function testForScroll(){
	if (window.oldPageYOffset != window.pageYOffset) {
		divHeadMenu = document.getElementById("divHeadMenu");
		divadmMenu = document.getElementById("divadmMenu");
		divHeadMenu.style.top=window.pageYOffset;
		divadmMenu.style.top=window.pageYOffset+20; 
		window.oldPageYOffset = window.pageYOffset; 
	}
}

//************************************
//2002-04-12, Tomas Rolfsman
//Funktioner för menyn skall ligga kvar vid scrollning.
//Fungerar endast i IE
//************************************

// Hur många pixlar från toppen av framen

function keepAlive() {
	var topOffset = 0
	var topOffsetadmMenu = 20
	// Flytta innehållet till rätt plats
	document.getElementById("divHeadMenu").style.pixelTop = document.body.scrollTop + topOffset;
	document.getElementById("divadmMenu").style.pixelTop = document.body.scrollTop + topOffset + topOffsetadmMenu;
}

function doLoad() {
	// När sidan scrollar flytta menyn
	window.onscroll = keepAlive;
	// Börja med rätt plats för menyn
	keepAlive();
}

function onPageLoad(){
	init();
	//TRO, 2002-04-15
	//Kontrollerar om rätt div finns
	if(document.getElementById("divHeadMenu")!=null){
	document.getElementById("left1").style.top=0;
	if(is.ie){doLoad()}
	if(is.ie){setfocus()}
	if(is.ns){Nsetfocus()}
	}
}

//ser till så att bilderna i "nyhetssidor" inte överstiger givna värden i bredd
function sizeImage(){
	var imgSmall = new Array();
	var imgLarge = new Array();
	var smallWidth = 120;
	var largeWidth = 380;
	var img = document.getElementsByTagName('img');
	
	//sortera ut de bilder på sidan vi är intresserade av
	for(var i=0;i<img.length;i++){
				if(img[i].className == 'newsImgSmallSrc')
			imgSmall[imgSmall.length] = img[i];
			
		if(img[i].className == 'newsImgLargeSrc')
			imgLarge[imgLarge.length] = img[i];
	}
	
	//kolla storlek på "små" bilder
	if(imgSmall[0] != 'undefined' ){
		for(var i = 0; i<imgSmall.length;i++){
			if(imgSmall[i].width > smallWidth){
				imgSmall[i].width = smallWidth;
			}
		}
	}
	
	//kolla storlek på "stora" bilder	
	if(imgLarge[0] != 'undefined' ){
		for(var i = 0; i<imgLarge.length;i++){
			if(imgLarge[i].width > largeWidth){
				imgLarge[i].width = largeWidth;
			}
		}
	}

}
window.onload = onPageLoad;

