function IsValidDate(s)
{
   var DateRegexp= /^\d{2}-\d{2}-\d{4}$/;
   return DateRegexp.test(s);
}

function IsNumber(s)
{
   var NumberRegexp= /^\d+$/;
   return NumberRegexp.test(s);
}

function IsValidPhoneNumber(s)
{
   var PhoneRegexp= /^\+?\d*-?\d+$/;
   return PhoneRegexp.test(s);
}

function IsValidEmail(s)
{
   var EmailRegexp= /^[^@]+@[^@.]+\.[^@]*\w\w$/;
   return EmailRegexp.test(s);
}

function IsValidWebsite(s)
{
   return (s.length!= 0);
}

function CheckValidPostcode(Ref)
{
   if (Ref.s.length== 0) { Ref.ok= false; return; }
   var PostcodeRegexp= /^(\d{4}) ?([a-zA-Z]{2})$/;
   var m= PostcodeRegexp.exec(Ref.s);
   if (m!= null) { Ref.ok= true; Ref.s= m[1]+ " "+ m[2].toUpperCase(); return; }
   var ZipcodeRegexp= /^[a-zA-Z]{1,2}-/;
   Ref.ok= ZipcodeRegexp.test(Ref.s);
}

//--- MarkField used by ValidateXXX functions to mark or unmark form element i -------------------

function MarkField(i, ok)
{
   i.style.backgroundColor= (ok)?"#CFC":"#F33";
}

//--- ValidateXXX functions used as kompsosValidate method for form elements -------------------

function TrimString(s) {
   s= s.replace(/^\s+/,'');
   s= s.replace(/\s+$/,'');
   return s;
}

function Capitalize(s) {
   var t= '';
   var es= s.split(' ');
   var e;
   for(var i= 0; i< es.length; i++) {
      e= es[i];
      if (i!= 0) { t+= ' '; }
      t+= e.substring(0, 1).toUpperCase()+ e.substring(1, e.length).toLowerCase();
   }
   return t;
}

function ValidateOther() {
   return this.kompsosValidateTag.kompsosValidate();
}

function ValidateToLower() {
   var s= this.value;
   s= TrimString(s);
   s= s.toLowerCase();
   this.value= s;
   MarkField(this, true);
   return true;
}

function ValidateToUpperNotEmpty() {
   var s= this.value;
   s= TrimString(s);
   s= s.toUpperCase();
   this.value= s;
   var ok= (s.length!= 0);
   MarkField(this, ok);
   return ok;
}

function ValidateCapitalize() {
   var s= this.value;
   s= TrimString(s);
   s= Capitalize(s);
   this.value= s;
   MarkField(this, true);
   return true;
}

function ValidateNotEmpty() {
   var s= this.value;
   s= TrimString(s);
   this.value= s;
   var ok= (s.length!= 0);
   MarkField(this, ok);
   return ok;
}

function ValidateAccountNumber() {
   var s= this.value;
   s= TrimString(s);
   this.value= s;
   var ok= (s.length== 0) || IsNumber(s);
   MarkField(this, ok);
   return ok;
}

function ValidateDate() {
   var s= this.value;
   var ok= IsValidDate(s);
   MarkField(this, ok);
   return ok;
}

function ValidateDateOrEmpty() {
   var s= this.value;
   s= TrimString(s);
   this.value= s;
   var ok= (s.length== 0) || IsValidDate(s);
   MarkField(this, ok);
   return ok;
}

function ValidateNumberOrEmpty() {
   var s= this.value;
   s= TrimString(s);
   this.value= s;
   var ok= (s.length== 0) || IsNumber(s);
   MarkField(this, ok);
   return ok;
}

function ValidatePostcodeOrEmpty() {
   var s= this.value;
   s= TrimString(s);
   var ok= (s.length== 0);
   if (!ok) { var Ref= new Object(); Ref.s= s; Ref.ok= ok; CheckValidPostcode(Ref); s= Ref.s; ok= Ref.ok; }
   this.value= s;
   MarkField(this, true);
   return true;
}

function ValidatePostcode() {
   var s= this.value;
   s= TrimString(s);
   var ok= false;
   var Ref= new Object(); Ref.s= s; Ref.ok= ok; CheckValidPostcode(Ref); s= Ref.s; ok= Ref.ok;
   this.value= s;
   MarkField(this, ok);
   return ok;
}

function ValidateCityOrEmpty() {
   var s= this.value;
   s= TrimString(s);
   s= s.toUpperCase();
   this.value= s;
   MarkField(this, true);
   return true;
}

