var plus=new Image(); plus.src="graphics/plus.gif";
var minus=new Image(); minus.src="graphics/minus.gif";

function openGeneric(n,w,h){
 var sw=docProperties.screenAvailWidth();
 var sh=docProperties.screenAvailHeight();
 var t=(sh)?(((sh-h)/2)-20):20;
 var l=(sw)?((sw-w)/2):20;
 var c='toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no';
 c+=', width='+w+', height='+h+', top='+t+', left='+l;
 if(document.layers){
  c+=', screenX='+l+', screenY='+t;
 }
 window.open(n,'_blank',c);
}








function cleanValue(o){
 if(o.type=="text" || o.type=="textarea"){
  o.value=cleanString(o.value);
 }
}
function requiredValues(reqf){
 var d=df(0);
 var a,b;
 var c=true;
 var f=false;
 for(var j=0;j<reqf.length;j++){
  a=d.elements[reqf[j]];
  if(a.type=="text"){
   cleanValue(a);
   if(a.name.indexOf("email")>=0){
    a.value=a.value.toLowerCase();
   }else if(a.name.indexOf("postcode")>=0){
    a.value=a.value.toUpperCase();
   }
   b=a.value;
  }else if(a.type=="selectone"){
   b=ddv(a);
  }
  if(b==""){
   c=false;
   if(!f){
    a.focus();
    f=true;
   }
  }  
 }
 return c;
}

function checkRIForm(){
 var d=df(0);
 if(requiredValues(["fullname", "email"])){
  cleanValue(d.comment);
  cleanValue(d.telephone);
  var t=d.telephone;
  var e=d.email;
  if(t.value=="" || (t.value!="" && isTelNum(t,"Telephone"))){
   if(checkEmail(e.value,e)){
    return true;
   }else{
    return false;

   }
  }else{
   return false;
  }  
 }else{
  alert("\n\nPlease complete all required fields\nbefore submitting the form\n\n");
  return false; 
 }
}
function checkEmailForm(){
 var d=df(0);
 if(requiredValues(["fromname", "fromemail", "toname", "toemail"])){
  cleanValue(d.comment);
  var e1=d.fromemail;
  var e2=d.toemail;
  if(checkEmail(e1.value,e1) && checkEmail(e2.value,e2)){
   return true;
  }else{
   return false;
  }
 }else{
  alert("\n\nPlease complete all required fields\nbefore submitting the form\n\n");
  return false;
 }
}
function checkContactForm(){
 var d=df(0);
 if(requiredValues(["fullname", "email", "comment"])){
  cleanValue(d.telephone);
  var t=d.telephone;
  var e=d.email;
  if(t.value=="" || (t.value!="" && isTelNum(t,"Telephone"))){
   if(checkEmail(e.value,e)){
    return true;
   }else{
    return false;
   }
  }else{
   return false;
  }
 }else{
  alert("\n\nPlease complete all required fields\nbefore submitting the form\n\n");
  return false;
 }
}




//PARSING FUNCTIONS
function checkPassword(pw,o){
 if(pw){
  var l=6;
  p1=cleanString(pw.value);
  p2=isValid(p1);
  p3=p1.length;
  if(p1=="" || !p2 || p3<l){
   alert("\n\nPlease provide a valid "+o+"\n\nPlease make sure the password has\nat least "+l+" characters\n\n");
   pw.focus();
   return false;
  }else{
   return true;
  }
 }else{
  return false;
 }
}
function isTelNum(n,o){
 if(n){
  n.value=trim(n.value.replace(/[\(\)\.\-\ ]/g, ""));
  if(n.value.length>8){
   if(isNum(n.value)){
    return true;
   }else{
    alert("\n\nThe "+o+" number contains illegal characters\n\n");
    n.focus();
    return false;
   }
  }else{
   alert("\n\nThe "+o+" number is the wrong length\n\nPlease include an area code\n\n");
   n.focus();
   return false;
  }
 }else{
  return false;
 }
}
function isValid(s){
 var Chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 for(var i=0; i<s.length; i++){
  if(Chars.indexOf(s.charAt(i))==-1){

   return false;
  }
 }
 return true;
}


