/**
 * @author tobz
 */
/**
 * photo viewer
 */
var viewer = {
  $: '',
  mainImage: {},
  largeImage: {},
  zoomImg: {},
  images: Array(),
  moveLeft: {},
  moveRight: {},
  nextBigImg: {},
  prevBigImg: {},
  wrapper: {},
  loader: {
    id: 'viewerLoader',
    src: base_url + '/static/images/ajax-loader.gif'
  },
  closeImgSrc: base_url + '/static/images/cross.png',
  blackOut: {},
  blackOutOpacity: 0.9,
  length: 0,
  moveBy: 132,
  viewNumber: 3,
  tweening: false,
  init: function(){
  
    if (typeof $ == "function") {
      this.$ = $;
    }
    else {
      this.$ = function(elmID){
        return document.getElementById(elmID);
      }
    }
    
    // create loader img and hide it
    var loader = new Element('img', this.loader).setProperties({
      style: 'position:absolute;z-index:55;top:40%;left:50%'
    });
    loader.inject($$('body')[0]).fade('hide');
    
    // set values and do list clicks
    if ($(this.wrapper)) {
      $(this.wrapper).getFirst().setStyle('width', viewer.moveBy * (viewer.images.length));
      this.length = this.moveBy * (viewer.images.length - this.viewNumber);
      for (var i = 0; i < this.images.length; i++) {
        $(this.images[i].parentNode).addEvent('click', function(e){
          if (this.tagName == 'A') {
            $(viewer.mainImage).src = this.href;
            $(viewer.mainImage).alt = this.rel;
          }
          e.stop();
        });
      }
      // show buttons
      if (this.length > 3) $(this.moveRight).addClass('active');
      if (this.length > 3) $(this.moveLeft).addClass('active');
    }
    else {
      return false;
    }
    
    // move list right
    if ($(this.moveRight)) {
      $(this.moveRight).addEvent('click', function(e){
        e.stop();
        if (viewer.tweening == true) return;
        var wrapper = $(viewer.wrapper);
        var list = $(wrapper.getFirst());
        var myFx = new Fx.Tween(list, {
          onStart: function(){
            viewer.tweening = true;
          },
          onComplete: function(){
            viewer.tweening = false
          }
        });
        if (parseInt(list.getStyle('left').replace('px', '')) > -viewer.length) {
          myFx.start('left', (parseInt(list.getStyle('left').replace('px', '')) - viewer.moveBy));
        }
      });
    }
    
    // move list left
    if ($(this.moveLeft)) {
      $(this.moveLeft).addEvent('click', function(e){
        e.stop();
        if (viewer.tweening == true) return;
        var wrapper = $(viewer.wrapper);
        var list = $(wrapper.getFirst());
        if (parseInt(list.getStyle('left').replace('px', '')) < 0) {
          var myFx = new Fx.Tween(list, {
            onStart: function(){
              viewer.tweening = true;
            },
            onComplete: function(){
              viewer.tweening = false
            }
          });
          myFx.start('left', (parseInt(list.getStyle('left').replace('px', '')) + viewer.moveBy));
        }
      });
    }
    
    // big image stuff
    if ($(this.mainImage)) {
      $(this.mainImage).addEvent('click', function(e){
        // loading
        viewer.loading(true);
        
        var src = this.alt;
        if (!$(viewer.largeImage)) {
          var bigPic = new Asset.image(src, {
            id: 'large-photo',
            onload: function(){
            
              // popup container
              if (!$('viewerPopupContainer')) {
                var container = new Element('div', {
                  id: 'viewerPopupContainer'
                }).inject(document.body, 'top');
              }
              else {
                var container = $('viewerPopupContainer');
              }
              container.appendChild(this);
              
              // close button
              var close = new Element('img', {
                id: 'closeViewer',
                src: viewer.closeImgSrc,
                alt: 'Close'
              }).addEvent('click', function(){
                $(viewer.largeImage).fireEvent('click');
              });
              container.appendChild(close);
              
              // get dims
              var size = $(viewer.largeImage).getSize();
              var position = $(viewer.largeImage).getPosition();
              
              container.setStyle('width', size.x);
              if (Browser.Engine.trident) $(container).setStyles({
                left: '50%',
                'margin-left': -(size.x / 2) + 'px'
              });
              
              // create and add blackout if id is set
              if (viewer.blackOut != '') {
                document.body.appendChild(new Element('div', {
                  id: viewer.blackOut
                }));
              }
              
              // create next/prev big pic buttons
              if (!$('nextBigImg')) {
                viewer.nextPic = new Element('a', {
                  id: 'nextBigImg',
                  href: '#next',
                  'class': 'button right'
                }).set('text', 'Next').addEvent('click', function(e){
                  // loading 
                  viewer.loading(true);
                  e.stop();
                  viewer.nextBigImg();
                });
                viewer.prevPic = viewer.nextPic.clone().setProperties({
                  id: 'prevBigImg',
                  href: '#previous',
                  'class': 'button left',
                  text: 'Prev'
                }).addEvent('click', function(e){
                  // loading 
                  viewer.loading(true);
                  e.stop();
                  viewer.prevBigImg();
                });
                ;
                viewer.nextPic.inject(viewer.largeImage, 'after');
                viewer.prevPic.inject(viewer.largeImage, 'after');
              }
              
              // close popup event
              $(viewer.largeImage).addEvent('click', function(){
                $(this).fade('toggle');
                $(viewer.blackOut).fade(0);
                $(viewer.nextPic).fade(0);
                $(viewer.prevPic).fade(0);
                $('viewerPopupContainer').fade(0);
								viewer.loading(false);
              });
              
              // scroll window to top
              //new Fx.Scroll(window).toTop();
              // hide to prevent fade out then toggle fade in
              $(viewer.largeImage).fade('hide').fade('toggle');
              $(viewer.blackOut).fade('hide').fade(viewer.blackOutOpacity);
              $(viewer.nextPic).fade('hide').fade('toggle');
              $(viewer.prevPic).fade('hide').fade('toggle');
              $('viewerPopupContainer').fade('hide').fade('toggle');
              viewer.loading(false);
            }
          });
        }
        else {
          //new Fx.Scroll(window).toTop();
					
					var newImg = new Element('img').cloneEvents($(viewer.largeImage));
					newImg.setProperty('id', $(viewer.largeImage).id).setProperty('src', src);
					newImg.replaces($(viewer.largeImage));
          $(viewer.largeImage).fade('hide').fade('in');
          var size = $(viewer.largeImage).getSize();
          if (Browser.Engine.trident) $('viewerPopupContainer').setStyles({
            left: '50%',
            'margin-left': -(size.x / 2) + 'px'
          });
          viewer.loading(false);
          $(viewer.blackOut).fade(viewer.blackOutOpacity);
          $(viewer.nextPic).fade('in');
          $(viewer.prevPic).fade('in');
          $('viewerPopupContainer').fade('in');
        }
      });
    }
    if ($(this.zoomImg)) {
      $(this.zoomImg).addEvent('click', function(){
        $(viewer.mainImage).fireEvent('click');
      });
    }
  },
  nextBigImg: function(){
    var path = $(viewer.largeImage).src.replace(window.location.protocol + '//' + window.location.host + base_url, '');
    var current = $$('a[rel="' + path + '"]')[0];
    
    if ($(current.parentNode).getNext()) {
			var newImg = new Element('img').cloneEvents($(viewer.largeImage));
			newImg.setProperty('id', $(viewer.largeImage).id);
			newImg.setProperty('src', $(current.parentNode).getNext().firstChild.rel);
      newImg.addEvent('load', function(){
        viewer.loading(false);
				this.replaces($(viewer.largeImage));
      });
    }
    else {
      viewer.loading(false);
    }
  },
  prevBigImg: function(){
    var path = $(viewer.largeImage).src.replace(window.location.protocol + '//' + window.location.host + base_url, '');
    var current = $$('a[rel="' + path + '"]')[0];
    
    if ($(current.parentNode).getPrevious()) {
			var newImg = new Element('img').cloneEvents($(viewer.largeImage));
			newImg.setProperty('id', $(viewer.largeImage).id);
      newImg.setProperty('src', $(current.parentNode).getPrevious().firstChild.rel);
      newImg.addEvent('load', function(){
        viewer.loading(false);
				this.replaces($(viewer.largeImage));
      });
    }
    else {
      viewer.loading(false);
    }
  },
  loading: function(action){
    if (action == true) {
      $(this.loader.id).fade('in', {
        duration: 2
      });
    }
    else {
      $(this.loader.id).fade('out');
    }
  }
}

