﻿/*
  -------------------------------------
  (c) Dev4Masses, All rights reserved
  -------------------------------------
  $Description: Lib.d4m common JavaScript file $
  $Date: 2005/04/08 12:06:24 $
  $Revision: 1.24 $
  $State: Exp $
*/


// global variables
var DEBUG = false;
var eol = "\n";
var tmp = false;
var OBJS_LN_TGT = '_self'

//submit form for keypress enter
// lm by mdn [21.04.2004 11:30]
var do_key = true;
var goto_pwd = true;
var do_key_now = false;
var ns = false;
var nav = navigator.appName;

function set_off()  { do_key_now = false; }
function set_on( nm )   { do_key_now = true; cur_key_now = nm }

function on_key( e ) {
var key_val;
	if( !do_key || !do_key_now ) return;
	if ( ns ) key_val = e.which;
	else      key_val = window.event.keyCode;
	if( key_val == 13 ) {
	  if( cur_key_now == 'on_enter_str_srch' ) {
	    on_enter_str_srch();
	  }
	  else
      on_enter();
	}
}

if ( nav.indexOf("Netscape") != -1 ) {
	ns = true;
	if( document.layers ) { // N4
		document.captureevents( Event.KEYPRESS );
		document.onkeypress = on_key;
	} else if( document.getElementById ) { // N6
		document.onkeypress = on_key;
	} else { do_key = false; }
} else if( nav.indexOf("Explorer") != -1 ) {
	document.onkeypress = on_key;
} else {
	do_key = false;
}

// get pointer of form control by name
// frm - pointer to form
// ctrl_nm - name of control
// lm by svl [29.04.2003 17:55]
function get_frm_ctrl_ptr_by_name( frm, ctrl_nm ) {
var ctrl_ptr = frm.elements[ ctrl_nm ];

  if( ctrl_ptr == null && DEBUG )
    alert("Error: control with name '" + ctrl_nm + "' in form '" + frm.name + "' not found.");

  return ctrl_ptr;
}

// get pointer of form by name
// frm_nm - name of form
// doc_ptr - pointer to document
// lm by svl [29.04.2003 17:55]
function get_frm_ptr_by_name( frm_nm ) {
var frm = null;

  frm = document.forms[frm_nm];

  if( DEBUG && frm == null )
    alert("Error: form with name '" + frm_nm + "' not found.");

  return frm;
}

