/*
    @author MiRacLe <http://miracle.wordpress.com>
    @sinse 14.04.2006
    @version 0.3.1
    @see http://miracle.wordpress.com/2006/04/14/flash-activex-ie-update/
     Как использовать:
      положить на сервер этот файл 
      добавить на страницу содержащую flash-ки код
      <script language="JavaScript1.2" type="text/javascript" src="/path/to/flash_replacer.js"></script>    
    @changelog 21.04.2006
        в IE версий ниже 6-ой нет возможности получить objectObj.getElementsByTagName('param') }
        поэтому теперь flashvars извлекаются из objectObj.altHTML - свойство содержащее html с embed и добавляются только если они найдены (в v.0.1 добавлялись в любом случае)
    @changelog 24.04.2006
       обработчик навешивается только в IE 6 (в пятом рамки вокруг флеша мной не были замечены, но зато замечены падения браузера после переписывания outerHTML)
    @changelog 26.04.2006
        flashvars-ов может не быть ( object.altHTML.match(/flashvars/).length == undefined) 
*/

/* нижеследующая переменная пригодиться для проверки  (проверка слабенькая - желающие могут подправить)  */
var is_ie6 = ((navigator.userAgent.toLowerCase().indexOf("msie") != -1) && (navigator.userAgent.toLowerCase().indexOf("opera") == -1) && (navigator.userAgent.indexOf('IE 6') != -1));

/* 
  Универсальный "навешиватель" обработчиков на объекты  взят из базы знаний Xpoint 
*/
if (typeof('addHandler') != 'function') { // проверка нужна только "на всякий пожарный случай" - а вдруг такие функции уже есть ?
  function addHandler(object, event, handler) {
    if (typeof (object.addEventListener) != 'undefined')
      object.addEventListener(event, handler, false);
    else if (typeof (object.attachEvent) != 'undefined')
      object.attachEvent('on' + event, handler);
    else {
      var handlersProp = '_handlerStack_' + event;
      var eventProp = 'on' + event;
      if (typeof (object[handlersProp]) == 'undefined') {
        object[handlersProp] = [];
        if (typeof (object[eventProp]) != 'undefined')
          object[handlersProp].push(object[eventProp]);
        object[eventProp] = function(e) {
          var ret = true;
          for (var i = 0; ret != false && i < object[handlersProp].length; i++)
            ret = object[handlersProp][i](e);
          return ret;
        }
      }
      object[handlersProp].push(handler);
    }
  }
}
/*
 универсальный "навешиватель" обработчиков на window.onload 
   (можно обойтись без него, но мне он обычно нужен не только для IE  (и не только для flash_replacer)) 
*/
if (typeof('addOnLoadEvent') != 'function') {  // проверка нужна только "на всякий пожарный случай" - а вдруг такие функции уже есть ?
  function addOnLoadEvent() {

  	var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
  	if (root) {
  		for (var i = 0; i < arguments.length; i++) {
  			if ('function'  == typeof(arguments[i]))
  				addHandler(root,'load',arguments[i]);
  		}
  	}
  }
}
/* собственно workhorse - функция, которая пергружает флэшки, не теряя при этом flashvars */

function initFlashReplacer() {
  var objs = document.getElementsByTagName('object');
  if (objs && objs.length) {    
    for (var i = 0; i < objs.length; i++) {
        if (objs[i].getAttribute('classid') == 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000') {
          var FlashVars = false;
          var params = (objs[i].altHtml) ? objs[i].altHtml : false;
          if (params.length) {
            var tmp = params.match(/flashvars="(\S+)"/i);
            if (tmp && tmp.length == 2) {
              FlashVars = tmp[1];
            }
          }                   
          var obj = objs[i].outerHTML + "\n";
          if (FlashVars) obj = obj.replace(/FLASHVARS" VALUE=""/i,'FLASHVARS" value="'+FlashVars+'"');
          objs[i].outerHTML = obj;
        }
    }
    objs = null;
  }
}
// "навешиваю лошадку" если пользователь имеет несчатье пользоваться MSIE ;o)
if (is_ie6) addOnLoadEvent(initFlashReplacer); 
