var a1=new Image(); a1.src="graphics/bullet002.gif";
var a2=new Image(); a2.src="graphics/bullet002_back.gif";
var a3=new Image(); a3.src="graphics/bullet005.gif";
var plus=new Image(); plus.src="graphics/plus.gif";
var minus=new Image(); minus.src="graphics/minus.gif";

function handleerror(){
 //return true;
}

/* GOOGLE FUNCTIONS */
function calculateTimeout(currElement, nextElement, opts, isForward){ 
 var index=opts.currSlide; 
 return (index%2)?1000:false; 
}


//-----------------SEARCH
var searchstring="Search Site...";
function setsearch(){
 var s=getObject("query").value.trim();
 if(s==searchstring){
  getObject("query").value="";
 }
}
function resetsearch(){
 var s=getObject("query").value.trim();
 if(s==""){
  getObject("query").value=searchstring;
 }
}
function checkSearch(){
 var s=getObject("query").value.trim();
 var d=df("searchform");
 if(s!=""){
  replaceAndClean(["query"],4);
  return true;
 }else{
  return false;
 }
}
function toggleSearch(a){
 var thisMenu=getStyle("searchDiv_"+a);
 if(thisMenu){
  hideshowObject("searchDiv_"+a,((thisMenu.display=='none')?1:0));
  getObject("searchimg_"+a).src=(thisMenu.display=='none')?plus.src:minus.src;
 }
}
function hideshowObject(o,f){
 var el=getStyle(o);
 if(el && el!="undefined"){
  el.display=(f)?'block':'none';
 }
}





//------------------IMAGE UPLOAD
function checkSubmitImages(fobj,ext){
 if(requiredValues(["photo_from", "photo_email", "photo_title"],"form1")){
  var e=getObject("photo_email");
  if(checkEmail(e.value,e)){
   replaceAndClean(["photo_desc"],20);
   replaceAndClean(["photo_title","photo_from"],14);
   return uploadCheck(fobj,ext,true);
  }else{
   return false;
  }
 }else{
  return false;
 }
}




//---------------TIDES
function getXMLnptides(v){
 var m=parseInt(ddv("m"),10);
 m+=v;
 if(!(m<1 || m>12)){
  setSelect("m",m);
  getXMLtides();
 }
}
function getXMLtides(){
 var Vars={a:ddv("a"), m:ddv("m")};
 //for(x in Vars)alert(x+", "+eval("Vars."+x));
 ajaxCaller.postForXML("getXMLtides.asp",Vars,onXMLtides);
}
function onXMLtides(xml, headers, callingContext){
 try{
  tides=xml.getElementsByTagName("tides")[0].firstChild;
 }catch(e){
  return false;
 }
 if(tides.nodeName=="rows"){
  var rows=nValue(xml,"rows");
  var node=xml.getElementsByTagName("tides")[0];
  var tidemax=[5,5,8];
  var dy=new Date();
  var dstr=ddt("m")+" "+dy.getFullYear();

  //DATE-HEIGHT PAIRS
  var data=new google.visualization.DataTable();
  data.addColumn('string', 'Day and Time');
  data.addColumn('number', dstr);
  data.addRows(parseInt(rows,10));

  var c=0;
  for(var m=1; m<node.childNodes.length; m+=2){
   var d=node.childNodes[m].firstChild.nodeValue;
   var h=node.childNodes[m+1].firstChild.nodeValue;
   data.setValue(c, 0, ((c%4==0)?d:""));
   data.setValue((c++), 1, ((parseFloat(h)<0)?0:parseFloat(h)));
  }
  var chart=new google.visualization.ImageLineChart(document.getElementById('chart_div'));
  chart.draw(data, {width:630, height:400, min:0, max:tidemax[parseInt(ddv("a"),10)], valueLabelsInterval:0.5, legend:'bottom'});
  getObject("tideheader").innerHTML=dstr+" Tidal Trends for "+ddt("a");
 }
}