// show minicalendar
// dts - timestamp (integer value representing the number of milliseconds since 1 January 1970 00:00:00)
// pay attention: JavaScript timestamp be measured in milliseconds, instead of PHP timestamp, which be measured in seconds
// lm by Alexandra [29.03.2005 12:35]
// lm by Johnny [03.06.2003 15:34]
function show_minical(
                       dtm,            // timestamp          [string/long/null] ( null or '' for current date )
                       frm_nm,         // form name          [string]
                       day_ctrl_nm,    // day control name   [string]
                       month_ctrl_nm,  // month control name [string]
                       year_ctrl_nm,   // year control name  [string]
                       htdocs_root,    // path to library    [string]
                       lng             // language           [string]
                     ) {
  var s = '';

  if( dtm == null || dtm == '' ) {
    var now = new Date(); // current date [object]
    dtm = Date.parse( now );
  }

  // document title
  var doc_ttl = {
    'en': 'Select a date',
    'fr': 'Choisissez la date',
    'ru': 'Выберете дату'
  };

  // today word
  var today_ttl = {
    'en': 'Today',
    'fr': 'Aujourd\hui',
    'ru': 'Сегодня'
  };

  // short weekday names
  var swday_nms = {
    'en': "new Array( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' )",
    'fr': "new Array( 'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam' )",
    'ru': "new Array( 'Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' )"
  };

  // month names
  var month_nms = {
    'en': "new Array( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' )",
    'fr': "new Array( 'Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December' )",
    'ru': "new Array( 'Январь', 'Февраль', 'Март',  'Апрель', 'Май', 'Июнь', 'Июль', 'Август',  'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь' )"
  };

  // begin week index ( 0 - Sunday, 1 - Monday... etc. )
  var bweek_idx = {
    'en': 0,
    'fr': 0,
    'ru': 1
  };

  s += '<html><head>' + eol;
  s += '  <title></title>' + eol;
  s += '  <link rel="stylesheet" type="text/css" href="' + htdocs_root + 'site.always.css">' + eol;
  s += '  <script language="javascript" src="' + htdocs_root + 'site.mc.js"></script>' + eol;
  s += '  <script language="javascript">' + eol;
  s += '    var now = new Date( ' + dtm.toString() + ' );' + eol;
  s += '    var frm_nm = "' + frm_nm + '";' + eol;
  s += '    var day_ctrl_nm = "' + day_ctrl_nm + '";' + eol;
  s += '    var month_ctrl_nm = "' + month_ctrl_nm + '";' + eol;
  s += '    var year_ctrl_nm = "' + year_ctrl_nm + '";' + eol;
  s += '    var doc_ttl = "' + doc_ttl[ lng ] + '";' + eol;
  s += '    var today_ttl = "' + today_ttl[ lng ] + '";' + eol;
  s += '    var swday_nms = ' + swday_nms[ lng ] + ';' + eol;
  s += '    var month_nms = ' + month_nms[ lng ] + ';' + eol;
  s += '    var bweek_idx = ' + bweek_idx[ lng ] + ';' + eol;
  s += '  </script>' + eol;
  s += '</head>' + eol;
  s += '<body class="mc" onload="init();">' + eol;
  s += '<div id="mc_div" class="mc"></span>' + eol;
  s += '</body></html>';
  var win = window.open( '', '', 'width=200,height=150' );

  win.document.open();
  win.document.write( s );
  win.document.close();
} // show_minical


// combo 'submit fake'
function scmb( frm_nm, cmb_nm, url ) {
var cmb, frm = null;

  // form init
  frm = get_frm_ptr_by_name( frm_nm );
  if(frm==null) return;

  cmb = get_frm_ctrl_ptr_by_name( frm, cmb_nm );
  if(cmb==null) return;

  url = url.replace( 'VALUE', cmb.options[ cmb.selectedIndex ].value );
  window.location = url;
}

//
function chk_rbtns( frm, nm ) {
var f, val = '';

  if( frm == null || frm == '' )
    frm = 0;

  f = document.forms[ frm ];
  if( f == null )
    return false;

  // control init
  var rbtn = f.elements[ nm ];
  if( rbtn != null ) {
		// only one element
		if( rbtn.length==null ) {
			if( rbtn.checked == true ) {
				val = rbtn.value;
			}
		} else {
			for( var i=0; i<rbtn.length; i++) {
				if( rbtn[i].checked == true ) {
					val = rbtn[i].value;
					break;
				}
			}
		}
	}

	if( val=='' || val==null )
		return false;

  return val;
}

// Check rbtns and go
function chk_rbtns_go( frm, nm, url ) {

  var ret = chk_rbtns( frm, nm );
  if( ret === false )
    return;

  url = url.replace( 'VALUE', ret );
  window.location = url;
}


// get control
// frm_nm - name of form
// ctrl_nm - name of control
// lm by svl [29.04.2003 17:57]
function get_ctrl(frm_nm, ctrl_nm) {
var frm = null;
var ctrl = null;

  // form init
  frm = get_frm_ptr_by_name( frm_nm );
  if( frm == null ) return -1;
  // ctrl init
  ctrl = get_frm_ctrl_ptr_by_name( frm, ctrl_nm );
  if( ctrl == null ) return -1;
  return ctrl;
}

// set combobox value
// lm by Johnny [03.06.2003 15:33]
function set_cmb_val( ctrl, val ) {
  for( var i = 0; i < ctrl.options.length; i++ ) {
    if( ctrl.options[ i ].value == val ) {
      ctrl.selectedIndex = i;
      return;
    } // if
  } // for i
  ctrl.selectedIndex = 0;
} // set_cmb_val

