/*
# +-------------------------------------------------------------------------+
# | Författare:     Niklas Hultgren                                         |
# | Datum:          2006-05-02                                              |
# | Kontakt:        niklas.hultgren@litchi.se                               |
# +-------------------------------------------------------------------------+
*/

/************************************************************************************
* Ramverk för validering av all interaktion applikationen och användaren i mellan.  *
************************************************************************************/
function validate(form, todo){
    var error = false;
    var errorMessage = "Följande fel har påträffats!\n";

    /** 
    * Validering av användarnamn och lösenord.
    **/
    if(todo == "login"){
        var username = trim(form.username.value);
            if(username.length == 0){
                error = true;
                errorMessage += "Användarnamn är en obligatorisk uppgift.\n";
            }

        var password = trim(form.password.value);
        if(password.length == 0){
            error = true;
            errorMessage += "Lösenord är en obligatorisk uppgift.\n";
        }
    }
    /**/

    /** 
    * Validering av e-postadress
    **/
    if(todo == "request_password"){
        var retrive_emailaddress = trim(form.retrive_emailaddress.value);
        if(retrive_emailaddress.length == 0){
            error = true;
            errorMessage += "E-postadress är en obligatorisk uppgift.\n";
        }else{
            if(!echeck(retrive_emailaddress)){
                error = true;
                errorMessage += "Den e-postadress du angivigt är inkorrekt.\n";
            }
        }
    }
    /**/



    if(todo == "register_new_user"){

       if(form.customer_type.value == '' || form.customer_type.value == 'nn'){
            errorMessage += "Kundtyp är en obligatorisk uppgift.\n";
            error = true;
       }
      

        if(form.customer_type.value == 'foretag'){
            if(!(pnrCheck(form.orgnr.value))){
                errorMessage += "Ogiltigt organisationsnummer.\n";
                error = true;
            }
        }

         if(form.customer_type.value != 'nn'){
          if(form.customer_type.value == 'foretag'){
           if(form.orgnr.value == ''){
                errorMessage += "Organisationsnummer är en obligatorisk uppgift för företagskunder.\n";
                error = true;
           }
           if(form.companyname.value == ''){
              errorMessage += "Företagsnamn är en obligatorisk uppgift för företagskunder.\n";
                error = true;
           }
         }
         }


       if(form.firstname.value == ''){
            errorMessage += "Förnamn är en obligatorisk uppgift.\n";
            error = true;
       }

        if(form.lastname.value == ''){
            errorMessage += "Efternamn är en obligatorisk uppgift.\n";
            error = true;
       }

       if(form.street.value == ''){
            errorMessage += "Gatuadress är en obligatorisk uppgift.\n";
            error = true;
       }

        if(!(checkOkPostnr(form.postalcode.value))){
            if(form.postalcode.value.length > 5){
                errorMessage += "Postnummer skall innehålla max 5 siffror.\n";
                error = true;
            }else{
                errorMessage += "Postnummer är ogiltigt.\n";
                error = true;
            }
        }

       if(form.city.value == ''){
            errorMessage += "Ort är en obligatorisk uppgift.\n";
            error = true;
       }

       if(form.phone.value == ''){
            errorMessage += "Telefon är en obligatorisk uppgift.\n";
            error = true;
       }

       if(form.email.value == ''){
            errorMessage += "E-postadress är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(!echeck(form.email.value)){
                errorMessage += "E-postadressen tycks vara felaktigt angiven.\n";
                error = true;
            }
       }

       if(form.username.value == ''){
            errorMessage += "Användarnamn är en obligatorisk uppgift.\n";
            error = true;
       }

       if(form.password.value == ''){
            errorMessage += "Lösenord är en obligatorisk uppgift.\n";
            error = true;
       }

       if(form.password2.value == ''){
            errorMessage += "Lösenord är en obligatorisk uppgift.\n";
            error = true;
       }

       if(form.password2.value != form.password.value){
            errorMessage += "Lösenorden matchar inte varandra.\n";
            error = true;
       }
     //VALIDERA INMATNING FÖR CUSTOMER | START


    //VALIDERA INMATNING FÖR EN BESTÄLLNING | START
    }else if(todo == 'new_order'){
		if(form.colour.value == 'nn'){
            errorMessage += "Färg är en obligatorisk uppgift.\n";
            error = true;
       }

       if(form.amount.value == ''){
            errorMessage += "Antal är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(!IsNumeric(form.amount.value)){
                errorMessage += "Antal anges med siffror.\n";
                error = true;
            }else{
                if(form.amount.value.indexOf('0') == 0){
                    errorMessage += "Antal kan inte inledas med en nolla.\n";
                    error = true;
                }
            }
       }

       //INRE BREDD
      if(form.y_width.value == ''){
            errorMessage += "Bredd (Yttermått) är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(form.y_width.value.indexOf('0') == 0){
                errorMessage += "Bredd (Yttermått) kan inte inledas med en nolla.\n";
                error = true;
            }
       }

       //YTTRE HÖJD
       if(form.y_height.value == ''){
            errorMessage += "Höjd (Yttermått) är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(form.y_height.value.indexOf('0') == 0){
                errorMessage += "Höjd (Yttermått) kan inte inledas med en nolla.\n";
                error = true;
            }
       }

       //INRE BREDD
       if(form.i_width.value == ''){
            errorMessage += "Bredd (Innermått) är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(form.i_width.value.indexOf('0') == 0){
                errorMessage += "Bredd (Innermått) kan inte inledas med en nolla.\n";
                error = true;
            }
       }

       //INRE HÖJD
       if(form.i_height.value == ''){
            errorMessage += "Höjd (Innermått) är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(form.i_height.value.indexOf('0') == 0){
                errorMessage += "Höjd (Innermått) kan inte inledas med en nolla.\n";
                error = true;
            }
       }

        //KANT D
       if(form.edge_d.value == ''){
            errorMessage += "Mått för kant D är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(form.edge_d.value.indexOf('0') == 0){
                errorMessage += "Mått för kant D kan inte inledas med en nolla.\n";
                error = true;
            }
       }


        //KANT C
       if(form.edge_c.value == ''){
            errorMessage += "Mått för kant C är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(form.edge_c.value.indexOf('0') == 0){
                errorMessage += "Mått för kant C kan inte inledas med en nolla.\n";
                error = true;
            }
       }

       //KANT E
       if(form.edge_e.value == ''){
            errorMessage += "Mått för kant E är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(form.edge_e.value.indexOf('0') == 0){
                errorMessage += "Mått för kant E kan inte inledas med en nolla.\n";
                error = true;
            }
       }

       //KANT F
       if(form.edge_f.value == ''){
            errorMessage += "Mått för kant F är en obligatorisk uppgift.\n";
            error = true;
       }else{
            if(form.edge_f.value.indexOf('0') == 0){
                errorMessage += "Mått för kant F kan inte inledas med en nolla.\n";
                error = true;
            }
      }



       if(todo == 'new_order' && error == false){
            //Grunddata är okej, kontrollera verksamhetsregler
            // Yttermåtten måste vara större än innermåtten
			var i_width = parseInt(form.i_width.value);
			var y_width = parseInt(form.y_width.value);
            if(i_width >= y_width){
                errorMessage += "Den inre bredden kan inte vara större än den yttre.\n";
                error = true;
            }
            
			var i_height = parseInt(form.i_height.value);
			var y_height = parseInt(form.y_height.value);
            if(i_height >= y_height){
                errorMessage += "Den inre höjden kan inte vara större än den yttre.\n";
                error = true;
            }
            
            /**
            * Utrönar huruvida kanterna c,d,e och f förhåller sig till verksamhetsreglerna
            * Summan av kantmått C + kantmått D + bildmåttet A (inre bredden) får inte vara större än den yttre bredden.
            * Kantmått C och kantmått D måste vara lika.
            * Summan av kanmått E + kantmått F + bildmått B får inte vara större än den yttre höjden.
            **/
            var edge_c = parseInt(form.edge_c.value);
            var edge_d = parseInt(form.edge_d.value);
            var edge_e = parseInt(form.edge_e.value);
            var edge_f = parseInt(form.edge_f.value);

            var inner_width_measurement = parseInt(form.i_width.value);
            var outer_width_measurement = parseInt(form.y_width.value);
            var inner_height_measurement = parseInt(form.i_height.value);
            var outer_height_measurement = parseInt(form.y_height.value);

            if((edge_c + edge_d + inner_width_measurement) > outer_width_measurement){
                errorMessage += "Summan av kantmått C + kantmått D + bildmåttet A är större än den yttre bredden.\n";
                error = true;
            }

            if(edge_c != edge_d){
                errorMessage += "Kantmått C och kantmått D måste vara lika.\n";
                error = true;
            }

            if((edge_e + edge_f + inner_height_measurement) > outer_height_measurement){
                errorMessage += "Summan av kantmått E + kantmått F + bildmått B får inte vara större än den yttre höjden.\n";
                error = true;
            }
       }
      //VALIDERA INMATNING FÖR EN BESTÄLLNING | END
    }

      if(todo == "add_message"){
        if(form.message.value.length > 500){
            var len = form.message.value.length;
            errorMessage += "Max antal tecken är 500.\nDitt meddelande är på " +len +" tecken.\n";
            error = true;
        }
      }

    if(error){
        alert(errorMessage);
        return false;
    }else{
        return true;
    }
}
/***********************************************************************/