//---------------HISTORICAL WEATHER
function getXMLhistweather(){
 var y=parseInt(ddv("y"),10);
 var m=parseInt(ddv("m"),10);
 var s=parseInt(ddv("s"),10);

 var dy=new Date();
 if(y<1991 || y>dy.getFullYear() || s<1 || s>7 || m<1 || m>12){
  return false;
 }
 var Vars={y:y, m:m, s:s};
 //for(x in Vars)alert(x+", "+eval("Vars."+x));
 ajaxCaller.postForXML("getXMLhistweather.asp",Vars,onXMLhistweather);
}
function onXMLhistweather(xml, headers, callingContext){
 try{
  hist=xml.getElementsByTagName("histweather")[0].firstChild;
 }catch(e){
  return false;
 }
 if(hist.nodeName=="histitem"){
  var node=xml.getElementsByTagName("histweather")[0];

  //SUFFIX-FILENAME PAIRS
  var st="";
  for(var i=0; i<node.childNodes.length; i++){
   var s=node.childNodes[i].childNodes[0].firstChild.nodeValue;
   var f=node.childNodes[i].childNodes[1].firstChild.nodeValue;

   st+='<h3>'+s+'</h3>';
   st+='<img src="'+f+'" alt="" />';
   st+='<div class="bttDiv"><ul><li><a href="javascript:scrollTo(0,0)">Back to top</a></li></ul></div>';
  }
  getObject("histweatherimgDiv").innerHTML=st;
 }
}
function reloadWeather(){
 var d=df("ohform");
 d.submit();
}


function nValue(xml,n){
 try{
  var v=xml.getElementsByTagName(n)[0];
 }catch(e){
  return "";
 }
 if(!v){
  return "error";
 }else{
  var w=v.firstChild.nodeValue;
  return (w=="null" || w=="")?"":w;
 }
}
var tideimage=6;
function npTideImage(v,p,l){
 var midpoint=6;
 tideimage+=v;
 if(tideimage<0 || tideimage>l){
  if(tideimage<0)tideimage=0;
  if(tideimage>l)tideimage=l;
 }else{
  var h=Math.abs(midpoint-tideimage);
  var hwm=(h==0)?"":(h+" Hour"+((h==1)?" ":"s ")+((tideimage<midpoint)?'Before ':'After '));
  var newimg=new Image(); newimg.src="graphics/"+p+"/"+tideimage+".gif";
  getObject("tideimage").src=newimg.src;
  getObject("hwmessage").innerHTML=hwm+"High Water ";
 }
}




//----------------------FLV
function shflvPlayer(a,n,f){
 var o=getObject(n);
 var s=getStyle(n);
 var a=parseInt(a,10);
 if(a>0){
  if(o && s){
   if(s.display=="block"){
    hideflvPlayer(a,n);
   }else{
    o.href="clips/"+f+".flv";
    s.display="block";
    getObject("flvlink"+a).innerHTML="Hide Player";
    flowplayer(n, "flowplayer-3.2.2.swf");
   }
  }
 }else{
  o.href="clips/"+f+".flv";
  s.display="block";
  flowplayer(n, "flowplayer-3.2.2.swf");
 }
}
function hideflvPlayer(a,n){
 var o=getObject(n);
 var s=getStyle(n);
 var a=parseInt(a,10);
 if(o && s){
  o.href="";
  s.display="none";
  if(a>0)getObject("flvlink"+a).innerHTML="Show Player";
 }
}




//----------------------LIVE WEATHER
var lwbuttonsArray=["Scapa", "Kirkwall", "Stromness", "Barrel of Butter", "Sandy Hill", "Wind Speeds", "Barometric Pressure", "Tide", "Kirkwall Temps", "North Ronaldsay", "Hatston"];
function getliveweather(id){
 id=parseInt(id,10);
 if(id>=0 && id<lwbuttonsArray.length){
  var newimg=new Image(); newimg.src="staff/weather_upload/tabbednotebook1_"+id+".jpg";
  var lwObj=getObject("liveweatherimg");
  lwObj.src=newimg.src;
  lwObj.alt=lwbuttonsArray[id];
  lwObj.title=lwObj.alt;
  getObject("lwtitle").innerHTML=lwObj.alt;
 }
}




