// Application
var css3Transition = true;
var jar = null;
var overlay = null;
var scrollnav = null;
var footer = null;
var viewcontent = null; 
var viewscroller = null;
var viewdetailscroller = null;
var viewzoom = null;
var viewhome = null;
var nID = -1;
var menus = null;
var nPage;
var nDialog;
var nState;

var dialogArrangeVisit = null;
var dialogWorldLocation = null;

var form = null;

var PAGE_HOME = 0;
var PAGE_COLLECTION = 1;
var PAGE_MEDIA = 2;
var PAGE_WORLD = 3;
var PAGE_COMPANY = 4;
var PAGE_BLOG = 5;
var PAGE_BOUTIQUE = 6;
var PAGE_SIGNUPEMAIL = 7;
var PAGE_CONTACTEMAIL = 8;
var PAGE_STANDARD = 9;

var DIALOG_NONE = 0;
var DIALOG_VISIT = 1;
var DIALOG_WORLD_LOCATION = 2;

var STATE_HOME = 0;
var STATE_SCROLLER = 1;
var STATE_DETAIL = 2;
var STATE_COLLECTION_ZOOM = 3;
var STATE_MEDIA_ZOOM = 4;

var ACTIVE_VIEW = 21;
var INACTIVE_VIEW = 20;

jQuery.noConflict();
jQuery(document).ready(function() {
  jQuery("input:checkbox, select").uniform({selectClass: 'formselector'});	
  jQuery(function(){
	jQuery('#datepicker').datepicker({beforeShowDay: jQuery.datepicker.noWeekends});
  });
});
 
document.observe('dom:loaded', function() {
  detectBrowserCapabilities();

  nDialog = DIALOG_NONE;
  
  // cookies
  jar = new CookieJar({expires:3600, path: '/'});
  var appState = jar.get('app');  
  if (appState) {
    footer = new Footer({elemContent:$('footer'), bOpen: appState.footer});	  
  }
  else {
	footer = new Footer({elemContent:$('footer')});	  	  
  }
  $('footer').observe('footer:toggle', footerToggle.bind(this));	  
   
  menus = new Menus({elemContent:$('menus')});
  if ($('scrollnav')) {
	scrollnav = new ScrollNav({elemContent:$('scrollnav')});  
  }  
    
  // dialogs
  overlay = new Overlay({elemContent:$('overlay'), elemTint:$('overlay_tint')});
  dialogArrangeVisit = new DialogArrangeVisit({elemContent:$('arrangevisit_dialog')});
  $('arrangevisit_dialog').observe('dialog:valid', dialogValid.bind(this));	        
  
  var elemPage = $('page');
  switch (elemPage.className) {
    case "home":
      nPage = PAGE_HOME;
      nState = STATE_HOME;
    	
      viewhome = new ViewHome({elemContent:$('viewhome')});      
      viewhome.show();
      scrollnav.show();
      footer.show();
      break;
      
    case "collection":    	
      nPage = PAGE_COLLECTION;
      nState = STATE_SCROLLER;
        
      $('viewscroller').style.zIndex = ACTIVE_VIEW;
      $('viewdetailscroller').style.zIndex = INACTIVE_VIEW;
      $('viewzoom').style.zIndex = INACTIVE_VIEW;
        
      viewscroller = new ViewCollectionScroller({elemContent:$('viewscroller'), nHighlightID:nID});
      $('viewscroller').observe('scroller:clickactive', collectionScrollerActiveItemClick.bind(this));	  
      
      viewdetailscroller = new ViewCollectionDetailScroller({elemContent:$('viewdetailscroller')});
      
      viewzoom = new ViewCollectionZoom({elemContent:$('viewzoom')});
      $('viewzoom').observe('viewzoom:click', zoomItemClick.bind(this));	  
      
      viewscroller.show();      
      scrollnav.show();
      footer.show();
      break;      
      
    case "media":
      nPage = PAGE_MEDIA;
      nState = STATE_SCROLLER;
        
      $('viewmediascroller').style.zIndex = ACTIVE_VIEW;
      $('viewmediazoom').style.zIndex = INACTIVE_VIEW;
            
      viewscroller = new ViewMediaScroller({elemContent:$('viewmediascroller')});
      $('viewmediascroller').observe('scroller:clickactive', mediaScrollerActiveItemClick.bind(this));	  
      
      viewzoom = new ViewMediaZoom({elemContent:$('viewmediazoom')});
      $('viewmediazoom').observe('viewzoom:click', zoomItemClick.bind(this));	  
      
      viewscroller.show();
      scrollnav.show();
      footer.show();
      break;
      
    case "world":
      nPage = PAGE_WORLD;
    	
      $('viewworld').style.zIndex = ACTIVE_VIEW;
    	
      // dialogs
      overlay = new ViewWorldOverlay({elemContent:$('worldoverlay'), elemTint:$('worldoverlay_tint'), nOpacity:0.8});
      $('worldoverlay').observe('viewworldoverlay:click', hideOverlay.bind(this));	  
      dialogWorldLocation = new ViewWorldLocationDialog({elemContent:$('worldlocation_dialog')});  
      
      viewcontent = new ViewWorld({elemContent:$('viewworld')});    
      $('viewworld').observe('viewworld:clicklocation', locationClick.bind(this));	  
      
      viewcontent.show();
      footer.show();
      break;
      
    case "company":
      nPage = PAGE_COMPANY;
      	
      $('viewcompany').style.zIndex = ACTIVE_VIEW;
      	
      footer.show();
      break;

    case "standard":
        nPage = PAGE_STANDARD;
        	
        $('viewstandard').style.zIndex = ACTIVE_VIEW;
        	
        footer.show();
        break;

    case "signupemail":
        nPage = PAGE_SIGNUPEMAIL;
  	  	
   	    $('viewform').style.zIndex = ACTIVE_VIEW;
      	
   	    form = new FormSignup({elemContent:$('viewform')});
   		 
    	footer.show();
        break;
        
    case "contactemail":
        nPage = PAGE_CONTACTEMAIL;
  	  	
   	    $('viewform').style.zIndex = ACTIVE_VIEW;
      	
   	    form = new FormContact({elemContent:$('viewform')});
   		 
    	footer.show();
        break;
        
    case "blog":
      nPage = PAGE_BLOG;
        	
      $('viewblog').style.zIndex = ACTIVE_VIEW;

      viewcontent = new ViewBlog({elemContent:$('viewblog')});    
      $('viewblog').observe('viewblog:ready', blogReady.bind(this));	        
      break;
      
    case "boutique":
      nPage = PAGE_BOUTIQUE;
	  	
	  $('viewboutique').style.zIndex = ACTIVE_VIEW;
	    	
	  viewcontent = new ViewBoutique({elemContent:$('viewboutique')});      
      viewcontent.show();

	  footer.show();
	  break;	  
  }
});