/************************************************************************
* Metod för att uröna om en sträng inbegriper enbart siffror eller ej.  *
* @param String sText                                                   *
* @return true/false                                                    *
************************************************************************/
function IsNumeric(sText){
    var ValidChars = "0123456789.";
    var IsNumber=true;
    var Char;

    for (i = 0; i < sText.length && IsNumber == true; i++) { 
        Char = sText.charAt(i);     
        if (ValidChars.indexOf(Char) == -1){
            IsNumber = false;
        }
    }
    return IsNumber;
}
/***********************************************************************/


/************************************************************************
* Metod för att avlägsna eventuella vita tecken i en sträng.            *
* @param String str                                                     *
* @return String tmp                                                    *
************************************************************************/
function removeWhiteSpaces(str){
    var tmp = "";
    for(var i=0; i<str.length; i++){
        if(str.charAt(i) != ' '){
            tmp += str.charAt(i);
        }
    }
    return tmp;
}


/************************************************************************
* Metod för att ta bort en enhet i "kundvagnen".                        *
* @return true/false                                                    *
************************************************************************/
function deleteItem(){
	if(confirm("Säker att du vill ta bort delordern från beställningen?")){
		return true;
	}else{
		return false;
	}
}
/***********************************************************************/

/************************************************************************
* Metod för att "trimma" en sträng från ws-tecken.                      *
* @return str                                                           *
************************************************************************/
function trim(str){
    return str.replace(/^\s*|\s*$/g,"");
}
/***********************************************************************/


