

var URL_HEADER='https://www.annjewelry.com';
var SITE_ROOT='';
var ADMIN_ROOT='/admins';


var AUTO_REFRESH_TIME=0;
var AUTO_ONLINE_TIME=120000;
var CONTROL_USER_ACTIVITY=0;

var DATE_FORMAT=0;

var WEEKDAY=Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
var MONTH=Array('January','February','March','April','May','June','July','August','September','October','November','December')


/*
// ============================================================================\

Functions:
	makeSure()
	errorNotAllLoaded()
	handleError()
	handleErrorAlert()
	disableJSError(w,alert)
	handleContext(e)
	stopContext(w)
	makePullDown(source,name,width,height)
	AssocArray()
	formSubmitOnce(f[,true|false,[time]])

// ============================================================================/
*/


var W=window
var T=top
var D=document

var NOW=new Date()

var allLoaded=0

var TMP


// ---------------------\
// Make sure (ask confirmation)
// ------------------------------------\
function makeSure() {
  return confirm('Are you sure?')
  }
// ------------------------------------/



// -------------------------\
// Error handling functions
// ------------------------------------\
function errorNotAllLoaded() {
  alert("Page was not comletely load. Operation terminated.\nReload the page before continue working.")
  return false
  }

function handleError() {
  return true
  }
function handleErrorAlert() {
  alert("There was an Java-Script error. Operation terminated")
  return true
  }
function disableJSError(w,alert) {
  if (! w) w=window
  w.onerror=alert ? handleErrorAlert : handleError
  }
// ------------------------------------/




// ---------------------\
// Disable context menu
// ------------------------------------\
function handleContext(e) {
  if (e && e.which) return e.which==1
  else return false
  }
function stopContext(w) {
  if (! w) w=window
  var d=w.document
  if (d.captureEvents) d.captureEvents(Event.MOUSEDOWN)
  d.oncontextmenu=d.onmousedown=handleContext
  }
// ------------------------------------/



// ----------------------\
// Make Pull-Down Window
// ------------------------------------\
function makePullDown(source,name,width,height,simple) {
  var win_prop=(simple) ?
	"location=no,toolbar=no,directories=no,menubar=no,status=no,"+
	"scrollbars=no,resizable=no,dependent=no,width="+width+",height="+height :
	"location=no,toolbar=no,directories=no,menubar=yes,status=yes,"+
	"scrollbars=yes,resizable=yes,dependent=no,width="+width+",height="+height
  if (window.screen) {
    var x=Math.floor((screen.width-width)/2)
    var y=Math.floor((screen.height-height)/2)
    win_prop+=",screenX="+x+",screenY="+y+",left="+x+",top="+y
    }
  var win=open(source,name,win_prop)
  win.focus()
  return win
  }
// ------------------------------------/



// -------------------------\
// Create associative array
// ------------------------------------\
function AssocArray() {
  var obj=this.window ? new Object : this
  var argv=AssocArray.arguments
  var l=argv.length
  for (var i=0; i<l; i+=2) obj[argv[i]]=argv[i+1]
  return obj
  }
// ------------------------------------/



// ----------------------\
// Check if already submitted
// ------------------------------------\
function formSubmitOnce(f,formCorrect,period) {
  if (formCorrect===false) return false

  if (period<1) period=5
  if (!f.SubmittedFormID) f.SubmittedFormID=Math.round(Math.random()*1000000)
  var a='Submitted'+f.SubmittedFormID

  if (document[a]) {
    alert('Form is already submitted. If you are still on this page, wait about '+period+' sec and try again.')
    return false
    }

  document[a]=1
  setTimeout('document["'+a+'"]=0',period*1000)
  return true
  }
// ------------------------------------/
/*
// ============================================================================\

Date format:
	format=0 - dd.mm.yyyy
	format=1 - mm.dd.yyyy

Functions:
	toUpper(str)
	toLower(str)
	checkInt(str)
	checkFloat(str)
	checkZip(str)
	checkEmail(str)
	checkIP(str)
	getDate(str,format)
	getTime(str)
	cmpDate(str1,str2,format)
	cmpTime(str1,str2)
	getDateStr(date,format)
	getTimeStr(date)
	getFullYear(date)

// ============================================================================/
*/



// -----------\
// Converting 
// ------------------------------------\
// (KOI8-R)
//var lowMaskStr="qwertyuiopasdfghjklzxcvbnm_ÊÃÕËÅÎÇÛÝÚÈÆÙ×ÁÐÒÏÌÄÖÜÑÞÓÍÉÔØÂÀß"
//var uppMaskStr="QWERTYUIOPASDFGHJKLZXCVBNM_êãõëåîçûýúèæù÷áðòïìäöüñþóíéôøâàÿ"
// (CP-1251)
 var lowMaskStr="qwertyuiopasdfghjklzxcvbnm_êãõëåîçûýúèæù÷áðòïìäöüñþóíéôøâàÿ"
 var uppMaskStr="QWERTYUIOPASDFGHJKLZXCVBNM_ÊÃÕËÅÎÇÛÝÚÈÆÙ×ÁÐÒÏÌÄÖÜÑÞÓÍÉÔØÂÀß"
// ------------------------------------/

// ----------------------\
// Convert to upper case
// ------------------------------------\
function toUpper(str) {
  var str1=""
  var l=str.length
  for (var i=0; i<l; i++) {
    var ch=str.charAt(i)
    var ind=lowMaskStr.indexOf(ch)
    str1+=(ind==-1) ? ch : uppMaskStr.charAt(ind)
    }
  return str1
  }
// ------------------------------------/

// ------------------------\
// Convert to lower case
// ------------------------------------\
function toLower(str) {
  var str1=""
  var l=str.length
  for (var i=0; i<l; i++) {
    var ch=str.charAt(i)
    var ind=uppMaskStr.indexOf(ch)
    str1+=(ind==-1) ? ch : lowMaskStr.charAt(ind)
    }
  return str
  }
