jQuery(function($) {

  window.cache = [];

  var templateurl = $('script[src*="avenue.address.wp.js"]')
    .attr('src')
    .replace(/\/scripts.*/, '');
  var siteurl = templateurl
    .replace(/\/wp\-content.*/, '');

  hashedLinks();

  var dom_dynamic = $('#dynamic');
	var indicator = $('<div id="indicator"><img src="' + templateurl + '/scripts/avenue.address.wp.gif' + '"/></div>');
	
  $.address.change(function(event) {  
    var hash = event.value;
	  $('.current').removeClass('current');
	  if (hash != '' && hash != '/') {
	    $('a[href*="' + hash + '"]').addClass('current'); }
    
    makeRequest(hash);
    /*
    window.cache_index = -1;
    
    alert(hash);
    
    if (window.cache) {
	    for (var x in window.cache) {
	      if (window.cache[x][0] = '#!' + hash.replace(/^\/$/, '')) {
	        alert('index: ' + x + '  hash: ' + hash);
	        
	        window.cache_index = x; 
	      }   
	    }
    }
    

    if (window.cache_index == -1) {
      makeRequest(hash);
    }
    else {
		  dom_dynamic
		  .hide()
		  .html(window.cache[window.cache_index][1])
		  .fadeIn(function() {
		    $('#videoplayer').delay('slow').slideDown('normal', 'swing');
		    hashedLinks();
		    pageScripts();
		    window.cache_index = -1;
		  });
    }

*/
  });

  function makeRequest(hash) {
	  if (window.ajax_loading != true) {
		  var data = '?nonce=' + $('input[name="avenue_address_wp_nonce"]').val();
		  if (hash.match(/\/([^\/]*)\/*/)) {
		    data += '&pageslug=' + hash.match(/\/([^\/]*)\/*/)[1]; }
		  if (hash.match(/\/[^\/]+\/([^\/]*)\/*/)) {
		    data += '&postslug=' + hash.match(/\/[^\/]+\/([^\/]*)\/*/)[1]; }
		  $.ajax({
		    url: templateurl + '/scripts/avenue.address.wp.php' + data,
		    async: true,
            timeout: 20000,
		    beforeSend:function() {
		      window.ajax_loading = true;
		      dom_dynamic.html('').hide();
		      indicator.insertBefore(dom_dynamic);
		    },
		    success:function(response) {
		      window.ajax_loading = false;
		      indicator.remove();
	        dom_dynamic.html(response); 
	        dom_dynamic.fadeIn(240, function() {
			      hashedLinks();
			      cachePage();
			      pageScripts();
            $('#videoplayer').delay(480).fadeIn(240);
	        });
		    },
		    error:function() {}
		  });
	  }
  } //makeRequest


  function hashedLinks() {
	  $('a').each(function() {
	    var href = $(this).attr('href');
	    if (href.match(siteurl) || href.match(/^\/.*$/)) {
	      if (!href.match('#!/') && !href.match(/[\.jpg|\.png|\.jpeg|\.gif]$/)) {
	        $(this).attr('href', '#!' + href.replace(siteurl, ''));
	      }
      }    
	  });
	  $('a[href*="#!/"]').click(function(event) {
	    if (window.ajax_loading == true) { event.preventDefault(); }
	    else { $(this).address(); }
	  });
  } //hashedLinks


  function cachePage() {
    var cachetimer = window.setInterval(function() {
	    var content = $('#dynamic').html();
	    var hash = window.location.hash;
	    var page = [hash, content];
	    window.cache.push(page);
	    clearInterval(cachetimer);
    }, 5000);
    
  } //cachePage

  function pageScripts() {  
  
    //Prevent form page change
    $('input[type="submit"][id="contact-form"]').click(function(event) {
      event.preventDefault();
      var form = $(this).closest('form');
      var url = form.attr('action');      
      $.post(url, form.serialize(), function() {
        alert('Thank you - we will get in contact with you soon!');
        window.location.hash = '#!/';
      });
    });
   
    //Video rollovers
	  $('.video, #featuredvideo').hover(
		  //Over 		  
		  function() {
		    $('<div>')
		      .attr('id', 'overlay')
		      .hide()
		      .insertBefore($(this).find('img'))
		      .fadeIn('fast');
		    $(this).find('.maintitle').addClass('orange');
		      
		  },
		  //Out
		  function() {
		    $(this)
		      .find('#overlay')
		      .fadeOut('fast', function() { $(this).remove(); });
		    $(this).find('.maintitle').removeClass('orange');
		  }
	  );
	
    //Photo gallery
    
    //Cache dom elements and take our images
    var gallery = $('#gallery');
    var images = gallery.find('img');
    //var images = $('img', gallery);	
    //Clearing our gallery
    gallery.hide().html('');
        
    
    var galleryContent = '<div id="image"><div id="img"></div></div><div id="navigation"><div id="button-arrow-left"></div><div id="button-arrow-right"></div></div><div id="thumbnails"><div id="tray">';
    
    images.each(function() {
      var src = $(this).attr('src');
      galleryContent += '<div class="thumbnail"><div class="image"><img src="' + src + '"/></div></div>';
    });
    galleryContent += '<div class="clear"></div></div></div>';
    
    gallery.html(galleryContent).slideDown(240, 'swing');
      
    var trayWidth = images.length*80 + (images.length-1)*6 + 10;     
    var tray = $('#tray', gallery).css('width', trayWidth);        
    
    function clickLeftButton() {
      leftButton.unbind();
      var left = parseInt(tray.css('left').replace('px', ''));
      if (left < 0) {
        left += 860;
        tray.animate({'left':left}, 240, 'swing', function() {
          leftButton.click(function() { clickLeftButton(); });
        });
      }
      else {
        leftButton.click(function() { clickLeftButton(); });      
      }
    } //clickLeftButton
    
    function clickRightButton() {
      rightButton.unbind();
      var left = parseInt(tray.css('left').replace('px', '')) - 860;
      if (Math.abs(left) < trayWidth) {
        tray.animate({'left':left}, 240, 'swing', function() {
          rightButton.click(function() { clickRightButton(); });
        }); 
      }
      else {
        rightButton.click(function() { clickRightButton(); });      
      }
    } //clickRightButton
     
    var leftButton = $('#button-arrow-left', gallery).click(function() { clickLeftButton(); });
    var rightButton = $('#button-arrow-right', gallery).click(function() { clickRightButton(); });
    
           /* 
    $('#button-arrow-right', gallery).click(function() {
      var left = parseInt(tray.css('left').replace('px', '')) - 860;
      if (Math.abs(left) < trayWidth) {
        tray.animate({'left':left}, 240, 'swing'); }
    });

    $('#button-arrow-left', gallery).click(function() {
      var left = parseInt(tray.css('left').replace('px', ''));
      if (left < 0) {
        left += 860;
        tray.animate({'left':left}, 240, 'swing'); }
    });
*/
    var img = $('#img', gallery);

    $('.thumbnail', gallery).click(function(event) {
      src = $(this).find('img').attr('src');      
      img.fadeOut('fast', 'linear', function() {
        $(this).html('<img src="' + src + '" />').fadeIn();
      
      });
    });

    $('.thumbnail:first').trigger('click');


    //modal popups
    $('a[href*=".jpg"]').click(function(event) {
      event.preventDefault();
      var src = $(this).attr('href');
      
      var dom_pagepopup = $('<div id="pagepopup">')
        .prependTo('body');
        
      var dom_pageoverlay = $('<div id="pageoverlay">')
        .hide()
        .appendTo(dom_pagepopup)
        .fadeTo('fast', 0.5);


      var dom_image = $('<div id="image" title="Close">')
        .html('<table><tr><td class="orange"><span id="close">[close]</span></td></tr><tr><td><img src="' + src +'" /></td></tr></table></div>').hide().prependTo(dom_pagepopup);
      
      
        dom_image.fadeIn('fast', 'swing', function() {    
        
          var marginTop = dom_image.height()/2 - dom_image.height();
          dom_image.animate({'margin-top':marginTop + 'px'}, 'fast', 'swing');
        
	        $(document).keyup(function(event) {
	          if (event.keyCode == 27) { dom_pagepopup.fadeOut(); }
	        });
	          
	        $(this).click(function() {
	          dom_pagepopup.fadeOut('fast', 'swing');
	        });
        });
  
    });
    
	  	          window.ajax_loading = false;        

  } //pageScripts


  //Client login form behavior
  $('div#login').hover(
    function() { 
		  $('input', $(this)).click(function() {
		    $(this).val('');
		  });
    },
    function() {
      var timer = window.setInterval(function() {
	      $('input[name="username"]').val('Username');
	      $('input[name="password"]').val('Password');
        clearInterval(timer);
      }, 2000);
    } 
  );
  



});




