var calendarCtl=null;
var selectedTour=null;
var error='';
var labels=[];

function showVideo()
{
  $('promo-fixed').style.display='none';
  $('promo-video').style.display='block';    
}

function initContact()
{                    
  var m=new google.maps.Map($('contact_map'),{
      zoom:15,
      center: new google.maps.LatLng(-16.92142016035, 145.776211349),
      mapTypeId: google.maps.MapTypeId.ROADMAP
  }); 
  new google.maps.Marker({
      map:m,
      position:new google.maps.LatLng(-16.92491, 145.77943) 
  });  
}


function validate_contact(f)
{
  if (f.name.value=='') {
    alert(translate('name'));
    f.name.focus();
    return false;    
  }    
  if (f.email.value=='' || !validateEmailv2(f.email.value)) {
    alert(translate('valid email'));
    f.email.focus();
    return false;    
  }
  if (f.message.value=='') {
    alert('Please enter your message');
    f.message.focus();
    return false;    
  }
  if (f.code.value.length != 5) {
    alert(translate('code'));
    f.code.focus();
    return false;    
  }
  return true;
}

function imageRotation(id,delay,startIndex,basePath,imageArray)
{
  this.elem=$(id);
  this.delay=delay;
  this.images=[];
  this.index=startIndex;
  
  for (var i=0; i < imageArray.length; i++)
    this.images.push(new Element('img',{src: basePath+imageArray[i]}));
  
  var x=this;
  window.setTimeout(function() { x.rotate();},this.delay);  
}

imageRotation.prototype.rotate=function()
{
  if (++this.index==this.images.length)
    this.index=0;
  var x=this;
  this.elem.fade({duration:2,afterFinish:function() {
    x.elem.src=x.images[x.index].src;
    x.elem.appear({duration:2});
  }});  
  window.setTimeout(function() { x.rotate();},this.delay);  
}

function get_lb_val(lb)
{
  return lb.selectedIndex >= 0 ? lb.options[lb.selectedIndex].value : null;    
}

function set_lb_val(lb,v)
{
  for (var i=0; i < lb.options.length; i++)
    if (lb.options[i].value==v) {
      lb.selectedIndex=i;
      break;    
    }    
}

function dateValid(year,month,day)
{
  if (year.length==2) 
    if (year > 70)  
      year=1900+(year-0); 
    else 
      year=2000+(year-0); 

    if (day <1 || day >31)
      return 0;
    if (month==2) {
        // Check for leap year
        if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
            if (day > 29){ return 0; }
            }
        else { if (day > 28) { return 0; } }
        }
    if ((month==4)||(month==6)||(month==9)||(month==11)) {
        if (day > 30) { return 0; }
        }  
  return 1;          
}
function getDate(f)
{
  var y,m,d;
  
  y=get_lb_val(f.year);
  m=get_lb_val(f.month);
  d=get_lb_val(f.day);

  if (y && m && d && dateValid(y,m,d))
    return new Date(y,m-1,d,0,0,0,0);
  else
    return null;    
}

function updateDate(f,d)
{
  set_lb_val(f.day,d.getDate());
  set_lb_val(f.month,d.getMonth()+1);
  set_lb_val(f.year,d.getFullYear());
  $('dow').innerHTML=Calendar.DAY_NAMES[d.getDay()];
}

function initCalendar()
{
    calendarCtl=Calendar.setup(
      {
        parentElement: 'calendar-view'
      });
    calendarCtl.isPopup=true;  
    calendarCtl.form=document.forms['sf'];
    calendarCtl.closeHandler=function(c) 
      {  
        c.shouldClose=false; 
        updateDate(c.form,c.date);
        c.hide();
      }; 
    calendarCtl.shouldClose=false;   
  return calendarCtl;
}    

function doCalendarView()
{
  if (!calendarCtl)
    initCalendar();
  var d=getDate(document.forms['sf']);
  if (d)
    calendarCtl.update(d); 
  $('calendar-view').style.left=$('d_cal').offsetLeft+'px';
  $('calendar-view').style.top=$('d_cal').offsetTop+'px';
  $('calendar-view').style.display='block';   
  calendarCtl.show();    
              
}

function show(d)
{
  var t=$$('table.select');
  for (var i=0; i < t.length; i++)
    t[i].style.display=t[i].id==d ? '' : 'none';
  t=$('booking-tab').getElementsByTagName('li');
  for (var i=0; i < t.length; i++)
    t[i].className=t[i].getAttribute('d')==d ? 'selected' : '';     
  // set date
  var dc=d.split('-');
  if (dc[1].substring(0,1)=='0')
    dc[1]=dc[1].substring(1);
  if (dc[2].substring(0,1)=='0')
    dc[2]=dc[2].substring(1);
  var dte=new Date(dc[0],parseInt(dc[1])-1,dc[2],0,0,0);
  updateDate(document.forms['sf'],dte);       
}

