/*
	Gemensamma hjÃ¤lpfunktioner hela sajten.
	
	$Id: commonFunctions.js,v 1.35.6.2 2010/02/18 15:03:02 mathor Exp $
*/

/*
*   Returnerar true om man anvÃ¤nt en siffertangent. Om funktionen
*   inte Ã¤r lyckas identifiera tangenten som anvÃ¤nts returnerar 
*   den Ã¤ndÃ¥ true och lÃ¥ter serverkontrollen gÃ¶ra jobbet. 
*/
function isNumericKey(e) {
	var k = document.all ? e.keyCode : e.which;
	if (k == null)
	   return true;
	return ((k > 47 && k < 58) || k == 8 || k == 0 || k == 13);
}


/*
*   Returnerar true om man anvÃ¤nt tecken som tillÃ¥ts fÃ¶r personnummer
*   (siffror eller bindestreck). Om funktionen inte lyckas identifiera
*   tangenten som anvÃ¤nts returnerar den Ã¤ndÃ¥ true och lÃ¥ter 
*   serverkontrollen gÃ¶ra jobbet.
*/
function isPnrKey(e) {
	var k = document.all ? e.keyCode : e.which;
	if (k == null)
	   return true;
	return ((k > 47 && k < 58) || k == 45 || k == 8 || k == 0 || k == 13);
}


/*
*   Rensar ut det som inte Ã¤r siffror genom att enbart 
*   returnera de numeriska tal som ingÃ¥r i en text.
*/
function extractNumeric(str) {
	return str.replace(/\D/g,"");
}


/*
*   Rensar ut det som inte Ã¤r giltiga personnummertecken (siffror
*   eller bindestreck) genom att enbart returnera de tillÃ¥tna tecken
*   som ingÃ¥r i en text.
*/
function extractPnrChars(str) {
	return str.replace(/[^0-9-]/g,"");
}


/*
*   Returnerar det fÃ¶rsta element med ett givet klassnamn.
*   FÃ¶r Ã¶kad prestanda kan argumenten "node" och "tag" anvÃ¤ndas
*   fÃ¶r att bara sÃ¶ka element av en viss tagtyp och inom en viss
*   nod.
*/
function getFirstElementByClass(searchClass,node,tag) {
	var classElement;
	if (node == null)
		node = document;
	if (tag == null)
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (var i = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElement = els[i];
			break;
		}
	}
	return classElement;
}



/**
*   Visar (eller dÃ¶ljer) felmeddelanderuta och de fel den innehÃ¥ller.
*   Parametrar:
*      errorContainer Ã¤r den ruta dÃ¤r felen finns.
*      showErrors anger om rutan (och eventuella) fel ska visas eller gÃ¶mmas.
*                 true slÃ¥r pÃ¥ rutan och gÃ¥r igenom arrayen med fel, medan false
*                 gÃ¶mmer rutan och samtliga list items i den.
*      errorMessages Ã¤r den array som innehÃ¥ller felmeddelanden. NÃ¶dvÃ¤ndig om showErrors Ã¤r true.
*/
function showErrorBox(errorContainer, showErrors, errorMessages) {
	var errorContainer = document.getElementById(errorContainer);
	errorContainer.style.display = showErrors ? 'block' : 'none';
	var lists = errorContainer.getElementsByTagName("ul");
	for (var i=0; i<lists.length; i++) {
		lists[i].style.display = 'block';
		var items = lists[i].getElementsByTagName("li");
		for (var j=0; j<items.length; j++) {
			var thisItem = items[j];
			if (showErrors) {
				if (errorMessages.contains(thisItem.id)) {
					// Visa felmeddelande.
					thisItem.style.display = 'list-item';
					
					// En del felmeddelanden har nÃ¤stlade listor. I sÃ¥ fall ska den visas nu. 
					// (Den behÃ¶ver inte dÃ¶ljas eftersom den fÃ¶rsvinner nÃ¤r fÃ¶rÃ¤ldern gÃ¶ms.)
					if (thisItem.getElementsByTagName("ul")!=null) {
						var subLists = thisItem.getElementsByTagName("ul");
						for (var k=0; k<subLists.length; k++) {
							var subListItems = subLists[k].getElementsByTagName("li");
							for (var l=0; l<subListItems.length; l++) {
								subListItems[l].style.display = 'list-item';
							}
						
						}
						
					}

				}
			} else {
				// Dï¿½lj felmeddelande.
				thisItem.style.display = 'none';
			}
		}
	}
}



