function DomReady(fn) {
     //W3C
      if(document.addEventListener) { document.addEventListener("DOMContentLoaded", fn, false); }
      //IE
      else {document.onreadystatechange = function(){readyState(fn)} }
}
function readyState(fn) {
      //dom is ready for interaction
      if(document.readyState == "interactive") {  fn();  }
    }


window.onDomReady = DomReady;


function node(obj,document){
  //alert(123);

  var doc = window.document;
  if(document && document !='undefined'){

    if(typeof(document)=='string'){
    doc = window.frames[document].document;}

    else{ doc = document;}

    //alert(doc);
  }

 if(typeof(obj)=='string'){ return doc.getElementById(obj);}
 else if(typeof(obj)=='object'){return obj;}
 else { return false;}
  return obj;
}

function hide(obj,doc){

  var o = node(obj,doc);
  if(o){
    o.style.display='none';
  }
}

function  show(obj,doc){
  var o = node(obj,doc);
  if(o){
    o.style.display='block';
  }
}




var setslistjs = new Array();
var popupbodybind = false;
var noticeOnHide= false;
var noticeOnHideParams = false;
var waitPic30 = new Image();
waitPic30.src = "../img/widgets/wait/wait30trans.gif";
function showPopup(obj,text){

   if(!popupbodybind){
     t = setTimeout( function(){ $('body').bind('click',hidePopups)},'100');
     popup1bodybind = true;
   }

  obj_popup = obj+'_popup';
  if(!window.document.getElementById(obj+'_popup')){
    $("#"+obj).after('<div class="popup" id="'+obj_popup+'" >'+text+'</div>');
  }
  else{$("#"+obj_popup).html(text);}
    t1 = setTimeout( "showPopupDelay('"+obj_popup+"')",'100');
  return false;
}

function showPopupDelay(obj){
  $("#"+obj).css({'display':'block'});
}

function hidePopups(){
  $(".popup").css({'display':'none'});
  popupbodybind =false;
  $('body').unbind('click',hidePopups);
  return false;
}


function showNotice(text,onhide,onhideParams){
 //alert(text);return;
 if(!text && onhide){runCode(onhide,onhideParams);return;}
  blockWindow();
  if(!node('widgets_notice',top.document)){
    var o = top.document.createElement("div");
    o.setAttribute("id", "widgets_notice");
    top.document.body.appendChild(o);

    o.innerHTML = '<table><tr class="tr1"><td class="td1" ></td><td class="td2" ></td><td class="td3" ></td></tr><tr class="tr2" ><td class="td1"  ></td><td class="td2" id="widgets_notice_text" ></td><td class="td3" ></td></tr><tr class="tr3" ><td class="td1" ></td><td class="td2" ></td><td class="td3" ></td></tr></table>';
  }
  setOpacity('widgets_notice', 0.8);
  var div = node('widgets_notice');

  div.style.marginTop = parseInt(Math.max(document.body.scrollTop,document.documentElement.scrollTop))+'px';


  if(!text){text='Произошла непредвиденная ошибка';}
  var o_text = node('widgets_notice_text');
  text = text.replace(/&gt;/g,'>');
  text = text.replace(/&lt;/g,'<');
  o_text.innerHTML = text;
  show('widgets_notice');

  var delays = parseInt(Math.round(text.length/40));
  if(delays<1){delays=1;}
 // alert(delays);
  //return;
  var t = setTimeout(hideNotice,(2000*delays));
  if(onhide){
    noticeOnHide = onhide;
    noticeOnHideParams = onhideParams;
  }
}


function hideNotice(){
  setOpacity('widgets_notice',0,50);
  var t = setTimeout(removeNotice,610);
}



function removeNotice(){
  unblockWindow();
  hide('widgets_notice');
  if(noticeOnHide){

    if(typeof(noticeOnHide) =='function'){noticeOnHide(noticeOnHideParams);}
    else{
        var tmp = eval('('+noticeOnHide+')');
        if(typeof(tmp) =='function'){tmp(noticeOnHideParams);}
    }
  }
  noticeOnHide = false;
  noticeOnHideParams = false;
}


function blockWindow(){

  var div = node("widget_BlockWindow",top.document);
  if (!div){
    var o = top.document.createElement("div");
    o.setAttribute("id", "widget_BlockWindow");
    o.setAttribute("onclick", "return false;");
    div = top.document.body.appendChild(o);
  }

  var winH = getDocumentHeight();
  div.style.height = parseInt(winH)+'px';

  setOpacity('widget_BlockWindow',0.7,20);
}


function unblockWindow(){

  hide('widgets_notice',top.document);

  setOpacity('widget_BlockWindow',0,20);
  window.document.body.removeChild(node("widget_BlockWindow",top.document));
}