// ------------------------------------/



// --------------------\
// Check integer value
// ------------------------------------\
function checkInt(str) {
  var l=str.length
  if (!l) return null
  for (var i=0; i<l; i++) {
    var ch=str.charAt(i)
    if (ch<'0' || ch>'9') return null
    }
  return eval(str)
  }
// ------------------------------------/



// ------------------\
// Check float value
// ------------------------------------\
function checkFloat(str) {
  var l=str.length
  if (!l) return null
  var point=0
  for (var i=0; i<l; i++) {
    var ch=str.charAt(i)
    if (ch=='.')
      if (point) return null
      else point=1
    else 
      if (ch<'0' || ch>'9') return null
    }
  return eval(str)
  }
// ------------------------------------/




// ----------------\
// Check ZIP value
// ------------------------------------\
function checkZip(str) {
  return (str.length==5 && checkInt(str))
  }
// ------------------------------------/



// -------------------\
// Check E-mail value
// ------------------------------------\
function checkEmail(str) {
  var l=str.length
  if (!l) return false
  var ata=0
  var point=0
  var cch=''
  for (var i=0; i<l; i++) {
    var ch=str.charAt(i)
    if (ch=='@')
      if (ata==1 || i==0 || cch=='.') return false
      else ata=1
    else if (ch=='.')
      if (cch=='.' || cch=='@' || i==l-1 || i==0) return false
      else point=ata
    else if ((ch<'A' || ch>'Z') && (ch<'a' || ch>'z') &&
		(ch<'0' || ch>'9') && (ch!='_') && (ch!='-')) return false
    cch=ch
    }
  return (ata && point)
  }
// ------------------------------------/
 

// ---------\
// Check IP
// ------------------------------------\
function checkIP(str) {
  if (!str.length) return false
  var arr=str.split('.')
  if (arr.length!=4) return false
  var s=0
  for (var i=0; i<4; i++) {
    var val=checkInt(arr[i])
    if (val==null || val>255) return false
    s=s*256+val
    }
  return s
  }
// ------------------------------------/
 


// -----------------------------\
// Check date and get its parts
// ------------------------------------\
function getDate(str,format) {
  if (format==null) format=W.DATE_FORMAT
  var mlen=Array(31,28,31,30,31,30,31,31,30,31,30,31)
  var l=str.length
  var dd=str.substr(0,2)
  var mm=str.substr(3,2)
  var yy=str.substr(6,4)
  if (format) { var tmp=dd; dd=mm; mm=tmp }
  var d=checkInt(dd)
  var m=checkInt(mm)
  var y=checkInt(yy)
  var ml=mlen[m-1]+1+
	((m==2 && (y%400==0 || (y%4==0 && y%100!=0))) ? 1 : 0)
  var res=
    (l==10 && str.charAt(2)=="." && str.charAt(5)=="." && d && d<ml && m && m<13 && y) ? 
	Array(yy,mm,dd) : false
  return res
  }
// ------------------------------------/


// -------------------------------------\
// Check time (hh:mm) and get its parts
// ------------------------------------\
function getTime(str) {
  var l=str.length
  var hh=str.substr(0,2)
  var mm=str.substr(3,2)
  var h=checkInt(hh)
  var m=checkInt(mm)
  var res=
    (l==5 && str.charAt(2)==":" && h!=null && h<24 && m!=null && m<60) ?
	Array(hh,mm) : false
  return res
  }
// ------------------------------------/


// --------------\
// Compare dates
// ------------------------------------\
function cmpDate(str1,str2,format) {
  var date1=getDate(str1,format)
  var date2=getDate(str2,format)
  if (! date1) return -1
  if (! date2) return -2
  date1=eval(date1.join(''))
  date2=eval(date2.join(''))
  if (date1>date2) return 1
  else if (date2>date1) return 2
  else return 0
  }
// ------------------------------------/


// --------------\
// Compare times
// ------------------------------------\
function cmpTime(str1,str2) {
  var time1=getTime(str1)
  var time2=getTime(str2)
  if (! time1) return -1
  if (! time2) return -2
  time1=eval(time1.join(''))
  time2=eval(time2.join(''))
  if (time1>time2) return 1
  else if (time2>time1) return 2
  else return 0
  }
// ------------------------------------/


// ---------------------------------\
// Get dd.mm.yyyy/mm.dd.yyyy string
// ------------------------------------\
function getDateStr(date,format) {
  if (! date) date=new Date
  if (format==null) format=W.DATE_FORMAT
  var dd=date.getDate()
  var mm=date.getMonth()+1
  var yy=date.getYear()
  if (dd<10) dd="0"+dd
  if (mm<10) mm="0"+mm
  if (format) { var tmp=dd; dd=mm; mm=tmp }
  return (""+dd+"."+mm+"."+yy)
  }
// ------------------------------------/


// ----------------------\
// Get hh:mm string
// ------------------------------------\
function getTimeStr(date) {
  if (! date) date=new Date
  var hh=date.getHours()
  var mm=date.getMinutes()
  if (hh<10) hh="0"+hh
  if (mm<10) mm="0"+mm
  return (""+hh+":"+mm)
  }
// ------------------------------------/


// ----------------------\
// Get hh:mm string
// ------------------------------------\
function getFullYear(date) {
  if (! date) date=new Date
  var y=date.getYear()
  if (y<1000) y+=1900
  return y
  }
// ------------------------------------/

