Readymag

Readymag Readymag
Visit readymag.com
/*
тохе дать градиенты потюнить
снизу надпись (пока не надо)
фон затемнять
ie 7,8?
*/


function homepageInitialize() {

  var oldAngle, curAngle = 0,
    lineHeight = 0,
    scrollHeight = 0,
    touchScrollTop = 0,
    crumplesTotalHeightOnStopAngle = 0,
    $window = $(window),
    $wrappers = $(".crumpled-line-wrapper"),
    $gradients = $(".crumpled-gradient"),
    $lines = $(".crumpled-line"),
    $stub = $(".homepage-height-stub"),
    $box = $(".homepage-crumpled-box"),
    is3d = Modernizr.csstransforms3d,
    isTouch = Modernizr.touch,
    scrollTimer, scrollTimerCurPos, scrollTimerTargetPos;

  var PERSPECTIVE = 1300,
    STOPANGLE = 70;

  if (is3d) {
    $wrappers.css({
      '-webkit-perspective': PERSPECTIVE + 'px',
      '-moz-perspective': PERSPECTIVE + 'px',
      '-ms-perspective': PERSPECTIVE + 'px',
      '-o-perspective': PERSPECTIVE + 'px',
      'perspective': PERSPECTIVE + 'px'
    });
  } else {
    $wrappers.css('position', 'relative');
  }

  $window.resize(onResize);
  if (!isTouch) $window.scroll(onScroll);
  if (isTouch) $window.RMDrag({
    'move': onScroll,
    //_.throttle(onScroll, 30),
    'end': onScrollEnd,
    'silent': false,
    'type': 'touch',
    'preventDefault': true
  });
  onResize();

  maxGalleryInd = $('.homepage-content-center-block-ipad-gallery-image').length - 1;
  curGalleryInd = maxGalleryInd;

  if (!isTouch) $('.homepage-content-center-block-ipad-gallery-open').add($('.homepage-content-center-block-anno span')).on('click', startMag);
  else {
    $('.homepage-content-center-block-ipad-gallery-open').replaceWith('<a href="/mag/1/" target="_blank" class="homepage-content-center-block-ipad-gallery-open" style="display:block;text-decoration:none">Open</a>');
    $('.homepage-content-center-block-anno span').replaceWith('<a href="/mag/1/" target="_blank" style="color:black">our first mag</a>');
    $('.homepage-content-center-block-ipad-gallery-open').add($('.homepage-content-center-block-anno a')).on('touchstart', function(e) {
      e.stopPropagation();
    });
  }



  $('.homepage-content-center-block-anno a, .homepage-content-bottom-block-social-mail a, .homepage-content-bottom-block-social-fb-link, .homepage-content-bottom-block-social-tweet-link').on('touchstart', function(e) {
    e.stopPropagation();
  });


  //twitter button
  !
  function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (!d.getElementById(id)) {
      js = d.createElement(s);
      js.id = id;
      js.src = "//platform.twitter.com/widgets.js";
      fjs.parentNode.insertBefore(js, fjs);
    }
  }(document, "script", "twitter-wjs");

  //facebook button
  (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s);
    js.id = id;
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));


  //mail form prepare

  var $form = $(".homepage-content-bottom-block-mail-form");
  var $input = $(".homepage-content-bottom-block-mail-input");
  var $submit = $(".homepage-content-bottom-block-mail-submit");

  $form.addClass('homepage-content-bottom-block-mail-input-empty');

  var inputFocused = true; //из-за хрома, он при переключении окон послвает блюр и фокус дважды

  $input.bind("blur", function() {
    if (!inputFocused) return;
    inputFocused = false;
    var q = $.trim($(this).val());
    if (q == "") {
      $(this).val($(this).attr("data-placeholder"));
      $form.addClass('homepage-content-bottom-block-mail-input-empty');
    } else $form.removeClass('homepage-content-bottom-block-mail-input-empty');
  }).bind("focus", function() {
    if (inputFocused) return;
    inputFocused = true;
    if ($form.hasClass("homepage-content-bottom-block-mail-input-empty")) {
      $(this).val("");
      $form.removeClass('homepage-content-bottom-block-mail-input-empty');
    }
  }).bind('input propertychange', checkEmail).bind('keypress keyup keydown', function(e) {
    e.stopPropagation()
  }).bind('keyup', function(e) {
    e.stopPropagation();
    if (e.keyCode == 13) onSubmit();
  }).blur();

  $submit.bind('click', onSubmit);

  $submit.add($input).on('touchstart', function(e) {
    e.stopPropagation()
  });

  $window.on('touchstart', function(e) {
    if (inputFocused) {
      $input.blur();
      e.stopPropagation();
    }
  });

  setInterval(galleryStep, 4000);


  $('.scroll-hover-wrapper').on('mouseenter', function() {
    $('.scroll-wrapper').addClass('scroll-hover');
  }).on('mouseleave', function() {
    $('.scroll-wrapper').removeClass('scroll-hover');
  }).on('click', function() {
    fullScroll();
  }).on('touchstart', function(e) {
    e.stopPropagation();
  });

  //functions

  function applyTransform(obj, str) {
    obj.css({
      '-webkit-transform': str,
      '-moz-transform': str,
      '-ms-transform': str,
      '-o-transform': str,
      'transform': str
    });
  }

  function calcPerspectiveDimensions(angle) {
    var t = 0,
      b = lineHeight,
      rad = angle * Math.PI / 180,
      cosAngle = Math.cos(rad),
      sinAngle = Math.sin(rad);
    t -= lineHeight / 2;
    b -= lineHeight / 2;
    t = cosAngle * t * PERSPECTIVE / (PERSPECTIVE + sinAngle * t);
    b = cosAngle * b * PERSPECTIVE / (PERSPECTIVE + sinAngle * b);
    t += lineHeight / 2;
    b += lineHeight / 2;
    return [t, b];
  }

  function applyRotation() {

    if (Math.abs(oldAngle - curAngle) < 0.001) return;

    var perspectiveDimensions = calcPerspectiveDimensions(curAngle);

    var marginTop = lineHeight - perspectiveDimensions[1];
    var marginBottom = perspectiveDimensions[0];
    var startOffset = -marginTop - 1;
    var ind = 0;
    var dir = -1;

    $wrappers.each(function() {
      applyTransform($(this), 'translateY(' + startOffset + 'px)', 'top', startOffset + 'px');
      startOffset += lineHeight - (ind == 1 ? marginBottom : marginTop) * 2 - 2;
      ind = 1 - ind;
    })

    $lines.each(function() {
      applyTransform($(this), 'rotateX(' + (curAngle * dir) + 'deg)');
      dir *= -1;
    });

    $gradients.css('opacity', curAngle / 90);

    oldAngle = curAngle;
  }

  function onResize() {
    lineHeight = Math.ceil($window.height() / $lines.length) + (is3d ? 2 : 0);
    scrollHeight = $window.height() * 2;
    if (!isTouch) $stub.height(scrollHeight);
    $wrappers.css({
      'height': lineHeight + 'px'
    })
    $lines.css({
      'line-height': (lineHeight * 0.85) + 'px',
      'font-size': (lineHeight * 0.8) + 'px'
    })

    if (is3d) {
      var perspectiveDimensions = calcPerspectiveDimensions(STOPANGLE);
      crumplesTotalHeightOnStopAngle = (perspectiveDimensions[1] - perspectiveDimensions[0] - 2) * $lines.length + 1;
    } else {
      crumplesTotalHeightOnStopAngle = lineHeight * $lines.length;
    }

    oldAngle = undefined;
    onScroll();

    var mt = ($window.height() - 672) / 2;
    mt = Math.min(Math.max(mt, 0), 108);
    $('.homepage-content-center-block-txt').css('margin-top', mt + 'px');
  }

  function onScroll(e) {
    var scrollTop = $window.scrollTop();

    if (isTouch) {
      var dY = 0;
      if (e) dY = e.deltaY;
      scrollTop = Math.max(Math.min(touchScrollTop - dY, scrollHeight / 2), 0);
    }

    var percent = 2 * scrollTop / scrollHeight;
    if (is3d) {
      curAngle = 2 * STOPANGLE * percent;
      if (curAngle >= STOPANGLE) {
        curAngle = STOPANGLE;
        var topOffset = -crumplesTotalHeightOnStopAngle * (percent - 0.5) * 2;
        applyTransform($box, 'translateY(' + topOffset + 'px)');
      } else {
        applyTransform($box, 'translateY(0px)');
      }
      applyRotation();
    } else {
      var topOffset = -crumplesTotalHeightOnStopAngle * percent;
      $box.css('top', topOffset + 'px');
    }
  }

  function onScrollEnd(e) {
    var dY = 0;
    if (e) dY = e.deltaY;
    touchScrollTop -= dY;
    touchScrollTop = Math.max(Math.min(touchScrollTop, scrollHeight / 2), 0);
  }


  function fullScrollStep() {
    console.log(scrollTimerCurPos);
    if (isTouch) {
      scrollTimerCurPos -= 30;
      if (scrollTimerCurPos <= scrollTimerTargetPos) {
        scrollTimerCurPos = scrollTimerTargetPos;
        clearInterval(scrollTimer);
      }
      onScroll({
        deltaY: scrollTimerCurPos
      });
      onScrollEnd({
        deltaY: scrollTimerCurPos
      });
    } else {
      scrollTimerCurPos += 30;
      if (scrollTimerCurPos >= scrollTimerTargetPos) {
        scrollTimerCurPos = scrollTimerTargetPos;
        clearInterval(scrollTimer);
      }
      $window.scrollTop(scrollTimerCurPos);
    }
  }

  function fullScroll() {
    if (isTouch) {
      scrollTimerCurPos = -touchScrollTop;
      scrollTimerTargetPos = touchScrollTop - scrollHeight / 2;
    } else {
      scrollTimerCurPos = $window.scrollTop();
      scrollTimerTargetPos = scrollHeight / 2;
    }
    scrollTimer = setInterval(fullScrollStep, 30);
  }

  function checkEmail() {

    function isValidEmail(email, strict) {
      if (!strict) email = email.replace(/^\s+|\s+$/g, '');
      return (/^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,4}$/i).test(email);
    }

    $form.toggleClass('homepage-content-bottom-block-mail-input-valid', isValidEmail($input.val()) && !$form.hasClass("homepage-content-bottom-block-mail-input-empty"));
  }

  function onSubmit(e) {
    if (!$form.hasClass('homepage-content-bottom-block-mail-input-valid')) return;

    $.post('/api/emailme/', {
      'email': $input.val()
    }, function(response) {
      if (response == 'ok') {
        $form.addClass('homepage-content-bottom-block-mail-input-submitted');
        $input.remove();
      } else {
        console.error(response);
      }
    });
  }



  function galleryStep() {
    var nextGalleryInd = curGalleryInd - 1;
    if (nextGalleryInd < 0) {
      nextGalleryInd = maxGalleryInd;
      $('.homepage-content-center-block-ipad-gallery-image').eq(nextGalleryInd).fadeIn(500);
    } else $('.homepage-content-center-block-ipad-gallery-image').eq(nextGalleryInd).fadeIn(0);
    $('.homepage-content-center-block-ipad-gallery-image').eq(curGalleryInd).fadeOut(500);
    curGalleryInd--;
    if (curGalleryInd < 0) curGalleryInd = maxGalleryInd;
  }

  function startMag() {
    var $layer = $('.homepage-content-center-block-ipad-gallery-open');
    var x = $layer.offset().left;
    var y = $layer.offset().top - $(window).scrollTop();
    var w = $layer.width();
    var h = $layer.height();

    $layer.appendTo('body').empty().css({
      position: 'fixed',
      left: x + 'px',
      top: y + 'px',
      width: w + 'px',
      height: h + 'px',
      background: '#000',
      opacity: 0.8

    });

    $layer.animate({
      left: 0,
      top: 0,
      width: $(window).width(),
      height: $(window).height(),
      opacity: 1
    }, 500, function() {
      window.location.href = '/mag/1/';
    });
  }

}
/*
тохе дать градиенты потюнить
снизу надпись (пока не надо)
фон затемнять
ie 7,8?
*/