/*
*   Valideringsfunktion fÃ¶r loginformulÃ¤ret. InnehÃ¥ller logik fÃ¶r validering
*   och om nÃ¥got av kraven inte uppfylls lÃ¤ggs en SiteVision-url till i errors-arrayen
*   fÃ¶r att sedan visas som text i rÃ¶da rutan.
*   
*   (Funktionen Ã¤r kanske egentligen inte hemmahÃ¶rande i commonFunctions, men den Ã¤r 
*   sÃ¥ tÃ¤tt sammankopplad till metoder och funktioner hÃ¤r att den passar bÃ¤st hÃ¤r.)
*/
function validateLoginForm(form, errorContainer) {
	if(document.LogonForm.result.value != null && document.LogonForm.result.value == 'submit') {
		showErrorBox(errorContainer, false);

		// Om det finns felmeddelanden frÃ¥n det att sidan postats till servern mÃ¥ste
		// dessa fÃ¶rst dÃ¶ljas innan vi gÃ¶r javascriptvalideringen. (Dessutom ser det
		// snyggare ut om sidan rensas pÃ¥ fel innan vi fÃ¶rsÃ¶ker posta igen.)
		var loginPortlet = document.getElementById('loginPortlet');
		if (loginPortlet != null) {
			var loginDivs = loginPortlet.getElementsByTagName("div");
			if (loginDivs != null) {
				for (var j=0; j<loginDivs.length; j++) {
					 if (loginDivs[j].className == 'portlet-msg-error') {
						loginDivs[j].style.display = 'none';
						loginDivs[j].style.visibility = 'hidden';
					}
				}
			}
		}

		var errors = new Array();
		var personNumber = form.username.value;
		var pin = form.password.value;
		if (personNumber.isEmpty() && pin.isEmpty()) {
			errors[errors.length] = 'cms.BlanktPersonnummerOchPin';
		} else {
			if (personNumber.isEmpty()) {
				errors[errors.length] = 'cms.BlanktPersonnummer';
			} else if (!personNumber.matchesPnrFormat()) {
				errors[errors.length] = 'cms.OgiltigtFormat';
			} else if (!personNumber.pnrChecksumIsValid()) {
				errors[errors.length] = 'cms.OgiltigtPersonnummer';
			}
	
			if (pin.isEmpty()) {
				errors[errors.length] = 'cms.BlankPin';
			} else if (pin.length != 5 || !pin.hasOnlyNumerics()) {
				errors[errors.length] = 'cms.EndastSiffror';
			}
		}
	
		if (errors.length > 0) {
			showErrorBox(errorContainer, true, errors);
			form.reset();
			form.elements[0].focus();
			return false;
		}
		
		/** TillfÃ¤llig funktionalitet. Tas bort sÃ¥ snart som mÃ¶jligt. */
		form.username.value = convertToElwisFormat(form.username.value);
		/**************************************************************/
		
		purgePercentCookies();
	}
	
	return true;
}

/**
*   TILLFÃ„LLIG FUNKTIONALITET. TAS BORT SÃ… SNART SOM MÃ–JLIGT.
*
*   Av sÃ¤kerhetsskÃ¤l kommenteras och dokumenteras inte den hÃ¤r
*   metoden hÃ¤r. Se istÃ¤llet ERR27570. 
*/
function convertToElwisFormat(username) {
	if (pnrRegExp.test(username)) {

		if (!RegExp.$1.isEmpty()) {
			pnrRegExp.test(username);
			return RegExp.$1 + RegExp.$2 + RegExp.$3 + RegExp.$4 + RegExp.$5;
		}
		
		pnrRegExp.test(username);
		convertedString = RegExp.$2 + RegExp.$3 + RegExp.$4 + RegExp.$5;
		var yearPrefix = new String('19');
		if (new Number(RegExp.$2) < new Number(30)) {
			yearPrefix = new String('20');
		}
		return yearPrefix + convertedString;
	}
	return username;
}


