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



/* SLIDE FUNCTIONS */
$(document).ready(function(){
 if($('#cycle')){
  $('#cycle').cycle({
   fx:'fade',
   speed:1000,
   timeout:4000,
   sync:1,
   pause:1
  });
 }
});


//------------------CALENDAR FUNCTIONS
var months=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
var monthNames=new Array('', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var dayNames=new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');

function leapYearTest(a,b){
 return ((a==2)&&(((b%4==0)&&(b%100!=0))||(b%400==0)))?true:false;
}
function closeCalendar(){
 if(window.obj_calwindow){
  if(!obj_calwindow.closed)obj_calwindow.close();
 }
}
function changeDays(){
 with(df("onlinettform")){
  y=date_onlinett_monthyear;
  d=date_onlinett_day;
  si=d.selectedIndex+1;
  my=ddv(y).split(" ");
  newM=leapYearTest(my[0],my[1])?29:months[my[0]];
  d.options.length=0;
  for(i=1;i<=newM;i++){
   s=(i==si)?1:0;
   d.options[i-1]=new Option(i+" "+dayNames[new Date(my[1],my[0]-1,i).getDay()],i,s,s);
  }
 }
 updateCal();
}
function updateCal(){
 d=df("onlinettform");
 s=ddv(d.date_onlinett_monthyear).split(' ');
 d.date_onlinett_cal.value=ddv(d.date_onlinett_day)+"/"+s[0]+"/"+s[1];
}
function showCal(){
 ttcal.popup();
}
function getsailingtimes(){
 var r=ddv("island_onlinett");
 var s=ddv("sailing_onlinett");
 var m="\n\nTo view a timetable,\nplease select its Route, Sailing and Date.\n\n";
 
 if(r==-1){
  alert("\n\nYou have not selected a Route."+m);
  return false;
 }else if(s==-1){
  alert("\n\nYou have not selected a Sailing."+m);
  return false;
 }else{
  var ttd=getObject("date_onlinett_cal").value;
  if(isDateString(ttd)){
   var dsplit=ttd.split("/");
   if(dsplit.length==3){
   
    //CHECK FOR NON-PAST DATE
    var d1=new Date();
    var d1d=d1.getDate();
    var d1m=d1.getMonth();
    var d1y=d1.getFullYear();
    var d2=new Date(dsplit[2],dsplit[1]-1,dsplit[0]);
    if(d1.compareDates(d2)==1){
     alert("\n\nThe selected date is in the past.\nPlease select a date from today.\n\n");
     setSelect("date_onlinett_day",d1d);
     setSelect("date_onlinett_monthyear",d1m+" "+d1y);
     getObject("date_onlinett_cal").value=d1d+"/"+(d1m+1)+"/"+d1y;
     return false;
    }else{
     getXMLtimetable(s,dsplit[0],dsplit[1],dsplit[2]);
    }
   }
  }
 }
}
function npsailing(d2){
 if(isDateString(d2)){
  var r=ddv("island_onlinett");
  var s=ddv("sailing_onlinett");
  var m="\n\nTo view a timetable,\nplease select its Route, Sailing and Date.\n\n";
  
  if(r==-1){
   alert("\n\nYou have not selected a Route."+m);
   return false;
  }else if(s==-1){
   alert("\n\nYou have not selected a Sailing."+m);
   return false;
  }else{
   var d1=new Date();
   var d1d=d1.getDate();
   var d1m=d1.getMonth();
   var d1y=d1.getFullYear();
   if(d1.compareDates(d2)==1){
    alert("\n\nThe selected date is in the past.\nPlease select a date from today.\n\n");
    setSelect("date_onlinett_day",d1d);
    setSelect("date_onlinett_monthyear",d1m+" "+d1y);
    getObject("date_onlinett_cal").value=d1d+"/"+(d1m+1)+"/"+d1y;
    return false;
   }else{
    var dsplit=d2.split("/");
    var d2d=""+parseInt(dsplit[0],10);
    var d2m=dsplit[1];
    var d2y=dsplit[2];
    setSelect("date_onlinett_day",d2d);
    setSelect("date_onlinett_monthyear",d2m+" "+d2y);
    getObject("date_onlinett_cal").value=d2d+"/"+d2m+"/"+d2y;
    getXMLtimetable(s,d2d,d2m,d2y);
   }
  }
 }
}



//------------------------ SURVEY
function submitsurvey(){
 var d=df(1);
 var isdata=false;
 var dcounter=0;
 var oldr=newr="";
 var rsplit;
 for(var i=0; i<d.elements.length; i++){
  var o=d.elements[i];
  if(o && isRadio(o.id)){
   rsplit=o.id.split("_");
   if(rsplit.length>0){
    newr=rsplit[0]+"_"+rsplit[1];
    if(oldr!=newr){
     v=getRadio(newr);
     if(v!=0){
      isdata=true;
      dcounter++;
     }
     oldr=newr;
    }
   }
  }
 }
 if(isdata && dcounter>10){
  if(confirm("\nSubmit Survey\nAre you sure?\n")){
   var e=getObject("text_43");
   if((e.value=="") || (e.value!="" && checkEmail(e.value,e))){
    d.action="processsurvey.php";
    d.submit();
   }
  }
 }else{
  alert("\nThe survey has not been completed.\nPlease complete the survey, then submit it.\n");
 }
}



//-------------------------ROLLOVER FUNCTIONS
var isShowing=false;
var ddFocus=false;
var hideTimeout;
var mx=my=0;
var offsetX=-12;
var offsetY=offsetX;
var default_offset=offsetX;

function initTT(){
 if(document.layers){
  document.captureEvents(Event.MOUSEMOVE);
 }
 document.onmousemove=moveToMouseLoc;
 var ttl=getStyle('toolTipLayer');
 if(ttl){
  ttl.left=0;
  ttl.top=0;
 }
}
function moveToMouseLoc(e){
 var rx=0;
 var ry=0;
 var padding=20;
 var ttl=getStyle('toolTipLayer');

 if(ttl){
  var coords=getEvents.mmove(e);
  var x=coords[0];
  var y=coords[1]; 
  var ro=getObjDims("toolTipLayer");
  rx=parseInt(ro.w,10);
  ry=parseInt(ro.h,10);

  //CHECK BORDERS
  if(((y-docProperties.scrollTop())+ry+padding)>=parseInt(docProperties.windowHeight(),10)){
   offsetY=-(ry/2)-padding;
  }else{
   offsetY=default_offset;
  }
  if(((x-docProperties.scrollLeft())+rx+padding)>=parseInt(docProperties.windowWidth(),10)){
   offsetX=-rx-padding;
  }else{
   offsetX=default_offset;
  }
  mx=(x+offsetX)
  my=(y+offsetY)
 }
 return true;
}
function updatetoolTipCoords(){
 var ttl=getStyle('toolTipLayer');
 if(ttl){
  ttl.left=mx+"px";
  ttl.top=my+"px";
 } 
}
function showtoolTip(m,t,f){
 cleartoolTip_timeout();
 var ttl=getStyle('toolTipLayer');
 if(ttl){
  if(t){
   if(f){
    var s=getObject(m+'_rollover_outer').innerHTML;
   }else{
    var p=m.split(";");
    var s="";
    for(var i=0; i<p.length; i++){
     s+="<p>"+p[i]+"</p>";
    }
   }
   updatetoolTipCoords();
   getObject('TTLbody').innerHTML=s;
   isShowing=true;
   ttl.display="block";
  }else{
   isShowing=false;
   ttl.display="none";
  }
 }
}
function hidetoolTip(){
 if(!ddFocus){
  showtoolTip('',0,0);
 }
}
function hidetoolTip_timeout(){
 if(isShowing){
  cleartoolTip_timeout();
  hideTimeout=setTimeout("hidetoolTip()",500);
 }
}
function cleartoolTip_timeout(){
 if(hideTimeout){
  clearTimeout(hideTimeout);
 }
}
function hs_rolloverfocus(f){
 if(f){
  cleartoolTip_timeout();
  if(testforBrowser().isIE)ddFocus=true;
 }else{
  ddFocus=false;
 }
}
function hideshowObject(o,f){
 var el=getStyle(o);
 if(el && el!="undefined"){
  el.display=(f)?'block':'none';
 }
}


//-------------------ENQUIRIES
function checkenquiries(){
 var fn='ofenquiries';
 var d=df(fn);
 if(requiredValues(["fullname", "email", "enquiry"],fn)){
 
  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;
 }
}



//--------------------NEWS
function togglenewsYear(y){
 var thisMenu=getStyle("newsyearDiv_"+y);
 if(thisMenu){
  hideshowObject("newsyearDiv_"+y,((thisMenu.display=='none')?1:0));
  getObject("newsyearimg_"+y).src=(thisMenu.display=='none')?plus.src:minus.src;
 }
}
function toggleNews(a){
 var thisMenu=getStyle("newsDiv_"+a);
 if(thisMenu){
  hideshowObject("newsDiv_"+a,((thisMenu.display=='none')?1:0));
  getObject("newsimg_"+a).src=(thisMenu.display=='none')?plus.src:minus.src;
 }
}



//--------------------GALLERY
function toggleGallery(a){
 var thisMenu=getStyle("galleryDiv_"+a);
 if(thisMenu){
  hideshowObject("galleryDiv_"+a,((thisMenu.display=='none')?1:0));
  getObject("galleryimg_"+a).src=(thisMenu.display=='none')?plus.src:minus.src;
 }
}



//--------------------TIMETABLES
function toggleTT(a){
 var thisMenu=getStyle("ttDiv_"+a);
 if(thisMenu){
  hideshowObject("ttDiv_"+a,((thisMenu.display=='none')?1:0));
  getObject("ttimg_"+a).src=(thisMenu.display=='none')?plus.src:minus.src;
 }
}
function popupTT(s,i){
 var f='pdfs/timetables/'+s+'/'+i+'_'+s+'.pdf';
 var p=40;
 var w=(docProperties.screenWidth())-(p*2);
 var h=(docProperties.screenHeight()-(p*2));
 var chrome='top='+p+',left='+p+',menubar=1,resizable=1,width='+w+',height='+h+',location=1,status=1,scrollbars=1';
 var mywin=window.open(f,'_blank', chrome);
 if(mywin){
  mywin.resizeTo(w, h);
  mywin.focus(); 
 }
}




//----------------------FAQ
function toggleFAQ(a){
 var thisMenu=getStyle("faqDiv_"+a);
 if(thisMenu){
  hideshowObject("faqDiv_"+a,((thisMenu.display=='none')?1:0));
  getObject("faqimg_"+a).src=(thisMenu.display=='none')?plus.src:minus.src;
 }
}




//----------------------QUICK PRICE
function getSailing(o){
 var d=df("quickprice");
 var idx=o.selectedIndex-1;
 d.sailing.options.length=0;
 if(o.selectedIndex>0){
  d.sailing.options[0]=new Option("Select a Sailing...",-1,0,0);
  for(i=0;i<=sailingID[idx].length-1;i++){
   d.sailing.options[i+1]=new Option(sailingTitle[idx][i],sailingID[idx][i],0,0);
  }
 }
}
function resetquickprice(){
 noSelect("island");
 resetSelect("sailing","...",-1);
 hsquickpriceResults(0);
}
function hsquickpriceResults(f){
 getStyle("quickpriceResults").display=(f)?"block":"none";
}




//----------------------QUICK TT
function getttSailing(o){
 var d=df("onlinettform");
 var idx=o.selectedIndex-1;
 d.sailing_onlinett.options.length=0;
 if(o.selectedIndex>0){
  d.sailing_onlinett.options[0]=new Option("Select a Sailing...",-1,0,0);
  for(i=0;i<=sailingID[idx].length-1;i++){
   d.sailing_onlinett.options[i+1]=new Option(sailingTitle[idx][i],sailingID[idx][i],0,0);
  }
 }
}
function resetquicktt(){
 noSelect("island_onlinett");
 resetSelect("sailing_onlinett","...",-1);
 hsquickpriceResults(0);
}




//----------------------QUICK BOOK
function getBooking(o){
 var sailing=ddv("rollover_"+o);
 var route=sailing.substr(0,3);
 window.open('https://'+getObject("bookingpath").value+'web100.asp?route='+route+'&sailing='+sailing,'_blank');
}



//----------------------QUICK TT LINK
function getTimetable(o){
 var sailing=ddv("rollover_"+o);
 var route=sailing.substr(0,3);
 window.open('onlinetimetables.php?route='+route+'&sailing='+sailing,'_self');
}




//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.type=="text" || a.type=="textarea"){
   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 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;
}

