﻿var CallButton;
var HintDiv;
var HintedObj;
var HintedObjClass;

var MenuDiv;
var MenuObj;
var MenuObjClass;
var CursorOverMenu = 0;
var CursorOverMenuItem = 0;
var MenuTimer;
var Closable = 0;


function ShowHint(button, obj, HintDivName) {

    this.HintDiv = document.getElementById('hint_div');

    // погасим, если уже светится
    if (this.HintDiv.style.visibility == "visible") {
        HideHint(this.CallButton);
    }

  var place = document.getElementById('hintplacehere');
  this.CallButton = button;
  this.CallButton.style.visibility = "hidden";
  this.HintedObj = document.getElementById(obj);

  //////////////////////////////////////////////////////////
  place.innerHTML = "<img src='gfx/pro1.gif' style='border:none'/>&nbsp;Подготовка справки...";
  HintMoveTo(0);
  this.HintDiv.style.visibility = "visible";
  //////////////////////////////////////////////////////////
 
   
  document.getElementById('bCloseHint').focus();
  
  
  this.HintedObjClass = this.HintedObj.className;
  this.HintedObj.className = "hinted";

  var hidd = document.getElementById('ctl00_plate_Hint_HintDivName');
  if (hidd) hidd.value = HintDivName;

  // Контент
  xmlhttp.open("GET", "HintDivs.aspx?HintName=" + HintDivName + "&s=" + Math.random(), true);
  xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState == 4) {
          // alert(xmlhttp.responseText);
          place.innerHTML = xmlhttp.responseText;

          //(*) НЕ РАБОТАЕТ из-за того, что основной DIV формы - fixed
          //          var bSend = document.getElementById('ctl00_plate_Hint_bSendGrade');
          //          if (bSend) {
          //              bSend.scrollIntoView();
          //              // bSend.focus();
          //          };

      };
  }
  xmlhttp.send(null);

  // Прокрутка основной части окна (*)
  var Hint = document.getElementById('hint_div');
  //alert(Hint.offsetHeight);
  var ScrollDelta = HintMoveTo(Hint.offsetHeight);
  //alert(ScrollDelta);
  var mainplate = document.getElementById("ctl00_pan_Main");
  if (mainplate) {
      NoScroll = 1; // Чтобы работало скрытие справки при скроллинге главного окна
      mainplate.scrollTop = mainplate.scrollTop + ScrollDelta;
      //this.HintDiv.scrollTop = this.HintDiv.scrollTop - ScrollDelta;
  };
  window.onresize = HintMoveTo;
};

function ShowHint2(button, obj, HintDivName) {

    this.HintDiv = document.getElementById('hint_div');
    
    // погасим, если уже светится
    if (this.HintDiv.style.visibility == "visible") {
        HideHint(this.CallButton);
    }

    var place = document.getElementById('hintplacehere');
    this.CallButton = button;
    this.CallButton.style.visibility = "hidden";
    this.HintedObj = document.getElementById(obj);
    //////////////////////////////////////////////////////////
    place.innerHTML = "<img src='gfx/pro1.gif' style='border:none'/>&nbsp;Подготовка справки...";
    HintMoveTo2();
    this.HintDiv.style.visibility = "visible";
    //////////////////////////////////////////////////////////
    document.getElementById('bCloseHint').focus();
    this.HintedObjClass = this.HintedObj.className;
    this.HintedObj.className = "hinted";

    var hidd = document.getElementById('ctl00_plate_Hint_HintDivName');
    if (hidd) hidd.value = HintDivName;
    // Контент
    xmlhttp.open("GET", "HintDivs.aspx?HintName=" + HintDivName + "&s=" + Math.random(), true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            // alert(xmlhttp.responseText);
            place.innerHTML = xmlhttp.responseText;

            //(*) НЕ РАБОТАЕТ из-за того, что основной DIV формы - fixed
            //          var bSend = document.getElementById('ctl00_plate_Hint_bSendGrade');
            //          if (bSend) {
            //              bSend.scrollIntoView();
            //              // bSend.focus();
            //          };

        };
    }
    xmlhttp.send(null);
    // Прокрутка основной части окна (*)
    var Hint = document.getElementById('hint_div');    
    //var ScrollDelta = HintMoveTo(Hint.offsetHeight);    
    var mainplate = document.getElementById("ctl00_pan_Main");
    if (mainplate) {
        NoScroll = 1; // Чтобы работало скрытие справки при скроллинге главного окна
        mainplate.scrollTop = mainplate.scrollTop; //+ ScrollDelta;
        //this.HintDiv.scrollTop = this.HintDiv.scrollTop - ScrollDelta;
    };
    window.onresize = HintMoveTo2;
};

