// ################## GUI #############################

function verificationFailedAlert(msgErrors) {
    var msg;
    msg  = "______________________________________________________\n\n"
    msg += "Unable to submit the form for the following reason(s).\n";
    msg += "Please correct these issue(s) and re-submit.\n";
    msg += "______________________________________________________\n"
    msg += msgErrors + "\n";
    //alert(msg);
    newAlert("Form Verification", msg, 3, 0)
}

function getOptionValue(obj) {
  return obj.options[obj.selectedIndex].value;
}

// ################## NON-GUI #############################

function parseDate_hhmm ( dateStr ) {

  var dateArray = dateStr.split(":");
  var day     = 0;
  var month   = 0;
  var year    = 0;
  var hours   = dateArray[0];
  var minutes = dateArray[1];
  var seconds = 0;
  var milliseconds = 0;

  // Create a new date object

  var dateObj = new Date();
  dateObj.setFullYear(year);
  dateObj.setMonth(month);
  dateObj.setDate(day);
  dateObj.setHours(hours);
  dateObj.setMinutes(minutes);
  dateObj.setSeconds(seconds);
  dateObj.setMilliseconds(milliseconds);

  return dateObj;
}

function parseDate_ddmmyyyy( dateStr ) {

  var dateArray = dateStr.split("/");
  var day = dateArray[0];
  var month = dateArray[1] - 1;
  var year = dateArray[2];
  var hours = 0;
  var minutes = 0;
  var seconds = 0;
  var milliseconds = 0;

  // Create a new date object

  var dateObj = new Date();
  dateObj.setDate(day); 
  dateObj.setMonth(month);
  dateObj.setFullYear(year);
  dateObj.setHours(hours);
  dateObj.setMinutes(minutes);
  dateObj.setSeconds(seconds);
  dateObj.setMilliseconds(milliseconds);

  return dateObj;
}

function formatDate_ddmmyyyy( d, sep ) {
  if (sep==null) sep = "/";
   var s;
   s = d.getDate() + sep;
   s += lpad("" + (d.getMonth() + 1), 2, "0") + sep;
   s += d.getFullYear();
   return(s);
}

function formatDate_2ddmmyyyy( d, sep ) {
  if (sep==null) sep = "/";
   var s;
   s = lpad("" + d.getDate(), 2, "0") + sep;
   s += lpad("" + (d.getMonth() + 1), 2, "0") + sep;
   s += d.getFullYear();
   return(s);
}

function format2DP(flt) {
  var temp;
  temp = "" + flt;
  if (flt.toFixed)
    temp = flt.toFixed(2);
  else {
    if(temp.indexOf(".") == -1) {
        temp = temp + ".00";
    }
    if(temp.indexOf(".") == 0) {
        temp = "0" + temp;
    }
    if(temp.length - temp.indexOf(".") == 2) {
        temp = temp + "0";
    }
    if(temp.length - temp.indexOf(".") == 1) {
        temp = temp + "00";
    }
  }
  return temp;
}

function formatCurrency(flt) {
  var str_dec_sep  = ",";
  var str_thou_sep = ".";
  var temp;
  temp = format2DP(flt);
  var aa = temp.split(".");
  if ( aa.length != 2 )
    return temp;

  var tempUnits    = aa[0];
  var tempFraction = aa[1];
  var tempFinal = str_dec_sep + tempFraction;

  var x;
  var y;
  var str_sep;
  for (x = tempUnits.length; x > 0 ; x=x-3) {
    y = x-3; if ( y<0 ) y = 0;
    if ( x == tempUnits.length ) str_sep = "";
    else                         str_sep = str_thou_sep;
    tempFinal = tempUnits.substring(y, x) + str_sep + tempFinal;
  }
  return tempFinal;
}


function str_remspc(s)
{
  var re = /\s/gi
  s = s.replace(re, "")

  return s
}