/*
// ============================================================================\

Functions (constructors):
  Rollover(name,dir,current,disable_roll_current,
	imgs_off,imgs_on,imgs_off_current,imgs_on_transparent,
	nn_document,preload)

  Layer(name,nn_document)

  DropDownMenu(name,centeredWidth,delayOff,
	hSubLeft,hSubTop,subLeft,subTop,subWidth,
	bgColor,headHTML,tailHTML,hItemDelimHTML,
	subBgColor,subHoverColor,subHeadHTML,subTailHTML,itemDelimHTML,
	hItemHoverColor,hItemHeadHTML,hItemTailHTML,hItemLinkClass,hItemLinkAttrs,
	itemHoverColor,itemHeadHTML,itemTailHTML,itemLinkClass,itemLinkAttrs,
	rollover,items)

  Item(text,href,target,
	bgColor,hoverColor,headHTML,tailHTML,linkClass,linkAttrs,beforeHTML,afterHTML,
	subMenu)

  SubMenu(left,top,width,bgColor,hoverColor,headHTML,tailHTML,itemDelimHTML,
	itemHoverColor,itemHeadHTML,itemTailHTML,itemLinkClass,itemLinkAttrs,
	rollover,items)
  or SubMenu(direction,alignment,...) 
	direction='[value][+/-offset]'
		t - top
		b - bottom
		v - vertical ('t' or 'b' choosed automatically)
		l - left
		b - right
		h - horizontal ('l' or 'r' choosed automatically)
	alignment='[value][+/-offset]'
		b - begin
		c - center
		e - end
		a - auto

// ============================================================================/
*/



var tStr='string'



// ========================\
// Special DHTML functions
// ============================================================================\

var DOM=D.getElementById ? 1 : 0;
var IE4=D.all ? 1 : 0
var NN4=D.layers ? 1 : 0
var DHTML=(DOM || IE4 || NN4)


var LAYERS=[]
var ROLL=[]
var MENU=[]


if (!DOM) D.getElementById=function (id) { return (IE4 ? D.all[id] : null) }


// -------------------------------\
// Create special rollover object
// ----------------------------------------------------------------------------\
function Rollover(name,dir,current,disable_roll_current,
	imgs_off,imgs_on,imgs_off_current,imgs_on_transparent,
	nn_document,preload) {
  var obj=this.window ? {} : this
  obj.name=name
  obj.rollover=(D.images && imgs_off)
  obj.dir=dir
  if (IE4 && imgs_on_transparent) imgs_on=imgs_on_transparent
  obj.imgs=[]
  for (var i in imgs_off) obj.imgs[i]=[imgs_off[i],imgs_on[i]]
  if (current>=0) {
    var curr=obj.imgs[current]
    if (imgs_off_current) curr[0]=imgs_off_current[current]
    if (disable_roll_current) curr[1]=curr[0]
    }
  obj.nn_document=nn_document
  obj.TMP=[]
// ------------------------------------\
  obj.preload=function() {
    if (this.rollover) {
      var tmp=this.TMP
      var dir=this.dir
      var imgs=this.imgs
      for (var i in imgs)
	if (imgs[i][0]) (tmp[i]=new Image).src=dir+'/'+imgs[i][1]
      }
    }
// ------------------------------------/
// ------------------------------------\
  obj.Switch=function(num,pos,nn_document) {
    var t=this
    if (!nn_document) nn_document=t.nn_document
    var d=(NN4 && nn_document) ? eval(nn_document) : D
    var img=d.images[t.name+num]
    var im=t.imgs[num]
    if (t.rollover && img && im && im[0]) img.src=t.dir+'/'+im[pos ? 1 : 0]
    }
// ------------------------------------/
  if (preload!=0) obj.preload()
  W.ROLL[name]=obj
  return obj
  }
// ----------------------------------------------------------------------------/



// ---------------------\
// Special layer object
// ----------------------------------------------------------------------------\
function Layer(name,nn_document) {
  var obj=this.window ? {} : this
  obj.name=name
  obj.nn_document=nn_document+'.layers.'+name+'.document'
  var l=null
  var d=(NN4 && nn_document) ? eval(nn_document) : D
  if (DHTML) l=DOM ? D.getElementById(name) : d[IE4 ? 'all' : 'layers'][name]
  obj.layer=l
  obj.properties=(l && !NN4) ? l['style'] : l
// ------------------------------------\
  obj.params=function(left,top,layerLeft,layerTop,pageLeft,pageTop,width,height) {
    var t=this
    var l=t.layer
    var p=t.properties
    if (!l) return null
    var x,y,layerX,layerY,pageX,pageY,w,h
    // ------------|
    if (NN4) {
      x=l.left
      y=l.top
      layerX=pageX=l.pageX
      layerY=pageY=l.pageY
      var pL=l.parentLayer
      if (pL!=W) {
	layerX-=pL.pageX
	layerY-=pL.pageY
	}
      var d=l.document
      w=d.width
      h=d.height
// =============\
// VERY SPECIAL |
// ====================================\
var l1
if (l1=d.layers['layerBody']) {
  d=l1.document
  w=d.width
  h=d.height
  }
if ((l1=d.layers['layerWidth']) && (l1.document.width>w)) w=l1.document.width
// ====================================/
      }
    else {
      x=parseInt(p.left) || 0
      y=parseInt(p.top) || 0
      layerX=pageX=l.offsetLeft
      layerY=pageY=l.offsetTop
      var pL=l
      while (pL=pL.offsetParent) {
	pageX+=pL.offsetLeft
	pageY+=pL.offsetTop
	}
      w=l.offsetWidth
      h=l.offsetHeight
      }
    // ------------|
    if (left!=null) p.left=(typeof(left)==tStr) ? eval(x+'+('+left+')') : left
    if (top!=null) p.top=(typeof(top)==tStr) ? eval(y+'+('+top+')') : top
    if (layerLeft!=null) p.left=eval(x+'+('+layerLeft+')')-(typeof(layerLeft)!=tStr)*layerX
    if (layerTop!=null) p.top=eval(y+'+('+layerTop+')')-(typeof(layerTop)!=tStr)*layerY
    if (pageLeft!=null) p.left=eval(x+'+('+pageLeft+')')-(typeof(pageLeft)!=tStr)*pageX
    if (pageTop!=null) p.top=eval(y+'+('+pageTop+')')-(typeof(pageTop)==tStr)*pageY
    if (!NN4) {
      if (width!=null) p.width=width
      if (height!=null) p.height=height
      }
    // ------------|
    return {
	left: x,
	top: y,
	layerLeft: layerX,
	layerTop: layerY,
	pageLeft: pageX,
	pageTop: pageY,
	width: w,
	height: h
	}
    }
// ------------------------------------/
// ------------------------------------\
  obj.color=function(color) {
    var t=this
    var p=t.properties
    if (!p) return null
    var c=NN4 ? p.bgColor : p.backgroundColor
    if (color!=null) p[NN4 ? 'bgColor' : 'backgroundColor']=(NN4 && !color) ? null : color
    return c
    }
// ------------------------------------/
// ------------------------------------\
  obj.visibility=function(pos) {
    var t=this
    var p=t.properties
    if (!p) return null
    var v=(p.visibility.substr(0,3)=='hid') ? 0 : 1;
    if (pos!=null) p.visibility=pos ? 'visible' : 'hidden'
    return v
    }
// ------------------------------------/
  return obj
  }