//-----------------EDIT FUNCTIONS
var retmessage;
function returnMessage(){
 if(retmessage)clearTimeout(retmessage);
 retmessage=setInterval("hidereturnMessage()",3000);
}
function hidereturnMessage(){
 var r=getStyle("returnmessage");
 if(r){
  r.display="none";
 }
}
function returnMessage2(){
 if(retmessage)clearTimeout(retmessage);
 retmessage=setInterval("hidereturnMessage2()",3000);
}
function hidereturnMessage2(){
 var r=getStyle("returnmessage2");
 if(r){
  r.display="none";
 }
}

function checkTimes(n,s,f){
 var tobj=getObject(n);
 if(tobj){
  var tv=tobj.value;
  if(((f && tv!="") || (!f)) && !isTime(tv)){
   alert("\nThe "+s+" time is incorrect.\nPlease re-enter a time in the format hh:mm.\n");
   tobj.focus();
   return false;
  }else{
   return true;
  }
 }
 else{
  return false;
 }
}
function checkDates(n,s,f){
 var dobj=getObject(n);
 if(dobj){
  var dv=dobj.value;
  if(((f && dv!="") || (!f)) && !isDateString(dv)){
   alert("\nThe "+s+" date is incorrect.\nPlease re-enter a date in the format dd/mm/yyyy.\n");
   dobj.focus();
   return false;
  }else{
   return true;
  }
 }
 else{
  return false;
 }
}
function formidCheck(){
 var fobj=getObject("formid");
 if(fobj){
  var fv=fobj.value.cleanStr(2);
  if(fv.length==32){
   return true;
  }else{
   return false;
  }
 }else{
  return false;
 }
}




//-----------------NEW SHIPS
function checkLinerForm(){
 if(requiredValues(["vessel","maxpax"],"ohform")){
  replaceAndClean(["vessel","loa","draught"],4);
  replaceAndClean(["maxpax"],11);
 
  var f=formidCheck();
  if(f){
   return true;
  }else{
   return false;
  }
 }else{
  return false;
 }
}




//-----------------NOTICES
function checkNoticesForm(){
 if(requiredValues(["date_cal1", "title", "content"],"ohform")){
  replaceAndClean(["title","organisation"],14);

  //CHECK DATES
  var d1=checkDates("date_cal1","Issue Date",0);
  var f=formidCheck();
  if(f && d1){
   
   return true;
  }else{
   return false;
  }
 }else{
  return false;
 }
}




//-----------------NEWS
function checkNewsForm(fobj,ext){
 if(requiredValues(["date_cal1", "headline", "content"],"form1")){
 
  //CHECK DATES
  var d1=checkDates("date_cal1","Due Date",0);
  var d2=checkDates("date_cal2","Due Off",1);
 
  var f=formidCheck();
  if(f && d1 && d2){
   replaceAndClean(["headline","imagecaption"],4);
   return uploadCheck(fobj,ext,false);
  }else{
   return false;
  }
 }else{
  return false;
 }
}





//-----------------CRUISE VISITS FORM
function checkCruiseVisits(){
 if(requiredValues(["cruiseID", "berth", "from_port", "date_cal1"],"ohform")){

  //CHECK DATES
  var d1=checkDates("date_cal1","Due Date",0);
  var d2=checkDates("date_cal2","Date-Off",1);

  //CHECK TIMES
  //var t1=checkTimes("eta","ETA",1);
  //var t2=checkTimes("ets","ETS",1);
  var t1=true;
  var t2=true;

  var f=formidCheck();
  return f && d1 && d2 && t1 && t2;
 }else{
  return false;
 }
}






