// ==UserScript==
// @name        zaycev.net helper for Opera 8 - 9
// @version     1.13
// @date        2008-06-09
// @author      Mike Samokhvalov <mikivanch@gmail.com>
// @download    http://www.puzzleclub.ru/files/zaycev_net.js
// @include     http://zaycev.net/*
// @include     http://*.zaycev.net/*
// ==/UserScript==

(function(){

  ///////////////////////////////////////////////////////////////////
  // SETTINGS
  
  // File extension that will be automatically download.
  // 0 - mp3, 1 - exe, 2 - rar
  downloadFormat = 0; // mp3
  
  // For those who have the "Cached Images" mode.
  var autoReloadCaptchaImage = false;
  
  // Use swf player for preview
  var flashPlayer = true;
  
  var flashPlayerOnTop = true;
  
  // Comment width. Example: '740px'
  var commentWidth = '';
  
  ///////////////////////////////////////////////////////////////////
  // DO NOT EDIT
  
  var downloadFormFrameId = 'ujs_download_form_frame';

  function isOpera9()
  {
    if(typeof(window.opera.version) == 'function' && window.opera.version() >= 9)
      return true;
    else
      return false;
  }
  
  function refreshPage()
  {
    window.history.go(0);
  }
  
  function reloadImage(img)
  {
    var f = document.createElement('iframe');
    f.src = img.src;
    f.width = 0;
    f.height = 0;
    f.frameBorder = 'no';
    f.scrolling = 'no';
    f.onload = function(){
      this.parentNode.removeChild(this);
      if(isOpera9())
      {
        var refreshImg = function(i, d)
        {
          i.style.display = d;
        };
        
        if(img.currentStyle.display != 'none')
        {
          var display = img.currentStyle.display;
          img.style.display = 'none';          
          setTimeout(refreshImg, 100, img, display);
        }      
      }     
    };
    document.documentElement.appendChild(f);
  };

  window.opera.addEventListener('BeforeExternalScript', function (e){  
    var src = e.element.getAttribute('src', false);
    if(src)
    {
      if(src.search(/http:\/\//i) != -1 && src.search(/zaycev\.net\/|swfobject\.js/i) == -1)
        e.preventDefault();
      else if(src.search(/\/m3_images\/traff\.js/i) != -1)
        e.preventDefault();
    }
  }, false);
    
  window.opera.addEventListener('BeforeScript', function(e){
    var t = e.element.text;
    if(t && !e.element.getAttribute('src', false))
    {
      if(t.search(/self\.top\.location\s*=|var\s+pop_domain\s*=|\bdecode\s*\(\s*\)|bannerbank\.ru\/|ad\.vba\.ru\/|zaycasino\.com\/|80\.93\.56\.187\/|liveinternet\.ru\/|counter\.yadro\.ru\/|partner=zaycev|mayki\.zaycev\.net\/|\.tbn\.ru\/|\/m3_images\/traff\.js/) != -1)
        e.preventDefault();
    }
  }, false);
  
  var count = 0;
  function addStyle(css)
  {
    if(!document || !document.documentElement)
    {
      if(count < 500)
      {
        setTimeout(addStyle, 25, css);
        count++;
      }
      return;
    }
      
    var s = document.createElement('style');
    s.setAttribute('type', 'text/css');
    s.setAttribute('style', 'display:none !important;');			
    s.appendChild(document.createTextNode(css));
    document.documentElement.appendChild(s); 
  };
  
  function applyStyle()
  {
    var css = 'div#infobar, div#ibp, table.banners24open, a[href="http://huyandex.com/"], a[href="http://www.huyandex.com/"], a[href="http://www.Z38.ru/"], a[href="http://zna4ki.ru/znet"], div.menu1 {display: none !important;}';
    if(isOpera9())
    {
      css += ' div[id*="MarketGid"], a[href*="partner=zaycev"], img[src*="/m3_images/rast/"], img[src*="/m3_images/mirmaek/"], a[href*="http://mayki.zaycev.net/"], a[href*="http://games.zaycev.net/"], a[href*="http://www.zaycasino.com/"], iframe[src*="/m3_images/zaycev.html"], img[src*="anim-tutZaicevNet1.gif"], iframe[src*="odnoklassniki.km.ru"] {display: none !important;}';
    }
    if(commentWidth)
    {
      css += 'table.mb p.mb {width: ' + commentWidth + '; overflow: auto;}';
    }  
    addStyle(css);
  }
  applyStyle();
  
  function showDownloadForm()
  {
    var re = null;
    switch(downloadFormat)
    {
      case 1:
        re = /\.exe\b/i;
        break;
        
      case 2:
        re = /\.rar\b/i;
        break;
        
      default:
        re = /\.mp3\b/i;
        break;
    }
    
    var a = document.getElementsByTagName('a');
    for(var i = a.length - 1; i >= 0; i--)
    {
      if(a[i].href && (a[i].href.search(/\/download\.php\?/i) != -1) && (a[i].href.search(re) != -1))
      {          
        var parent = null, p = a[i].parentNode;
        while(p)
        {
          if(p == document.body || p == document.documentElement)
            break;
            
          if(p.tagName == 'TABLE' && (p.className == 'menu1' || p.className == 'mb'))
          {
            parent = p;
          }
          
          p = p.parentNode;
        }
        
        if(parent)
        {
          var f = document.createElement('iframe');
          f.id = downloadFormFrameId;
          f.src = a[i].href;
          f.width = "100%"
          f.height = "300";
          f.frameborder = "no";
          f.scrolling = "no";
          f.setAttribute('style', 'border: none !important; display: block; margin-bottom: 10px;', false);
          parent.insertBefore(f, parent.firstChild);
          
          if(isOpera9())
          {
            f.scrollIntoView(true);
            if(window.scrollBy)
              window.scrollBy(0, -80);
          }
        }
        else
        {
          a[i].click();
        }
        break;
      }
    }
  }  
  
  function getFormParams(f)
  {    
    var params = '', sep = '';
    for(var i = 0; i < f.elements.length; i++)
    {
      if(f.elements[i].name)
      {
        if(f.elements[i].tagName == 'INPUT' && f.elements[i].type == 'checkbox')
        {
          if(f.elements[i].checked)
          {
            params += sep + f.elements[i].name + '=on';
            sep = '&';
          }
        }
        else if(f.elements[i].tagName == 'INPUT' && f.elements[i].type == 'radio')
        {
          if(f.elements[i].checked)
          {
            params += sep + f.elements[i].name + '=' + escape(f.elements[i].value);
            sep = '&';
          }
        }
        else if(f.elements[i].name != 'ass' && f.elements[i].name != 'id')
        {
          params += sep + f.elements[i].name + '=';
          if(f.elements[i].value)
          {
            params += escape(f.elements[i].value);
          }          
          sep = '&';
        }      
      }    
    }
      
    var input = f.getElementsByTagName('input');  
    for(var i = 0; i < input.length; i++)
    {
      if(input[i].type == 'image' && input[i].name)
      {
        params += sep + input[i].name + '.x=0&' + input[i].name + '.y=0';
        sep = '&';
      }
    }
      
    return params;
  }
  
  function getDownloadLink(e)
  {
    var f = e.srcElement ? e.srcElement : e.target;
    if(!f)
      return;
      
    e.preventDefault();
    if(f.ok)
    {
      f.ok.disabled = true;
      f.ok.value = '\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435';
    }

    var url = '';
    if(f.action)
      url += f.action;
    else
      url += window.location.href;
      
    if(url.indexOf('?') == -1)
      url += '?' +getFormParams(f);
    else
      url += '&' +getFormParams(f);
    
    var xmlhttp = new XMLHttpRequest();          
    xmlhttp.open("GET", url, true);
    xmlhttp.setRequestHeader("User-Agent", navigator.userAgent);
    xmlhttp.setRequestHeader("Referer", window.location.href);
    xmlhttp.setRequestHeader("Cookie", document.cookie);    
    xmlhttp.onreadystatechange = function() {
      if(this.readyState == 4)
      {
        var link = this.responseText.match(/(?:url=|href=\x22)(http:\/\/dl\.zaycev\.net\/[^\x22\s]+)/i);
        if(link && link.length > 1)
        { 
          link = link[1];          
          document.body.setAttribute('style', 'width: 100%; height: 100%;', false);
          var html = (
            '<table style="width:100%;height:100%;"><tr><td style="width:100%;height:100%;text-align:center;vertical-align:middle;">'
            +'<a href="' + link + '" target="_blank" style="font-size: 16pt; font-weight: bold;">\u0421\u043a\u0430\u0447\u0430\u0442\u044c</a>'
            +'</td></tr></table>'
          );            
          document.body.innerHTML = html;
        }
        else if(this.responseText.search(/\u043d\u0435\s*\u0432\u0435\u0440\u043d\u044b\u0439\s*\u043a\u043e\u0434/i) != -1)
        {
          var s = document.createElement('span');
          s.innerHTML = '\u0432\u044b \u0432\u0432\u0435\u043b\u0438 \u043d\u0435 \u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434';
          alert(s.innerHTML);
          refreshPage();
        }        
        else
        {
          document.open();
          document.write(this.responseText);
        }        
      }
    };
    xmlhttp.send();
  }
  
  function reloadCaptcha()
  {
    if(!autoReloadCaptchaImage)
      return;

    var img = document.getElementsByTagName('img');
    for(var i = 0; i < img.length; i++)
    {      
      if(img[i].src && img[i].src.search(/\/captcha\.php\?/i) != -1)
      {
        reloadImage(img[i]);
        break;
      }
    }
  }
  
  function replacePreviewLink()
  {
    window.ujs_GetPreviewParent = function(obj)
    {
      var parent = null;
      
      if(flashPlayerOnTop)
      {
        parent = document.getElementById(downloadFormFrameId);
        if(parent)
          return parent;
      }

      var parent = obj.parentNode;
      while(parent)
      {
        if(parent.tagName.search(/^(table|body|html)$/i) != -1)
          break;
          
        parent = parent.parentNode;
      }

      return parent;
    };
    
    window.ujs_GetPreviewMp3 = function()
    {
      var d = window.location.pathname.match(/\/pages\/(\d+)\/(\d+)\./i);
      if(d.length < 3)
      {
        return '';
      }
      
      return 'http://mini.zaycev.net/m3_mini/' + d[1] + '/' + d[2] + '.mp3';
    };
    
    window.ujs_Preview = function(obj)
    {
      var parent = window.ujs_GetPreviewParent(obj);
      
      var mp3 = window.ujs_GetPreviewMp3();
      if(!mp3)
        return;      
      
      var box = document.createElement('div');
      box.setAttribute('style', 'margin: 10px auto 0 auto !important; text-align: center !important; width: 100% important;', false);
      box.innerHTML = '<embed type="application/x-mplayer2" pluginspage="http://www.microsoft.com/windows/mediaplayer/en/default.asp" filename="' + mp3 + '" Name="NSPlay" ShowControls="1" ShowDisplay="0" ShowStatusBar="1" width="300" height="69"></embed>';
      
      if(parent.nextSibling)
        parent.parentNode.insertBefore(box, parent.nextSibling);
      else
        parent.parentNode.appendChild(box);
      
      window.ujs_Preview = function(){return;};
    };
    
    var a = document.getElementsByTagName('a');
    var obj = null;
    for(var i = a.length - 1; i >= 0; i--)
    {
      if(a[i].href && a[i].href.search(/zaycev\.net\/download\.php\?/i) != -1 && a[i].href.search(/\bkbps=8/i) != -1)
      { 
        var btn = document.createElement('input');        
        if(a[i].innerHTML.search(/\<img/i) != -1)
        {
          btn.type = 'image';
          btn.src = 'http://www.zaycev.net/template/i/tm0.gif';
        }
        else
        {
          btn.type = 'button';
          btn.value = '(\u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c)';
        }
        btn.setAttribute('onclick', 'window.ujs_Preview(this)', false);
        btn.setAttribute('style', 'border: none; background-color: transparent; color: #b16f30; cursor: pointer;', false);
        a[i].parentNode.replaceChild(btn, a[i]);
        obj = btn;
      }      
    }
    
    if(flashPlayer && obj)
    {
      var parent = window.ujs_GetPreviewParent(obj);
      
      var mp3 = window.ujs_GetPreviewMp3();
      if(!mp3)
        return;      
        
      mp3 = mp3.replace(/\?/g, '%3F');
      mp3 = mp3.replace(/=/g, '%3D');
      mp3 = mp3.replace(/&/g, '%26');
      
      var box = document.createElement('div');
      box.setAttribute('style', 'margin: 0 auto 10px auto !important; text-align: center !important; width: 100% important;', false);
      box.innerHTML = '<span id="ujs_audiopreview"></span>';
      //box.innerHTML = '<embed type="application/x-shockwave-flash" src="http://www.jeroenwijering.com/embed/mediaplayer.swf" width="240" height="20" id="' + playerId + '" flashvars="file=' + mp3 + '" ujs_external_unblocked="1"></embed>';

      if(parent.nextSibling)
        parent.parentNode.insertBefore(box, parent.nextSibling);
      else
        parent.parentNode.appendChild(box);

      var s2 = document.createElement('script');
      s2.type = 'text/javascript';
      s2.src = 'http://www.jeroenwijering.com/embed/swfobject.js';
      s2.onload = setTimeout(function(){
        var s1 = document.createElement('script');
        s1.type = 'text/javascript';
        s1.text = (
          "var sx = new SWFObject('http://www.jeroenwijering.com/embed/mediaplayer.swf','ujs_flash_player','240','20','7');"
         +"sx.addVariable('width','240'); sx.addVariable('height','20'); sx.addVariable('file','" + mp3 + "');"
         +"sx.write('ujs_audiopreview');"
        );
        box.appendChild(s1);
      }, 1500);
      box.appendChild(s2);
    }
  }
  
  function getCaptchaElement()
  {    
    for(var i = 0; i < document.forms.length; i++)
    {
      var e = document.forms[i].text_check;
      if(e && e.tagName == 'INPUT')
      {
        return e;
      }
    }
    
    return null;
  }
  
  function onLoad()
  {
    if(window.location.href.search(/\/pages\/\d+\/\d+\.\w/i) != -1)
    {
      showDownloadForm();
      replacePreviewLink();
    }
    else if(window.location.href.search(/\/download\.php\?/i) != -1)
    {      
      var e = getCaptchaElement();
      if(e)
      {
        reloadCaptcha();
          
        if(e.focus)
          setTimeout(function(){e.focus()}, 1000);

        if(e.form)
        {
          e.form.addEventListener('submit', getDownloadLink, false);
        }      
      }
    }
  }
  
  if(isOpera9())
    document.addEventListener('DOMContentLoaded', onLoad, false);  
  else
    document.addEventListener('load', onLoad, false);
})();