function ShowMenu(button, obj, MenuDivName, AddParams, ManualClose) {    
    if (this.Closable == 0) {    
        button.focus();
        this.MenuDiv = document.getElementById('menu_div');        
        //var log = document.getElementById('log');
        //log.innerHTML = log.innerHTML + 'ShowMenu '+MenuDivName+'<br/>';
        if (this.MenuTimer) clearTimeout(this.MenuTimer);

        // погасим, если уже светится
        if (this.MenuDiv.style.visibility == "visible") {
            HideMenu(1);
        };
        if (ManualClose) this.Closable = 1;

        // на всяк.случай
        var place = document.getElementById('placehere');
        if (place) place.innerHTML = '';
        CursorOverMenuItem = 1;
        var place = document.getElementById('placehere');
        this.CallButton = button;
        this.MenuObj = document.getElementById(obj);

        MenuMoveTo();
        
        place.innerHTML = "<div style='text-align:center'><img src='gfx/pro1.gif' style='border:none'/><br/>Пожалуйста, подождите...</div>";
        this.MenuDiv.style.visibility = "visible";

        this.MenuObjClass = this.MenuObj.className;
        if (this.Closable == 0) this.MenuObj.className = "mnshowed";

        // Контент
        xmlhttp.open("GET", "MenuDivs.aspx?mn=" + MenuDivName + "&s=" + Math.random() + ((AddParams) ? AddParams : ""), true);
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) {
                place.innerHTML = xmlhttp.responseText;
                var trclose = document.getElementById('trclose');
                if (ManualClose) {
                    if (trclose) trclose.style.visibility = "visible";
                } else {
                    if (trclose) trclose.style.visibility = "hidden";
                };

            }
        }
        xmlhttp.send(null);
        window.onresize = MenuMoveTo;
    };
};

function HintMoveTo(BottomDelta) {
    // Перемещаемся
    var ScrollDelta = 0;
    //var BottomDelta = this.HintDiv.offSetHeight; //200; // Высота справки
    var ObjPos = FindPos2(this.HintedObj);
    var StatusBar = document.getElementById('ctl00_dv_statusbar');
    if (StatusBar) {
        var StatusBarPos = FindPos2(StatusBar);
        //alert(ObjPos[3]);
        //alert(StatusBarPos[1]);
        if ((ObjPos[3] + BottomDelta) > StatusBarPos[1]) // Если справка вылезла за статус-бар
            ScrollDelta = (ObjPos[3] + BottomDelta) - StatusBarPos[1]
    };
    
    this.HintDiv.style.left = ObjPos[0] + "px";
    try {
        this.HintDiv.style.top = ObjPos[3] - m_TopDelta - ScrollDelta + "px"
    } catch(exception) {
       this.HintDiv.style.top = ObjPos[3] + "px";
   } 
    
    return ScrollDelta
}

function HintMoveTo2() {
//    var ObjPos = FindPos2(document.getElementById('ctl00_plate_statusbar_StatusBar_dv_help'));
    var dv_help = document.getElementById('ctl00_dv_help');
    if (dv_help) dv_help.style.visibility = "visible";
    var is_err = 0;
    //this.HintDiv.style.left = ObjPos[0] + "px";
    this.HintDiv.style.left = "6px";
    try {
        //this.HintDiv.style.top = ObjPos[3] + "px";
        this.HintDiv.style.top = "-12px";
    } catch (exception) {
        is_err = 1;
    }

    return is_err
}


function MenuMoveTo() {
    // Перемещаемся
    var ObjPos = FindPos(this.MenuObj);
    this.MenuDiv.style.left = ObjPos[0] + "px";
    this.MenuDiv.style.top = ObjPos[3] + "px";
};

function HideHint(button) {
    if (this.HintedObj) {
        this.HintedObj.className = this.HintedObjClass;
        this.HintDiv.style.visibility = "hidden";
        this.CallButton.style.visibility = "visible";
    };

    var dv_help = document.getElementById('ctl00_dv_help');
    if (dv_help) dv_help.style.visibility = "collapse";
    
    window.onresize = null
};

function MenuItemOut() {
    this.CursorOverMenuItem = 0;
    this.MenuTimer=setTimeout('HideMenu(0);', 100);
    
}

