Pone (Doge)

Первоапрельское обновление VK 2014 года, переделанное под My Little Pony

// ==UserScript==
// @name        Pone (Doge)
// @description Первоапрельское обновление VK 2014 года, переделанное под My Little Pony
// @include     http*://vk.com/*
// @include     http*://vk.com
// @version     2.4
// @grant       none
// @author
// @namespace http://complynx.net
// ==/UserScript==



var newHeight = 150;
var newWidth = 150;


//This all is for the case, file "doge.js" is removed from VK
var Doge = {
  
show: function() {
  
	//Generate random number, range 1-9
	var randomNumber = Math.floor((Math.random() * 9) + 1);
	
	//var src = 'http://img-fotki.yandex.ru/get/9801/110173670.0/0_a8950_afd76e46_orig';
	//var src = '/images/pics/doge'+(window.devicePixelRatio >= 2 ? '_2x' : '')+'.png';
	
	//Show pone only if random number is equal to 1
	if (randomNumber == 1) {
	
		if (Doge.shown) {
          
			return false;
		}
		
		Doge.shown = true;
		
		dogeDom = ge('vk_doge');
		
		if (!dogeDom) {
          
			var src;
			var randomPony = Math.floor((Math.random() * 5) + 1);
			
			//Pinkie Pie
			if (randomPony == 1) {
				src = "http://img-fotki.yandex.ru/get/6820/110173670.0/0_b4a7b_9ce89295_orig";
				newHeight = 150;
				newWidth = 150;
			}
			//Derpy
			else if (randomPony == 2) {
				src = "http://img-fotki.yandex.ru/get/9801/110173670.0/0_a8950_afd76e46_orig";
				newHeight = 150;
				newWidth = 150;
			}
			//Twilight Sparkle
			else if (randomPony == 3) {
				src = "http://img-fotki.yandex.ru/get/6812/110173670.0/0_b4eea_e1387f90_orig";
				newHeight = 150;
				newWidth = 150;
			}
			//Applejack
			else if (randomPony == 4) {
				src = "https://img-fotki.yandex.ru/get/6735/110173670.1/0_cd171_354fb32d_orig";
				newHeight = 187;
				newWidth = 150;
			}
			//Princess Celestia
			else {
				src = "https://img-fotki.yandex.ru/get/15582/110173670.0/0_bdcab_6e9d136c_orig";
				newHeight = 200;
				newWidth = 278;
			}
			
			var dogeDom = ce('a', {
				id: 'vk_doge',
				innerHTML: '<div style="font-family: \'Comic Sans MS\', cursive; font-size: 24px; position: absolute; margin-top: -56px; width: 150px; text-align: center; opacity: 0;filter: alpha(opacity=0);">MAGIC</div><img src="'+src+'" width="' + newWidth + '" height=' + newHeight + '">',
			}, {
				position: 'fixed',
				bottom: -newHeight,
				right: 4,
				width: newWidth,
				height: newHeight,
				padding: '35px 35px 0px 35px',
				zIndex: 110
			});
			
			utilsNode.appendChild(dogeDom);
			debugLog('add event here',	Doge.over);
			addEvent(dogeDom, 'mouseover', Doge.over);
		}
		
		debugLog(dogeDom);
		show(dogeDom);
		animate(dogeDom, {bottom: -56}, {duration: 200})
		setTimeout(Doge.hide, 8000);
	}
},

	
over: function() {
	
    if (Doge.wasOver) {
    
    	return false;
  	}
	
  	Doge.wasOver = true;
  	var dogeDom = ge('vk_doge');
  	var dogeTxt = dogeDom.firstChild;
  	
  	animate(dogeDom, {bottom: 0}, 200, function() {
      
      	setTimeout(function() {
        	animate(dogeDom, {bottom: -newHeight}, 200, function() {
          		
            	Doge.updateLikes();
          		setTimeout(function() {
              
            		fadeOut(dogeTxt, 800, function() {
                      	hide(dogeDom);
                     	Doge.wasOver = false;
                      	Doge.shown = false;
                  	});
              	}, 500)

        	});
        	
          	animate(dogeTxt, {opacity: 1, color: '#C35AC3', marginTop: -90}, 200);
    	}, 300)
	
  	});
	
 	animate(dogeTxt, {opacity: 1}, 300);	
	setTimeout(function(){utilsNode.removeChild(dogeDom);}, 2000)
},

  
hide: function() {
  var dogeDom = ge('vk_doge');
  animate(dogeDom, {bottom: -newHeight}, 200, function() {
    hide(dogeDom);
	Doge.wasOver = false;
    Doge.shown = false;
  });
},

  
updateLikes: function() {
  
  var likes = geByClass('post_like_link');
  for (var i in likes) {
    likes[i].innerHTML = 'My Little Like';
  }
  var onlines = geByClass('online');
  for(var i in onlines) {
    if (onlines[i].tagName == 'SPAN') {
      onlines[i].innerHTML = 'So Online';
    }
  }
},

  
initSound: function(url) {
  if (!window.Sound) {
    cur.sound = {play: function () {}, stop: function() {}};
  } else {
    cur.sound = new Sound(url, {forceMp3: true, forcePath: url});
  }
},

  
blowTimer: function(el) {
  
  if (cur.blowing) {
      return false;
  }
  if (cur.blowed) {
      return nav.go(el);
  }
  Doge.initSound('mp3/boom.mp3');
  cur.blowing = true;
  var st = 'style="font-size: 2em; text-align: center; font-weight: bold;"';
  showDoneBox('<div ' + st + '>3</div>', {w: 20, out: 3000});
  var start = new Date().getTime(), el = geByClass1('top_result_baloon');
  var interval = setInterval(function() {
    var now = 3000 - (new Date().getTime() - start);
    if (now <= 0) {
      clearInterval(interval);
      Doge.blowImages();
    } else {
      el.innerHTML = '<div ' + st + '>' + Math.ceil(now / 1000) + '</div>';
    }
  }, 100);
},

  
blowImages: function() {
  var imgs = geByTag('img', bodyNode);
  cur.sound.play();
  each(imgs, function(i, img) {
    if (img.parentNode === bodyNode || !isVisible(img)) return;
    var sz = getSize(img), pos = getXY(img),
        centerPos = [lastWindowWidth / 2, scrollGetY() + lastWindowHeight / 2], centerSz = [0, 0], bg, step = 1500;
    if (!sz[0] || !sz[1]) return;
    bg = ce('div', {}, {width: sz[0], height: sz[1], backgroundColor: '#f1f1f1', display: 'inline-block', border: '0px', margin: '0px', padding: '0px'});
    img.parentNode.insertBefore(bg, img);
    bodyNode.insertBefore(img, domFC(bodyNode));
    setStyle(img, {position: 'absolute', left: pos[0], top: pos[1], width: sz[0], height: sz[1], zIndex: 100});
    var dx = pos[0] - centerPos[0] + (sz[0] - centerSz[0]) / 2,
        dy = pos[1] - centerPos[1] + (sz[1] - centerSz[1]) / 2;
    animate(img, {left: pos[0] + step * dx / Math.abs(dx), top: step * dy / Math.abs(dx)}, {duration: 1000, transition: Fx.Transitions.linear, onComplete: function() {
      re(img);
      cur.blowing = false;
      cur.blowed = true;
    }})
  });
},

eof:1
};


try {
  
	stManager.done('doge.js');
}
catch(e)
{
  
}
//*/

window.Doge = Doge;

if (stManager) {
  
	stManager.add('page.js', function() {

      var oldlike = wall.likeIt;  
      wall.likeIt = function() {
          Doge.show();
          return oldlike.apply(this, arguments);
      };

	});
}