// ----------------------------------------------------------------------------/



// ===============\
// Drop-down menu
// ============================================================================\

// -------------\
// VERY SPECIAL
// ----------------------------------------------------------------------------\
var SCREEN={
  size: 0,
  params: function() {
    if (!DHTML) return null
    var size=this.size.params()
    var x=NN4 ? pageXOffset : D.body.scrollLeft
    var y=NN4 ? pageYOffset : D.body.scrollTop
    return {
	left: x,
	top: y,
	width: size.width,
	height: size.height
	}
    }
  }
// ----------------------------------------------------------------------------/


// -------------------\
// Create menu object
// ----------------------------------------------------------------------------\
function DropDownMenu(name,centeredWidth,delayOff,
	hSubLeft,hSubTop,subLeft,subTop,subWidth,
	bgColor,headHTML,tailHTML,hItemDelimHTML,
	subBgColor,subHoverColor,subHeadHTML,subTailHTML,itemDelimHTML,
	hItemHoverColor,hItemHeadHTML,hItemTailHTML,hItemLinkClass,hItemLinkAttrs,
	itemHoverColor,itemHeadHTML,itemTailHTML,itemLinkClass,itemLinkAttrs,
	rollover,items) {
  var obj=this.window ? {} : this
  obj.allItems=[]
  obj.z=1
  // --------------|
  obj.name=name
  obj.centeredWidth=centeredWidth
  obj.delayOff=(delayOff>0) ? delayOff : 0
  obj.hSubLeft=hSubLeft
  obj.hSubTop=hSubTop
  obj.subLeft=subLeft
  obj.subTop=subTop
  obj.subWidth=subWidth
  obj.bgColor=(bgColor || '')
  obj.headHTML=(typeof(headHTML)==tStr) ? headHTML : '<table border=0 cellspacing=0 cellpadding=0><tr><td>'
  obj.tailHTML=(typeof(tailHTML)==tStr) ? tailHTML : '</td></tr></table>'
  obj.hItemDelimHTML=(typeof(hItemDelimHTML)==tStr) ? hItemDelimHTML : '</td><td>'
  obj.subBgColor=(subBgColor || '')
  obj.subHoverColor=(subHoverColor || '')
  obj.subHeadHTML=(typeof(subHeadHTML)==tStr) ? subHeadHTML : '<table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td width=100%>'
  obj.subTailHTML=(typeof(subTailHTML)==tStr) ? subTailHTML : '</td></tr></table>'
  obj.itemDelimHTML=(typeof(itemDelimHTML)==tStr) ? itemDelimHTML : '</td></tr><tr><td width=100%>'
  obj.hItemHoverColor=(hItemHoverColor || '')
  obj.hItemHeadHTML=(hItemHeadHTML || '')
  obj.hItemTailHTML=(hItemTailHTML || '')
  obj.hItemLinkClass=(hItemLinkClass || '')
  obj.hItemLinkAttrs=(hItemLinkAttrs || '')
  obj.itemHoverColor=(itemHoverColor || '')
  obj.itemHeadHTML=(itemHeadHTML || '')
  obj.itemTailHTML=(itemTailHTML || '')
  obj.itemLinkClass=(itemLinkClass || '')
  obj.itemLinkAttrs=(itemLinkAttrs || '')
  obj.rollover=rollover
  obj.items=items
// ------------------------------------\
  obj.init=function() {
    if (DHTML && !SCREEN.size) {
      D.write(NN4 ?
	"<layer name='pageSize' left=0 top=0 height=100% visibility=hide><table border=0 cellspacing=0 cellpadding=0 width=100% height=100%><tr><td></td></tr></table></layer>" : 
	"<div id='pageSize' style='position:absolute;left:0;top:0;width:100%;height:100%;visibility:hidden;'></div>")
      SCREEN.size=Layer('pageSize');
      }
    var t=this
    var items=t.items
    // ------------|
    for (var i in items) {
      var item=items[i]
      item.init(t,t,i)
      if (item.subMenu) item.subMenu.create(t,item)
      }
    }
// ------------------------------------/
// ------------------------------------\
  obj.create=function() {
    var t=this
    var items=t.items
    // ------------|
    D.write(t.headHTML)
    // ------------|
    var n=0
    for (var i in items) {
      if (n) D.write(t.hItemDelimHTML)
      items[i].create()
      n=1
      }
    // ------------|
    D.write(t.tailHTML)
    // ------------|
    if (DHTML)
      for (var i in items) {
        var item=items[i]
        item.layer=Layer((NN4 ? 'layerBody' : item.name),'D.layers.'+item.name+'.document')
        }
    }
// ------------------------------------/
// ------------------------------------\
  obj.Switch=function(allNum,pos,fromSubMenu) {
    var t=this
    var inc=pos ? +1 : -1
    var item=this.allItems[allNum]
    // ------------|
    var sM=item.subMenu
    if (sM) sM.layer.color((fromSubMenu && pos) ? sM.hoverColor : sM.bgColor)
    // ------------|
    do item.position+=inc
    while (item=item.parent.parent)
    // ------------|
    setTimeout('W.MENU["'+t.name+'"].allItems['+allNum+'].Switch()',15)//40)
    }
// ------------------------------------/
  W.MENU[name]=obj
  obj.init()
  return obj
  }