window.addEvent('domready', function(){
  viewer.mainImage = 'main-photo'; // inline image
  viewer.largeImage = 'large-photo'; // big popup image
  viewer.zoomImg = 'zoom-icon'; // zoom overlay icon
  viewer.images = $$('#viewer-list-wrapper img'); // thumbnails
  viewer.wrapper = 'viewer-list-wrapper'; // thumbs wrapper div
  viewer.moveLeft = 'photo-list-left'; // move left button id
  viewer.moveRight = 'photo-list-right'; // move irght button id
  viewer.blackOut = 'blackout'; // darken background out div id
  viewer.init();
});


/**
 * search interactions
 */
window.addEvent('domready', function(){
  var searchInput = $('search');
  /* focus / blur */
  if (searchInput.value == searchInput.title) searchInput.setStyle('color', '#B3BFBA');
  searchInput.addEvent('focus', function(){
    if (this.value == this.title) {
      $(this).setStyle('color', '#EEE');
      this.value = '';
    }
  });
  searchInput.addEvent('blur', function(){
    if (this.value == "") {
      $(this).setStyle('color', '#B3BFBA');
      this.value = this.title;
    }
    // clear last results
    if ($('searchResults')) {
      setTimeout(function(){
        $('searchResults').destroy()
      }, 500);
    }
  });
  
  // disable autocomplete - it gets in the way of search results
  $(searchInput.parentNode).setProperty('autocomplete', 'off');
  
  /* very basic search as you type */
  searchInput.addEvent('keyup', function(e){
    // exit if no array to search
    if (!searchOptions) return false;
    // if key == a-z or backspace or delete or space
    if (e.code >= 65 && e.code <= 90 || e.code == 8 || e.code == 46 || e.code == 32) {
      // no results so clear result list and exit
      if (this.value == '') {
        if ($('searchResults')) $('searchResults').destroy();
        return false;
      }
      //      var reg = new RegExp('^' + this.value.toLowerCase()); // more exact match
      var reg = new RegExp(this.value.toLowerCase()); // anywhere in the string
      var matches = [];
      // search for matches
      for (var i = 0; i < searchOptions.length; i++) {
        if (matchText = searchOptions[i].match(reg)) {
          matches[matches.length] = matchText;
        }
      }
      // display results
      if (matches.length > 0) {
        // clear last results
        if ($('searchResults')) $('searchResults').destroy();
        // create new results
        var results = new Element('ul', {
          id: 'searchResults'
        });
        var li = {};
        for (var i = 0; i < matches.length; i++) {
          li = new Element('li').set('text', matches[i].input).inject(results);
          if (i == matches.length - 1) li.addClass('last');
          // add action
          li.addEvent('click', function(){
            $('search').value = $(this).get('text');
            $('search-form').submit();
            $(this.parentNode).destroy();
          });
        }
        results.inject($('search'), 'after');
      }
      else {
        if ($('searchResults')) $('searchResults').destroy();
      }
    }
    else if (e.code == 40) {
      // down key
      if (!$('searchResults')) return false;
      var sel = $$('#searchResults .active');
      if (typeof sel[0] == "undefined") {
        sel = $('searchResults').getFirst();
      }
      else {
        sel = sel[0];
        var options = $$('#searchResults li');
        for (var i = 0; i < options.length; i++) {
          if (options[i] == sel) {
            if (typeof options[i + 1] != "undefined") {
              sel.removeClass('active');
              sel = options[i + 1];
            }
            else {
              sel.removeClass('active');
              sel = options[0];
            }
            break;
          }
        }
      }
      
      $(sel).addClass('active');
      $('search').value = sel.get('text');
    }
    else if (e.code == 38) {
      // up key
      if (!$('searchResults')) return false;
      
      var sel = $$('#searchResults .active');
      if (typeof sel[0] == "undefined") {
        sel = $('searchResults').getFirst();
      }
      else {
        sel = sel[0];
        var options = $$('#searchResults li');
        for (var i = 0; i < options.length; i++) {
          if (options[i] == sel) {
            if (typeof options[i - 1] != "undefined") {
              sel.removeClass('active');
              sel = options[i - 1];
            }
            else {
              sel.removeClass('active');
              sel = options[options.length - 1];
            }
            break;
          }
        }
      }
      
      $(sel).addClass('active');
      $('search').value = sel.get('text');
    }
    else if (e.code == 27) {
      // esc key
      if ($('searchResults')) $('searchResults').destroy();
    }
  });
});