//----------------SHIPS FORM
function checkShipsForm(){
 if(requiredValues(["vessel", "berth", "from_port", "date_cal1"],"ohform")){

  //CHECK DATES
  var d1=checkDates("date_cal1","Expected",0);
  var d2=checkDates("date_cal2","All-Fast",1);
  var d3=checkDates("date_cal3","ETD",1);
  var d4=checkDates("date_cal4","Depart",1);

  //CHECK TIMES
  var t1=checkTimes("berth_eta_time","Berth ETA",1);
  var t2=checkTimes("pob_time","POB",1);
  var t3=checkTimes("all_fast_time","All-Fast",1);
  var t4=checkTimes("etd_time","ETD",1);
  var t5=checkTimes("let_go_time","Let-Go",1);

  var f=formidCheck();
  return f && d1 && d2 && d3 && d4 && t1 && t2 && t3 && t4 && t5;
 }else{
  return false;
 }
}




//------------------PRE-ARRIVAL FORM
function checkprearrivalform(){
 var d=df("ohform");
 if(requiredValues(["vessel", "imo_number", "registered_flag_state", "date_cal1", "agents_name", "date_cal40"],"ohform")){

  //CHECK DATES
  var d1=checkDates("date_cal1","Last Visit to UK",0);
  var d2=checkDates("date_cal40","form",0);
  var f=formidCheck();
  
  if(d1 && d2 && f){
   for(var i=1; i<=10; i++){
    var n=getObject("port_name_"+i).value;
    var v=getObject("date_cal"+(i+19)).value;
    var s=getObject("port_security_"+i).value;
    if(!((n=="" && v=="" && s=="") || (n!="" && v!="" && s!=""))){
     alert("\nThe Recent Port-of-Call table has\nnot been completed correctly.\nFor each port visited, please complete all three fields.\n");
     getObject("port_name_"+i).focus();
     break;
    }else{

     //TEST DATE
     if(v!="" && !isDateString(v)){
      alert("\nA Recent Port-of-Call date is incorrect.\nPlease re-enter a date in the format dd/mm/yyyy.\n");
      getObject("date_cal"+(i+19)).focus();
      return false;
     }
    }
   }
   d.action="process_pre_arrival_form.asp";
   d.submit();
  }
 }
}





//-----------------PRIOR NOTIFICATION FORM
function checkpriornotificationform(){
 var d=df("ohform");
 if(requiredValues(["vessel", "imo_number", "mmsi_number", "call_sign", "last_port", "last_unlo", "next_port", "next_unlo", "date_cal1", "eta_time", "date_cal2", "etd_time", "passengers", "crew", "agents_name", "date_cal3"],"ohform")){

  //CHECK DATES
  var d1=checkDates("date_cal1","ETA",0);
  var d2=checkDates("date_cal2","ETD",0);
  var d3=checkDates("date_cal3","form",0);

  //CHECK TIMES
  var t1=checkTimes("eta_time","ETA",0);
  var t2=checkTimes("etd_time","ETD",0);
  
  var f=formidCheck();
  
  if(f && d1 && d2 && d3 && t1 && t2){
   d.action="process_prior_notification_report_form.asp";
   d.submit();
  }
 }
}





//-----------------SHIPS' WASTE FORM
function checkwasteform(){
 var d=df("ohform");
 if(requiredValues(["vessel", "call_sign", "last_port", "imo_number", "next_port", "date_cal10", "flag_state", "date_cal11", "signature", "date_cal3"],"ohform")){

  //CHECK DATES
  var d1=checkDates("date_cal10","ETA",0);
  var d2=checkDates("date_cal11","ETD",0);
  var d3=checkDates("date_cal3","form",0);
  var d4=checkDates("date_cal1","Oily Waste",1);
  var d5=checkDates("date_cal2","Garbage",1);

  var f=formidCheck();

  if(f && d1 && d2 && d3 && d4 && d5){
   d.action="process_ship_waste_form.asp";
   d.submit();
  }
 }
}





