$(function(){
  $('[data-default]').each(function(){
    var $this = $(this);
    var pass = $this.attr('type') == 'password';
    var def = $this.attr('data-default');
    function defBlur (){
      if($this.val() == '') {
        $this.addClass('default').val(def);
      }
    }
    function defFocus (){
      if($this.val() == def)
        $this.removeClass('default').val('');
    }
    $this.blur(defBlur).focus(defFocus).parents('form').submit(defFocus);
    if ($this.val() == def)
      $this.addClass('default');
  });
  $(document.getElementById('main_site_search_box_text_input')).focus(function(){
    $(this).stop().animate({width:230}, {duration:200});
  }).blur(function(){
    $(this).stop().animate({width:156}, {duration:200});
  });
  $('.popup').each(function(){
    var $this = $(this);
    var width = $this.attr('data-popup-width') || 592;
    var height = $this.attr('data-popup-height') || 374;
    var url = $this.attr('data-popup-url') || $this.attr('href');
    $this.colorbox({
      iframe: true,
      url: url,
      innerWidth: width,
      innerHeight: height,
      fixed: true,
      opacity: .3,
      fastIframe: false
    });
  });
	if (document.getElementById('start_page_editor'))
		var pageEditor = new PageEditor();
  
  $('[data-require-all=texts]').each
  (
    function ()
    {
      $form = $(this);
      $fields = $form.find('input[type=text]');
      $form.submit
      (
        function (e)
        {
          var v;
          for ( var i = 0 ; i < $fields.length ; i++ )
          {
            v = $.trim($($fields[i]).val());
            if (v == '')
            {
              alert('Please make sure all form fields are filled out before submitting. Thank you!');
              e.preventDefault();
              $fields.blur();
              return;
            }
            else
            {
              console.log(v);
            }
          }
        }
      );
    }
  );
  
});

function PageEditor() {
	var self = this;
	var edit_link;
	var edit_mode = false;
	var editPopup = {
		dom: null,
		name: 'contenteditwindow',
		url: function(i) { i = i.split(':'); var u = '/admin/edit?d=f&id='+i[0]; if (i.length > 1) u+= '&c='+i[1]; return u; },
		w:500,
		h:375,
		open: function(id, e){
			var url = editPopup.url(id);
			var sh = window.screen.height;
			var sw = window.screen.width;
			if (e.screenX < 0)
				sw = sw*-1;
			var top = Math.round(e.screenY - 100);
			var left = Math.round(sw/2 - editPopup.w/2);
			editPopup.dom = window.open(url, editPopup.name, 'width='+editPopup.w+',height='+editPopup.h+',left='+left+',top='+top);
			if (window.focus) {editPopup.dom.focus()}
			return false;
		}
	};
	var editables;
	var init = function() {
		edit_link = $(document.getElementById('start_page_editor')).click(toggleEditMode);
		editables = $('[data-editable]');
		if (window.location.hash == '#edit')
			startToggleMode();
	};
	var toggleEditMode = function(e) {
		if (edit_mode)
			stopToggleMode();
		else
			startToggleMode();
	}
	var startToggleMode = function() {
		window.location.hash = '#edit';
		editables.each(function(){
			$(this).addClass('show_editable').click(click_editable);
		});
		edit_mode = true;
		edit_link.html('Turn Edit Mode Off');
	};
	var initCaseStudySet = function(){
		$(this).addClass('show_editable').click(click_case_study_set);
	};
	var click_case_study_set = function(e) {
		editPopup.open('case_studies', 0, e);
		e.preventDefault();
	};
	var click_editable = function(e) {
		editPopup.open($(this).attr('data-editable'), e);
		e.preventDefault();
	};
	
	var stopToggleMode = function() {
		window.location.hash = '';
		editables.each(function(){
			$(this).removeClass('show_editable').unbind('click', click_editable);
		});
		edit_mode = false;
		edit_link.html('Edit This Page');
	};
	init();
}