function  detectBrowserCapabilities() {
  // IE is not so good for CSS3.
  if (Prototype.Browser.IE) {
	css3Transition = false;
  }

  if (Prototype.Browser.Gecko) {  
	css3Transition = false;
  }
  
  if (Prototype.Browser.MobileSafari) {
    bMobileSafari = true;
  }  
}

function showDetail() {
  switch (nPage) {
    case PAGE_COLLECTION:
      nState = STATE_DETAIL;
    	
      $('viewscroller').style.zIndex = INACTIVE_VIEW;
      $('viewdetailscroller').style.zIndex = ACTIVE_VIEW;
      
      viewscroller.hide();
      window.setTimeout(function() {
        viewdetailscroller.show(viewscroller.getCurrItem());    	  
      }, 1000);
      break;
  }
}

function hideDetail() {
  switch (nPage) {
  	case PAGE_COLLECTION:
      nState = STATE_SCROLLER;
  		
      $('viewscroller').style.zIndex = ACTIVE_VIEW;
      $('viewdetailscroller').style.zIndex = INACTIVE_VIEW;
  		
      viewdetailscroller.hide();
      window.setTimeout(function() {
        viewscroller.show();
      }, 1000);
	  break;
	}
}

function showZoom() {
  switch (nPage) {
    case PAGE_COLLECTION:
      nState = STATE_COLLECTION_ZOOM;
      
      $('viewdetailscroller').style.zIndex = INACTIVE_VIEW;
      $('viewzoom').style.zIndex = ACTIVE_VIEW;
    	
      scrollnav.hide();      
      footer.hide();
      viewdetailscroller.hide();
      viewzoom.show(viewdetailscroller.getCurrItem());      
      break;
      
    case PAGE_MEDIA:
      nState = STATE_MEDIA_ZOOM;
      
      $('viewmediascroller').style.zIndex = INACTIVE_VIEW;
      $('viewmediazoom').style.zIndex = ACTIVE_VIEW;
    	
      footer.hide();
      viewscroller.hide();
      viewzoom.show(viewscroller.getCurrItem());      
      
      // do we want the scroll nav?
      if (viewzoom.getCurrItemPages() > 1) {
        scrollnav.show();      
      }
      else {
        scrollnav.hide();          	  
      }
      break;
  }
}