/* Regexp fÃ¶r epostkontroll */
var emailRegExp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;



/*
*   StrÃ¤ngmetod
*   Returnerar true om strÃ¤ngen matchar formatet fÃ¶r giltig epostadress.
*/
String.prototype.matchesEmailFormat = function() {
	return emailRegExp.test(this);
}


/* Regexp fÃ¶r personnummerkontroll. Uppdelad fÃ¶r snabb Ã¥tkomst till fÃ¤lten fÃ¶r Ã¥r, mÃ¥nad, dag och nummer. */
var pnrRegExp = /^(\d{2})?(\d{2})(\d{2})(\d{2})\-?(\d{4})$/;



/*
*   StrÃ¤ngmetod
*   Returnerar true om strÃ¤ngen matchar nÃ¥got av de fyra formaten fÃ¶r personnummer.
*/
String.prototype.matchesPnrFormat = function() {
	return pnrRegExp.test(this);
}



/*
*   StrÃ¤ngmetod
*   Returnerar true om strÃ¤ngen Ã¤r ett personnummer med giltig kontrollsiffra.
*/
String.prototype.pnrChecksumIsValid = function() {
	if (pnrRegExp.test(this)) {
		var convertedString = RegExp.$2 + RegExp.$3 + RegExp.$4 + RegExp.$5;
		// convertedString innehÃ¥ller Ã¥r (utan sekelskiftessiffra), mÃ¥nad, dag, och nummer (fyra siffror)
		var nn="";
		for (var n=0 ;n<convertedString.length; n++) {
			nn += ((((n+1)%2)+1)*convertedString.substring(n,n+1));
		}
		var checksum=0;
		for (var n=0; n<nn.length; n++){
			checksum+=nn.substring(n,n+1)*1;
		}
		return (checksum%10==0);
	} else {
		// HÃ¤r borde vi aldrig hamna eftersom matchesPnrFormat kÃ¶rs fÃ¶rst.
		// Ã… andra sidan mÃ¥ste vi Ã¤ndÃ¥ kÃ¶ra test fÃ¶r att snabbt fÃ¥ tillgÃ¥ng
		// till siffrorna och kan dÃ¤rfÃ¶r lika gÃ¤rna ha else-satsen hÃ¤r.
		return false;
	}
}



/*
*   
*   HÃ¤mtar vÃ¤rdet frÃ¥n cookien med namnet 'name'
*/
function getPercentCookie(name) {
    var value = 0;
    var aCookie = document.cookie.split("; ");
    for (var i=0; i < aCookie.length; i++) {
        var aCrumb = aCookie[i].split("=");
        if (name == aCrumb[0])
            value = unescape(aCrumb[1]);
    }
    return value;
}



/*
*   Hittar alla cookies som anvÃ¤nts fÃ¶r att spara fondfÃ¶rdelning fÃ¶r fondbyte.
*/
function purgePercentCookies() {
    var cookieString = document.cookie;
    if (cookieString != null) {
    	cookies=cookieString.split("; ");
    	for (var i=0; i<cookies.length; i++) {
	    cookieParts = cookies[i].split("=");
	    if (cookieParts[0].indexOf('fundDistribution')!=-1) {
	    	deletePercentCookie(cookieParts[0]);
	    }
	}
    }
}



/*
*   Sparar cookie
*/
function setPercentCookie(name, value) {
	document.cookie = name + "=" + value + "; path = /";
}



/*
*   Tar bort cookie
*/
function deletePercentCookie(name) {
	document.cookie = name + "=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/";
}



/*
*   Sparar cookie med vÃ¤rden frÃ¥n formulÃ¤rfÃ¤lt.
*/
function savePercent(thisitem) {
    setPercentCookie(thisitem.name, thisitem.value);
}



/*
*   StrÃ¤ngmetod
*   Returnerar true om strÃ¤ngen Ã¤r tom och false i Ã¶vriga fall.
*/
String.prototype.isEmpty = function() {
	return (this == null || this.trim().length == 0);
}



