﻿function validerar( bgnr, orgnr ) {
	var a = 0;
	var org = orgnr.value.length;
	var bg = bgnr.value.length;
	var bgError = false;
	var orgError = false;
	var streck = false;
	var bgErrMess;
	var orgErrMess;
	
	//Kontrollera att bgnummer angivits
	if( bgnr.value=="" )
		bgError = true;
    
    //Kontrollera att bgnummer endast innehåller siffror och bindestreck
	for( var i = 0; i < bg; i++ ) {
    		if ( ( bgnr.value.substring( i, i + 1 ) < '0' ) || ( bgnr.value.substring( i, i + 1 ) > '9' ) ) {
    			if ( bgnr.value.substring( i, i + 1 ) != "-" || ( bgnr.value.substring( i, i + 1 ) == "-" && streck == true ) )
    				bgError = true;
			else
				streck = true;
		}
	}
	
	//Kontrollera att ett eventuellt bindestreck är placerat fyra siffror från slutet av siffersträngen
	

	if( streck == true ) {
		if( bg == 8 && bgnr.value.substr( 3, 1 ) != "-" )

			bgError = true;
		if( bg == 9 && bgnr.value.substr( 4, 1 ) != "-" )

			bgError = true;
	}
	
	//Kontrollera att bgnummer innehåller rätt antal tecken
	if( streck == true ) {
		if( bg != 8 && bg != 9 )
			bgError = true;
	}
	
	if( streck == false ) {
		if( bg != 7 && bg != 8 )
			bgError = true;
	}

	//Kontrollera att orgnummer angivits
	if( orgnr.value == "" )
		orgError = true;

	//Kontrollera att orgnummer endast innehåller siffror
	for (var l=0;l < org;l++) {
    		if ((orgnr.value.substring(l,l+1) < '0') || (orgnr.value.substring(l,l+1) > '9'))
			orgError = true;
	}

	//Kontrollera att orgnummer innehåller 12 siffror
	if ( org != 12 )
		orgError = true;
	
	//Beskriv felet för användaren och avbryt funktionen
	if ( bgError == true || orgError == true ) {
		bgErrMess = "Kontrollera att bankgironumret du angivit är korrekt. \nBankgironummer består av 7 eller 8 siffror. Eventuellt bindestreck placeras före de fyra sista siffrorna.\n(Exempel: 123-4567 eller 1234-5678)\n \n";
		orgErrMess = "Organisations- och personnummer anges med 12 tecken. \n(Lägg till \"16\" framför organisationsnumret, personnummer anges med ååååmmddxxxx)";
		
		if ( bgError == true && orgError == true  )
			alert( bgErrMess + orgErrMess );
			
		else if ( bgError == true && orgError != true )
			alert( bgErrMess );
			
		else if ( bgError != true && orgError == true )
			alert( orgErrMess );
			
		return false
	}
	else
		return true
		
}

// bildar  bgnummer utan bindestreck
function rebuild_bgnr(bgnr)  
{
	var bg = bgnr.value.length;
	var newbgnr=bgnr.value;
		if( bg == 8 && bgnr.value.substr( 3, 1 ) == "-" ){
		newbgnr=bgnr.value.substr( 0, 3 ) +bgnr.value.substr( 4, 4)  ;
		}
		if( bg == 9 && bgnr.value.substr( 4, 1 ) == "-" ){
			newbgnr=bgnr.value.substr( 0, 4 ) +bgnr.value.substr( 5, 4 ) ;
		}		

return newbgnr
}

function checksum(nr, msg)
{ 
  var res1 = 0
	var res = 0							//resultatet av sammanräkningen
	var ksiffra1 = 0
	var ksiffra = 0
	var asiffra = 0						//från numret aktuell siffra	
	var l = nr.length   					//antal siffror i nr-fältet
	var bsiffra = 0						// kontrollsiffran
	var b=0
	var nrl = l-1						// för att inte räkna med sista siffran i 10-moduls-beräkningen
	var resm2=0				// andra siffran vid tal större än 9
	//alert('nr: ' + nr);
	bsiffra=nr.substr(nrl,1)		// kontrollsiffran direkt tagen ur nummersträngen
	var raknestart = l -2		// ger positionen där vi ska börja räkna (från höger)
     var raknare = 0				// för att hålla reda på vilket varv vi är på

	for (var a=raknestart;a!=-1;a--) 		//loop som går igenom ocrsträngen förutom checksiffran
	{
		asiffra=nr.substr(a,1)	//asiffra får värdet av den aktuella siffran

		if (raknare % 2 ==0)  					// om aktuell siffra´s position är jämn (utifrån att vi börjar på 0)
			{
				res1=0
				res1 = 2* asiffra
				if (res1 > 9)					// om beräkningen blir 10 eller mer
				{
					resm2 = res1 - 10		// räknar ut den andra siffran
					res = res + 1 + resm2  // adderar siffrorna
				}
				else							// om beräkningen blir mindre än 10
				{
					res =res + res1
				}
			}
			else								// om aktuell siffra´s position är ojämn (utifrån att vi börjar på 0)
			{  		//  udda varv
				res1 = 0
				res1 = 1 * asiffra 
				res = res + res1
			}

			raknare = raknare +1 
	}	

	ksiffra1 = res % 10					// tar bort tio-tals-siffran från res-variablen
	if (ksiffra1==0)
		{
			ksiffra=0						//kontrollsiffran blir en nolla
		}
		else
		{
			ksiffra = 10 - ksiffra1				// räknar ut kontroll-siffran
		}
	asiffra = 0
	//alert('ksiffra ' + nr + ' ' +ksiffra );
	//alert('bsiffra ' + nr + ' ' + bsiffra);
	if (ksiffra == bsiffra)
	{
		return true
	}
	else
	{
	  alert(msg);
	 	return false
	}
}

function checknr (bgnrid, orgnrid)
{

var bgnrField = document.getElementById(bgnrid);
var orgnField = document.getElementById(orgnrid);
var newbg;
var orgmsg='Organisations- eller personnumret som du angett är felaktigt. Vänligen kontrollera och försök igen.';
var bgmsg='Bankgironumret som du angett är felaktigt. Vänligen kontrollera och försök igen.';


// Om det är inget fel i BGnummer och Org/Personnummer, kolla checksiffran
	if (validerar(bgnrField, orgnField) == true) 
	{    
		newbg= rebuild_bgnr(bgnrField);
		neworgnr=orgnField.value.substr(2, orgnField.value.length-2) ;
		if 	(!checksum(newbg, bgmsg ))  {return false};
		if (!checksum(neworgnr, orgmsg )) {return false };
	
	}
	else   
	{
			return false
	}
 	return true
}

document.forms[0].target = "_self";
function _doClick(v, o, t, h) {
  var form = document.forms[0];
  if (form.onsubmit) {
     var retVal = form.onsubmit();
     if (typeof retVal == "boolean" && retVal == false)
       return false;
  }
  var target = document.forms[0].target;
  if (o.href != null) {
    if (o.target != null)
       target = o.target;
  } else {
    if (t != null)
      target = t;
  }
  form.target = target;
  form.__Click.value = v;
  if (h != null)
    form.action += h;
  form.submit();
 // return false;
  
}