function showPopupWindow(url,w,h,hideTitle){
 blockWindow();
   if(!node('widgets_PopupWindow')){
     var o = top.document.createElement("div");
        o.setAttribute("id", "widgets_PopupWindow");
        top.document.body.appendChild(o);

    o.innerHTML = '<table><tr id ="widgets_PopupWindow_Title_Tr" class="tr1"><td class="td2"  ><div id="widgets_PopupWindow_Title"></div><a class="widgets_popupWindowClose" title="Закрыть" onclick="hidePopupWindow();"></a></td></tr><tr class="tr2" ><td class="td2"><iframe id="widgets_PopupWindow_text" frameborder="0" scrolling="no"></iframe></td></tr></table>';
  }
  var nodetr = node('widgets_PopupWindow_Title_Tr');
  if(hideTitle ==1){ nodetr.style.display='none';}
  else{nodetr.style.display='';}
  var win = node('widgets_PopupWindow');
  var frame = node("widgets_PopupWindow_text");


  if(w >0 && h >0){}
  else{w=800;h=600;}
    win.style.width = w+'px';
    win.style.height = h+'px';
    frame.style.width=w+'px';
    frame.style.height=h-20+'px';

    var winH = parseInt(document.body.clientHeight);
    var marginLeft = -Math.round(w/2);
    var wintop = Math.round((winH - h)/2);

    wintop=20;

    if(h > winH){wintop=20;}
    win.style.top = parseInt(getScrollTop()) + wintop+'px';

    win.style.marginLeft = marginLeft+'px';
    //window.style.marginTop = marginTop;



  if(url && url !=''){frame.src = url;}
  else{frame.removeAttribute('src');}
  show('widgets_PopupWindow');
  return false;
}

function hidePopupWindow() {

 unblockWindow();

  var frame = node("widgets_PopupWindow_text",window.document);
  //var frame =top.document.getElementById('widgets_PopupWindow_text');

  frame.src='';

  hide('widgets_PopupWindow',top.document);

  return false;
}

var widgetsLoadedImages = {};

function zoom(src,w,h,name) {
      var image = new Image();
      image.name = name;
       w = w? w : 150;
       h = h? h : 150;
       name = name? name : '';

      regexp = /#(\d+)#(\d+)$/;
      var $size = src.split('#',src);
      if($size[1]> 0 && $size[2]>0){w=$size[1];h=$size[2];}

      var window = parent.window;
      if(document.getElementById('widget_ImageZoom')){ window.document.body.removeChild(document.getElementById('widget_ImageZoom')); }
      var marginLeft = Math.round(w)+2;
      var marginTop = parseInt(Math.round(h/2));
      var style="width:"+w+"px;height:"+h+"px;";
      var o = window.document.createElement("div");
      o.setAttribute("id", "widget_ImageZoom");
      var div = window.document.body.appendChild(o);
      div.innerHTML = "<center><div style='"+style+"' id='widget_ImageZoom_inner'><a class='close' onclick='hideZoomImage();' style='margin-left:"+marginLeft+"px' title='Закрыть'></a><img  src='"+waitPic30.src+"'  alt='"+name+"'  title='"+name+"' onclick='hideZoomImage()' id='widget_ImageZoommed'/></div></center>";
      var nodeimg = node('widget_ImageZoommed');
      nodeimg.style.marginTop = marginTop;

      var top = getScrollTop();

      div.style.marginTop = parseInt(top)+'px';
      //$("#widget_ImageZoom").css('top',top);
      image.src=src;
      image.onload = function() {

        //setTimeout(function(){
        var src=this.src;
        new_w = this.width;
        new_h=this.height;
        var name=this.name;
        var imagenode = node('widget_ImageZoommed');

        imagenode.style.marginTop = 0;
        var d = node('widget_ImageZoom_inner');
        setOpacity(d,0,0,function(){

          var ww = new_w - w;
          d.style.width=new_w+'px';
          d.style.height=new_h+'px';
          d.style.display='block';
          d.getElementsByTagName('a')[0].style.marginLeft =  Math.round(new_w)+2+'px';
          imagenode.src = src;setOpacity(d,1,30);
        });
       //},10000);
      };



      return false;
}


function getScrollTop(){
  var top=0;

  top = Math.max(parseInt(document.body.scrollTop),parseInt(document.documentElement.scrollTop));
  //alert(top);
  return parseInt(top);

}


function parseImagesPreview(){
  DomReady(function() {
    var images = document.getElementsByTagName('img');
    for(var i=0; i< images.length; i++){
        var img = images[i];
        if(img.className=='preview' && img.src.match(/_popup\.(jpg|gif)$/gi)) {

            img.onclick= function(){zoom(this.src.replace(/_popup\./gi,'.'));}
        }

    }
  });
}