/*
*   StrÃ¤ngmetod
*   Returnerar true om strÃ¤ngen enbart bestÃ¥r av siffror.
*/
String.prototype.hasOnlyNumerics = function() {
	var regexp = /^\d+$/;
	return regexp.test(this);
}



/*
*   StrÃ¤ngmetod
*   Tar bort whitespace frÃ¥n bÃ¶rjan och slutet av strÃ¤ngen.
*/
String.prototype.trim = function() {
	var newString = this;
	
	var endTrim = /((\s*\S+)*)\s*/;
	newString = newString.replace(endTrim, "$1");
		
	var leadTrim = /\s*((\S+\s*)*)/;
	newString = newString.replace(leadTrim, "$1");

	return newString;
}



/*
*   Arraymetod
*   Returnerar true om arrayen innehÃ¥ller testvÃ¤rdet
*/
Array.prototype.contains = function(testVal) {
	for (var i=0; i<this.length; i++) {
		if (this[i] == testVal) {
			return true;
		}
	}
	return false;
}



/*
*   GÃ¶r en formulÃ¤rknapp inaktiv. Om felaktigt id angivits
*   fÃ¶r knappen hÃ¤nder ingenting.
*/
function disableButton(buttonId) {
	var button = document.getElementById(buttonId);
	if (button) {
		button.disabled = true;
	}
}


/*
*   Ã–ppnar fÃ¶nstret med talsyntes
*/
function openTalsyntes(){
	url= escape(location.href);
	newWin = window.open('http://isi.phoneticom.com/cgi-bin/ppmrsone?customerid=59&url='+url,'talsyntes','width=790, height=590');
	newWin.focus();
}


/*
 * Redirectar anvÃ¤ndaren till sidan som gÃ¤ller fÃ¶r det inloggninssÃ¤tt som valts dropdownmeny. * 
 */
function redirectLogin(url) {
	if(url == null || url.isEmpty()) {
		return false;
	}
    window.location.href = url;
}



/*
*	Fokuserar pÃ¥ fÃ¶rsta fÃ¤ltet i fÃ¶rsta formulÃ¤ret med inmatningsfÃ¤lt 
*   (om det finns nÃ¥got sÃ¥nt pÃ¥ sidan). 
*	Egentligen Ã¤r det hÃ¤r en halvsanning eftersom de fÃ¶rsta tvÃ¥ formulÃ¤ren
*   undantas dÃ¥ de fÃ¶rutsÃ¤tts vara sidans sitemap och sÃ¶kformulÃ¤r. Vi 
*   letar alltsÃ¥ igenom samtliga formulÃ¤r frÃ¥n och med det tredje tills
*   vi stÃ¶ter pÃ¥ fÃ¶rsta text- eller lÃ¶senordsfÃ¤lt. 
*
*   Specialfallet Ã¤r loginformulÃ¤ret, vars sida anvÃ¤nder en annan layout.
*   DÃ¤r finns inga andra formulÃ¤r och vi kan direkt identifiera personnummerfÃ¤ltet.
*/
function focusOnFirst() {
	var tmpForm, tmpElement;
	if (document.LogonForm && document.LogonForm.username) {
		with (document.LogonForm.username) {
			focus();
			select();
		}
	} else {
		for (var i=2;i<document.forms.length;i++) {
			tmpForm = document.forms[i];
			for (var j=0;j<tmpForm.elements.length;j++) {
				tmpElement = tmpForm.elements[j];
				if (tmpElement.type == 'text' || tmpElement.type == 'password') {
					if (tmpElement.className && tmpElement.className.indexOf('nofocus')!=-1) {
						return;
					}
					tmpElement.focus();
					tmpElement.select();
					return;
				}
			}
		}
	}
	return;
}

/*
 * Trunkerar lÃ¥nga namn i inloggningsportleten.
 * Den hÃ¤r funktionen anvÃ¤nder en jquery-plugin
 * fÃ¶r att ge trunkeringsstÃ¶d i Firefox (IE fÃ¥r
 * stÃ¶det via portletLayouts.css).
 */
