/*

* MBP - Mobile boilerplate helper functions
*/

(function(document){

window.MBP = window.MBP || {};

// Fix for iPhone viewport scale bug // www.blog.highub.com/mobile-2/a-fix-for-iphone-viewport-scale-bug/

MBP.viewportmeta = document.querySelector && document.querySelector(‘meta’); MBP.ua = navigator.userAgent;

MBP.scaleFix = function () {

if (MBP.viewportmeta && /iPhone|iPad/.test(MBP.ua) && !/Opera Mini/.test(MBP.ua)) {
  MBP.viewportmeta.content = "width=device-width, minimum-scale=1.0, maximum-scale=1.0";
  document.addEventListener("gesturestart", MBP.gestureStart, false);
}

}; MBP.gestureStart = function () {

MBP.viewportmeta.content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6";

};

// Hide URL Bar for iOS and Android by Scott Jehl // gist.github.com/1183357

MBP.hideUrlBar = function () {

var win = window,
        doc = win.document;

// If there's a hash, or addEventListener is undefined, stop here
if( !location.hash || !win.addEventListener ){

        //scroll to 1
        window.scrollTo( 0, 1 );
        var scrollTop = 1,

        //reset to 0 on bodyready, if needed
        bodycheck = setInterval(function(){
                if( doc.body ){
                        clearInterval( bodycheck );
                        scrollTop = "scrollTop" in doc.body ? doc.body.scrollTop : 1;
                        win.scrollTo( 0, scrollTop === 1 ? 0 : 1 );
                }       
        }, 15 );

        win.addEventListener( "load", function(){
                setTimeout(function(){
                        //reset to hide addr bar at onload
                        win.scrollTo( 0, scrollTop === 1 ? 0 : 1 );
                }, 0);
        }, false );
}

};

// Fast Buttons - read wiki below before using // github.com/shichuan/mobile-html5-boilerplate/wiki/JavaScript-Helper

MBP.fastButton = function (element, handler) {

this.element = element;
this.handler = handler;
if (element.addEventListener) {
  element.addEventListener('touchstart', this, false);
  element.addEventListener('click', this, false);
}

};

MBP.fastButton.prototype.handleEvent = function(event) {

switch (event.type) {
    case 'touchstart': this.onTouchStart(event); break;
    case 'touchmove': this.onTouchMove(event); break;
    case 'touchend': this.onClick(event); break;
    case 'click': this.onClick(event); break;
}

};

MBP.fastButton.prototype.onTouchStart = function(event) {

event.stopPropagation();
this.element.addEventListener('touchend', this, false);
document.body.addEventListener('touchmove', this, false);
this.startX = event.touches[0].clientX;
this.startY = event.touches[0].clientY;
this.element.style.backgroundColor = "rgba(0,0,0,.7)";

};

MBP.fastButton.prototype.onTouchMove = function(event) {

if(Math.abs(event.touches[0].clientX - this.startX) > 10 || 
   Math.abs(event.touches[0].clientY - this.startY) > 10    ) {
    this.reset();
}

};

MBP.fastButton.prototype.onClick = function(event) {

event.stopPropagation();
this.reset();
this.handler(event);
if(event.type == 'touchend') {
    MBP.preventGhostClick(this.startX, this.startY);
}
this.element.style.backgroundColor = "";

};

MBP.fastButton.prototype.reset = function() {

this.element.removeEventListener('touchend', this, false);
document.body.removeEventListener('touchmove', this, false);
this.element.style.backgroundColor = "";

};

MBP.preventGhostClick = function (x, y) {

MBP.coords.push(x, y);
window.setTimeout(function (){
    MBP.coords.splice(0, 2);
}, 2500);

};

MBP.ghostClickHandler = function (event) {

for(var i = 0, len = MBP.coords.length; i < len; i += 2) {
    var x = MBP.coords[i];
    var y = MBP.coords[i + 1];
    if(Math.abs(event.clientX - x) < 25 && Math.abs(event.clientY - y) < 25) {
        event.stopPropagation();
        event.preventDefault();
    }
}

};

if (document.addEventListener) {

document.addEventListener('click', MBP.ghostClickHandler, true);

}

MBP.coords = [];

// iOS Startup Image // github.com/shichuan/mobile-html5-boilerplate/issues#issue/2

MBP.splash = function () {

var filename = navigator.platform === 'iPad' ? 'h/' : 'l/';
document.write('<link rel="apple-touch-startup-image" href="/img/' + filename + 'splash.png" />' );

};

// Autogrow // googlecode.blogspot.com/2009/07/gmail-for-mobile-html5-series.html

MBP.autogrow = function (element, lh) {

function handler(e){
    var newHeight = this.scrollHeight,
        currentHeight = this.clientHeight;
    if (newHeight > currentHeight) {
        this.style.height = newHeight + 3 * textLineHeight + "px";
    }
}

var setLineHeight = (lh) ? lh : 12,
    textLineHeight = element.currentStyle ? element.currentStyle.lineHeight : 
                     getComputedStyle(element, null).lineHeight;

textLineHeight = (textLineHeight.indexOf("px") == -1) ? setLineHeight :
                 parseInt(textLineHeight, 10);

element.style.overflow = "hidden";
element.addEventListener ? element.addEventListener('keyup', handler, false) :
                           element.attachEvent('onkeyup', handler);

};

})(document);