// ----------------------------------------------------------------------------/


// -----------------\
// Create menu item
// ----------------------------------------------------------------------------\
function Item(text,href,target,
	bgColor,hoverColor,headHTML,tailHTML,linkClass,linkAttrs,beforeHTML,afterHTML,
	subMenu) {
  var obj=this.window ? {} : this
  obj.menu=obj.parent=0
  obj.allNum=0
  obj.isHead=0
  obj.num=0
  obj.name=''
  obj.layer=0
  obj.position=0
  //---------------|
  obj.text=text
  obj.href=href
  obj.target=target
  obj.bgColor=(typeof(bgColor)==tStr) ? bgColor : 0
  obj.hoverColor=(typeof(hoverColor)==tStr) ? hoverColor : 0
  obj.headHTML=(typeof(headHTML)==tStr) ? headHTML : 0
  obj.tailHTML=(typeof(tailHTML)==tStr) ? tailHTML : 0
  obj.linkClass=(typeof(linkClass)==tStr) ? linkClass : 0
  obj.linkAttrs=(typeof(linkAttrs)==tStr) ? linkAttrs : 0
  obj.beforeHTML=(beforeHTML || '')
  obj.afterHTML=(afterHTML || '')
  obj.subMenu=subMenu
// ------------------------------------\
  obj.init=function(menu,parent,num) {
    var t=this
    var m=t.menu=menu
    var p=t.parent=parent
    t.num=num
    var isHead=t.isHead=(menu==parent) ? 1 : 0
    t.allNum=m.allItems.length
    // ------------|
    m.allItems[t.allNum]=t
    t.name=m.name+'_'+t.allNum
    // ------------|
    if (typeof(t.bgColor)!=tStr) t.bgColor=isHead ? m.bgColor : ''
    if (typeof(t.hoverColor)!=tStr)
      if (isHead) t.hoverColor=m.hItemHoverColor
      else t.hoverColor=(typeof(p.itemHoverColor)==tStr) ? p.itemHoverColor : m.itemHoverColor
    if (!t.hoverColor) t.hoverColor=t.bgColor
    // ------------|
    if (typeof(t.linkClass)!=tStr)
      if (isHead) t.linkClass=m.hItemLinkClass
      else t.linkClass=(typeof(p.itemLinkClass)==tStr) ? p.itemLinkClass : m.itemLinkClass
    if (typeof(t.linkAttrs)!=tStr)
      if (isHead) t.linkAttrs=m.hItemLinkAttrs
      else t.linkAttrs=(typeof(p.itemLinkAttrs)==tStr) ? p.itemLinkAttrs : m.itemLinkAttrs
    }
// ------------------------------------/
// ------------------------------------\
  obj.create=function() {
    var t=this
    var m=t.menu
    var p=t.parent
    var isHead=t.isHead
    // ------------|
    D.write(t.beforeHTML)
    D.write(NN4 ?
	'<ilayer name="'+t.name+'" z-index='+p.z+'><layer name="layerBody" width=100% '+
		'bgcolor='+(t.bgColor || '""') :
	'<div ID="'+t.name+'" style="position:relative;width:100%;background:'+t.bgColor+
		';z-index:'+p.z+'"')
    D.write(' onmouseover="W.MENU.',m.name,'.Switch(',t.allNum,',1)"',
	' onmouseout="W.MENU.',m.name,'.Switch(',t.allNum,')">')
// =============\
// VERY SPECIAL |
// ====================================\
if (NN4) D.write('<layer name="layerWidth" width=100% visibility=hide><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td></td></tr></table></layer>')
// ====================================/
    // ------------|
    if (typeof(t.headHTML)==tStr) D.write(t.headHTML)
    else if (isHead) D.write(m.hItemHeadHTML)
    else D.write((typeof(p.itemHeadHTML)==tStr) ? p.itemHeadHTML :m.itemHeadHTML)
    // ------------|
    if (t.href && t.href.length)
      D.write('<a href="',t.href,'" ',t.linkAttrs,
		(t.linkClass ? ' class="'+t.linkClass+'"' : ''),
		(t.target ? ' target="'+t.target+'"' : ''),
		'>',t.text,'</a>')
    else
      D.write(t.text)
    // ------------|
    if (typeof(t.tailHTML)==tStr) D.write(t.tailHTML)
    else if (isHead) D.write(m.hItemTailHTML)
    else D.write((typeof(p.itemTailHTML)==tStr) ? p.itemTailHTML : m.itemTailHTML)
    // ------------|
    D.write(NN4 ? '</layer></ilayer>' : '</div>')
    D.write(t.afterHTML)
    }
// ------------------------------------/
// ------------------------------------\
  obj.Switch=function(immediate) {
    var t=this
    var m=t.menu
    var p=t.parent
    var pos=t.position
    var del=m.delayOff
    // ------------|
    var b=0
    for (var i in m.allItems) if (m.allItems[i].position) b=1
    // ------------|
    if (del && t.subMenu && !(pos || immediate || b))
      setTimeout('W.MENU["'+m.name+'"].allItems['+t.allNum+'].Switch(1)',del)
    else {
      var r=p.rollover
      if (r) r.Switch(t.num,pos,t.layer.nn_document)
      t.layer.color(pos ? t.hoverColor : t.bgColor)
      if (t.subMenu) t.subMenu.Switch()
      var pI=t    
      while (pI=pI.parent.parent) pI.Switch(immediate)
      }
    }
// ------------------------------------/
  return obj
  }