/************************************************************************
* Metod för att beräkna det slutliga priset                             *
* @return str                                                           *
************************************************************************/
function calculatePrice(form, obj){
    var totalPrice = 0;
    if(obj.value == "postforskott"){
        //Lägg till 50 + 69 för frakt
        totalPrice = (parseFloat(form.pre_price.value) + 50 + 79);
    }else if(obj.value == "forskottsinbetalning"){
        //Lägg till 69 för frakt
        totalPrice = (parseFloat(form.pre_price.value) + 79);
    }else if(obj.value == "hamta_i_butik"){
        totalPrice = (parseFloat(form.pre_price.value));
    //Om företagskund och valt DPD
    }else if(obj.value == "dpd"){
        totalPrice = (parseFloat(form.pre_price.value) + 200);
    }

    var field = document.getElementById('price');
    field.innerHTML = totalPrice;
}
/***********************************************************************/


/************************************************************************
* Metod för att validera om en e-postadress är korrekt eller inte       *
* @return true/false                                                    *
************************************************************************/
function echeck(str) {
    var at="@"
    var dot="."
    var lat=str.indexOf(at)
    var lstr=str.length
    var ldot=str.indexOf(dot)
    
    if (str.indexOf(at)==-1){
        return false;
    }
    
    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
        return false;
    }
    
    if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
        return false;
    }
    
    if (str.indexOf(at,(lat+1))!=-1){
        return false;
    }
    
    if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
        return false;
    }
    
    if (str.indexOf(dot,(lat+2))==-1){
        return false;
    }
    
    if (str.indexOf(" ")!=-1){
        return false;
    }

    return true	
}
/***********************************************************************/


/************************************************************************
* Metod för att validera org/pnr                                        *
* @return true/false                                                    *
************************************************************************/
function pnrCheck(str) {
        var i;

        s = str;

    //strip hyphen, if exists....
    i = s.indexOf("-");
    if(i != -1){
        s = s.substring(0,i) + s.substring( i+1, s.length);
    }

    i= CalcLastDigit(s);

    if(i == -1){
        return false;
    }
    else {
        if(s == (s.substr(0,9) + i)){
            s = s.substr(0,9) + i;
            return true;
        }
        else{
            return false;
        }
    }
}
/***********************************************************************/


/************************************************************************
* Metod för att beräkn den sista (kontroll) siffran i org/pnr.          *
* @return true/false                                                    *
************************************************************************/
function CalcLastDigit(s) {
    var i,sum=0,x;
    if (s.length < 9){
        return -1; //too short
    }
    for (i=1; i<10; i++) {
        x = parseInt(s.substr(i-1,1));
        //Process every second digit
        if (i & 1) {
            x *=2;
            if (x > 9){
                x = x-9;
            }
        }
        sum += x;
    }

    s = sum.toString();
    i = s.charCodeAt(s.length-1);
    if(i==48){
        return "0"; //0=0
    }
    return String.fromCharCode(106-i); //10-last digit
}
/***********************************************************************/


function checkOkPostnr(postnr)
{
        var errorStr=new String("");
        var pnr = ltrim(rtrim(postnr));
/*
        if(pnr.length==6){
            pnr = pnr.substring(0,3) + pnr.substring(4,6);
        }
*/
        if (pnr.length!=5 || isNaN(pnr)){
            return false;
        }
        else{
            return true;
        }
}


/************************************************************************
* Metod för att "trimma" ws i början av en sträng.                      *
* @return true/false                                                    *
************************************************************************/
function ltrim(argvalue) {
  while (1) {
    if (argvalue.substring(0, 1) != " ")
      break;
    argvalue = argvalue.substring(1, argvalue.length);
  }
  return argvalue;
}
/***********************************************************************/


/************************************************************************
* Metod för att "trimma" ws i slutet av en sträng.                      *
* @return true/false                                                    *
************************************************************************/
function rtrim(argvalue) {
  while (1) {
    if (argvalue.substring(argvalue.length - 1, argvalue.length) != " ")
      break;
    argvalue = argvalue.substring(0, argvalue.length - 1);
  }
  return argvalue;
}
/***********************************************************************/
