// JSLint options:
/*jslint browser: true,
eqeqeq: true,
immed: false,
newcap: true,
nomen: false,
onevar: true,
plusplus: false,
undef: true,
white: false,
strict: false*/
/*global window, alert, dojo, components, MenuBar, SlideCarousel, DeviceOrientation, CarouselControls, RewriteEmail, FlickrDataLoader, FormValidation, pw */

//set the 'components' variable to the relative path to the 'components' folder (seen from your dojo.js)
//dojo.registerModulePath("components", "http://westendorp.alwaysdata.net/media/scripts/componensts");
dojo.registerModulePath("components", "/media/scripts/components");

var pwGui = {};

//add js class to html tag
document.getElementsByTagName("html")[0].className += " js";

//if the browser is IE...
if(dojo.isIE){
  dojo.require(["components.ChromeFrameMessage"], function(){
    pwGui.IEMessage = new components.ChromeFrameMessage(9);
  });
}

function initGUI(pw){
  //add menuBar animations
  require(["dojo/fx/easing", "components/MenuBar"], function(){
    var menuBarElement = pw.byId("menuBar"),
        menuBarSlider;

    menuBarSlider = new MenuBar(menuBarElement);
  });

  //animate the 'findme' links on the 'about me' page
  pwGui.findMeLinks = function(){
    var findMeLinks = pw.query('.findMeLinks a');
    pw.forEach(findMeLinks, function(linkElement){
      var animating = false;
      dojo.connect(linkElement, "onmouseover", function(e){
        dojo.stopEvent(e);
        if(!animating){
          animating = true;
          dojo.animateProperty({
            node: linkElement,
            duration:300,
            easing: dojo.fx.easing.quadOut,
            properties: {
              top: { end: '-20', unit:"px" }
            },
            onEnd: function(){
              dojo.animateProperty({
                node: linkElement,
                duration:1000,
                easing: dojo.fx.easing.elasticOut,
                properties: {
                  top: { end: '0', unit:"px" }
                },
                onEnd:function(){
                  animating = false;
                }
              }).play();
            }
          }).play();
        }
      });
    });
  };

  pwGui.accelerometerTrick = function(){
    //execute logic for orientation tool
    var bodyElm = pw.query("body")[0];
    dojo.connect(bodyElm, "onkeypress", function(e){
      if(e.charOrCode === "g"){
        var gravityThing = new DeviceOrientation();
        pw.addClass(gravityThing.elements[1], "second");
      }
    });
  };

  //set hover effect on image thumbnails
  pwGui.animatePhotos = function(){
    var photos = pw.query(".photoHolder img");
    pw.forEach(photos, function(photo){
        dojo.connect(photo, "onmouseover", function(){
          dojo.style(photo, "transform", "scale(1.1)");
      });
      dojo.connect(photo, "onmouseout", function(){
        dojo.style(photo, "transform", "scale(1.0)");
      });
    });
  };

  //get the photos from flickr
  pwGui.getPhotos = function(){
    var photoMenu = pw.query('body > div > div section nav ul');

    //listen to photosLoaded event
    dojo.subscribe("photosLoaded", function(message){
      pwGui.animatePhotos();
    });

    pw.forEach(photoMenu, function(menu){
      var holder = pw.query("div section article")[0],
          photoLoader = new FlickrDataLoader(menu, holder);
    });
  };

  pwGui.workSlider = function(){
    var itemHolder = pw.query(".sliderContentHolder");
    pw.forEach(itemHolder, function(holder){
      var items = pw.query(".item", holder),
          carouselArgs,
          carouselInstance,
          controlsArgs,
          carouselController;

      carouselArgs = {
        holder: holder,
        items: items,
        autoPlay: false,
        delay: 2500,
        duration: 750,
        direction: 'fwd' //can be set to 'fwd' or 'rwd'
      };
      carouselInstance = new SlideCarousel(carouselArgs);

      controlsArgs = {
        carousel: carouselInstance,
        btnPrev: pw.query(".leftBtn")[0],
        btnNext: pw.query(".rightBtn")[0]
      };
      carouselController = new CarouselControls(controlsArgs);
    });
  };

  //rewrite the e-mailadress
  pwGui.rewriteEmail = function(){
    var oldEmail = pw.query('form p a');
    pw.forEach(oldEmail, function(element){
      var emailRewriter = new RewriteEmail(element);
    });
  };

  //form focus handling
  pwGui.formFocus = function(){
    var inputElements = pw.query('input, textarea');
    pw.forEach(inputElements, function(elm){
      dojo.connect(elm, "onfocus", function(){
        pw.addClass(elm, "focus");
      });
      dojo.connect(elm, "onblur", function(){
        pw.removeClass(elm, "focus");
      });
    });
  };

  //add formvalidation
  pwGui.formValidation = function(){
    //listen to submit event on every form on the page
    dojo.forEach(pw.query("form"), function(formElm){
      dojo.connect(formElm, "submit", function(e){
        var inputElements = pw.query('input, textarea', formElm),
            validationResult = new FormValidation(inputElements)._invalidFields;

        if(validationResult.length > 0){
          dojo.stopEvent(e);
        }
        else {
          //dojo.stopEvent(e);
          //sendForm();
        }
      });
    });
  };
}

require(["/media/scripts/toolset.js"], function(pw){
  initGUI(pw);
});

