// price information
licensePrice = [
   [5000, 1200, 1200, 1200, 1000],
   [2500, 1500, 1500, 0, 0],
   [4000, 1200, 1200, 1200, 1000],
   [200,  100,  100,  100,  80]
   ];
servicePrice = [ 1500, 1500, 1500, 100 ];
discount=0.25;

function calcuatePrice( licenseP, serviceP, cLicense, cService ) {
   var value = 0;
   var nPSpec = licenseP.length;
   var ivalue;
   if( cLicense <= nPSpec ) {
      for( ivalue in licenseP ) {
         if( ivalue < cLicense ) {
            if( licenseP[ ivalue ] == 0 )
            {
               return -1;
            }
            else
               value += licenseP[ ivalue ];
         }else{
            break;
         }
      }
   }else{
      if( licenseP[ nPSpec - 1 ] == 0 )
      {
         return -1;
      }
      for( ivalue in licenseP )
         value += licenseP[ ivalue ];
      value += ( cLicense - nPSpec ) * licenseP[ nPSpec - 1 ];
   }
   return (1.0-discount) * value + cService * serviceP;
}

function SetDivVisiblility(szDivID, iState) // 1 visible, 0 hidden
{
   var obj = document.getElementById ?  document.getElementById(szDivID) : document.all[szDivID]
   var styleobj = obj.style;
   styleobj.display = iState ? "block" : "none";
}

function showerror(  helpmesg ){
   var x=document.getElementsByTagName("label")[0].innerHTML = helpmesg ;
}

function highlight( element, fHighLight ) {
   if( fHighLight ) {
      element.style.backgroundColor='yellow';
      element.focus();
   }else{
      element.style.backgroundColor='';
   }
}

function emailValidator(elem, helperMsg){
   var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
   var errmsg = "";
   var fine=false;
   if(elem.value.match(emailExp)){
      fine=true;
   }else{
      fine=false;
      errmsg=helperMsg;
   }
   highlight( elem, !fine);
   showerror( errmsg );
   return fine;
}


function estimatevalue() {
   var tLicense = parseInt( document.orderform.licensetype.value );
   var cLicense = parseInt( document.orderform.licensecount.value );
   var cService = parseInt( document.orderform.extservice.value );
   if( tLicense == 0 || isNaN( cLicense ) )
      return -1;
   if( isNaN( cService ) )
      cService = 0;
   value = calcuatePrice( licensePrice[ tLicense -1 ], servicePrice[ tLicense - 1], cLicense, cService );
   if ( value > 0 )
      document.orderform.estvalue.value =  value;
   else
      document.orderform.estvalue.value='';
   return value;
}

function testRequired( elem, message ) {
   var fine = false;
   var errmsg = "";
   if(elem.value != ''){
      fine = true;
   }else{
      errmsg = message;
   }
   highlight( elem, !fine);
   showerror( errmsg );
   return fine;
}

function testSelection( elem, message ) {
   var fine=false;
   var errmsg = "";
    if(elem.value==0){
       errmsg = message;
       fine=false;
    }else{
       fine=true;
       errmsg="";
    }
    highlight( elem, !fine);
    showerror( errmsg );
    return fine;
}

function testPosNumber( elem, message ) {
   var fine=false;
   var errmsg = ""
    if( elem.value != '' && !isNaN( parseInt( elem.value ) ) && parseInt( elem.value )> 0 ) {
       fine=true;
    }else{
       errmsg = message;
    }
    highlight( elem, !fine);
    showerror( errmsg );
    return fine;
}

function fixserviceinteger() {
   // make sure it is integer
   var cService = parseInt( document.orderform.extservice.value );
   if( isNaN( cService ) || cService < 1 ) cService = 0;
   document.orderform.extservice.value = cService;
}

function validateandestimate(){
   if( testlicensetype() && testlicensenumber() )
   {
      fixserviceinteger();
      estimatevalue();
   }
}

function testuseremail() {
   return emailValidator( document.orderform.uemail, "Please provide valide email address" );
}
function testusername(){
   return testRequired( document.orderform.uname, "Please tell us how should we address you");
}
function testholdername(){
   return testRequired( document.orderform.hname, "Please tell us the name of license holder, this can be a person or an organization.");
}

function testorgname(){
   return testRequired( document.orderform.oname, "Please tell us the name of your organization.");
}


function testlicensetype(){
   return testSelection( document.orderform.licensetype, "Please select the desired license type" );
}
function testlicensenumber(){
   return testRequired( document.orderform.licensecount, "Please tell us how many license do you want" )
          && testPosNumber( document.orderform.licensecount, "Please tell us how many license do you want" );
}

function validateform(){
   if( testusername() && testuseremail() && testlicensetype() && testlicensenumber() ) {
      if( estimatevalue() > 0 ) {
         return true;
      }else{
         showerror( "Please check your license type and number of license are valide" );
      }
   }
   return false;
}

function testandevaluate(){
   var fine = true;
   var errmsg = "";
   if( testlicensenumber() && testlicensetype() )
   {
      if( estimatevalue() < 0 ){
         errmsg = "Number of license is not valid";
         fine = false;
      }
      highlight( document.orderform.licensecount, !fine );
      showerror( errmsg );
   } // testRequired will show error message if failed
}


