/*
** ZABBIX
** Copyright (C) 2000-2008 SIA Zabbix
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**/
var agt = navigator.userAgent.toLowerCase();
var OP = (agt.indexOf("opera") != -1) && window.opera;
var IE = (agt.indexOf("msie") != -1) && document.all && !OP;
var SF = (agt.indexOf("safari") != -1);
var KQ = (agt.indexOf("khtml") != -1) && (!SF);
var GK = (agt.indexOf("gecko") != -1) && !KQ && !SF;
var MC = (agt.indexOf('mac') != -1)
function checkBrowser(){
if(OP) SDI('Opera');
if(IE) SDI('IE');
if(SF) SDI('Safari');
if(KQ) SDI('Konqueror');
if(MC) SDI('Mac');
if(GK) SDI('FireFox');
return 0;
}
function empty(obj){
if(is_null(obj)) return true;
if(obj == false) return true;
if((obj == 0) || (obj == '0')) return true;
if(is_string(obj) && (obj == '')) return true;
if(is_array(obj) && (obj.length == 0)) return true;
return false;
}
function is_null(obj){
if(obj==null) return true;
return false;
}
function is_number(obj){
return (typeof(obj) == 'number');
}
function is_string(obj){
return (typeof(obj) == 'string');
}
function is_array(obj) {
return obj != null && typeof obj == "object" &&
'splice' in obj && 'join' in obj;
}
if (!Array.prototype.forEach){
Array.prototype.forEach = function(fun /*, thisp*/){
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++){
if (i in this)
fun.call(thisp, this[i], i, this);
}
};
}
function SDI(msg){
var div_help = document.getElementById('div_help');
if((div_help == 'undefined') || empty(div_help)){
var div_help = document.createElement('div');
var doc_body = document.getElementsByTagName('body')[0];
doc_body.appendChild(div_help);
div_help.setAttribute('id','div_help');
div_help.setAttribute('style','position: absolute; left: 10px; top: 10px; border: 1px red solid; width: 800px; height: 400px; background-color: white; overflow: auto; z-index: 20;');
}
div_help.appendChild(document.createTextNode("DEBUG INFO: "));
div_help.appendChild(document.createElement("br"));
div_help.appendChild(document.createTextNode(msg));
div_help.appendChild(document.createElement("br"));
div_help.appendChild(document.createElement("br"));
}
function close_window(){
window.setTimeout("window.close()", 500); /* Solve bug for Internet Explorer */
return false;
}
function add2favorites(favobj,favid){
if('undefined' == typeof(Ajax)){
throw("Prototype.js lib is required!");
return false;
}
if(typeof(favobj) == 'undefined'){
var fav_form = document.getElementById('fav_form');
if(!fav_form) throw "Object not found.";
var favobj = fav_form.favobj.value;
var favid = fav_form.favid.value;
}
if((typeof(favid) == 'undefined') || empty(favid)) return;
var params = {
'favobj': favobj,
'favid': favid,
'action': 'add'
}
send_params(params);
// json.onetime('dashboard.php?output=json&'+Object.toQueryString(params));
}
function rm4favorites(favobj,favid,menu_rowid){
// alert(favobj+','+favid+','+menu_rowid);
if('undefined' == typeof(Ajax)){
throw("Prototype.js lib is required!");
return false;
}
if((typeof(favobj) == 'undefined') || (typeof(favid) == 'undefined'))
throw "No agruments sent to function [rm4favorites()].";
var params = {
'favobj': favobj,
'favid': favid,
'favcnt': menu_rowid,
'action': 'remove'
}
send_params(params);
// json.onetime('dashboard.php?output=json&'+Object.toQueryString(params));
}
function getPosition(obj){
var pos = {top: 0, left: 0};
if(typeof(obj.offsetParent) != 'undefined') {
pos.left = obj.offsetLeft;
pos.top = obj.offsetTop;
while (obj = obj.offsetParent) {
pos.left += obj.offsetLeft;
pos.top += obj.offsetTop;
}
}
return pos;
}
function get_scroll_pos(){
var scrOfX = 0, scrOfY = 0;
//Netscape compliant
if( typeof( window.pageYOffset ) == 'number' ){
scrOfY = window.pageYOffset;
scrOfX = window.pageXOffset;
}
//DOM compliant
else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ){
scrOfY = document.body.scrollTop;
scrOfX = document.body.scrollLeft;
}
//IE6 standards compliant mode
else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ){
scrOfY = document.documentElement.scrollTop;
scrOfX = document.documentElement.scrollLeft;
}
return [ scrOfX, scrOfY ];
}
function get_cursor_position(e){
e = e || window.event;
var cursor = {x:0, y:0};
if(e.pageX || e.pageY){
cursor.x = e.pageX;
cursor.y = e.pageY;
}
else {
var de = document.documentElement;
var b = document.body;
cursor.x = e.clientX +
(de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
cursor.y = e.clientY +
(de.scrollTop || b.scrollTop) - (de.clientTop || 0);
}
return cursor;
}
function redirect(url) {
window.location = url;
return false;
}
function add_variable(o_el, s_name, x_value, s_formname, o_document){
var form;
if(!o_document) o_document = document;
if(s_formname){
if( !(form = o_document.forms[s_formname]) )
throw "Missed form with name '"+s_formname+"'.";
}
else if(o_el){
if( !(form = o_el.form) )
throw "Missed form in 'o_el' object";
}
else{
if( !(form = this.form) )
throw "Missed form in 'this' object";
}
var o_variable = o_document.createElement('input');
if( !o_variable ) throw "Can't create element";
o_variable.type = 'hidden';
o_variable.name = s_name;
o_variable.id = s_name;
o_variable.value = x_value;
form.appendChild(o_variable);
return true;
}
function create_var(form_name, var_name, var_val, subm){
var frmForm = (is_string(form_name))?document.forms[form_name]:form_name;
if(!frmForm) return false;
var objVar = document.getElementsByName(var_name);
objVar=(objVar.length>0)?objVar[0]:null;
if(is_null(objVar)){
objVar = document.createElement('input');
objVar.setAttribute('type', 'hidden');
if(!objVar) return false;
frmForm.appendChild(objVar);
objVar.setAttribute('name', var_name);
objVar.setAttribute('id', var_name);
}
objVar.value = var_val;
if(subm)
frmForm.submit();
return false;
}
function Confirm(msg){
if(confirm(msg,'title'))
return true;
else
return false;
}
function ShowHide(obj,style){
if(typeof(style) == 'undefined')
var style = 'inline';
if(is_string(obj))
obj = document.getElementById(obj);
if(!obj){
throw 'ShowHide(): Object not foun.';
return false;
}
if(obj.style.display != 'none'){
obj.style.display = 'none';
return 0;
}
else{
obj.style.display = style;
return 1;
}
return false;
}
function switchElementsClass(obj,class1,class2){
obj = $(obj);
if(!obj) return false;
if(obj.className == class1){
obj.className = class2;
return class2;
}
else{
obj.className = class1;
return class1;
}
return false;
}
function PopUp(url,width,height,form_name){
if(!width) width = 600;
if(!height) height = 450;
if(!form_name) form_name = 'zbx_popup';
var left = (screen.width-(width+150))/2;
var top = (screen.height-(height+150))/2;
var popup = window.open(url,form_name,'width=' + width +',height=' + height + ',top='+ top +',left='+ left +
',resizable=yes,scrollbars=yes,location=no,menubar=no');
popup.focus();
return false;
}
function CheckAll(form_name, chkMain, shkName){
var frmForm = document.forms[form_name];
var value = frmForm.elements[chkMain].checked;
for (var i=0; i < frmForm.length; i++){
name = frmForm.elements[i].name.split('[')[0];
if(frmForm.elements[i].type != 'checkbox') continue;
if(name == chkMain) continue;
if(shkName && shkName != name) continue;
if(frmForm.elements[i].disabled == true) continue;
frmForm.elements[i].checked = value;
}
}
function openWinCentered(loc, winname, iwidth, iheight, params){
tp=Math.ceil((screen.height-iheight)/2);
lf=Math.ceil((screen.width-iwidth)/2);
if (params.length > 0){
params = ', ' + params;
}
var WinObjReferer = window.open(loc,winname,"width="+iwidth+",height="+iheight+",top="+tp+",left="+lf+params);
WinObjReferer.focus();
}
function addListener(element, eventname, expression, bubbling){
bubbling = bubbling || false;
if(window.addEventListener) {
element.addEventListener(eventname, expression, bubbling);
return true;
}
else if(window.attachEvent) {
element.attachEvent('on'+eventname, expression);
return true;
}
else return false;
}
function cancelEvent(e){
if (!e) var e = window.event;
//SDI(e);
if(e){
if(IE){
e.cancelBubble = true;
e.returnValue = false;
}
else{
e.stopPropagation();
e.preventDefault();
}
}
return false;
}
function deselectAll(){
if(IE){
document.selection.empty();
}
else if(!KQ){
var sel = window.getSelection();
sel.removeAllRanges();
}
}
function eventTarget(e){
var targ = false;
if (!e) var e = window.event;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
// defeat Safari bug
if (targ.nodeType == 3) targ = targ.parentNode;
return targ;
}
function send_params(params){
var uri = new url(location.href);
new Ajax.Request(uri.getPath()+"?output=ajax",
{
'method': 'post',
'parameters':params,
'onSuccess': function(resp){ },//alert(resp.responseText);
'onFailure': function(){ document.location = uri.getPath()+'?'+Object.toQueryString(params); }
}
);
}
/************************************************************************************/
/* Pages stuff */
/************************************************************************************/
function change_hat_state(icon, divid){
deselectAll();
var hat_state = ShowHide(divid);
switchElementsClass(icon,"arrowup","arrowdown");
if(false === hat_state) return false;
var params = {
'favobj': 'hat',
'favid': divid,
'state': hat_state
}
send_params(params);
}
function change_filter_state(icon, divid){
deselectAll();
var filter_state = ShowHide(divid);
switchElementsClass(icon,"filteropened","filterclosed");
if(false === filter_state) return false;
var params = {
'favobj': 'filter',
'favid': divid,
'state': filter_state
}
send_params(params);
}
function switch_mute(icon){
deselectAll();
var sound_state = switchElementsClass(icon,"iconmute","iconsound");
if(false === sound_state) return false;
sound_state = (sound_state == "iconmute")?1:0;
var params = {
'favobj': 'sound',
'state': sound_state
}
send_params(params);
}
function GetSelectedText(obj){
if(IE){
obj.focus();
return document.selection.createRange().text;
}
else if(obj.selectionStart){
if(obj.selectionStart != obj.selectionEnd) {
var s = obj.selectionStart;
var e = obj.selectionEnd;
return obj.value.substring(s, e);
}
}
return obj.value;
}
function ScaleChartToParenElement(obj_name){
var obj = document.getElementsByName(obj_name);
if(obj.length <= 0) throw "Can't find objects with name [" + obj_name +"]";
for(i = obj.length-1; i>=0; i--){
obj[i].src += "&width=" + (obj[i].parentNode.offsetWidth - obj[i].parentNode.offsetLeft - 10);
}
}
function insert_sizeable_graph(graph_id,url){
if((typeof(ZBX_G_WIDTH) != 'undefined')) url += "&width="+ZBX_G_WIDTH;
document.write('
');
}
function remove_childs(form_name,rmvbyname,tag){
tag = tag.toUpperCase();
var frmForm = document.forms[form_name];
for (var i=0; i < frmForm.length; i++){
if(frmForm.elements[i].type != 'checkbox') continue;
if(frmForm.elements[i].disabled == true) continue;
if(frmForm.elements[i].checked != true) continue;
var splt = frmForm.elements[i].name.split('[');
var name = splt[0];
var serviceid = splt[1];
if(rmvbyname && rmvbyname != name) continue;
// if(frmForm.elements[i].name != rmvbyname+'['+serviceid+'[serviceid]') continue;
remove_element(frmForm.elements[i],tag);
i--;
}
}
function remove_element(elmnt,tag){
elmnt = $(elmnt);
if(!is_null(elmnt)){
if(('undefined' != typeof(elmnt.nodeName)) && (elmnt.nodeName.toLowerCase() == tag.toLowerCase())){
elmnt.parentNode.removeChild(elmnt);
}
else if(elmnt.nodeType == 9){
return false;
}
else {
remove_element(elmnt.parentNode,tag);
}
}
return true;
}
function resizeiframe(id){
id = id || 'iframe';
var iframe = document.getElementById(id);
var indoc = (IE)?iframe.contentWindow.document:iframe.contentDocument;
if(typeof(indoc) == 'undefined') return;
var height = parseInt(indoc.getElementsByTagName('body')[0].scrollHeight);
var height2 = parseInt(indoc.getElementsByTagName('body')[0].offsetHeight);
if(height2 > height){
height = height2;
}
iframe.style.height = (height)+'px';
if(!is_null($('scroll')) && showgraphmenu){
showgraphmenu('iframe');
}
}
function get_bodywidth(){
var w = parseInt(document.body.scrollWidth);
var w2 = parseInt(document.body.offsetWidth);
if(KQ){
w = (w2 < w)?w2:w;
w-=16;
}
else{
w = (w2 > w)?w2:w;
}
return w;
}
function empty_form(id){
id = $(id);
var count = 0;
var inputs = id.getElementsByTagName('input');
for(var i=0; i