/**
 * LOAD SIFR
 */
if (typeof sIFR != "undefined" && 1==2) { // disable this block

  var DINschrift = {
    src: base_url + "/static/swf/DIN-schrift.swf",
    wmode: "transparent",
    tuneHeight: -6,
    useDomLoaded: true,
    ratios: [9, 1.27, 14, 1.19, 21, 1.16, 28, 1.13, 38, 1.12, 53, 1.11, 60, 1.1, 61, 1.11, 94, 1.1, 96, 1.09, 101, 1.1, 102, 1.09, 103, 1.1, 108, 1.09, 110, 1.1, 1.09]
  };
  
  sIFR.domains = ['*'];
  sIFR.useStyleCheck = true;
  sIFR.activate(DINschrift);
  
	sIFR.replace(DINschrift, {
    selector: '#header strong.byline',
    css: ['.sIFR-root {font-weight: normal; color:#EEEEEE; letter-spacing:2; text-transform: uppercase;} .sIFR-root .alt {color:#6BA542;}'],
    tuneWidth:10
  });
  sIFR.replace(DINschrift, {
    selector: '.openhomes h3',
    css: ['.sIFR-root {font-weight: normal; color:#EEEEEE; letter-spacing:2; text-transform: uppercase;}']
  });
  sIFR.replace(DINschrift, {
    selector: 'h3',
    css: ['.sIFR-root {font-weight: normal; color:#8DC24F; letter-spacing:2; text-transform: uppercase;}']
  });
  
  // sidebar stuff
  sIFR.replace(DINschrift, {
    selector: '#sidebar a.main, #boxes div a',
    css: ['.sIFR-root {font-weight: normal; color:#c3dc9a; letter-spacing:2; text-transform: uppercase;cursor:pointer;}'],
    selectable: false,
    onRollOut: function(obj){
      obj.changeCSS('.sIFR-root {font-weight: normal; color:#c3dc9a; letter-spacing:2; text-transform: uppercase;cursor:pointer;}')
    },
    onRollOver: function(obj){
      obj.changeCSS('.sIFR-root {font-weight: normal; color:#EEEEEE; letter-spacing:2; text-transform: uppercase;cursor:pointer;}')
    },
    onRelease: function(obj){
      if ($(this.id).parentNode.tagName == 'A') {
        window.location = $(this.id).parentNode.href;
      }
      else if ($(this.id).tagName == 'A') {
        window.location = $(this.id).href;
      }
    },
    forceSingleLine: true
  });
  
  sIFR.replace(DINschrift, {
    selector: '#sidebar label',
    css: ['.sIFR-root {font-weight: normal; color:#EEEEEE; letter-spacing:2; text-transform: uppercase;}'],
    selectable: false
  });
  
  // gloryshot h2
  sIFR.replace(DINschrift, {
    selector: '#gloryshot h2, #gloryshot > a',
    css: ['.sIFR-root {font-weight: normal; color:#EEEEEE; text-decoration:none; letter-spacing:2; text-transform: uppercase;}', '.sIFR-root a {font-weight: normal; color:#EEEEEE; text-decoration:none; letter-spacing:2; text-transform: uppercase;}', '.sIFR-root a:hover {font-weight: normal; color:#EEEEEE; text-decoration:none; letter-spacing:2; text-transform: uppercase;}'],
    selectable: false,
    tuneHeight: -2,
    filters: {
      DropShadow: {
        distance: 1,
        color: '#000000',
        strength: 1
      }
    },
    onRelease: function(obj){
      if ($(this.id).parentNode.tagName == 'A') {
        window.location = $(this.id).parentNode.href;
      }
      else if ($(this.id).tagName == 'A') {
        window.location = $(this.id).href;
      }
    }
  });
  // news h2
  sIFR.replace(DINschrift, {
    selector: '#news h2',
    css: ['.sIFR-root {font-weight: normal; color:#c3dc9a; text-decoration:none; letter-spacing:2; text-transform: uppercase;}']
  });
  
  // sold h2
  sIFR.replace(DINschrift, {
    selector: '.property h2',
    css: ['.sIFR-root {font-weight: normal; color:#EEEEEE; text-decoration:none; letter-spacing:2; text-transform: uppercase;}']
  });
  
  // h2 headings
  sIFR.replace(DINschrift, {
    selector: 'h2',
    css: ['.sIFR-root {font-weight: normal; color:#8DC24F; letter-spacing:2; text-transform: uppercase;}']
  });
  //quotes
  sIFR.replace(DINschrift, {
    selector: 'blockquote',
    css: ['.sIFR-root {font-weight: normal; color:#8DC24F; letter-spacing:2;}']
  });
}