function setupCarouselWidget(config) {
  var $container, $tray, $items, item_width, $frame, 
      current_left = 0, max_left, $next, $prev,
      csel_width, csel_height, videos = {};
  function init() {
    $tray = $(document.getElementById(config.listId));
    var newDiv = document.createElement('div');
    $container = $tray.wrap(newDiv).parent().addClass('carousel_container').addClass(config.containerClass);
    $tray.before('<div class="loading"></div>');
    csel_width = $container.width();
    csel_height = $container.height();
    $tray = prep($tray, 'carousel_tray');
    $frame = prep($tray.before(newDiv).parent(), 'loading');
    $frame = prep($tray.wrap(newDiv).parent(), 'carousel_frame');
    prep($tray.wrap(newDiv).parent(),'carousel_display');
    $items = $('.item', $tray);
    item_width = csel_width/config.visibleItems;
    $items.width(item_width);
    $tray.width(item_width*$items.length);
    max_left = -item_width*($items.length-config.visibleItems);
    if (max_left > 0) max_left = 0;
    $next = $(document.createElement('a')).fadeTo(0, .3).addClass('next').click(next).appendTo($frame);
    $prev = $(document.createElement('a')).fadeTo(0, .3).addClass('prev').click(prev).appendTo($frame);
    prepForProgress();
    if (config.videoPlaceholders) {
      window.onYouTubePlayerReady = function(api_id){
        videos[api_id.substr(3)].playerReady();
      }
      for ( var i = 0 ; i < config.videoPlaceholders.length ; i++ ) {
        videos[config.videoPlaceholders[i].id] = new flexibleVideoPlayer({
          p_id: config.videoPlaceholders[i].id,
          parent_selector: '.video-slide',
          ph_id: config.videoPlaceholders[i].ph_id,
          vid: config.videoPlaceholders[i].vid
        });
      }
    }
    $('.loading', $container).delay(300).fadeOut(250);
  }
  function prep($e, n){return $e.addClass(n).width(csel_width).height(csel_height)}
  function prepForProgress(){
    if (current_left == max_left)
      $next.fadeTo(150, .3).addClass('disabled');
    else
      $next.fadeTo(150, 1).removeClass('disabled');
    
    if (current_left == 0)
      $prev.fadeTo(150, .3).addClass('disabled');
    else
      $prev.fadeTo(150, 1).removeClass('disabled');
  }
  function progress(delta){
    var new_left = (-delta*item_width)+current_left;
    if (new_left < max_left)
      new_left = max_left;
    if (new_left > 0)
      new_left = 0;
    if (new_left != current_left) {
      current_left = new_left;
      $tray.animate({left:new_left}, {duration:400});
    }
    prepForProgress();
  }
  function next() {
    progress(config.visibleItems);
  }
  function prev() {
    progress(-config.visibleItems);
  }
  $(init);
}

