// Version: 1.2
//======================================================================================
// Copyright Surfocracy Ltd, 2004
// File   : javascript-common.js
// Description: Common JavaScript routines for most basic functions
//--------------------------------------------------------------------------------------
// This function Pops up a window with the given parameters.
// Example: onClick="PopUpWindow('POPUP-file.htm','name',WinHeight=400,WinWidth=600,WinLeft=100,WinTop=100,WinResizable='yes',WinScrollbars='yes',WinToolbar='no',WinMenubar='no',WinStatus='no'); return false;"
//--------------------------------------------------------------------------------------
function PopUpWindow(url,name,WinHeight,WinWidth,WinLeft,WinTop,WinResizable,WinScrollbars,WinToolbar,WinMenubar,WinStatus) {
  var newwindow;
  var settings= "height="+WinHeight+",width="+WinWidth+",left="+WinLeft+",top="+WinTop+",resizable="+WinResizable+",scrollbars="+WinScrollbars+",toolbar="+WinToolbar+",menubar="+WinMenubar+",status="+WinStatus;
               //  ",location=yes,directories=yes";
  newwindow=window.open(url,'name',settings);
  if (window.focus) {newwindow.focus()}
}
//--------------------------------------------------------------------------------------
// This function Validates the Account login form fields.
// pwchars = the minimum password characters
//--------------------------------------------------------------------------------------
function ValidateAccountLoginForm(myForm, pwchars) {
  var errorString="";
  if ((myForm.Email.value=="") || (myForm.RegistrationPassword.value=="")) {
    errorString = errorString + ErrMustSupplyCompulsoryFields;
  }
  if (myForm.RegistrationPassword.value.length < pwchars) {
         myForm.RegistrationPassword.focus();
          errorString = errorString + "\n   " + "Need to provide a password with at least " + pwchars + " characters"
  }
  if (errorString!="") {
    alert(errorString);
    return false;
  } else {
    return true;
  }
}

// This function checks to see that a something is added in the search box.
function CheckSearchBox (MyForm) {
  if (MyForm.SearchFor.value=="") {
	  alert(ErrEnterSearchItem);
      MyForm.SearchFor.focus();
      return (false);
  }
  return (true);
}	
// This function checks if a string is a number. No form parameter exists.
function IsNumberString (MyField, val, DisplayErrorText) {
   //No Form parameter
   var RefString="1234567890.()-+ ";	
   for (Count=0; Count < val.length; Count++) {
       TempChar= val.substring (Count, Count+1);
       if (RefString.indexOf (TempChar, 0)==-1) {
	      if (DisplayErrorText) alert(ErrEnterValidNumber);
          return (false);
	   }
   }
   return (true);
}  
// This function validates a string to check if it is in an email format.
function emailCheck (myForm, val, DisplayErrorText) {
var emailStr=val;
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=emailStr.match(emailPat)

   if (emailStr!="") {
      if (matchArray==null) {
	        if (DisplayErrorText) alert(ErrIncorrectEmailAddress)
	        return false
      }
      var user=matchArray[1]
      var domain=matchArray[2]
      if (user.match(userPat)==null) {
         if (DisplayErrorText) alert(ErrIncorrectEmailUsername)
         return false
      }
	  var IPArray=domain.match(ipDomainPat)
      if (IPArray!=null) {
	     for (var i=1;i<=4;i++) {
	        if (IPArray[i]>255) {
	           if (DisplayErrorText) alert(ErrIncorrectEmailIP)
		       return false
            }
         }
         return true
      }
      var domainArray=domain.match(domainPat)
      if (domainArray==null) {
         if (DisplayErrorText) alert(ErrIncorrectEmailDomain)
         return false
      }
      var atomPat=new RegExp(atom,"g")
      var domArr=domain.match(atomPat)
      var len=domArr.length
      if (domArr[domArr.length-1].length<2 || 
          domArr[domArr.length-1].length>4) {
          if (DisplayErrorText) alert(ErrIncorrectEmailExt)
          return false
      }
      if (len<2) {
         if (DisplayErrorText) alert(ErrMissingEmailHost)
         return false
      }
   }
   return true;
}

function isDate3(dateStr) {
    var errorString="";
    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?

    if (matchArray == null) {
	    errorString = "Please enter date as either dd/mm/yyyy or dd-mm-yyyy.";
        return errorString;
    }

    day = matchArray[1]; // parse date into variables
    month = matchArray[3];
    year = matchArray[5];

    if (month < 1 || month > 12) { // check month range
        errorString = "Month must be between 1 and 12.";
    }

    if (day < 1 || day > 31) {
        errorString = "Day must be between 1 and 31.";
    }

    if ((month==4 || month==6 || month==9 || month==11) && day==31) {
        errorString = "Month "+month+" doesn't have 31 days!";
    }

    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap)) {
            errorString = "February " + year + " doesn't have " + day + " days!";
        }
    }
    return errorString; // date is valid
}