$svjq(document).ready(function() {
    $svjq("#name").ellipsis();
});


/*
*  Generell funktionalitet fÃ¶r det som hÃ¤nder nÃ¤r sidan laddas. (Eftersom vi saknar
*  tillgÃ¥ng till bodytaggen och inte kan styra Ã¶ver vilka funktioner som ska laddas nÃ¤r,
*  samlas dessa dÃ¤rfÃ¶r hÃ¤r och anropas vid rÃ¤tt tillfÃ¤lle.)
*/
$svjq(document).ready(function() {
	// Om dokumentet innehÃ¥ller fondbytesformulÃ¤ret ska siffror fÃ¶rladdas om 
	// kakor Ã¤r satta. Anropar fundChange.js
	if (document.fundChangeForm) {
		populateFields();
	} else if (document.getElementById('cancelFundChangeAndPurgeCookies') != null){
		// Om dokumentet innehÃ¥ller det hÃ¤r elementet innebÃ¤r det att vi ska rensa kakorna
		// med inmatad fÃ¶rdelning. Den hÃ¤r funktionen kÃ¶rs frÃ¥n sidorna fÃ¶r att ta bort och avbryta
		// fondbyte eftersom fÃ¶rdelning inte ska fÃ¶rifyllas om man pÃ¥bÃ¶rjar ett nytt fondbyte efter
		// att ha avbrutit ett byte i steg 2. 
		purgePercentCookies();
	}
		
	// Fokusera pÃ¥ fÃ¶rsta inmatningsfÃ¤ltet i fÃ¶rsta formulÃ¤ret.

	focusOnFirst();
});



/*
*  Vanliga frågors funktionalitet för att visa och dölja svaret via klickbarhet.
*  De listas genom en nyhetsmodul, där varje fråga/svar består av 2 DIVar, en med frågan och en med svaret
*  För att rätt div ska öppnas/stängas tilldelas divarna IDn baserat på nyhetsartikelns Sitevision-identifier.
*/
function toggleFAQ(answerID) {

	var questionID = "1"+answerID;
	var answerclass = document.getElementById(answerID);
	var questionclass = document.getElementById(questionID);
	
	if(answerclass.className == "faqxvisasvar") {
    		answerclass.className = "faqxdoljsvar";
			questionclass.className = "faq_collapse";
  	}
	else {
		answerclass.className = "faqxvisasvar";
		questionclass.className = "faq_expand";
	}
} 



/*
*  Gör SELECT-menyn länkbar
*  Tar det valda objektet i en SELECT-meny och skickar till URL:en i <option value="... 
*/
function dropdown(mySel)
{
var myWin, myVal;
myVal = mySel.options[mySel.selectedIndex].value;
if(myVal)
   {
   if(mySel.form.target)myWin = parent[mySel.form.target];
   else myWin = window;
   if (! myWin) return true;
   myWin.location = myVal;
   }
return false;
}



/*
*  Skript för att hantera filmspelaren och dess funktioner 
*/