// set control value
// frm_nm - name of form
// ctrl_nm - name of control
// ctrl_val - value of control
// lm by Vita1y [29.03.2002 11:26]
function scv( frm_nm, ctrl_nm, ctrl_val ) {
var ctrl = null;

  // ctrl init
  ctrl = get_ctrl( frm_nm, ctrl_nm );
  if (ctrl==-1) return -1;
  ctrl.value = ctrl_val;
  return 0;
}

// set control value without getting again form pointer
// frm - pointer to form
// ctrl_nm - name of control
// ctrl_val - value of control
// lm by svl [12.09.2002 3:34]
function scv2( frm, ctrl_nm, ctrl_val ) {
var ctrl = null;
  ctrl = get_frm_ctrl_ptr_by_name( frm, ctrl_nm );
  if (ctrl==null) return -1;
  ctrl.value = ctrl_val;
  return 0;
}

// submit form
// frm_nm  - form name
// cgi     - cgi name for form
// frm_enc - encoding for submit
// lm by svl [29.04.2003 17:59]
function sf( frm_nm, cgi, frm_enc ) {
var frm = null;

  // form init
  frm = get_frm_ptr_by_name( frm_nm );
  if(frm==null) return null;

  // cgi processing
  if(cgi&&cgi!='')
    frm.action = cgi;

  if(!frm_enc||frm_enc=='')
    frm_enc = 'application/x-www-form-urlencoded';
  else
    if(frm_enc=='MP')
      frm_enc = 'multipart/form-data';
  frm.encoding = frm_enc;
  frm.submit();
}

// checkbox 'submit fake'
function schk( frm_nm, pfx, url ) {
var str = '';
var el = null;
var i, el_nm;
var nof_els, nof_pfx, nof_str;
  frm = get_frm_ptr_by_name( frm_nm );
  if(frm == null) return;
  nof_pfx = pfx.length;
  nof_els = frm.elements.length;
  for ( i = 0; i < nof_els; i++ ) {
    el = frm.elements[i];
    el_nm = el.name;
    if( el.type == 'checkbox' && el_nm.substr( 0, nof_pfx ) == pfx && el.checked == true )
      str += el_nm.substr( nof_pfx ) + '/';
  }
  nof_str = str.length;
  if( nof_str > 0 ) {
    str = str.substr( 0, nof_str - 1 );
    url = url.replace( 'VALUE', str );
    window.location = url;
  } else {
    alert( 'No items selected' );
  }
}

// clear control value
// frm_nm - form name
// ctrl_nm - control name
// lm by svl [11.03.2002 1:45]
function ccv( frm_nm, ctrl_nm ) {
var frm = null;
var ctrl = null;
  // form init
  frm = get_frm_ptr_by_name( frm_nm );
  if (frm==null) return;
  // control init
  ctrl = get_frm_ctrl_ptr_by_name( frm, ctrl_nm );
  if (ctrl==null) return;
  ctrl.value = '';
  //ctrl.focus();
}

// check on selected controls
// frm - pointer to form
// ctrl_nm - control name
// lm by Vita1y [16.01.2002 11:51]
function check_on_seled( frm, ctrl_nm ) {
var el = null;
var i, nof;
	nof = ctrl_nm.length;
  for( i = 0; i < frm.elements.length; i++ ) {
  	el = frm.elements[i];
  	nm = el.name.substr( 0, nof );
    if( ( nm == ctrl_nm ) && ( el.checked==true ) )
      return true;
  }
  return false;
}

// select all check boxes
// frm_nm - form name
// chbox_pfx - checkbox prefix
// lm by Vita1y [16.01.2002 11:51]
function sel_all_chbxs( frm_nm, chbox_pfx ) {
var frm = null;
var chk_val = 1;

  // form init
  frm = get_frm_ptr_by_name( frm_nm );
  if( frm == null )
    return;

  if( check_on_seled( frm, chbox_pfx ) )
  	chk_val = 0;

	nof = chbox_pfx.length;
  for( var i = 0; i < frm.elements.length; i++ ) {
  	nm = frm.elements[i].name.substr( 0, nof );
    if( nm == chbox_pfx )
    	frm.elements[i].checked = chk_val;
  }
}