/**
 * make gloryshot clickable - was less painful to do it here in js. it just was ok -_-
 */
window.addEvent('domready', function(){
  if ($('glory-image')) {
    $('glory-image').addEvent('click', function(){
      var link = $$('#gloryshot > a');
      if (link[0].tagName == 'A') window.location = link[0].href;
    });
    $('glory-image').setStyle('cursor', 'pointer');
  }
});

/**
 * newsletter form validation
 */
window.addEvent('domready', function(){
  if ($('newsletter-form') || $('alerts-form')) {
    var form = ($('newsletter-form') ? $('newsletter-form') : $('alerts-form'));
    form.addEvent('submit', function(e){
      if ($('agree').checked == false) {
        e.stop();
        $('agree').getNext().addClass('error');
      }
      else {
        $('agree').getNext().removeClass('error');
      }
    });
  }
});

/**
 * gloryshot image switcher
 *
 * @param {String} targetID
 * @param {String} altID
 * @param {Array} imageArray
 */
function switchImages(targetID, altID, imageArray){
  // add target to end of array
  imageArray[imageArray.length] = $(targetID).src;
  
  // preload images
  var images = new Asset.images(imageArray);
  var i = images.length - 1;
  var j = 0;
  var timer = setInterval(function(){
    var fadeOut, fadeIn;
    if (j == 0) {
      fadeOut = targetID;
      fadeIn = altID;
    }
    else {
      fadeOut = altID;
      fadeIn = targetID;
    }
    // start fadeout of existing img
    $(fadeOut).fade('out');
    // move to next image / reset to first
    i++;
    if (i >= images.length) i = 0;
    // create alt if not exists
    if (!$(altID)) {
      images[i].setProperty('id', 'glory-alt').setProperty('width', 720).setProperty('height', 268).setStyle('cursor', 'pointer').addEvent('click', function(){
        $('glory-image').fireEvent('click')
      }).inject(targetID, 'after');
    }
    else {
      // swap src (use original array not element array)
      $(fadeIn).setProperty('src', imageArray[i]);
    }
    // start fade in of new img
    $(fadeIn).fade('in');
    // swap fade in/out elements
    j == 0 ? j = 1 : j = 0;
  }, 5000);
}