//Dimma sidan och visa flashspelaren med de parametrar som skickas in
function displayFlash(baseURL,movieName){

	
	//Gå till sidans första DIV för att kunna dölja den
	var elementToHide = $('loadingbar_area'); 
	var parentElement = elementToHide.up();
	var parentElement = parentElement.up();
	var parentElement = parentElement.up();
	var elementToHide = parentElement;
	
	var backgroundElement = new Element('div', {'id':'BGElement'});
	parentElement.insert(backgroundElement);
	backgroundElement.clonePosition(elementToHide, {setLeft:false});
	
	var pageSize = getPageSize();
	backgroundElement.style.width=pageSize[0]+'px';
	backgroundElement.style.height=pageSize[1]+'px';

	var loadingElement = new Element('div', {'id':'FlashElement'});
	var flashContainer = new Element('div', {'id':'FlashContainer'});
	
	// Information för användare utan Flash Player, lägger sig bakom filmspelaren
	var protocol = window.location.protocol;
	var noFlash = new Element('div', {'id':'noFlash'});
	var noFlashLink = new Element('a', {'href':'http://get.adobe.com/flashplayer/', 'style':'position:relative; text-align:center;','alt':'H&auml;mta Adobe Flash Player','target':'_blank'});
	var noFlashBanner = new Element('img', {'id':'noFlashBanner', 'border':'0','src':''+protocol+'//www.adobe.com/images/shared/download_buttons/get_adobe_flash_player.png'});
	noFlash.insert(noFlashLink.insert(noFlashBanner));
	var noFlashText = new Element('span', {'class':'brodtextxhogerpuff', 'style':'margin-top:15px;display:block;position:relative; text-align:center;'});
	noFlashText.innerHTML = 'Adobe Flash Player kr&auml;vs f&ouml;r att spela upp filmer p&aring; Pensionsmyndigheten.<br />Klicka p&aring; knappen ovan f&ouml;r att ladda ner senaste versionen.<p /><a href="javascript:void(0)" onclick="hideFlashElement()">St&auml;ng f&ouml;nster</a>';
	noFlash.insert(noFlashText);
	flashContainer.insert(noFlash);
				
	//Ladda filmspelaren
	var so = new SWFObject( baseURL+"pmu-player.swf", "Pensionsmyndighetens filmspelare", "100%", "480", "7", "#66666");
	so.addParam( "wmode", "transparent" );
	so.addParam( "allowFullScreen", true );
	so.addVariable( "fileLoadPrefix", "/" );
	so.addVariable( "baseURL", baseURL+movieName+".xml" );

	parentElement.insert(loadingElement.insert(flashContainer));
	loadingElement.clonePosition(elementToHide, {setLeft:false});
	so.write("FlashContainer");
}

// Hämtar sidans storlek för att sätta BGElements storlek
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}


// För stäng-knappen i filmspelaren (anropas från XML-filen)
function hideFlashElement(){
	if($('BGElement') != null && $('FlashElement') != null){
		$('BGElement').remove();
		$('FlashElement').remove();
	}
}

//Bokmärkesfunktionen (anropas från xml-filen)
function bookmark(url, title){

if (window.sidebar) // firefox
    window.sidebar.addPanel(title, url, "");
else if(window.opera && window.print){ // opera
    var elem = document.createElement('a');
    elem.setAttribute('href',url);
    elem.setAttribute('title',title);
    elem.setAttribute('rel','sidebar');
    elem.click();
}
else if(document.all)// ie
    window.external.AddFavorite(url, title);
}

/*
*  Skript för att hantera ReadSpeakers lyssna-funktion på redaktionella sidor
*/


/* The selected text function */

var selectedString="";

function getSelectedHTML() {
  selectedString="";
  var rng=undefined;
  if (window.getSelection) {
    selobj = window.getSelection();
    if (!selobj.isCollapsed) {
      if (selobj.getRangeAt) {
        rng=selobj.getRangeAt(0);
      }
      else {
        rng = document.createRange();
        rng.setStart(selobj.anchorNode,selobj.anchorOffset);
        rng.setEnd(selobj.focusNode,selobj.focusOffset);
      }
      if (rng) {
        DOM = rng.cloneContents();
        object = document.createElement('div');
        object.appendChild(DOM.cloneNode(true));
        selectedString=object.innerHTML;
      }
      else {
        selectedString=selobj;
      }
    }
  }
  else if (document.selection) {
    selobj = document.selection;
    rng = selobj.createRange();
    if (rng && rng.htmlText) {
      selectedString = rng.htmlText;
    }
    else if (rng && rng.text) {
      selectedString = rng.text;
    }
  }
  else if (document.getSelection) {
    selectedString=document.getSelection();
  }
  	selectedString = cleanSelectedString(selectedString);
}

function copyselected()
{
  setTimeout("getSelectedHTML()",50);
  return true;
}

document.onmouseup = copyselected;
document.onkeyup = copyselected;

/* The expanding function */