function homepageInitialize() {

	var oldAngle,
		curAngle = 0,
		lineHeight = 0,
		scrollHeight = 0,
		touchScrollTop = 0,
		crumplesTotalHeightOnStopAngle = 0,
		$window = $(window),
		$wrappers = $(".crumpled-line-wrapper"),
		$gradients = $(".crumpled-gradient"),
		$lines = $(".crumpled-line"),
		$stub = $(".homepage-height-stub"),
		$box = $(".homepage-crumpled-box"),
		is3d = Modernizr.csstransforms3d,
		isTouch = Modernizr.touch,
		scrollTimer,
		scrollTimerCurPos,
		scrollTimerTargetPos;

	var PERSPECTIVE = 1300,
		STOPANGLE = 70;

	if (is3d) {
		$wrappers.css({
			'-webkit-perspective': PERSPECTIVE + 'px',
			'-moz-perspective': PERSPECTIVE + 'px',
			'-ms-perspective': PERSPECTIVE + 'px',
			'-o-perspective': PERSPECTIVE + 'px',
			'perspective': PERSPECTIVE + 'px'
		});
	} else {
		$wrappers.css('position', 'relative');
	}

	$window.resize(onResize);
	if (!isTouch) $window.scroll(onScroll);
	if (isTouch) $window.RMDrag({
		'move'	: onScroll,//_.throttle(onScroll, 30),
		'end'	: onScrollEnd,
		'silent': false,
		'type'  : 'touch',
		'preventDefault' : true
	});
	onResize();

	maxGalleryInd = $('.homepage-content-center-block-ipad-gallery-image').length - 1;
	curGalleryInd = maxGalleryInd;

	if (!isTouch)
		$('.homepage-content-center-block-ipad-gallery-open').add($('.homepage-content-center-block-anno span')).on('click', startMag);
	else {
		$('.homepage-content-center-block-ipad-gallery-open').replaceWith('<a href="/mag/1/" target="_blank" class="homepage-content-center-block-ipad-gallery-open" style="display:block;text-decoration:none">Open</a>');
		$('.homepage-content-center-block-anno span').replaceWith('<a href="/mag/1/" target="_blank" style="color:black">our first mag</a>');
		$('.homepage-content-center-block-ipad-gallery-open').add($('.homepage-content-center-block-anno a')).on('touchstart', function(e) {
			e.stopPropagation();
		});
	}



	$('.homepage-content-center-block-anno a, .homepage-content-bottom-block-social-mail a, .homepage-content-bottom-block-social-fb-link, .homepage-content-bottom-block-social-tweet-link').on('touchstart', function(e) {
		e.stopPropagation();
	});


	//twitter button
	!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");

	//facebook button
	(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return;js = d.createElement(s); js.id = id;js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));


	//mail form prepare

	var $form = $(".homepage-content-bottom-block-mail-form");
	var $input = $(".homepage-content-bottom-block-mail-input");
	var $submit = $(".homepage-content-bottom-block-mail-submit");

	$form.addClass('homepage-content-bottom-block-mail-input-empty');

	var inputFocused = true; //из-за хрома, он при переключении окон послвает блюр и фокус дважды

	$input
		.bind("blur", function () {
			if (!inputFocused) return;
			inputFocused = false;
			var q = $.trim($(this).val());
			if (q == "") {
				$(this).val($(this).attr("data-placeholder"));
				$form.addClass('homepage-content-bottom-block-mail-input-empty');
			} else
				$form.removeClass('homepage-content-bottom-block-mail-input-empty');
		})
		.bind("focus", function () {
			if (inputFocused) return;
			inputFocused = true;
			if ($form.hasClass("homepage-content-bottom-block-mail-input-empty")) {
				$(this).val("");
				$form.removeClass('homepage-content-bottom-block-mail-input-empty');
			}
		})
		.bind('input propertychange', checkEmail)
		.bind('keypress keyup keydown', function(e) {e.stopPropagation()})
		.bind('keyup', function(e) {
			e.stopPropagation();
			if (e.keyCode == 13) onSubmit();
		})
		.blur();

	$submit.bind('click', onSubmit);

	$submit.add($input).on('touchstart', function(e) {e.stopPropagation()});

	$window.on('touchstart', function(e) {
		if (inputFocused) {
			$input.blur();
			e.stopPropagation();
		}
	});

	setInterval(galleryStep, 4000);


	$('.scroll-hover-wrapper')
		.on('mouseenter', function() {
			$('.scroll-wrapper').addClass('scroll-hover');
		})
		.on('mouseleave', function() {
			$('.scroll-wrapper').removeClass('scroll-hover');
		})
		.on('click', function() {
			fullScroll();
		})
		.on('touchstart', function(e) {
			e.stopPropagation();
		});

	//functions

	function applyTransform(obj, str) {
		obj.css({
			'-webkit-transform': str,
			'-moz-transform': str,
			'-ms-transform': str,
			'-o-transform': str,
			'transform': str
		});
	}

	function calcPerspectiveDimensions(angle) {
		var t = 0,
			b = lineHeight,
			rad = angle * Math.PI / 180,
			cosAngle = Math.cos(rad),
			sinAngle = Math.sin(rad);
		t -= lineHeight / 2;
		b -= lineHeight / 2;
		t = cosAngle * t * PERSPECTIVE / (PERSPECTIVE + sinAngle * t);
		b = cosAngle * b * PERSPECTIVE / (PERSPECTIVE + sinAngle * b);
		t += lineHeight / 2;
		b += lineHeight / 2;
		return [t, b];
	}

	function applyRotation() {

		if (Math.abs(oldAngle - curAngle) < 0.001) return;

		var perspectiveDimensions = calcPerspectiveDimensions(curAngle);

		var marginTop = lineHeight - perspectiveDimensions[1];
		var marginBottom = perspectiveDimensions[0];
		var startOffset = -marginTop - 1;
		var ind = 0;
		var dir = -1;

		$wrappers.each(function() {
			applyTransform($(this), 'translateY(' + startOffset + 'px)', 'top', startOffset + 'px');
			startOffset += lineHeight - (ind == 1 ? marginBottom : marginTop) * 2 - 2;
			ind = 1 - ind;
		})

		$lines.each(function() {
			applyTransform($(this), 'rotateX(' + (curAngle * dir) + 'deg)');
			dir *= -1;
		});

		$gradients.css('opacity', curAngle / 90);

		oldAngle = curAngle;
	}

	function onResize() {
		lineHeight = Math.ceil($window.height() / $lines.length) + (is3d ? 2 : 0);
		scrollHeight = $window.height() * 2;
		if (!isTouch) $stub.height(scrollHeight);
		$wrappers.css({'height': lineHeight + 'px'})
		$lines.css({'line-height': (lineHeight * 0.85) + 'px', 'font-size': (lineHeight * 0.8) + 'px'})

		if (is3d) {
			var perspectiveDimensions = calcPerspectiveDimensions(STOPANGLE);
			crumplesTotalHeightOnStopAngle = (perspectiveDimensions[1] - perspectiveDimensions[0] - 2) * $lines.length + 1;
		} else {
			crumplesTotalHeightOnStopAngle = lineHeight * $lines.length;
		}

		oldAngle = undefined;
		onScroll();

		var mt = ($window.height() - 672) / 2;
		mt = Math.min(Math.max(mt, 0), 108);
		$('.homepage-content-center-block-txt').css('margin-top', mt + 'px');
	}

	function onScroll(e) {
		var scrollTop = $window.scrollTop();

		if (isTouch) {
			var dY = 0;
			if (e) dY = e.deltaY;
			scrollTop = Math.max(Math.min(touchScrollTop - dY, scrollHeight / 2), 0);
		}

		var percent = 2 * scrollTop / scrollHeight;
		if (is3d) {
			curAngle = 2 * STOPANGLE * percent;
			if (curAngle >= STOPANGLE) {
				curAngle = STOPANGLE;
				var topOffset = -crumplesTotalHeightOnStopAngle * (percent - 0.5) * 2;
				applyTransform($box, 'translateY(' + topOffset + 'px)');
			} else {
				applyTransform($box, 'translateY(0px)');
			}
			applyRotation();
		} else {
			var topOffset = -crumplesTotalHeightOnStopAngle * percent;
			$box.css('top', topOffset + 'px');
		}
	}

	function onScrollEnd(e) {
		var dY = 0;
		if (e) dY = e.deltaY;
		touchScrollTop -= dY;
		touchScrollTop = Math.max(Math.min(touchScrollTop, scrollHeight / 2), 0);
	}


	function fullScrollStep() {
		console.log(scrollTimerCurPos);
		if (isTouch) {
			scrollTimerCurPos -= 30;
			if (scrollTimerCurPos <= scrollTimerTargetPos) {
				scrollTimerCurPos = scrollTimerTargetPos;
				clearInterval(scrollTimer);
			}
			onScroll({deltaY: scrollTimerCurPos });
			onScrollEnd({deltaY: scrollTimerCurPos});
		} else {
			scrollTimerCurPos += 30;
			if (scrollTimerCurPos >= scrollTimerTargetPos) {
				scrollTimerCurPos = scrollTimerTargetPos;
				clearInterval(scrollTimer);
			}
			$window.scrollTop(scrollTimerCurPos);
		}
	}

	function fullScroll() {
		if (isTouch) {
			scrollTimerCurPos = -touchScrollTop;
			scrollTimerTargetPos = touchScrollTop - scrollHeight / 2;
		} else {
			scrollTimerCurPos = $window.scrollTop();
			scrollTimerTargetPos = scrollHeight / 2;
		}
		scrollTimer = setInterval(fullScrollStep, 30);
	}

	function checkEmail() {

		function isValidEmail(email, strict) {
			if (!strict) email = email.replace(/^\s+|\s+$/g, '');
			return (/^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,4}$/i).test(email);
		}

		$form.toggleClass('homepage-content-bottom-block-mail-input-valid', isValidEmail($input.val()) && !$form.hasClass("homepage-content-bottom-block-mail-input-empty"));
	}

	function onSubmit(e) {
		if (!$form.hasClass('homepage-content-bottom-block-mail-input-valid')) return;

		$.post('/api/emailme/', {'email': $input.val()}, function(response) {
			if (response == 'ok') {
				$form.addClass('homepage-content-bottom-block-mail-input-submitted');
				$input.remove();
			} else {
				console.error(response);
			}
		});
	}



	function galleryStep() {
		var nextGalleryInd = curGalleryInd - 1;
		if (nextGalleryInd < 0) {
			nextGalleryInd = maxGalleryInd;
			$('.homepage-content-center-block-ipad-gallery-image').eq(nextGalleryInd).fadeIn(500);
		} else
			$('.homepage-content-center-block-ipad-gallery-image').eq(nextGalleryInd).fadeIn(0);
		$('.homepage-content-center-block-ipad-gallery-image').eq(curGalleryInd).fadeOut(500);
		curGalleryInd--;
		if (curGalleryInd < 0) curGalleryInd = maxGalleryInd;
	}

	function startMag() {
		var $layer = $('.homepage-content-center-block-ipad-gallery-open');
		var x = $layer.offset().left;
		var y = $layer.offset().top - $(window).scrollTop();
		var w = $layer.width();
		var h = $layer.height();

		$layer.appendTo('body')
			.empty()
			.css({
				position: 'fixed',
				left: x + 'px',
				top: y + 'px',
				width: w + 'px',
				height: h + 'px',
				background: '#000',
				opacity: 0.8

			});

		$layer
			.animate({
				left: 0,
				top: 0,
				width: $(window).width(),
				height: $(window).height(),
				opacity: 1
			}, 500, function() {
				window.location.href = '/mag/1/';
			});
	}

}