// google analytics
var pageTracker;
window.addEvent('domready', function(){
  if (typeof _gat != "undefined") {
    pageTracker = _gat._getTracker("UA-1299072-35");
    pageTracker._trackPageview();
  }
});

/**
 * IE 6 FIXES
 */
/* fix IE 6 transparancy */
window.addEvent('domready', function(){
  // exit if IE 7 or not IE at all
  if (!Browser.Engine.trident || Browser.Engine.version >= 7) return false;
  // set path to spacer image
  var spacer = base_url + '/static/images/spacer.png'; // 8-bit transparent png
  // get all images on page
  var images = $$('img[src$=".png"]');
  // loop through images
  for (var i = 0; i < images.length; i++) {
    // if image is png, load transparency
    if (images[i].src.indexOf('.png') != -1) {
      // stop image from collapsing if no width/height set
      images[i].setStyle('width', images[i].width + 'px');
      images[i].setStyle('height', images[i].height + 'px');
      // apply alpha
      images[i].setStyle('filter', 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + images[i].src + '", sizingMethod="image")');
      // hide src image
      images[i].src = spacer;
    }
  }
});
/* Lets push the web forward aye? let IE 6 uses know there is a new version... or 2. */
window.addEvent('domready', function(){
  if (Browser.Engine.name == 'trident' && Browser.Engine.version < 7) {
    new Asset.css(base_url + '/static/css/pushup.css', {
      onload: function(){
        document.head.appendChild(this);
      }
    });
    new Asset.javascript(base_url + '/static/js/pushup.js', {
      onload: function(){
        document.head.appendChild(this);
        if (typeof Pushup.show != "undefined") {
          Pushup.show({
            images: base_url + '/static/images/pushup/'
          });
        }
      }
    });
  }
});