function initBookingForm()
{
  var f=document.forms['sf'];
  var c=['year','month','day'];
  for (var i=0; i < c.length; i++)
    Event.observe(f.elements[c[i]],'change',function(event) {
      var d;  
      if (d=getDate(this.form))
        updateDate(this.form,d);    
    });  
  doBookingSearch();
  updateDate(f,getDate(f));
}

function doBookingSearch()
{
  var f=document.forms['sf'];
  var d=getDate(f);
  if (!d) {
    alert(translate('search date'));
    f.day.focus();
    return;    
  }  
  $('booking-result').innerHTML='';
  $('booking-options').innerHTML='';
  $('booking-summary').innerHTML='';
  //$('processing').style.display='block';
  showLoading();
  new Ajax.Updater('booking-result','ajax.booking-search.html',{
    method:'get',  
    parameters: {'d': d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate(),
                 'ad': get_lb_val(f.ad),
                 'ch': get_lb_val(f.ch),
                 'fa': get_lb_val(f.fa),
                 'in': get_lb_val(f.elements['in'])},
    onComplete: function(response) {
      //$('processing').style.display='none'; 
      hideLoading();
      var s; 
      if (response.status != 200) {
        alert(translate('search fail'));    
      }   
      else if ((s=$$('tr.selected')) && s.length)  {
        s_e(null);
      } 
    }                 
  });    
}

function s_b()
{
  new Ajax.Updater('booking-summary','ajax.booking-update.html',{
    method:'get',  
    parameters: $('tf-f').serialize(),
    onComplete: function(response) {
      if (response.status != 200) {
        alert(translate('search fail'));    
      }    
      else
        $('booking-summary').style.display='block';
    }                 
  });    
}

function s_e(r)
{
  var s;
  if (r) {
    // attempt to locate previously selected item,    
    if ((s=$$('tr.selected')) && s.length) 
      s[0].removeClassName('selected');    
    // select parent row...
    s=r.parentNode;
    while (s && s.tagName.toLowerCase() != 'tr')
      s=s.parentNode;
    if (s)
      $(s).addClassName('selected');  
  }
  $('booking-options').style.display='none';
  new Ajax.Updater('booking-options','ajax.booking-tour.html',{
    method:'get',  
    parameters: $('tf-f').serialize(),
    onComplete: function(response) {
      if (response.status != 200) {
        alert('Unable to process your search at this time.');    
      }    
      else {
        $('booking-options').style.display='block';
        s_b();
      }  
    }                 
  });    
}

function op_t(rb)
{
  $(rb.name+'_c').style.display=(rb.checked && rb.value > 0) ? 'block' : 'none';
  if (rb.checked && rb.value > 0)
    rb.form.elements[rb.name+'_n'].focus();
  // recalc rate
  s_b(null);      
}

function op_s(ex)
{
  s_b(null);    
}

function b1(bc)
{
  var f=$('tf-f');
  var error='';
  var oerror='';
  var tour=null;
  var r;
  var opts=[];
  
  // check for tour selection....
  for (var i=0; i < f.selection.length; i++)
    if (f.selection[i].checked) {
      tour=f.selection[i];
      break;
    }  
  if (!tour) {
    error='   - Select a tour';    
  }  
  else {
    // check options for tour now...
    r=f.getInputs('radio');
    for (var i=0; i < r.length; i++)
      if (opts.indexOf(r[i].name) < 0 && r[i].name.substring(0,6)=='extra_') {
        opts.push(r[i].name);      
      }
    for (var i=0; i < opts.length; i++)
      if (!f.elements[opts[i]][0].checked && !f.elements[opts[i]][1].checked) {
        oerror+=(oerror=='' ? '' : "\n")+'      - '+f.elements[opts[i]][0].getAttribute('title');    
      }
    if (oerror)
      error+=(error=='' ? '' : "\n")+"   - "+translate('preference')+" - \n"+oerror;        
  }
  if (error)
    alert(translate('correct')+" -\n"+error);
  else  
    document.location='booking-details.html'+(bc ? '?_bc='+bc : '');
      
}

function pop(url)
{
  window.open(url,'','width=600,height=500,scrollbars=1,menu=0');    
}

function c_move(e,ctl,n)
{
  var evtobj=window.event? event : e //distinguish between IE's explicit event object (window.event) and Firefox's implicit.
  var unicode=evtobj.charCode? evtobj.charCode : evtobj.keyCode
  var len=4;
  if (ctl.form.cardtype.selectedIndex > 0 && ctl.form.cardtype.options[ctl.form.cardtype.selectedIndex].value=='Amex' && n==3)
      len=6;
      
  if (unicode >= 48 && unicode <= 57 && ctl.value.length==len) 
    ctl.form.elements['cardno_'+n].focus();      
}

function set_error(err,label)
{
  error+=(error.length ? "\n" : '')+err;
  if (label)
    labels.push(label);  
}

function clear_error()
{
  error='';
  for (var i=0; i < labels.length; i++)
    if ((l=$$('label[title="'+labels[i]+'"]')) && l.length)
      l[0].style.color='';
  labels.length=0;      
}