// ----------------------------------------------------------------------------/


// ---------------\
// Create submenu
// ----------------------------------------------------------------------------\
function SubMenu(left,top,width,bgColor,hoverColor,headHTML,tailHTML,itemDelimHTML,
	itemHoverColor,itemHeadHTML,itemTailHTML,itemLinkClass,itemLinkAttrs,
	rollover,items) {
  var obj=this.window ? {} : this
  obj.menu=obj.parent=0
  obj.name=''
  obj.direction=obj.dirOff=0
  obj.alignment=obj.alignOff=0
  obj.z=0
  obj.layer=0
  obj.layerW=obj.layerH=0
  // --------------|
  obj.left=left
  obj.top=top
  obj.width=width
  obj.bgColor=(typeof(bgColor)==tStr) ? bgColor : 0
  obj.hoverColor=(typeof(hoverColor)==tStr) ? hoverColor : 0
  obj.headHTML=(typeof(headHTML)==tStr) ? headHTML : 0
  obj.tailHTML=(typeof(tailHTML)==tStr) ? tailHTML : 0
  obj.itemDelimHTML=(typeof(itemDelimHTML)==tStr) ? itemDelimHTML : 0
  obj.itemHoverColor=(typeof(itemHoverColor)==tStr) ? itemHoverColor : 0
  obj.itemHeadHTML=(typeof(itemHeadHTML)==tStr) ? itemHeadHTML : 0
  obj.itemTailHTML=(typeof(itemTailHTML)==tStr) ? itemTailHTML : 0
  obj.itemLinkClass=(typeof(itemLinkClass)==tStr) ? itemLinkClass : 0
  obj.itemLinkAttrs=(typeof(itemLinkAttrs)==tStr) ? itemLinkAttrs : 0
  obj.rollover=rollover
  obj.items=items
// ------------------------------------\
  obj.create=function(menu,parent) {
    if (!DHTML) return
  // --------------|
  function parsePos(str) {
    if (typeof(str)!=tStr) return null
    var off=0
    var i=str.indexOf('+')
    if (i<0) i=str.indexOf('-')
    if (i>=0) {
      off=str.substr(i)
      str=str.substr(0,i)
      }
    str=(str.charAt(0) || 0)
    off=(parseInt(off) || 0)
    return [str,off]
    }
  // --------------|
    var t=this
    var m=t.menu=menu
    var p=t.parent=parent
    var name=this.name=p.name+'_body'
    this.z=parent.parent.z+1
    var items=this.items
    // ------------|
    if (t.left==null) t.left=p.isHead ? m.hSubLeft : m.subLeft
    if (t.top==null) t.top=p.isHead ? m.hSubTop : m.subTop
    if (t.width==null) t.width=m.subWidth
    if (typeof(t.bgColor)!=tStr) t.bgColor=m.subBgColor
    if (typeof(t.hoverColor)!=tStr) t.hoverColor=(m.subHoverColor || t.bgColor)
    // ------------|
    var d=parsePos(t.left)
    var a=parsePos(t.top)
    if (d) {
      t.direction=(d[0] || (p.isHead ? 'v' : 'h'))
      t.dirOff=d[1]
      t.alignment=(a[0] || (a[1] ? 'b' : 'a'))
      if (a[0]!='a') t.alignOff=(a[1] || 0)
      t.left=t.top=0
      }
    // ------------|
    if (NN4)
      D.write('<layer name="',t.name,'" left=0 top=0 width=',t.width,
	' bgcolor=',(t.bgColor || '""'),' visibility=hide z-index=',t.z)
    else
      D.write('<div id="',t.name,'" style="position:absolute;left:0;top:0;',
	'background-color:',t.bgColor,';visibility:hidden;z-index:',t.z,'"')
    D.write(' onmouseover="W.MENU.',m.name,'.Switch(',p.allNum,',1,1)"',
	' onmouseout="W.MENU.',m.name,'.Switch(',p.allNum,',0,1)">')
    if (!NN4)
      D.write('<table border=0 cellspacing=0 cellpadding=0 width=',t.width,
	'><tr><td width=100%>')
    // ------------|
    D.write((typeof(t.headHTML)==tStr) ? t.headHTML : m.subHeadHTML)
    // ------------|
    var delim=(typeof(t.itemDelimHTML)==tStr) ? t.itemDelimHTML : m.itemDelimHTML
    var n=0
    for (var i in items) {
      if (n) D.write(delim)
      items[i].init(menu,t,i)
      items[i].create()
      n=1
      }
    // ------------|
    D.write((typeof(t.tailHTML)==tStr) ? t.tailHTML : m.subTailHTML)
    // ------------|
    if (!NN4) D.write('</td></tr></table>')
    D.write(NN4 ? '</layer>' : '</div>')
    // ------------|
    t.layer=Layer(t.name)
    for (var i in items) {
      var item=items[i]
      item.layer=Layer((NN4 ? 'layerBody' : item.name),'D.layers.'+t.name+'.document.layers.'+item.name+'.document')
      if (item.subMenu) item.subMenu.create(menu,item)
      }
    }
// ------------------------------------/
// ------------------------------------\
  obj.Switch=function() {
    if (!DHTML) return
    var t=this
    var m=t.menu
    var p=t.parent
    var l=t.layer
    var pos=p.position
    // ------------|
    if (pos) {
      var tmp
      tmp=SCREEN.params()
      var scrW=tmp.width
      var scrH=tmp.height
      var scrL=tmp.left
      var scrT=tmp.top
      var scrR=scrL+scrW-1
      var scrB=scrT+scrH-1
      // ----------|
      tmp=p.layer.params()
      var elW=tmp.width
      var elH=tmp.height
      var elL=tmp.pageLeft
      var elT=tmp.pageTop
      var elR=elL+elW-1
      var elB=elT+elH-1
      // ----------|
      var w=t.layerW
      var h=t.layerH
      if (!w) {		// MOZILLA & OPERA BUG CORRECTION
        var tmp=l.params()
        w=t.layerW=tmp.width
        h=t.layerH=tmp.height
        }
      if (!NN4) l.params(null,null,null,null,null,null,w,h)
      // ----------|
      var d=t.direction
      var dO=t.dirOff
      var a=t.alignment
      var aO=t.alignOff
      // ----------|
      var x=t.left
      var y=t.top
      var l1,l2
      // ----------|
      if (d) {
        if (d=='h') {
          l1=(elL-dO)-scrL
          l2=scrR-(elR+dO)
          d=(l2<w && l1>l2) ? 'l' : 'r'
          if (d=='l') dO=-dO
          }
        if (d=='v') {
          l1=(elT-dO)-scrT
          l2=scrB-(elB+dO)
          d=(l2<h && l1>l2) ? 't' : 'b'
          if (d=='t') dO=-dO
          }
        // --------|
        if (d=='l') {
          x=elL+dO-w
          d='h'
          }
        else if (d=='r') {
          x=elR+dO+1
          d='h'
          }
        else if (d=='t') {
          y=elT+dO-h
          d='v'
          }
        else { // (d=='b')
          y=elB+dO+1
          d='v'
          }
        // --------|
        if (d=='v') {
          if (a=='a') {
            l1=(elR+aO)-scrL+1
            l2=scrR-(elL+aO)+1
            a=(l2<w && l1>l2) ? 'e' : 'b'
            }
          if (a=='c') x=elL-Math.floor((w-elW)/2)+aO
          else if (a=='e') x=elR+aO-w+1
          else x=elL+aO // (a=='b')
          }
        else { // (d=='h')
          if (a=='a') {
            l1=(elB+aO)-scrT+1
            l2=scrB-(elT+aO)+1
            a=(l2<w && l1>l2) ? 'e' : 'b'
            }
          if (a=='c') y=elT-Math.floor((h-elH)/2)+aO
          else if (a=='e') y=elB+aO-h+1
          else y=elT+aO // (a=='b')
          }
        // --------|
        }
      else if (m.centeredWidth) {
        var offsetX=Math.floor((scrW-m.centeredWidth)/2)
        x=t.left+((offsetX>0) ? offsetX : 0)
        y=t.top
        }
      // ----------|
      l.params(x,y)
      }
    // ------------|
    l.visibility(pos)
    }
// ------------------------------------/
  return obj
  }