function readspeaker(rs_call)
{
  if (selectedString.length>0) {
    rs_call=rs_call.replace("/cgi-bin/rsent?","/enterprise/rsent_wrapper.php?");
  }
  savelink=rs_call+"&save=1";
  start_rs_table="<div>";
  protocol = window.location.protocol;
  rs_embed="<div style='float:left;margin-left:-0.3em'><object border='0' type='application/x-shockwave-flash' data='"+protocol+"//media.readspeaker.com/flash/readspeaker20.swf?mp3="+escape(rs_call)+"&autoplay=1&rskin=rounded&ricon=0&rcontrol=mini&rprogress=0&c1=0xe34912&c2=0xffffff&c3=0xe34912&c4=0xef8200&c5=0xffffff&c7=0xef8200&c8=0xef8200&c9=0xe34912&c10=0xb9b1a9&c11=0xffffff&c12=0xffffff&c13=0xef8200&c15=0xffffff&c16=0xe34912&text_play=Spela&text_pause=Pausa&text_stop=Stoppa&text_vol=Volym' height='20' width='250'><param name='movie' value='"+protocol+"//media.readspeaker.com/flash/readspeaker20.swf?mp3="+escape(rs_call)+"&autoplay=1&rskin=rounded&ricon=0&rcontrol=mini&rprogress=0&c1=0xe34912&c2=0xffffff&c3=0xe34912&c4=0xef8200&c5=0xffffff&c7=0xef8200&c8=0xef8200&c9=0xe34912&c10=0xb9b1a9&c11=0xffffff&c12=0xffffff&c13=0xef8200&c15=0xffffff&c16=0xe34912&text_play=Spela&text_pause=Pausa&text_stop=Stoppa&text_vol=Volym' /><param name='quality' value='high' /><param name='SCALE' value='exactfit' /><param name='wmode' value='transparent' /><embed wmode='transparent' src='"+protocol+"//media.readspeaker.com/flash/readspeaker20.swf?mp3="+escape(rs_call)+"&autoplay=1&rskin=rounded&rcontrol=mini&rprogress=0&c1=0xe34912&c2=0xffffff&c3=0xe34912&c4=0xef8200&c5=0xffffff&c7=0xef8200&c8=0xef8200&c9=0xe34912&c10=0xb9b1a9&c11=0xffffff&c12=0xffffff&c13=0xef8200&c15=0xffffff&c16=0xe34912&text_play=Spela&text_pause=Pausa&text_stop=Stoppa&text_vol=Volym' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwaveflash' scale='exactfit' border='0' height='20' width='250' /></embed></object></div>";
  rs_downloadlink="<div class='laddaner' style='float:left;'><a title='Ladda ner sidan som MP3' href='"+savelink+"'></a></div></div>";
  end_rs_table="";

  var x=document.getElementById('rs_div');

  x.innerHTML=start_rs_table+rs_embed+rs_downloadlink+end_rs_table;
}

function close_rs_div()
{
  var x=document.getElementById('rs_div');
  x.innerHTML="";
}

/* Selected text cleaning function */
   

function cleanSelectedString(theString)
{
	var comments = theString.match(/<!--/gi);
	var temp = "";
	if(comments != undefined)
	{
		for(i=0;i<comments.length;i++)
		{
			var temp = theString.substring(theString.search(/<!--/gi),theString.search(/-->/gi)+3);
			theString = theString.replace(temp,"");
		}
	}
	var regexp = /(<\/?[A-Z]+[0-9]?)\s?[^>]*>/gi
	theString = theString.replace(regexp, "$1>");
	var regexp2 = /<\/?[A-Z]+[0-9]?\s?>/gi
	theString = theString.replace(regexp2, function(m) { return returnTags(m);});
	var regexp_spaces = /\s+?\s*/gi
	theString = theString.replace(regexp_spaces, " ");	
	var regexp_br = /(<br>)+?\s?(<br>\s*)*/gi
	theString = theString.replace(regexp_br, "<br>");	
	return theString;
}

function returnTags(thematch)
{ 
	var regtag = /<\/?(h[1-6]|a|area|ul|ol|dl|dd|dt|li|table|td|tr|th|p|hr|br)>/i
	if(regtag.test(thematch))
	{ 
		return thematch;
	} 
	else 
	{
		return "";
	}
}


window.onunload = function exit() {
	return true;
};