function show_labels()
{
  var l;
  for (var i=0; i < labels.length; i++)
    if ((l=$$('label[title="'+labels[i]+'"]')) && l.length)
      l[0].style.color='#ff0000';
}

function b2()
{
  var f=document.forms['bf-f'];
  var focus=null;
  var ccnum='';
  clear_error();
  
  if (f.firstname.value=='') 
    set_error('   - '+translate('first name'),'firstname');
  if (f.lastname.value=='') 
    set_error('   - '+translate('last name'),'lastname');
    
  if (f.phone.value=='') 
    set_error('   - '+translate('contact'),'phone');
  if (typeof(f.pickup) != 'undefined' && f.pickup.selectedIndex <= 0) 
    set_error('   - '+translate('pickup'),'pickup');  
  if (typeof(f.email) != 'undefined') {  
    if (f.email.value=='' || !validateEmailv2(f.email.value)) 
      set_error('   - '+translate('valid email'),'email');
    else if (f.cemail.value=='')
      set_error('   - '+translate('re-enter'),'cemail');
    else if (f.cemail.value != f.email.value) 
      set_error('   - '+translate('the email')+' '+f.cemail.value+' '+translate('no match')+' '+f.email.value+'. '+translate('enter exact'),'cemail');
    if (f.cardname.value=='')
      set_error('   - '+translate('card name'),'cardname');          
    if (f.cardtype.selectedIndex <= 0)
      set_error('   - '+translate('card type'),'cardtype');
    else {
      for (var i=1; i <= 4; i++)
        ccnum+=(ccnum.length ? ' ' : '')+f.elements['cardno_'+i].value;
      if (!checkCreditCard(ccnum,f.cardtype.options[f.cardtype.selectedIndex].value))
        set_error('   - '+ccErrors[ccErrorNo]+'. '+translate('you entered')+' '+ccnum,'cardno');
     if (f.card_exp_mm.selectedIndex <= 0 || f.card_exp_yy.selectedIndex <= 0)
      set_error('   - '+translate('card expiry'),'cardexp');
     if  (f.card_cvn.value.length != 3)
       set_error('   - '+translate('cvn'),'CVN');             
    } 
  }
  else {
    if (f.voucher.value=='') 
      set_error('   - '+translate('voucher'),'voucher');   
  }
    
  if (!f.terms.checked)
    error+=(error=='' ? '' : "\n")+"   -"+translate('terms');
  
  if (error.length) {
    alert(translate('complete')+" -\n"+error);
    show_labels();
  }
  else {
    showLoading();
    f.submit();
  }               
}

function validateEmailv2(email)
{
    if(email.length <= 0)
    {
      return true;
    }
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) 
      {
        var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
        if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
  return false;
}

function widget()
{
  window.open('widget/show.php','','width=450,height=180,scrollbars=0,menu=0,location=0,status=0');    
}

function disableBrowser(greyed)
{
  var s=new Element('div',{id: 'shadow'});
  s.style.top=0;
  s.style.left=0;
  s.style.position='absolute';
  s.style.zIndex=1000;
  var b=$(document.body);    /* ie6 requires!! */
  s.style.width=b.getWidth()+'px';
  s.style.height=b.getHeight()+'px';
  if (greyed) {
    s.style.backgroundColor='#000';
    s.setOpacity(0.6);
  }
  document.body.appendChild(s);
  return s;    
}

function hideLoading()
{
  document.body.removeChild($('shadow'));    
  document.body.removeChild($('loading'));    
}

function showLoading(msg)
{
  var d=disableBrowser(true);
    
  var s=new Element('div',{id: 'loading'});
  s.style.textAlign='center';
  s.style.top=parseInt((document.viewport.getHeight()-120)/2)+document.viewport.getScrollOffsets().top+'px';
  s.style.left=0;
  s.style.paddingTop='20px';
  s.style.paddingBottom='20px';
  s.style.backgroundColor='#fff';
  s.style.position='absolute';
  s.style.zIndex=1000;
  s.style.width=document.viewport.getWidth()+'px';
  s.style.height='31px';
  s.update(msg ? msg : '<img src="images/processing.gif" />');
  document.body.appendChild(s);

}

function clearAgent(b)
{
  b.form._aid.value=0; 
  $('agentName').innerHTML=b.value.length ? translate('agent code') : '';   
}

function validateAgent(b)
{
  var ag=b.form.agent.value;
  if (ag.length < 4) {
    alert(translate('short code'));
    return;    
  }    
  // ajax it now...
  showLoading(translate('validating'));
  new Ajax.Request('ajax.validate-agent.html',{
      parameters: { agent: ag },
      onComplete: function(response) {
        hideLoading();
        if (response.status != 200) {
          alert(translate('com error'));    
        }   
        else {
          if (response.responseJSON && response.responseJSON.id) {
            $('agentName').innerHTML='Valid: '+response.responseJSON.name;
            document.forms['bf-f']._aid.value=response.responseJSON.id;    
          }   
          else {
            alert(translate('code invalid')); 
            $('agentName').innerHTML='Code invalid';
          }  
        }
      }
  });
}

function translate(key)
{
  return _language[key];    
}