// ----------------------------------------------------------------------------/

// ============================================================================/

// ============================================================================/

/*
// ============================================================================\

Functions:
	autoRefresh()
	setUserOnline()
	changePortion(sel)
	checkFilled(field,alertMessage)

// ============================================================================/
*/



// ------------------------------------\
// Special online monitoring functions
// ------------------------------------\
var SET_USER_ONLINE_IMG
var userActive=new Array(0,1)

function setUserActive(e) {
  if (!W.CONTROL_USER_ACTIVITY) return
  userActive[0]=userActive[1]=1
  if (D.releaseEvents) D.releaseEvents(Event.MOUSEMOVE)
  W.onfocus=D.onmousemove=D.onkeydown=null
  }

function setUserPassive(n) {
  userActive[n]=1
  if (!W.CONTROL_USER_ACTIVITY) return
  userActive[n]=0
  if (D.captureEvents) D.captureEvents(Event.MOUSEMOVE)
  setTimeout("W.onfocus=D.onmousemove=D.onkeydown=setUserActive",100)
  }

function autoRefresh() {
  if (userActive[0]) location.reload()
  setUserPassive(0)
  if (W.AUTO_REFRESH_TIME) setTimeout("autoRefresh()",AUTO_REFRESH_TIME)
  }

function setUserOnline() {
  if (userActive[1]) {
    var IMG=new Image
    IMG.src=SET_USER_ONLINE_IMG
    }
  setUserPassive(1)
  if (W.AUTO_ONLINE_TIME) setTimeout("setUserOnline()",AUTO_ONLINE_TIME)
  }
// ------------------------------------/



// ---------------------------------\
// See special.php, make_page_bar()
// ------------------------------------\
function changePortion(sel) {
  var f=sel.form
  var pageURL=f.pageURL.value
  var oldInd=eval(f.oldIndex.value)
  var ind=sel.selectedIndex;
  if (ind!=oldInd) location.href=pageURL+sel.options[ind].value
  }
// ------------------------------------/


// ----------------------\
// Check if field is filled
// ------------------------------------\
function checkFilled(field,alertMessage) {
  if (! field.value.length) {
    alert((alertMessage!=null) ? alertMessage : "Empty value is no allowed!")
    field.focus()
    return false
    }
  return true
  }
// ------------------------------------/

/*
// ============================================================================\

Special data structure and functions

// ============================================================================/
*/


// ------------------------------------\
// Must be defined as property of form
// ------------------------------------\
function CheckStruct(errBadValue,errNotChange,errNotChoose,askConfirm,checkValue,
		errNotEmpty,errAddDenied,allObjList,childForm) {
  var obj=this.window ? new Object : this

  obj.errBadValue=errBadValue
  obj.errNotChange=errNotChange
  obj.errNotChoose=errNotChoose
  obj.askConfirm=askConfirm

  obj.checkValue=checkValue	// Function for value checking

  obj.errNotEmpty=errNotEmpty
  obj.errAddDenied=errAddDenied

  obj.allObjList=allObjList
  obj.childForm=childForm

  obj.oldVal=""
  obj.forDelete=0
  obj.currObj=0

  return obj
  }