function ValidateCity() {
   var s= this.value;
   s= TrimString(s);
   s= s.toUpperCase();
   this.value= s;
   var ok= (s.length!= 0);
   MarkField(this, ok);
   return ok;
}

function kompsosBlur() {
   if (this.kompsosValidate) { this.kompsosValidate() }
}

function HidePopup(MenuName) {
   var m= document.getElementById(MenuName); if (!m) { return; }

   if (m.style.display== "block") { m.style.display= "none"; }
}

function ShowPopup(MenuName, evt) {
   var m= document.getElementById(MenuName); if (!m) { return; }

   m.style.left= (evt.clientX+  1)+ "px";
   m.style.top=  (evt.clientY- 10)+ "px";
   m.style.display= "block";
}

function Popup(MenuName, evt) {
   HidePopup(MenuName);
   ShowPopup(MenuName, evt);
}

function stall() { return false; }

function GetIndividuals(s1, m1, f1, s2, m2, f2, extra)
{
   xmlHttp=GetXmlHttpObject();
   if (xmlHttp== null)
   {
      alert ("Browser does not support HTTP Request");
      return;
   }

   url= "getuser2.php";
   url= url+ "?f1="+ f1;
   url= url+ "&f2="+ f2;
   url= url+ "&s1="+ s1;
   url= url+ "&s2="+ s2;
   url= url+ "&m1="+ m1;
   url= url+ "&m2="+ m2;
   if (extra) url= url+ "&" + extra;
   url= url+ "&sid="+ Math.random();

   xmlHttp.onreadystatechange= stateChanged;
   xmlHttp.open("GET", url, true);
   xmlHttp.send(null);
}

function GetModifier(Name)
{
   f= document.getElementById(Name);
   typ= f.options[f.selectedIndex].value;
   return typ;
}

function stateChanged()
{
   if (xmlHttp.readyState== 4 || xmlHttp.readyState== "complete")
   {
      document.getElementById("GetUserResult").innerHTML= xmlHttp.responseText;
   }
}

function GetXmlHttpObject()
{
var objXMLHttp=null

   if (window.XMLHttpRequest)
   {
      objXMLHttp=new XMLHttpRequest();
   }
   else if (window.ActiveXObject)
   {
      objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   return objXMLHttp;
}

function AjaxCallback() {
   if (xmlHttp.readyState== 4 || xmlHttp.readyState== "complete") {
      var p= eval(xmlHttp.responseText);
      return p;
   }
   return null;
}

function AjaxCall(url, post, callback) {
   xmlHttp= GetXmlHttpObject();
   if (xmlHttp== null) { alert ("Browser does not support HTTP Request"); return; }

   url= url+ "?randomize="+ Math.random();
   var ps= eval(post);
   for (var p in ps) { url= url+ "&"+ p+ "="+ escape(ps[p]); }

   xmlHttp.onreadystatechange= callback;
   xmlHttp.open("GET", url, true);
   xmlHttp.send(null);
}

function PutOnTop() {
    self.focus();
}

function Close() {
   if (window.hasChanged) {
      self.opener.url= self.opener.URL;
      // This is a bit too agressive. Actually, we want to refresh the opener XHTTP data only
   }
   self.close();
}

function openWindow(url, name) {
   var popup=window.open(url, 'Kompsos', 'scrollbars=yes,width=640,height=480,resizable=1');
}

function GetIndividual(id)
{
   url= "showindividual.php";
   url= url+ "?id="+ id;
   url= url+ "&sid="+ Math.random();
   openWindow(url, 'individual'+id);
}

function GetEntity(id)
{
   url= "showentity.php";
   url= url+ "?id="+ id;
   url= url+ "&sid="+ Math.random();
   openWindow(url, 'entity'+id);
}

function AddIndividual(cid)
{
   url= "addindividual.php";
   url= url+ "?cid="+ cid;
   url= url+ "&sid="+ Math.random();
   openWindow(url, 'individual'+cid);
}

function SetRights(typ,pid,uid,cid,aid,acid,astart,aend) {
   hasChanged=true;
   url= "showindividual2.php";
   url= url+ "?typ="+ typ;
   url= url+ "&pid="+ pid;
   url= url+ "&uid="+ uid;
   url= url+ "&aid="+ aid;
   url= url+ "&acid="+ acid;
   url= url+ "&start="+ astart;
   url= url+ "&end="+ aend;
   url= url+ "&sid="+ Math.random();
   openWindow(url, 'setrights'+pid);
}