//-----------------BALLAST WATER REPORT FORM
function checkballastreportform(){
 var d=df("ohform");
 if(requiredValues(["vessel", "type", "owner", "imo_number", "gt", "call_sign", "flag", "date_cal1", "agent", "last_port", "arrival_port", "next_port", "officers_name", "date_cal40"],"ohform")){

  //CHECK DATES
  var d1=checkDates("date_cal1","Arrival",0);
  var d2=checkDates("date_cal40","form",0);

  var f=formidCheck();

  if(f && d1 && d2){
   d.action="process_ballast_reporting_form.asp";
   d.submit();
  }
 }
}




//-----------------BALLAST WATER DISCHARGE FORM
function checkballastdischargeform(){
 var d=df("ohform");
 if(requiredValues(["vessel", "call_sign", "port_of_registry", "imo_number", "section_1", "master", "date_cal1"],"ohform")){

  //CHECK DATES
  var d1=checkDates("date_cal1","form",0);

  var f=formidCheck();
  
  if(f && d1){
   d.action="process_ballast_discharge_form.asp";
   d.submit();
  }
 }
}




//------------------CONTACT FORM
function checkFormEnquiries(){
 var d=df("ohform");
 if(requiredValues(["name", "email", "message"],"ohform")){
  var e=getObject("email");
  if(checkEmail(e.value,e)){
   replaceAndClean(["message","address"],20);
   replaceAndClean(["subject","name"],14);
   return true;
  }else{
   return false;
  }
 }else{
  return false;
 }
}




//------------------SHIPPING LOGIN
function md5login(){
 var u=getObject("loginid").value.trim();
 var p=getObject("loginpw").value.trim();

 if(u!="" && p!=""){
  var d1=new Date();
  var d2=d1.dateProperties();
  var d3=d2.year+""+zpad(d2.month)+""+zpad(d2.day)+""+zpad(d1.getHours());
  var s=u+"_"+p+"_"+d3;
  getObject("loginid").value="";
  getObject("loginpw").value="";
  getObject("md5").value=MD5(s);

  return true;
 }else{
  return false;
 }
}
function zpad(s){
 s=parseInt(s);
 return ((s<10)?"0":"")+""+s;
}






//-------------------ENQUIRIES
function checkenquiries(){
 var fn="ofenquiries";
 var d=df(fn);
 if(requiredValues(["fullname", "email", "enquiry"],"ohform")){

  cleanValue(d.fullname);
  cleanValue(d.enquiry);
  cleanValue(d.tel);
  cleanValue(d.address);
  cleanValue(d.postcode);

  var n=d.fullname.value.trim();
  var e=d.email.value.trim().toLowerCase();
  var m=d.enquiry.value.trim();

  if(n!="" && e!="" && m!=""){
   if(checkEmail(e,d.email)){
    return true;
   }else{
    return false;
   }
  }else{
   return false;
  }
 }else{
  alert("\n\nPlease complete all the required fields\nbefore sending us your enquiry.\n\n");
  return false;
 }
}


//FORM SUBMISSIONS
function cleanValue(o){
 if(o.type=="text" || o.type=="textarea"){
  o.value=o.value.cleanStr(1);
 }
}
function requiredValues(reqf,fn){
 var d=df(fn);
 var a,b;
 var c=true;
 var f=false;
 for(var j=0;j<reqf.length;j++){
  a=d.elements[reqf[j]];
  if(a){
   if(a.type=="text" || a.type=="textarea" || a.type=="hidden"){
    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){
     alert("\nA required field is blank.\nPlease enter a value.\n");
     a.focus();
     f=true;
    }
   }
  }
 }
 return c;
}

function checkForm(){
 var d=df(0);
 if(requiredValues(["yourname", "youremail", "yourenquiry"])){
 
  cleanValue(d.yourname);
  cleanValue(d.yourenquiry);
  var n=d.yourname.value.trim();
  var e=d.youremail.value.trim();
  var m=d.yourenquiry.value.trim();
  
  if(n!="" && e!="" && m!=""){
   if(checkEmail(e,d.youremail)){
    return true;
   }else{
    return false;
   }
  }else{
   return false;
  }
 }else{
  alert("\n\nPlease complete all the fields\nbefore sending us your enquiry.\n\n");
  return false;
 }
}


//------------------------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 Email 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;
}