// ------------------------------------/


// ------------------------------------\
function changeObj(sel) {
    if (! self.allLoaded) return errorNotAllLoaded()
  if (! (sel && sel.form)) sel=this
  var f=sel.form
  var ind=sel.selectedIndex
  var CS=f.checkStruct
  CS.oldVal=f.name.value=ind ? sel.options[ind].text : ""
  }
// ------------------------------------/


// ------------------------------------\
function changeID(f) {
    if (! self.allLoaded) return errorNotAllLoaded()
  var CS=f.checkStruct
  if (CS.forDelete) return true
  var sel=f.ID
  if (f.oldID.value==sel.options[sel.selectedIndex].value) {
    location.href="#edit"
    return false
    }
  }
// ------------------------------------/


// ------------------------------------\
function checkValue(f) {
    if (! self.allLoaded) return errorNotAllLoaded()
  var CS=f.checkStruct
  var val=f.name.value
  if (!val.length || (CS.checkValue && !CS.checkValue(val))) return false
  var ID=f.ID
  var ind=ID.selectedIndex
  var opt=ID.options
  var l=opt.length
  for (var i=1; i<l; i++)
    if (i!=ind && val==opt[i].text) return false
  return true
  }
// ------------------------------------/


// ------------------------------------\
function checkChange(f) {
    if (! self.allLoaded) return errorNotAllLoaded()
  var CS=f.checkStruct
  if (CS.forDelete) return true
  if (f.ID.selectedIndex && f.name.value==CS.oldVal) {
    alert(CS.errNotChange)
    return false
    }
  if (!checkValue(f)) {
    alert(CS.errBadValue)
    f.name.focus()
    f.name.select()
    return false
    }
  }
// ------------------------------------/


// ------------------------------------\
function checkDelete(f) {
    if (! self.allLoaded) return errorNotAllLoaded()
  var CS=f.checkStruct
  if (f.ID.selectedIndex) {
    if (confirm(CS.askConfirm)) {
      CS.forDelete=1
      return true
      }
    }
  else alert(CS.errNotChoose)
  return false
  }
// ------------------------------------/

/*
// ============================================================================\

Functions:
	checkUrlName(str,undAllowed,slashAllowed,psetAllowed)
	num2str(num)
	calcOrderForm(f,check)

// ============================================================================/
*/


// ----------------------------------------------------------------------------\
DHTML=(DOM || IE4)

function displayBlock(id,pos) {
  var el=D.getElementById(id)
//alert(id+' '+el+' '+pos)
  if (el) el.style.display=pos ? 'block' : 'none'
  }

function writeBlock(id,code,pos) {
  if (DHTML) D.write("<div ID='",id,"' style='padding-left:10;margin-bottom:5;display:",(pos ? 'block' : 'none'),";'>",code,"</div>")
  }
// ----------------------------------------------------------------------------/


// --------------------\
// Check url_name value
// ------------------------------------\
function checkUrlName(str,undAllowed,slashAllowed,psetAllowed) {
  if (checkInt(str)!==null || toLower(str)=='index') return null
  var l=str.length
  if (l>0 && (str.charAt(0)=='/' || str.charAt(l-1)=='/')) return null;
  for (var i=0; i<l; i++) {
    var ch=str.charAt(i)
    if ((ch<'0' || ch>'9') && (ch<'A' || ch>'Z') &&
	(ch<'a' || ch>'z') && (ch!='-') && (ch!='.') &&
	!(ch=='/' && slashAllowed) && !(ch=='_' && undAllowed) &&
	!(ch=='.' && psetAllowed)) return null;
    }
  return 1
  }
// ------------------------------------/


// ------------------------------\
// Convert number to %.2f string
// ------------------------------------\
function num2str(num) {
  var str=""+Math.round(num*100)
  var l=str.length-2
  return str.substr(0,l)+"."+str.substr(l,2)
  }
// ------------------------------------/


// -----------------------\
// Special features array
// --------------------------------------\
if (!window.ATTRIBUTES) ATTRIBUTES=Array()
if (!window.PRICING) PRICING=Array()
// --------------------------------------/

// -------------------------------\
// Check and calculate order form
// ------------------------------------\
function calcOrderForm(f,check) {
  if (!checkInt(f.quantity.value)) {
    alert('Incorrect quantity')
    f.total.value=''
    f.quantity.focus()
    return false
    }
  var attributes=ATTRIBUTES[f.product.value]
  var pricing=PRICING[f.product.value]
  var quantity=eval(f.quantity.value)
  var max_quantity=eval(f.max_quantity.value)

  if (max_quantity && max_quantity!=1000000 && quantity>max_quantity) {
    alert('Max quantity = '+max_quantity)
    f.quantity.value=f.max_quantity.value
    f.quantity.focus()
    calcOrderForm(f)
    return false
    }

  for (var opt in pricing)
    if (quantity>=opt && pricing[opt]) {
	f.price.value=pricing[opt]
	break;
	}
  var total=eval(f.price.value)
  for (var i in attributes) {
    var attr=attributes[i]
    var t=attr["type"]
    var options=attr["options"]
    if (t<2) {
      var el=f.elements["attr["+i+"]"]
      var ind=el.selectedIndex
      var opts=el.options
      var l=opts.length
      for (var j=1; j<l; j++) displayBlock(opts[j].id+'-block',j==ind)
      if (ind) total+=options[el.options[ind].value]
      else if (!t && check) {
	alert('Please choose all required features!')
	el.focus()
	return false
	}
      }
    else
      for (var j in options) {
        var el=f.elements["attr["+i+"]["+j+"]"]
        displayBlock(el.id+'-block',el.checked)
        if (el.checked) total+=options[j]
        }
      }
  if (f.total) f.total.value=num2str(total*quantity)
  }
// ------------------------------------/