parseImagesPreview();

function parseImagesZoom(){
  DomReady(function() {
    var images = document.getElementsByTagName('a');
    for(var i=0; i< images.length; i++){
        var img = images[i];
        if(img.className=='zoom' && img.href!='') {
            img.onclick= function(){zoom(this.href);return false;}
        }

    }
  });
}

function hideZoomImage() {
  var imagenode = node('widget_ImageZoom');
   setOpacity(imagenode,0,20);
   setTimeout("window.document.body.removeChild(node('widget_ImageZoom'))",510);
}



function showLoadedImage(img){
var pic = node('widget_PreloadImagePic');
setOpacity(pic,0.3,30,"var pic1 = node('widget_PreloadImagePic'); pic1.style.display='none';");

//var x = setTimeout("var pic1 = node('widget_PreloadImagePic'); pic1.style.display='none';",320);
}

function hideLoadedImage(onHide){

//alert(onHide);
var pic = node('widget_PreloadImagePic');
pic.style.display='block';
//setOpacity(pic,0,1);
setOpacity(node('widget_PreloadImagePic'),1,30,onHide);
//pic.style.backgroundImage = 'none';
//pic.style.display='none';
//var preload = node();
//setOpacity(pic,0,1,30);

//var x = setTimeout("var pic1 = node('widget_PreloadImagePic'); pic1.style.display='none';",320);
}



function getOpacityProperty()
{
  var p;
  if (typeof document.body.style.opacity == 'string') p = 'opacity';
  else if (typeof document.body.style.MozOpacity == 'string') p =  'MozOpacity';
  else if (typeof document.body.style.KhtmlOpacity == 'string') p =  'KhtmlOpacity';
  else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) p =  'filter';

  return (getOpacityProperty = new Function("return '"+p+"';"))();
}

function getElementOpacity(obj){
    var o = 0;
    o = parseFloat(obj.style[getOpacityProperty()]);
    if(!o && o !==0){o=1;}
    //o = o.replace(/alfa/,'')
    return o;
}



function setOpacity(obj,value,time,onDone) {
    obj = node(obj);
   var prop = getOpacityProperty();
   var from = getElementOpacity(obj)*10;
   if(from == value*10){return;}
   var znak = value*10 > from ?1:-1;
   if(time ) {
      var iteration=0;
      var iterations = Math.abs(value*10-from);
      var iterationTime = Math.round(time*10/iterations);
          setOpacity_i(obj,prop,from,iterations,iterationTime,znak,onDone);
   }
   else {
      setOpacity_(obj,prop,value);
      runCode(onDone);
   }
}

function  setOpacity_i(obj,prop,cur,iterations,time,znak,onDone) {
    if(iterations) {
      cur=cur+1*znak;
      setOpacity_(obj,prop,cur/10);
      iterations--;
      setTimeout(function(){setOpacity_i(obj,prop,cur,iterations,time,znak,onDone)},time);
    }
    else{runCode(onDone);}
}

function  setOpacity_(obj,prop,value) {
//alert(value);
  if ( prop=='filter'){obj.style.filter = 'alpha(opacity=' + value*100 + ')';}
  else { obj.style[prop] = value;}
}




var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera')  > -1);
var isIE = (!isOpera && ua.indexOf('msie') > -1);

function getDocumentHeight() {

   var h = Math.max(document.compatMode != 'CSS1Compat' ? document.body.scrollHeight : document.documentElement.scrollHeight, getViewportHeight());
   return h;
  }

 function getViewportHeight() {
   return ((document.compatMode || isIE) && !isOpera) ? (document.compatMode == 'CSS1Compat') ? document.documentElement.clientHeight : document.body.clientHeight : (document.parentWindow || document.defaultView).innerHeight;
 }



function runCode(text,param) {
  if(!text){return;}
  if(typeof(text) =='function'){  text.call('',param); }
  else{ eval(text);}
}

  function getOffsetRect(elem) {
    if(elem.getBoundingClientRect) {
      var box = elem.getBoundingClientRect()
      var body = document.body;
      var docElem = document.documentElement;
      var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
      var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
      var clientTop = docElem.clientTop || body.clientTop || 0
      var clientLeft = docElem.clientLeft || body.clientLeft || 0
      var top  = box.top +  scrollTop - clientTop;
      var left = box.left + scrollLeft - clientLeft;
     }
     else{
      var top = elem.offsetTop;
      var left = elem.offsetLeft;
     }
      return { top: Math.round(top), left: Math.round(left) }
}