function formatPhoneNo( s, str_c_code )
{
  var str_plus_c_code = "+" + str_remspc(str_c_code)
  
  s = str_remspc(s);

  if (s.length == 0) return "";

  var sout = 'invalid';

  var regcel = "^(\\" + str_plus_c_code + ")?\\d+$";
  var re = new RegExp(regcel) ;

  if (!re.test(s)) return sout;

  if (s.length >= 3 && s.substr(0,3) == str_plus_c_code )
  {
    if (s.length >= 5 && s.charAt(3) == '0') sout = str_plus_c_code + s.slice(4);
    else if (s.length >= 4)                  sout = str_plus_c_code + s.slice(3);
  }
  else
  {
    if (s.length >= 2 && s.substr(0,2) == str_c_code)
    {
      if (s.length >= 4 && s.charAt(2) == '0') sout = str_plus_c_code + s.slice(3);
      else if (s.length >= 3)                  sout = str_plus_c_code + s.slice(2);
    }
    else
    {
      if (s.length >= 2 && s.charAt(0) == '0') sout = str_plus_c_code + s.slice(1);
      else if (s.length >= 1)                  sout = str_plus_c_code + s.slice(0);
    }
  }
  return sout;
}


function str_remspc(s)
{
  var re = /\s/gi
  s = s.replace(re, "")

  return s
}

function isblank1(s) {
    return (s.value == null) || (s.value == "") || isblank(s.value);
}
function isblank(s)
{
    for(var i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
    }
    return true;
}

function isValidAlias(str) {
  // +490001234567
  // +49000XXXXXXX
  //var reg1str = "^\\+49000\\d{7}";
  var reg1str = "^\\+49\\d{10}";
  var reg1 = new RegExp(reg1str);
  if ( reg1.test(str) )
    return true;
  return false;
}


function isValidEMail(strEmail) {
  if (window.RegExp) {
    var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
    var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
    var reg1 = new RegExp(reg1str);
    var reg2 = new RegExp(reg2str);
    if (!reg1.test(strEmail) && reg2.test(strEmail)) {
      return true;
    }
    return false;
  } else {
    if(str.indexOf("@") >= 0)
      return true;
    return false;
  }
}

function isValidPhoneNo(TheNumber, str_c_code) {
  var blnValid = true
  var GoodChars = "0123456789()-+ "
  var i = 0
  if (TheNumber=="") {
    // Return false if number is empty
    blnValid = false;
    }
  for (i =0; i <= TheNumber.length -1; i++) {
    if (GoodChars.indexOf(TheNumber.charAt(i)) == -1) {
    // Note: Remove the comments from the following line to see this
    // for loop in action.
    // alert(TheNumber.charAt(i) + " is no good.")
    blnValid = false
    } // End if statement
  } // End for loop

  var strReformated = formatPhoneNo(TheNumber, str_c_code);
  if (strReformated.length == 0 
      || strReformated == 'invalid' 
      || strReformated.length != 13 ) 
    blnValid = false;

  return blnValid;
}


function isLeapYear(year) { 
   year = parseInt(year, 10); 
   return ((year % 4) == 0) ? (((year % 100) == 0) ? (((year % 400) == 0) ? true : false) : true) : false; 
} 

function daysInMonth(month, year) { 
   var days; 

   switch (month) { 
      case '01': 
      case '03': 
      case '05': 
      case '07': 
      case '08': 
      case '10': 
      case '12': 
         days = '31'; 
         break; 
      case '04': 
      case '06': 
      case '09': 
      case '11': 
         days = '30'; 
         break; 
      case '02': 
         days = isLeapYear(year) ? '29' : '28'; 
         break; 
   } 
   return days; 
} 

function isValidDate(aDate) { 
   var day, month, year; 

   // Check date's size. 
   if (aDate.length != 10) 
      return 'Invalid date length. Use dd/mm/yyyy.'; 

   // Check the separators. 
   if ((aDate.charAt(2) != '/') || (aDate.charAt(5) != '/')) 
      return 'Invalid separator. Use dd/mm/yyyy.'; 

   day =   aDate.split('/')[0]; 
   month = aDate.split('/')[1]; 
   year =  aDate.split('/')[2]; 

   if ( !(  isValidNumber(day) && isValidNumber(month) && isValidNumber(year)  ) ) 
      return 'Invalid date.'; 

   if ((day < '01') || (day > '31')) 
      return 'Invalid day.'; 

   if ((month < '01') || (month > '12')) 
      return 'Invalid month.'; 

   if ((year < '1900') || (year > '2100')) 
      return 'Invalid year.'; 

   if (day > daysInMonth(month, year)) 
      return 'Invalid day.'; 

   return ''; // valid date
} 

function isValidNumber(num) { 
   if (num.length == 0) return false; 

   for (var i = 0; i < num.length; i++) { 
      if ((num.charAt(i) < '0') || (num.charAt(i) > '9')) 
         return false; 
   } 
   return true; 
} 