function HideMenu(anyway) {
    //var log = document.getElementById('log');
    //log.innerHTML = log.innerHTML + 'HideMenu ' + anyway + '<br/>';

    //alert('HideMenu CursorOverMenu=' + this.CursorOverMenu);
        if (((anyway == 1 || (this.CursorOverMenu == 0)) && (this.Closable == 0)) || (anyway == 2)) {
            this.MenuObj.className = this.MenuObjClass;
            this.MenuDiv.style.visibility = "hidden";
            this.CursorOverMenu = 0;
            this.CursorOverMenuItem = 0;
            this.Closable = 0;
            window.onresize = null;
            var place = document.getElementById('placehere');
            if (place) place.innerHTML = '';
            var trclose = document.getElementById('trclose');
            if (trclose) trclose.style.visibility = "hidden"
        }
};

function HideNextLev(){
    var place = document.getElementById('ctl00_LPview_dv_NextLev');
    if (place)
        place.style.visibility = "hidden"
};


function FindPos(obj) {
    var curleft = curtop = 0;
    var h = obj.offsetHeight;
    var w = obj.offsetWidth;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
    };
    return [curleft, curtop, curleft + w, curtop + h];
};


/////////////////////////////////////////////////////////////////////////////////
function getOffset(elem) {
    if (elem.getBoundingClientRect) {
        // "правильный" вариант
        return getOffsetRect(elem)
    } else {
        // пусть работает хоть как-то
        return getOffsetSum(elem)
    }
}

function getOffsetSum(elem) {
    var top=0, left=0
    while(elem) {
        top = top + parseInt(elem.offsetTop)
        left = left + parseInt(elem.offsetLeft)
        elem = elem.offsetParent
    }

    return {top: top, left: left}
}

function getOffsetRect(elem) {
    // (1)
    var box = elem.getBoundingClientRect()

    // (2)
    var body = document.body
    var docElem = document.documentElement

    // (3)
    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft

    // (4)
    var clientTop = docElem.clientTop || body.clientTop || 0
    var clientLeft = docElem.clientLeft || body.clientLeft || 0

    // (5)
    var top = box.top + scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft

    return { top: Math.round(top), left: Math.round(left) }
}
/////////////////////////////////////////////////////////////////////////////////
function FindPos2(obj) {
    var ObjPos = getOffset(obj);
    var top = ObjPos.top;
    var left= ObjPos.left;
    var h = obj.offsetHeight;
    var w = obj.offsetWidth;
   
    return [left, top, left + w, top + h];
};


function FindMenuPos(obj) {
    var curleft = curtop = 0;
    var h = obj.offsetHeight;
    var w = obj.offsetWidth;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
    };
    return [curleft, curtop, curleft + w, curtop];
};


var xmlhttp = false;
/*@cc_on@*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
    try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
        xmlhttp = false;
    }
}
@end@*/
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
        xmlhttp = new XMLHttpRequest();
    } catch (e) {
        xmlhttp = false;
    }
}
if (!xmlhttp && window.createRequest) {
    try {
        xmlhttp = window.createRequest();
    } catch (e) {
        xmlhttp = false;
    }
}


/*********************************************************************
* Get an object, this function is cross browser
* *** Please do not remove this header. ***
* This code is working on my IE7, IE6, FireFox, Opera and Safari
* 
* Usage: 
* var object = get_object(element_id);
*
* @Author Hamid Alipour Codehead @ webmaster-forums.code-head.com		
**/
function get_object(id) {
    var object = null;
    if (document.layers) {
        object = document.layers[id];
    } else if (document.all) {
        object = document.all[id];
    } else if (document.getElementById) {
        object = document.getElementById(id);
    }
    return object;
}
/*********************************************************************/

/*********************************************************************
* No onMouseOut event if the mouse pointer hovers a child element 
* *** Please do not remove this header. ***
* This code is working on my IE7, IE6, FireFox, Opera and Safari
* 
* Usage: 
* <div onMouseOut="fixOnMouseOut(this, event, 'JavaScript Code');"> 
*		So many childs 
*	</div>
*
* @Author Hamid Alipour Codehead @ webmaster-forums.code-head.com		
**/
function is_child_of(parent, child) {
    if (child != null) {
        while (child.parentNode) {
            if ((child = child.parentNode) == parent) {
                return true;
            }
        }
    }
    return false;
}
function fixOnMouseOut(element, event, JavaScript_code) {
    var current_mouse_target = null;
    if (event.toElement) {
        current_mouse_target = event.toElement;
    } else if (event.relatedTarget) {
        current_mouse_target = event.relatedTarget;
    }
    if (!is_child_of(element, current_mouse_target) && element != current_mouse_target) {
        eval(JavaScript_code);
    }
}