function flexibleVideoPlayer(config){
  var self = this;
  var $player_cont = $(document.getElementById(config.p_id));
  var $cont = $player_cont.parents(config.parent_selector);
  
  var size = {
    cont: {
      w: $cont.width(),
      h: $cont.height()
    },
    controls: {
      w: 0,
      h: 0
    },
    video: {
      w: $player_cont.width(),
      h: $player_cont.height()
    },
    timeline: {
      w: 0,
      h: 0
    }
  };
  
  size.controls.w = size.cont.w;
  size.controls.h = size.cont.h - 40;
  
  var dom_id = 'obj_'+config.p_id;
  var api_id = 'api'+config.p_id;
  var statusChangeName = 'ytStatusChangeEvent_'+config.p_id;
  var $pause = null;
  var $play = null;
  var player = null;
  var $buffer = null;
  var flags = {
    buffering: true,
    ready: false
  };
  self.playerReady = function(){
    player = document.getElementById(dom_id);
    player.cueVideoById(config.vid);
    window[statusChangeName] = self.statusChange;
    player.addEventListener('onStateChange', statusChangeName);
    timeline.init();
    flags.ready = true;
  }
  self.init = function (){
    swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&playerapiid="+api_id,
      config.ph_id, size.video.w, size.video.h, "8", null, null, {allowScriptAccess: "always", wmode:'opaque'}, {id: dom_id});
    $pause = $('.pause', $cont).click(self.pause);
    $play = $('.play', $cont).click(self.play);
    $pause = $('.pause', $cont).click(self.pause);
    $buffer = $('.buffer', $cont).show();
  }
  
  var timeline = {
    sec: 0,
    allowMove: true,
    intervalId: 0,
    init: function(){
      timeline.$dom = $('.timeline', $cont).mousedown(timeline.clickHandle);
      timeline.startPageX = timeline.$dom.position().left-5;
      timeline.$handle = $('.handle', $cont);//.mousedown(timeline.clickHandle)
      timeline.start = (size.controls.w/4);
      timeline.stop = (size.controls.w/4)+(size.controls.w/2);
      timeline.width = timeline.stop-timeline.start
      timeline.duration = player.getDuration();
      timeline.setPosition();
    },
    setPosition: function(){
      timeline.$dom.css('left', timeline.start).css('width', timeline.stop-timeline.start);
    },
    startMoving: function(){
      if (timeline.duration > 0)
        timeline.intervalId = setInterval(timeline.intervalMove, 350);
      else
        timeline.waitForMetaData(timeline.startMoving);
    },
    stopMoving: function(){
      clearInterval(timeline.intervalId);
    },
    intervalMove: function(){
      if (timeline.allowMove) {
        timeline.sec = player.getCurrentTime();
        timeline.$handle.css('left', Math.round((timeline.sec/timeline.duration)*(timeline.width)));
      }
    },
    clickHandle: function (ev){
      /*console.log('------click------------');
      console.log('--------------'+ev.pageX);
      $(window).bind('mousemove', timeline.dragHandle).bind('mouseup', timeline.releaseHandle);
      self.pause();
      console.log(timeline.$dom.position());
      $(window).bind('mousemove', timeline.dragHandle).bind('mouseup', timeline.releaseHandle);*/
    },
    dragHandle: function (ev){
      /*var x = ev.pageX-timeline.startPageX;
      if (x > 0 && x <= timeline.width)
        timeline.$handle.css('left', x);*/
    },
    releaseHandle: function (ev){
      /*console.log('------release----------');
      console.log('--------------'+ev.pageX);
      $(window)
        .unbind('mouseup', timeline.releaseHandle)
        .unbind('mousemove', timeline.dragHandle);
      if (timeline.duration <= 0) {
        timeline.allowMove = false;
        timeline.waitForMetaData(timeline.releaseHandle);
      } else {
        player.seekTo(((timeline.$handle.position().left+3)/timeline.width)*timeline.duration, true);
      }*/
    },
    waitForMetaData_callback: function(){},
    waitForMetaData: function (callback){
      if (typeof callback == 'function') {
        self.play();
        timeline.waitForMetaData_callback = callback;
      }
      timeline.allowMove = false;
      timeline.duration = player.getDuration();
      if (timeline.duration > 0) {
        timeline.allowMove = true;
        timeline.waitForMetaData_callback();
      }
      else
        setTimeout(timeline.waitForMetaData, 150);
    }
  }

  self.statusChange = function (status){
    switch (status) {
      case 1:
        self.played();
        break
      case 2:
      case 5:
      case 0:
        self.paused();
        break;
      case 3:
        self.buffering();
      default:
        self.disabled();
        break;
    }
    if (flags.buffering && status !=3) {
      self.buffered();
    }
    
  }
  self.play = function (){
    if (flags.ready && !$play.hasClass('disabled')) {
      player.playVideo();
    }
  }
  self.played = function(){
    $play.addClass('disabled');
    $pause.removeClass('disabled');
    $buffer.hide();
    timeline.startMoving();
  }
  self.pause = function (){
    if (flags.ready && !$pause.hasClass('disabled')) {
      player.pauseVideo();
    }
  }
  self.paused = function(){
    $pause.addClass('disabled');
    $play.removeClass('disabled');
    timeline.stopMoving();
  }
  self.disabled = function(){
    $pause.addClass('disabled');
    $play.addClass('disabled');
    $buffer.hide();
  }
  self.buffering = function(){
    $pause.addClass('disabled');
    $play.addClass('disabled');
    $buffer.show();
    flags.buffering = true;
  }
  self.buffered = function(){
    $buffer.hide();
    flags.buffering = false;
  }
  self.init();
}