// submit edit form
//lm by svl [05.08.2003 17:17]
function sedt( thread, st, mass, act, fr, prms ) {
var frm = null;

  // form init
  frm = document.forms[0];
  if(frm == null) {
    if( DEBUG ) alert("sedt: Error> forms[0] not found.");
    return null;
  }

  frm.elements[ 't' ].value = thread;// thread
  frm.elements[ 's' ].value = st;    // state
  frm.elements[ 'm' ].value = mass;  // mass
  frm.elements[ 'a' ].value = act;   // action
  frm.elements[ 'f' ].value = fr;    // from
  frm.elements[ 'p' ].value = prms;  // parametres

  if( (typeof editor != 'undefined') && editor != null )
    frm.onsubmit();

  /*
    HTML Editor version 1 workaround
    if( frm.elements[ 'blob_contents' ] != null && editor != null ) {
      frm.elements[ 'blob_contents' ].value = editor.document.body.innerHTML;
  */

  frm.submit();
}


// get selected checkboxes, get id's from names,
// replace into url substr VALUE to id1/id2/id3/.../idN
// frm_nm    - form name
// chbox_pfx - control name
// url       - url, must content VALUE in place when must be setted id's from checkboxes
// lm by svl [13.08.2003 13:46]
function go_chbxs( frm_nm, chbox_pfx, url ) {
var frm = null;
var chk_val = 1;

  // form init
  frm = get_frm_ptr_by_name( frm_nm );
  if( frm == null )
    return;

  if( !check_on_seled( frm, chbox_pfx ) ) {
    alert( "No items selected" );
  	return;
  }

	nof = chbox_pfx.length;
	var prms = "";
  for( var i = 0; i < frm.elements.length; i++ ) {
  	var el = frm.elements[i];
  	var nm = el.name;
    if( el.checked==true && nm.substr( 0, nof ) == chbox_pfx ) {
      prms += ( prms == "" ) ? "" : "/";
      prms += nm.substr( nof, nm.length - nof );
    }
  }

  url = url.replace( 'VALUE', prms );
  window.location = url;
}


// get selected checkboxes, get id's from names,
// replace into url substr VALUE to id1/id2/id3/.../idN
// frm_nm    - form name
// chbox_pfx - control name
// url       - url, must content VALUE in place when must be setted id's from checkboxes
// w         - width popup window
// h         - height popup window
// lm by mdn [13.08.2003 13:46]
function go_chbxs_popup( frm_nm, chbox_pfx, url, w, h ) {
var frm = null;
var chk_val = 1;

  // form init
  frm = get_frm_ptr_by_name( frm_nm );
  if( frm == null )
    return;

  if( !check_on_seled( frm, chbox_pfx ) ) {
    alert( "No items selected" );
  	return;
  }

	nof = chbox_pfx.length;
	var prms = "";
  for( var i = 0; i < frm.elements.length; i++ ) {
  	var el = frm.elements[i];
  	var nm = el.name;
    if( el.checked==true && nm.substr( 0, nof ) == chbox_pfx ) {
      prms += ( prms == "" ) ? "" : "/";
      prms += nm.substr( nof, nm.length - nof );
    }
  }

  url = url.replace( 'VALUE', prms );
  win = window.open( url, "popup",
                     "height=" + h + ",width=" + w +
                     ",status=no,toolbar=no,menubar=no,scrollbars=yes,directories=no" );
  win.focus()

}

function popup( url, w, h ){
  win = window.open( url, "popup",
                     "height=" + h + ",width=" + w +
                     ",status=no,toolbar=no,menubar=no,scrollbars=yes,directories=no" );
  win.focus()
}

function clr_ctrl( ctrl, str ) {
  if( ctrl.value == str )
    ctrl.value = '';
}

function mk_em( e1, e2, css ) {
  document.write( '<a href="mailto:' + e1 + '@' + e2 + '">' + e1 + '@' + e2 + '</a>' );
}
