
DLX = function() {

  var $D = YAHOO.util.Dom;
  var $E = YAHOO.util.Event;
  var $A = YAHOO.util.Anim;
  var $M = YAHOO.util.Motion;
  var $ = $D.get;

  var fader;
  var gMap;
  var SWF;

  var addToMap = function(el) {

    var geocoder = new GClientGeocoder();

    var address = el.getElementsByTagName('address')[0].getElementsByTagName('span');
    var str_address = '';
    var title = '<div class="map-dialog">'+el.innerHTML+'</div>';

    for(var i = 1; i < address.length; i++) {
      if($D.hasClass(address[i], 'lat')) {
        var lat = address[i].innerHTML;
      } else if($D.hasClass(address[i], 'lon')) {
        var lon = address[i].innerHTML;
      } else {
        str_address += address[i].innerHTML+' ';
      }
    }

    if(lat != '0.0000000000' && lon != '0.0000000000') {
      var point = new GLatLng(lat, lon);
      DLX.gMap.setCenter(point, 13);
      var marker = new GMarker(point);
      DLX.gMap.addOverlay(marker);
      marker.openInfoWindowHtml(title);
    } else {
      geocoder.getLatLng(
        str_address,
        function(point) {
          if (!point) {
            alert('Sorry, "'+str_address+'" was not found in Google Maps.');
          } else {
            DLX.gMap.setCenter(point, 13);
            var marker = new GMarker(point);
            GEvent.addListener(marker, "click", function() {
              marker.openInfoWindowHtml(title);
            });
            DLX.gMap.addOverlay(marker);
            marker.openInfoWindowHtml(title);
          }
        }
      );
    }
  };

  return {
    gMap: gMap,
    SWF: SWF,

    activateTab: function(el) {
      if(!el) { el = this; }
      $D.removeClass($D.getChildren(el.parentNode), 'active');
      var els = [$D.getNextSibling(el), el];
      $D.addClass(els, 'active');
      var anim = new $A(el.parentNode, {height: 
          {to: els[0].offsetHeight + 100}}, .5);
      anim.animate();
    },

    imageFader: function() {

      var Images = $('gallery').getElementsByTagName('li');
      
      var Cur = 0;
      var Next = 0;
      
      for(var i = 0; i < Images.length; i++) {
        if($D.getStyle(Images[i], 'opacity') > 0) {
          Cur = i;
        } else {
          $D.setStyle(Images[i], 'opacity', 0);
        }
      }
      
      if(Cur != Images.length - 1) {
        Next = Cur + 1;
      }

      var ImageOut = new YAHOO.util.ColorAnim(Images[Cur], {opacity: { from: 1, to: 0 }});

      ImageOut.onComplete.subscribe(function(e, anim) { 
        $D.removeClass(Images[Cur], 'active');
        $D.addClass(Images[Next], 'active');
        var ImageIn = new YAHOO.util.ColorAnim(Images[Next], {opacity: { from: 0, to: 1 }});
        ImageIn.animate();
      });

      ImageOut.animate();

    },

    init: function() {
      
      if($('addresses')) {
        var els = $('addresses').getElementsByTagName('li');
        var l = Math.ceil(els.length / 3);
        var col1 = document.createElement('ul');
        var col2 = document.createElement('ul');
        var col3 = document.createElement('ul');
        $D.addClass([col1, col2, col3], 'resultset');

        for(var i = 0; i < els.length; i++) {
          if(i < l) {
            col1.appendChild(els[i].cloneNode(true));
          } else if (i < (l * 2)) {
            col2.appendChild(els[i].cloneNode(true));
          } else if (i < (l * 3)) {
            col3.appendChild(els[i].cloneNode(true));
          }
        }

        var orig = $('addresses').getElementsByTagName('ul')[0];
        $('addresses').replaceChild(col1, orig);
        $('addresses').appendChild(col2);
        $('addresses').appendChild(col3);

      }

      var inputs = $('wrapper').getElementsByTagName('input');
      for(var i = 0; i < inputs.length; i++) {
        if(inputs[i].getAttribute('type') == 'text' 
            && !$D.hasClass(inputs[i], 'standard')) { 
          inputs[i].value = inputs[i].getAttribute('alt');
        }
      }

      $E.on(inputs, 'focus', function(e) {
        if(this.getAttribute('type') != 'text'
            || $D.hasClass(this, 'standard')) { return; }
        if(this.value == this.getAttribute('alt')) {
          this.value = '';
        }
      });

      $E.on(inputs, 'blur', function(e) {
        if(this.getAttribute('type') != 'text'
            || $D.hasClass(this, 'standard')) { return; }
        if(this.value == '') {
          this.value = this.getAttribute('alt');
        }
      });
      
      if($('addresses') && !$('googlemaps')) {

        var gDialog = new YAHOO.widget.Dialog("gmap",
          { 
            draggable: false,
            height : "484px",
            width : "645px",
            fixedcenter : true,
            visible : false,
            modal: true,
            close: false,
            underlay: false,
            easing: YAHOO.util.Easing.easeBothStrong
          }
        );
        
        var dialogHead = document.createElement('div');
        var dialogClose = document.createElement('a');
        var dialogH1 = document.createElement('h1');
        dialogClose.id = 'gDialog-close';
        dialogClose.innerHTML = 'close';
        $D.addClass(dialogHead, 'photoViewer-header');
        $D.addClass(dialogClose, 'photoViewer-close');
        dialogHead.appendChild(dialogH1);
        dialogHead.appendChild(dialogClose);
        
        var dialogBody = document.createElement('div');
        var dialogMap = document.createElement('div');
        $D.addClass(dialogBody, 'photoViewer-imageCont');
        dialogMap.id = 'gDialog-map';
        dialogBody.appendChild(dialogMap);

        gDialog.setHeader(dialogHead);
        gDialog.setBody(dialogBody);

        gDialog.render(document.body);

        $D.addClass('gDialog', 'photoViewer-viewer');
        $D.addClass('gDialog_mask', 'photoViewer-mask');
        
        $E.on('gDialog-close', 'click', function(e) {
          $E.stopEvent(e);
          gDialog.hide();
        });

        $E.on($('addresses').getElementsByTagName('li'), 'click', function(e) {
          $E.stopEvent(e);
          DLX.gMap = new GMap2(document.getElementById("gDialog-map"));
          var mapTypeControl = new GMapTypeControl();
          var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
          var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,10));
          DLX.gMap.addControl(mapTypeControl, topRight);
          DLX.gMap.addControl(new GLargeMapControl());

          var near = $D.getElementsByClassName(this.className, 'li', 'addresses');
          for(var i = 1; i < near.length; i++) {
            if(near[i] != this) {
              addToMap(near[i]);
            }
          }
          addToMap(this);

          gDialog.show();

        });
        
      }

      if($('googlemaps')) {

        if (GBrowserIsCompatible()) {
          DLX.gMap = new GMap2(document.getElementById("googlemaps"));
          var mapTypeControl = new GMapTypeControl();
          var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
          var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,10));
          DLX.gMap.addControl(mapTypeControl, topRight);
          DLX.gMap.addControl(new GLargeMapControl());

          var geocoder = new GClientGeocoder();

          if($('hq')) {
            var near = $D.getElementsByClassName($('hq').className, 'li', 'addresses');
            for(var i = 1; i < near.length; i++) {
              if(near[i] != $('hq')) {
                addToMap(near[i]);
              }
            }
            addToMap($('hq'));
          }

          if($('addresses')) {
            var addresses = $('addresses').getElementsByTagName('li');
            $E.on(addresses, 'click', function(e) {
              $E.stopEvent(e);
              var near = $D.getElementsByClassName(this.className, 'li', 'addresses');
              for(var i = 1; i < near.length; i++) {
                if(near[i] != this) {
                  addToMap(near[i]);
                }
              }
              addToMap(this);
            })
          }

        }
      }

      if($('newsletter')) {

        var str_email = 'e-mail address';

        $E.on($('newsletter').getElementsByTagName('input'), 'focus', function(e) {

          if(this.getAttribute('type') == 'submit') {
            return;
          }

          $D.addClass(this.parentNode.parentNode.parentNode, 'active');
          $('email').setAttribute('alt', str_email);

          $E.on($('close'), 'click', function(e) {
            $D.removeClass(this.parentNode, 'active');
            if($('email').value == str_email) {
              $('email').setAttribute('alt', 'newsletter');
              $('email').value = 'newsletter';
            }
          });

        });
        $E.on($('newsletter').getElementsByTagName('input'), 'blur', function(e) { 
          if(this.getAttribute('type') != 'text') { return; }
          if(this.value == '') {
            this.value = this.getAttribute('alt');
          }
        });
        $E.on($('newsletter'), 'submit', function(e) { 
          var ins = this.getElementsByTagName('input');
          for(var i = 0; i < ins.length; i++) {
            if(ins[i].getAttribute('type') == 'text') {
              if(ins[i].value == ins[i].getAttribute('alt')) {
                ins[i].value = '';
              }
            }
          }
        });
      }

      if($('second')) {
        var LIs = $('second').getElementsByTagName('li');
        $E.on(LIs, 'mouseover', function() {
          var preview = this.getElementsByTagName('span');
          if(preview.length == 1) {
            $D.setStyle(preview, 'display', 'block');
          }
        });
        $E.on(LIs, 'mouseout', function() {
          var preview = this.getElementsByTagName('span');
          if(preview.length == 1) {
            $D.setStyle(preview, 'display', 'none');
          }
        });
      }

      if($('colors')) {
        $D.setStyle($('colors').getElementsByTagName('li'), 'cursor', 'pointer');
        $E.on($('colors').getElementsByTagName('li'), 'click', function(e) {
          $E.stopEvent(e);
          var style = $D.getStyle(this, 'backgroundImage');
          $D.removeClass(this.parentNode.getElementsByTagName('li'), 'selected');
          var url = style.substring(4, style.indexOf(')')).replace('.1.', '.2.');
          $D.addClass(this, 'selected');
          $('detail').src = url;
        });
      }

      if($('gallery')) {

        var Images = $('gallery').getElementsByTagName('li');

		  if(Images.length > 1) {
	
			var Start = Math.floor(Math.random() * (Images.length - 0 + 1));
	
			$D.setStyle(Images, 'opacity', 0);
			$D.removeClass(Images, 'hidden');
	
			$D.setStyle(Images[Start], 'opacity', 1);
			$D.addClass(Images[Start], 'active');
	
			$D.removeClass($('next'), 'hidden');
	
			fader = setInterval(DLX.imageFader, 5000);
		  }


      }

      var youTubeLinks = $D.getElementsByClassName('youtube', 'a', 'content');

      if(youTubeLinks.length) {

        var dialog = new YAHOO.widget.Dialog("youtube",
          { 
            draggable: false,
            height : "384px",
            width : "445px",
            fixedcenter : true,
            visible : false,
            modal: true,
            close: false,
            underlay: false,
            easing: YAHOO.util.Easing.easeBothStrong
          }
        );
        
        var dialogHead = document.createElement('div');
        var dialogClose = document.createElement('a');
        var dialogH1 = document.createElement('h1');
        dialogClose.id = 'youtube-close';
        dialogClose.innerHTML = 'close';
        $D.addClass(dialogHead, 'photoViewer-header');
        $D.addClass(dialogClose, 'photoViewer-close');
        dialogHead.appendChild(dialogH1);
        dialogHead.appendChild(dialogClose);
        
        var dialogBody = document.createElement('div');
        var dialogVideo = document.createElement('div');
        $D.addClass(dialogBody, 'photoViewer-imageCont');
        dialogVideo.id = 'youtube-video';
        dialogBody.appendChild(dialogVideo);

        dialog.setHeader(dialogHead);
        dialog.setBody(dialogBody);

        dialog.render(document.body);

        $D.addClass('youtube', 'photoViewer-viewer');
        $D.addClass('youtube_mask', 'photoViewer-mask');
        
        $E.on('youtube-close', 'click', function(e) {
          $E.stopEvent(e);
          dialog.hide();
        });

        dialog.hideEvent.subscribe(function(){
          DLX.SWF.removeSWF('youtube-video');
          var dialogBody = document.createElement('div');
          var dialogVideo = document.createElement('div');
          $D.addClass(dialogBody, 'photoViewer-imageCont');
          dialogVideo.id = 'youtube-video';
          dialogBody.appendChild(dialogVideo);
          dialog.setBody(dialogBody);
          if($('gallery')) {
            fader = setInterval(DLX.imageFader, 5000);
          }
        });

        $E.on(youTubeLinks, 'click', function(e) {
          $E.stopEvent(e);
          if($('gallery')) {
            clearInterval(fader);
          }
          dialog.show();
          var url = 'http://www.youtube.com/v/'+this.href.substr(this.href.indexOf('=')+1);
          DLX.SWF.embedSWF(url, "youtube-video", "425", "344", "9.0.0");
          $D.addClass('youtube-video', 'photoViewer-showcaseImage');
          $D.addClass('youtube-video', 'photoViewer-showcase');
        });
      }

      if($('infobox')) {

        $D.addClass($('performance'), 'graphic');
        var LIs = $('performance').getElementsByTagName('li');
        for(var i = 0; i < LIs.length; i++) {
          LIs[i].innerHTML = LIs[i].innerHTML.replace(/[^0-9\.]*/, '');
          if(i == 0) {
            if(LIs[i].innerHTML.indexOf('.') != -1) {
              $D.addClass(LIs[i], 'decimal');
              $D.setStyle(LIs[i], 'paddingLeft', (LIs[i].innerHTML - 0.5) * 32+'px');
            } else {
              $D.setStyle(LIs[i], 'paddingLeft', (LIs[i].innerHTML - 1) * 32+'px');
            }
          }
        }

        var tabIdx = $('infobox').getElementsByTagName('h2'); 
        $D.addClass(tabIdx, 'tab');
        $D.addClass(tabIdx[0], 'first');
        $D.addClass(tabIdx[tabIdx.length - 1], 'last');
        $D.addClass($('infobox').getElementsByTagName('ul'), 'tab');
        $D.addClass($('infobox').getElementsByTagName('form'), 'tab');
        $E.on(tabIdx, 'click', function() { DLX.activateTab(this) });
        if($D.hasClass($('feedback'), 'error')) {
          DLX.activateTab(tabIdx[2]);
        } else {
          DLX.activateTab(tabIdx[0]);
        }
      }

      if($('ads')) {
        
        var Images = $('ads').getElementsByTagName('img');
        
        for(var i = 0; i < Images.length; i++) {
          var img = new Image();
          if(!$D.hasClass(Images[i].parentNode.parentNode, 'active')) {
            img.setAttribute('src', Images[i].src.replace('.small.', '.large.'));
          } else {
            img.setAttribute('src', Images[i].src.replace('.large.', '.small.'));
          }
        }

        $E.on($('ads').getElementsByTagName('a'), 'click', function(e) {

          var active = $D.getElementsByClassName('active', 'li', 'ads')[0];
          var img = active.getElementsByTagName('img')[0];

          if(!$D.hasClass(this.parentNode, 'active')) {

            $E.stopEvent(e);

            if($D.hasClass('contest', 'active')) {
              $D.removeClass('contest', 'active');
              $D.setXY(img, [$D.getX(img) - 120, $D.getY(img)]);
            }

            active.getElementsByTagName('img')[0].src = 
                active.getElementsByTagName('img')[0].src.replace('.large.', '.small.');
            $D.removeClass(active, 'active');
            $D.addClass(this.parentNode, 'active');
            this.getElementsByTagName('img')[0].src = 
                this.getElementsByTagName('img')[0].src.replace('.small.', '.large.');

          } else if (this.parentNode.id == 'contest-teaser') {

            $E.stopEvent(e);

            if($D.hasClass('contest', 'active')) {
              $D.removeClass('contest', 'active');
              var xy = [$D.getX(img) - 120, $D.getY(img)];
            } else {
              $D.addClass('contest', 'active');
              var xy = [$D.getX(img) + 120, $D.getY(img)];
            }

            var anim = new $M(img, {points: {to: xy}}, .5);
            anim.animate();

          }
        })
      }

    }

  }


}();

YAHOO.util.Event.onContentReady('content', DLX.init);
DLX.SWF = swfobject;