﻿function validateEmail(oSource) {
 sMaybeEmail = oSource.value;

 var regExpIsSupported = false;
 if (window.RegExp) {
  var sTmp = "a";
  var rTmp = new RegExp(sTmp);
  if (rTmp.test(sTmp)) { regExpIsSupported = true; }
 }

 if (!regExpIsSupported) {
  var bEmailIsValid = true;
  var iIdxOfAt = sMaybeEmail.indexOf('@');
  var iIdxOfLastDot = sMaybeEmail.lastIndexOf('.');
  var iIdxOfSpace = sMaybeEmail.indexOf(' ');
  var iLength = sMaybeEmail.length;

  if (iIdxOfAt < 1 )			{ bEmailIsValid = false; } // Ett @-tecken, och tidigast på pos. 2.
  if (iIdxOfLastDot < iIdxOfAt)		{ bEmailIsValid = false; } // Minst en punkt efter @.
  if (iLength - iIdxOfLastDot <= 2)	{ bEmailIsValid = false; } // Minst två tecken efter sista punkten.
  if (iIdxOfSpace != -1)			{ bEmailIsValid = false; } // Inga mellanslag.

  return bEmailIsValid;
 }

 var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
 var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
 return (!r1.test(sMaybeEmail) && r2.test(sMaybeEmail));
}

function validateForm(oSource_1, oSource_2, sErrMsg_1, sErrMsg_2) {
 if (!validateEmail(oSource_1)) {
  alert(sErrMsg_1 + " \"" + oSource_1.id + "\" " + sErrMsg_2);
  return false;
 }
 if (!validateEmail(oSource_2)) {
  alert(sErrMsg_1 + " \"" + oSource_2.id + "\" " + sErrMsg_2);
  return false;
 }
}

// Lägg värdet av alla val från ett flerval-select-element i en lista och returnera den.
function getSelected(oSelect) {
 var aSelections = new Array();
 for(i = 0; i < oSelect.options.length; i++) {
  if(oSelect.options[i].selected == true && oSelect.options[i].innerText != "") {
   aSelections[aSelections.length] = oSelect.options[i].innerText;
  }
 }
 var sReturnString = (aSelections.length > 0) ? aSelections.join(", ") : "";
 return sReturnString;
}

// Kombinerar två strängar med angiven separator. Om en eller båda strängarna är tomma returneras inte separatorn.
function combineStrings(sText_1, sText_2, sSeparator) {
 aReturnValue = new Array();
 if (sText_1 != "" ) { aReturnValue[aReturnValue.length] = sText_1; }
 if (sText_2 != "" ) { aReturnValue[aReturnValue.length] = sText_2; }
 return aReturnValue.join(sSeparator);
}

// Sätt ett fälts värde till en sträng.
function setValue(oTarget, sValue) {
 oTarget.value = sValue;
}

// Sätter värdet på ett fält med nuvarande värde från en select.
function setValueFromSelect(oTarget, oSource) {
 oTarget.value = (oSource.options.selectedIndex != -1) ? oSource.options[oSource.options.selectedIndex].text : "";
}

function ExtractLinks(oSource, oTarget, sTarget)
{
  var sLinks = oSource.innerText;
  var aLinks = sLinks.split("\n");
  var aResult = new Array();
  var sResult = "";
  for(var i = 0; i < aLinks.length; i++)
  {
    if(aLinks[i] != "\r")
      aResult[aResult.length] = '<a href="' + aLinks[i] + '" target="' + (sTarget ? sTarget : "") + '">' + aLinks[i] + '</a>';
  }
  sResult = aResult.join("<br />");
  oTarget.value = sResult;
}

function checkValidImage(oSource, sError) {
    sSource = oSource.value;
    if(sSource == "") { return true; }
    var sFileExt = sSource.slice(sSource.lastIndexOf("."), sSource.length).toLowerCase();
    if(sFileExt != ".jpg"  &&
       sFileExt != ".jpeg" &&
       sFileExt != ".jpe"  &&
       sFileExt != ".gif"  &&
       sFileExt != ".png") {
      alert(sError);
      return false;
    }
    return true;
}