//UTILITY FUNCTIONS
function menuoverout(o,f,a){
 var c="#aaaaaa";
 switch(a){
  case "h":
   c="#386d3a";
   break;
  case "w":
   c="#b50050";
   break;
  case "r":
   c="#5a3287";
   break;
 }
 getStyle(o.id).backgroundColor=(f)?c:"#444444";
}
function handleerror(){
 return true;
}
function overout(o,f){
 if(o){
  o.src=eval(o.id+((f)?"over":"out")).src;
 }
}
function zeroArray(s){
 this.arr=new Array();
 for(var i=0;i<=s;i++)this.arr.push(0);
}
function trim(o){
 return o.replace(/^\s*(.*)/, "$1").replace(/(.*?)\s*$/, "$1");
}
function cleanString(o){
 return trim(o).replace(/[\$\^\{\[\(\|\)\]\}\*\\\+]/g, "").replace(/[_<>~\"]/g, "");
}
function isNum(s){
 var numRegExp=/[\D]/;
 return !numRegExp.test(s);
}
function isNum2(s){
 var Chars="0123456789";
 for(var i=0; i<s.length; i++){
  if(Chars.indexOf(s.charAt(i))==-1){
   return false;
  }
 }
 return true;
}
function ddv(o){
 return (o)?o.options[o.selectedIndex].value:false;
}
function ddt(o){
 return (o)?o.options[o.selectedIndex].text:false;
}
function df(o){
 return document.forms[o];
}





//ROLLOVER FUNCTIONS
function initTT(){
 if(document.layers){
  document.captureEvents(Event.MOUSEMOVE);
 }
 document.onmousemove=moveToMouseLoc;
}
function moveToMouseLoc(e){
 var r=getObject("rollover");
 var padding=20;
 if(r){
  rx=parseInt(r.width,10);
  ry=parseInt(r.height,10);
 }

 var ttl=getStyle('toolTipLayer');
 var coords=getEvents.mmove(e);
 var x=coords[0];
 var y=coords[1];
 var xOffset=($('offsetX'))?parseInt($('offsetX').value,10):0;
 var yOffset=($('offsetY'))?parseInt($('offsetY').value,10):0;
 if(ttl){
  ttl.left=(x+xOffset)+"px";
  ttl.top=(y+yOffset)+"px";
 }
 return true;
}
function toolTipDef(h,b,f){
 var ttl=getStyle('toolTipLayer');
 if(ttl){
  if(f){
   getObject('TThead').innerHTML=h;
   getObject('TTbody').innerHTML=b;
   ttl.display="block";
  }else{
   getObject('TThead').innerHTML="&nbsp;";
   getObject('TTbody').innerHTML="&nbsp;";
   ttl.display="none";
  }
 }
}





//VERIFY EMAILS
function checkEmail(e,f){
 var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|mobi)$/;
 var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
 var validChars="\[^\\s"+specialChars+"\]";
 var atom=validChars+"+";
 var quotedUser="(\"[^\"]*\")";
 var word="("+atom+"|"+quotedUser+")";
 var prefix="\n\nThe E-Mail Address is formatted incorrectly.\n\n";

 var matchArray=e.match(/^(.+)@(.+)$/);
 if(matchArray==null){
  alert(prefix+"Please check the @ and . (dot) characters\n\n");
  if(f)f.focus();
  return false;
 }

 var user=matchArray[1];
 for(i=0;i<user.length;i++){
  if(user.charCodeAt(i)>127){
   alert(prefix+"It contains invalid characters.\n\n");
   if(f)f.focus();
   return false;
  }
 }
 var domain=matchArray[2];
 for(i=0;i<domain.length;i++){
  if(domain.charCodeAt(i)>127){
   alert(prefix+"It contains invalid characters.\n\n");
   if(f)f.focus();
   return false;
  }
 }

 var userPat=new RegExp("^"+word+"(\\."+word+")*$");
 if(user.match(userPat)==null){
  alert(prefix);
  if(f)f.focus();
  return false;
 }

 var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
 var IPArray=domain.match(ipDomainPat);
 if(IPArray!=null){
  for(i=1;i<5;i++){
   if(IPArray[i]>255){
    alert(prefix+"The destination IP address is invalid.\n\n");
    if(f)f.focus();
    return false;
   }
  }
 }

 var atomPat=new RegExp("^"+atom+"$");
 var domArr=domain.split(".");
 var len=domArr.length;

 if(len<2){
  alert(prefix+"It is missing a hostname.\n\n");
  if(f)f.focus();
  return false;
 }
 for(i=0;i<len;i++){
  if(domArr[i].search(atomPat)==-1){
   alert(prefix+"The domain name is not valid.\n\n");
   if(f)f.focus();
   return false;
  }
 }
 if(domArr[len-1].length!=2 && domArr[len-1].search(knownDomsPat)==-1){
  alert(prefix+"It must end in a well-known domain\nor a two letter country abbreviation.\n\n");
  if(f)f.focus();
  return false;
 }
 return true;
}