function hideZoom() {
  switch (nPage) {
  	case PAGE_COLLECTION:
      nState = STATE_DETAIL;
  		
      $('viewdetailscroller').style.zIndex = ACTIVE_VIEW;
      $('viewzoom').style.zIndex = INACTIVE_VIEW;
  		      
  	  viewzoom.hide();
      scrollnav.show();
      footer.restore();
      viewdetailscroller.show();
	  break;
	  
  	case PAGE_MEDIA:
      nState = STATE_SCROLLER;
      
      $('viewmediascroller').style.zIndex = ACTIVE_VIEW;
      $('viewmediazoom').style.zIndex = INACTIVE_VIEW;
  		      
  	  viewzoom.hide();
      scrollnav.show();
      footer.restore();
      viewscroller.show();
      break;
	}
}

function showPrevious() {
  switch (nState) {
    case STATE_HOME:
      viewhome.showPrevious();
      break;
  
    case STATE_SCROLLER:
      viewscroller.showPrevious();
      break;
      
    case STATE_DETAIL:
      viewdetailscroller.showPrevious();
      break;
      
    case STATE_MEDIA_ZOOM:
      viewzoom.showPrevious();
      break;      
  }
}

function showNext() {
  switch (nState) {
    case STATE_HOME:
      viewhome.showNext();
      break;
  
    case STATE_SCROLLER:
      viewscroller.showNext();
      break;
      
    case STATE_DETAIL:
      viewdetailscroller.showNext();
      break;
      
    case STATE_MEDIA_ZOOM:
      viewzoom.showNext();
      break;
  }
}

function showOverlay(strDialog, strData) {    
  switch (strDialog) {
    case "visit":    	
      nDialog = DIALOG_VISIT;
      
      overlay.show();
      var elemItem = viewdetailscroller.getCurrItemContent();
      dialogArrangeVisit.show(strDialog, elemItem.readAttribute('datafld'));
      break;
      
    case "enquiry":
      nDialog = DIALOG_VISIT;
      
      overlay.show();
      var elemItem = viewdetailscroller.getCurrItemContent();
      dialogArrangeVisit.show(strDialog, elemItem.readAttribute('datafld'));
      break;

    case "world":
      nDialog = DIALOG_WORLD_LOCATION;
      
      overlay.show();
      dialogWorldLocation.show(strData);
      break;
  }	
}

function hideOverlay() {
  overlay.hide();
  switch (nDialog) {
    case DIALOG_VISIT:
   	  dialogArrangeVisit.hide();
      break;
      
    case DIALOG_WORLD_LOCATION:
      dialogWorldLocation.hide();
      break;
  }    
  nDialog = DIALOG_NONE;
}

function submitForm(strFrom) {
  switch (nDialog) {
    case DIALOG_VISIT:
      dialogArrangeVisit.submit(strFrom);
   	  break;
   	  
   	default:
   	  form.submit();
   	  break;
  }
  return false;
}

function dialogValid(evt) {
  switch (nDialog) {
    case DIALOG_VISIT:
   	  hideOverlay();
      break;
  }
}

function collectionScrollerActiveItemClick(evt) {
  showDetail();
}

function mediaScrollerActiveItemClick(evt) {
  showZoom();
}

function zoomItemClick(evt) {
  hideZoom();
}

function locationClick(evt) {
  showOverlay('world', evt.memo.strName);  
}

function blogReady(evt) {
  // wait for blog so we know how long page is before showing footer
  footer.show();
}

function footerToggle(evt) {
  var appState = {footer: evt.memo.bOpen}; 
  jar.put('app', appState);	
}