// Returnerar värdet av den query som skickas in.
function requestQueryStr(sQueryName) {
	var sQueryStr = document.location.search;
	if(sQueryStr.indexOf(sQueryName) == -1)
		return "";
	var iStartIdx = sQueryStr.indexOf("=", sQueryStr.indexOf(sQueryName)) +1;
	var sQueryValue = sQueryStr.slice(iStartIdx, sQueryStr.indexOf("&", iStartIdx));
	return unescape(sQueryValue);
}

function addOptionToTargetInParentWindow(oTarget, sText, sValue)
{
	if(window.opener)
	{
		var oOption = window.opener.document.createElement("OPTION");
		oOption.innerText = sText;
		oOption.text = sText;
		oOption.value = sValue;
		oTarget.appendChild(oOption);
	}
}

/* 
   Kräver att man inkluderat Admin/Includes/swe_counties
   (Admin/Includes/9B0320C7-F870-437F-9310-38454C8BB81D.JS)
   tidigare.
*/
function fillMunicipality(iId, oTarget)
{
  while(oTarget.hasChildNodes()) 
  {
    oTarget.removeChild(oTarget.childNodes.item(0));
  }
  if(!isNaN(iId) && iId > -1)
  {
    aMunicipalities = aCounties[iId].split(', ');
    for(j = 0; j < aMunicipalities.length; j++)
    {
      var oOption = document.createElement("OPTION");
      oOption.innerText = aMunicipalities[j];
      oOption.text = aMunicipalities[j]
      oOption.value = aMunicipalities[j]
      oTarget.appendChild(oOption);
     }
  }
}

/* Väljer i en select baserat på innerText */
function selectByText(oSelect, sText) {
	if(oSelect == null)
		return;
	for(var i = 0; i < oSelect.childNodes.length; i++)
	{
		if(oSelect.childNodes(i).innerText == sText) {
			try {
				oSelect.childNodes(i).selected = true;
				return;
			}
	        	catch (e) {
	          		return false;
	        	}
		}
	}
}
/* Väljer i en select baserat på value */
function selectByValue(oSelect, sText) {
	if(oSelect == null)
		return;
	for(var i = 0; i < oSelect.childNodes.length; i++)
	{
		if(oSelect.childNodes(i).value == sText) {
			try {
				oSelect.childNodes(i).selected = true;
				return;
			}
	        	catch (e) {
	          		return false;
	        	}
		}
	}
}
/* Markerar en checkbox om sText inte är tom */
function checkIfNotBlank(oCheck, sText) {
	if(oCheck == null)
		return;
	if(sText != '') {
		oCheck.checked = true;
	}
}
/* Markerar en radiobutton med värdet från sText
 * Bör anropas via document.formname.radiogroupname
 */
function selectRadioByValue (oRadio, sText) {
	if(oRadio == null)
		return;
	for(var i = 0; i < oRadio.length; i++)
	{
		if(oRadio(i).value == sText) {
			oRadio(i).checked = true;
			return;
		}
	}
}
/*
 * Removes all selected elements ("OPTION") from "oSource" which is a SELECT element.
 * Note that the loop counts backward since it else might skip items when others are removed.
 */
    function RemoveSelectedOptions(oSource)
    {
      for(var i = oSource.childNodes.length -1; i >= 0 ; i--)
      {
        if(oSource.childNodes[i].selected == true)
	{ 
          oSource.removeChild(oSource.childNodes[i]);
        }
      }
    }

/*
 * Selects all options in oSource
 */
    function SelectAllOptions(oSource)
    {
      for(var i = 0; i < oSource.childNodes.length; i++)
      {
        oSource.childNodes[i].selected = true;
      }
    }
