var msc, initObj, wnd=null;
var enableFormSubmit=true;
initClassObj=null;
hintObject=null;

function MM_callJS(jsStr) { //v2.0
  return eval(jsStr)
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_scanStyles(obj, prop) { //v9.0
  var inlineStyle = null; var ccProp = prop; var dash = ccProp.indexOf("-");
  while (dash != -1){ccProp = ccProp.substring(0, dash) + ccProp.substring(dash+1,dash+2).toUpperCase() + ccProp.substring(dash+2); dash = ccProp.indexOf("-");}
  inlineStyle = eval("obj.style." + ccProp);
  if(inlineStyle) return inlineStyle;
  var ss = document.styleSheets;
  for (var x = 0; x < ss.length; x++) { var rules = ss[x].cssRules;
  	if (typeof(rules)=="undefined") return "";
	for (var y = 0; y < rules.length; y++) { var z = rules[y].style;
	  if(z[prop] && (rules[y].selectorText == '*[ID"' + obj.id + '"]' || rules[y].selectorText == '#' + obj.id)) {
        return z[prop];
  }  }  }  return "";
}

function MM_getProp(obj, prop) { //v8.0
  if (!obj) return ("");
  if (prop == "L") return obj.offsetLeft;
  else if (prop == "T") return obj.offsetTop;
  else if (prop == "W") return obj.offsetWidth;
  else if (prop == "H") return obj.offsetHeight;
  else {
    if (typeof(window.getComputedStyle) == "undefined") {
	    if (typeof(obj.currentStyle) == "undefined" || obj.currentStyle==null){
		    if (prop == "P") return MM_scanStyles(obj,"position");
        else if (prop == "Z") return MM_scanStyles(obj,"z-index");
        else if (prop == "V") return MM_scanStyles(obj,"visibility");
	    } else {
	      if (prop == "P") return obj.currentStyle.position;
        else if (prop == "Z") return obj.currentStyle.zIndex;
        else if (prop == "V") return obj.currentStyle.visibility;
	    }
    } else {
	    if (prop == "P") return window.getComputedStyle(obj,null).getPropertyValue("position");
      else if (prop == "Z") return window.getComputedStyle(obj,null).getPropertyValue("z-index");
      else if (prop == "V") return window.getComputedStyle(obj,null).getPropertyValue("visibility");
    }
  }
}

function MM_dragLayer(objId,x,hL,hT,hW,hH,toFront,dropBack,cU,cD,cL,cR,targL,targT,tol,dropJS,et,dragJS) { //v9.01
  var i,j,aLayer,retVal,curDrag=null,curLeft,curTop,IE=document.all;
  var NS=(!IE&&document.getElementById); if (!IE && !NS) return false;
  retVal = true; if(IE && event) event.returnValue = true;
  if (MM_dragLayer.arguments.length > 1) {
    curDrag = document.getElementById(objId); if (!curDrag) return false;
    if (!document.allLayers) { document.allLayers = new Array();
      with (document){ if (NS) { var spns = getElementsByTagName("span"); var all = getElementsByTagName("div");
        for (i=0;i<spns.length;i++) if (MM_getProp(spns[i],'P')) allLayers[allLayers.length]=spns[i];}
        for (i=0;i<all.length;i++) {
	        if (MM_getProp(all[i],'P')) allLayers[allLayers.length]=all[i]; 
        }
    } }
    curDrag.MM_dragOk=true; curDrag.MM_targL=targL; curDrag.MM_targT=targT;
    curDrag.MM_tol=Math.pow(tol,2); curDrag.MM_hLeft=hL; curDrag.MM_hTop=hT;
    curDrag.MM_hWidth=hW; curDrag.MM_hHeight=hH; curDrag.MM_toFront=toFront;
    curDrag.MM_dropBack=dropBack; curDrag.MM_dropJS=dropJS;
    curDrag.MM_everyTime=et; curDrag.MM_dragJS=dragJS;
  
    curDrag.MM_oldZ = MM_getProp(curDrag,'Z');
    curLeft = MM_getProp(curDrag,'L');
    if (String(curLeft)=="NaN") curLeft=0; curDrag.MM_startL = curLeft;
    curTop = MM_getProp(curDrag,'T');
    if (String(curTop)=="NaN") curTop=0; curDrag.MM_startT = curTop;
    curDrag.MM_bL=(cL<0)?null:curLeft-cL; curDrag.MM_bT=(cU<0)?null:curTop-cU;
    curDrag.MM_bR=(cR<0)?null:curLeft+cR; curDrag.MM_bB=(cD<0)?null:curTop+cD;
    curDrag.MM_LEFTRIGHT=0; curDrag.MM_UPDOWN=0; curDrag.MM_SNAPPED=false; //use in your JS!
    document.onmousedown = MM_dragLayer; document.onmouseup = MM_dragLayer;
    if (NS) document.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP);
    } else {
    var theEvent = ((NS)?objId.type:event.type);
    if (theEvent == 'mousedown') {
      var mouseX = (NS)?objId.pageX : event.clientX + document.body.scrollLeft;
      var mouseY = (NS)?objId.pageY : event.clientY + document.body.scrollTop;
      var maxDragZ=null; document.MM_maxZ = 0;
      for (i=0; i<document.allLayers.length; i++) { aLayer = document.allLayers[i];
        var aLayerZ = MM_getProp(aLayer,'Z');
        if (aLayerZ > document.MM_maxZ) document.MM_maxZ = aLayerZ;
        var isVisible = (MM_getProp(aLayer,'V')).indexOf('hid') == -1;
        if (aLayer.MM_dragOk != null && isVisible) with (aLayer) {
          var parentL=0; var parentT=0;
          if (NS) { parentLayer = aLayer.parentNode;
            while (parentLayer != null && parentLayer != document && MM_getProp(parentLayer,'P')) {
              parentL += parseInt(MM_getProp(parentLayer,'L')); parentT += parseInt(MM_getProp(parentLayer,'T'));
              parentLayer = parentLayer.parentNode;
              if (parentLayer==document) parentLayer = null;
          } } else if (IE) { parentLayer = aLayer.parentElement;       
            while (parentLayer != null && MM_getProp(parentLayer,'P')) {
              parentL += MM_getProp(parentLayer,'L'); parentT += MM_getProp(parentLayer,'T');
              parentLayer = parentLayer.parentElement; } }
          var tmpX=mouseX-((MM_getProp(aLayer,'L'))+parentL+MM_hLeft);
          var tmpY=mouseY-((MM_getProp(aLayer,'T'))+parentT+MM_hTop);
          if (String(tmpX)=="NaN") tmpX=0; if (String(tmpY)=="NaN") tmpY=0;
          var tmpW = MM_hWidth;  if (tmpW <= 0) tmpW += MM_getProp(aLayer,'W');
          var tmpH = MM_hHeight; if (tmpH <= 0) tmpH += MM_getProp(aLayer,'H');
          if ((0 <= tmpX && tmpX < tmpW && 0 <= tmpY && tmpY < tmpH) && (maxDragZ == null
              || maxDragZ <= aLayerZ)) { curDrag = aLayer; maxDragZ = aLayerZ; } } }
      if (curDrag) {
        document.onmousemove = MM_dragLayer;
        curLeft = MM_getProp(curDrag,'L');
        curTop = MM_getProp(curDrag,'T');
        if (String(curLeft)=="NaN") curLeft=0; if (String(curTop)=="NaN") curTop=0;
        MM_oldX = mouseX - curLeft; MM_oldY = mouseY - curTop;
        document.MM_curDrag = curDrag;  curDrag.MM_SNAPPED=false;
        if(curDrag.MM_toFront) {
          var newZ = parseInt(document.MM_maxZ)+1;
          eval('curDrag.'+('style.')+'zIndex=newZ');
          if (!curDrag.MM_dropBack) document.MM_maxZ++; }
        retVal = false; if(!NS) event.returnValue = false;
    } } else if (theEvent == 'mousemove') {
      if (document.MM_curDrag) with (document.MM_curDrag) {
        var mouseX = (NS)?objId.pageX : event.clientX + document.body.scrollLeft;
        var mouseY = (NS)?objId.pageY : event.clientY + document.body.scrollTop;
        var newLeft = mouseX-MM_oldX; var newTop  = mouseY-MM_oldY;
        if (MM_bL!=null) newLeft = Math.max(newLeft,MM_bL);
        if (MM_bR!=null) newLeft = Math.min(newLeft,MM_bR);
        if (MM_bT!=null) newTop  = Math.max(newTop ,MM_bT);
        if (MM_bB!=null) newTop  = Math.min(newTop ,MM_bB);
        MM_LEFTRIGHT = newLeft-MM_startL; MM_UPDOWN = newTop-MM_startT;
        if (NS){style.left = newLeft + "px"; style.top = newTop + "px";}
        else {style.pixelLeft = newLeft; style.pixelTop = newTop;}
        if (MM_dragJS) eval(MM_dragJS);
        retVal = false; if(!NS) event.returnValue = false;
    } } else if (theEvent == 'mouseup') {
      document.onmousemove = null;
      if (NS) document.releaseEvents(Event.MOUSEMOVE);
      if (NS) document.captureEvents(Event.MOUSEDOWN); //for mac NS
      if (document.MM_curDrag) with (document.MM_curDrag) {
        if (typeof MM_targL =='number' && typeof MM_targT == 'number' &&
            (Math.pow(MM_targL-(MM_getProp(document.MM_curDrag,'L')),2)+
             Math.pow(MM_targT-(MM_getProp(document.MM_curDrag,'T')),2))<=MM_tol) {
          if (NS) {style.left = MM_targL + "px"; style.top = MM_targT + "px";}
          else {style.pixelLeft = MM_targL; style.pixelTop = MM_targT;}
          MM_SNAPPED = true; MM_LEFTRIGHT = MM_startL-MM_targL; MM_UPDOWN = MM_startT-MM_targT; }
        if (MM_everyTime || MM_SNAPPED) eval(MM_dropJS);
        if(MM_dropBack) {style.zIndex = MM_oldZ;}
        retVal = false; if(!NS) event.returnValue = false; }
      document.MM_curDrag = null;
    }
    if (NS) document.routeEvent(objId);
  } return retVal;
}

function MM_displayStatusMsg(msgStr) { //v1.0
  status=msgStr;
  document.MM_returnValue = true;
}


function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '<object ';
  for (var i in objAttrs)
    str += i + '="' + objAttrs[i] + '" ';
  str += '>';
  for (var i in params)
    str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  str += '<embed ';
  for (var i in embedAttrs)
    str += i + '="' + embedAttrs[i] + '" ';
  str += ' ></embed></object>';

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "id":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}


//****************************************************************************************


function readCookies()
	{
	var i,arr,tmp,ret=new Object;
	
	arr=document.cookie.split("; ");
	if (arr.length==0) return null;
	for (i=0;i<arr.length;i++)
		{
		tmp=arr[i].split("=");
		if (tmp.length!=2) continue;
		ret[tmp[0]]=tmp[1];
		}
	return ret;
	}
	
	
function writeCookie(name,value,expiryDays)
	{
	var tmp, expires=new Date();
	
	tmp=expires.getTime()+expiryDays*24*60*60*1000;
	expires.setTime(tmp);
	
	document.cookie=name+"="+escape(value)+"; expiries="+expires.toGMTString();
	}
	

function viewPicture(pictUrl,width,height,resizable)
	{
	var str=Array();
	
	if (wnd) wnd.close();
	str.push("resizable="+(resizable ? 1 : 0));
	if (width) str.push("width="+width);
	if (height) str.push("height="+height);
	str=str.join(",");
	wnd=open(pictUrl,"view",str);
	wnd.focus();
	}
	
	
function setFormAction(idOrObj,action)
	{
	var tmp;
	
	if (typeof(idOrObj)=="string")
		{
		tmp=document.getElementById(idOrObj);
		if (!tmp)
			{
			alert("setFormAction - form name '"+idOrObj+"' has not be found.");
			return false;
			}
		idOrObj=tmp;
		}
	else if (typeof(idOrObj.action)=="undefined")
		{
		alert("setFormAction - passed parameter is not a form object.");
		return false;
		}
	
	idOrObj.action=action;
	return true;
	}


function submitFormAction(formName,action)
	{
	var url, val, arr;
	var obj=document.getElementById(formName);
	var saveAction, glue="?";

	if (!action) action="";
	if (!obj)
		{
		alert("Form '"+formName+"' is not found in the document. Action refused.");	
		return;
		}

	if (!enableFormSubmit) 
		{
		obj.submit();
		return;
		}

	saveAction=obj.getAttribute("action").split("#");
	if (saveAction[0].indexOf("?")!=-1) glue="&";
		
	if (saveAction.length!=1 && saveAction.length!=2) 
		{
		alert("Form '"+formName+"' action field contains more then 1 '#' character. Action refused.");	
		return;
		}
	if (action!="")
		{
		action=saveAction[0] + glue + action;
		glue="&";
		}
		
	url=window.location.search.substr(1);
	if (url.length && document.cookie.indexOf("PHPSESSID=")==-1)
		{
		arr=url.split("&");
		for(i=0;i<arr.length;i++)
			{
			val=arr[i];
			val=val.split("=");
			if (val[0]=="PHPSESSID")
				{
				action+=glue+"PHPSESSID="+val[1];
				glue="&";
				break;
				}
			}
		}

	if (saveAction.length==2) action+="#"+saveAction[1];
	if (window.external && typeof(window.external.AutoCompleteSaveForm)!="undefined") window.external.AutoCompleteSaveForm(obj);
	obj.action=action;
	obj.submit();
	enableFormSubmit=false;
	}

	
function submitForm(formName,mode,id,subid)
	{
	var url;
	var obj=document.getElementById(formName);
	var action="";

	if (!obj)
		{
		alert("Form '"+formName+"' is not found in the document. Action refused.");	
		return false;
		}

	if (mode==null)
		{
		submitFormAction(formName);
		return false;
		}
	
	action="mode="+mode;
	if (id!=null) action+="&id="+id;
	if (subid!=null) action+="&subid="+subid;
	submitFormAction(formName,action);
	return false;
	}


//optional second argument contains object with properties to use as arguments
function submitFormParams(formName)
	{
	var url;
	var obj=document.getElementById(formName);
	var action="", arg;

	if (!obj)
		{
		alert("Form '"+formName+"' is not found in the document. Action refused.");	
		return false;
		}

	if (arguments.length==1)
		{
		submitFormAction(formName);
		return false;
		}
		
	for (arg in arguments[1]) action+="&"+arg+"="+arguments[1][arg];
	if (action!="") action=action.substr(1);
	
	submitFormAction(formName,action);
	return false;
	}
	
	
function rewriteJSCode(str)
	{
	document.writeln(str);	
	}
	
	
function elementPosition(obj) 
	{ 
	var offsetLeft = 0, offsetTop = 0; 
	
	if (obj.offsetParent) 
		{ 
		offsetLeft = obj.offsetLeft; 
		offsetTop = obj.offsetTop; 
		while (obj = obj.offsetParent) 
			{ 
			offsetLeft += obj.offsetLeft; 
			offsetTop += obj.offsetTop; 
			} 
		} 
	
	return [offsetLeft,offsetTop]; 
	} 


	

//****************************************************************************************

function formKeyPress(ev)
	{
	var obj;

	if (ev)
		{
		if (ev.keyCode!=13) return true;
		}
	else if (window.event.keyCode!=13)
		return true;

	obj=initClassObj.getFormByFieldObj(this);
	if (!obj) return true;
	submitForm(obj.formName,obj.mode);
	
	return false;  
	}


function ic_getFormByFieldObj(fieldObj)
	{
	var cnt=this.fields.length;
	var i, obj;
	
	for(i=0; i<cnt; i++)
		{
		obj=this.fields[i];
		if (obj.fieldObj==fieldObj) return obj;
		}
		
	return null;
	}
	

function ic_submitByEnter(formName, fieldId, mode)
	{
	var obj=new Object();
	
	obj.formName=formName;
	obj.fieldId=fieldId;
	obj.mode=mode;
	
	this.fields[this.fields.length]=obj;
	}
	

//second and next parametera will be considered as registered function arguments
function ic_registerFunction(func)
	{
	var i,arr;

	arr=new Array();
	for(i=1;i<arguments.length; i++)
		arr.push(arguments[i]);
	this.func[this.func.length]=func;
	this.funcArgs[this.funcArgs.length]=arr;
	}
	
	
function ic_setHiPriority()
	{
	var tmp; 
	
	if (this.func.length<2) return;
	
	tmp=this.func[0];
	this.func[0]=this.func[this.func.length-1];
	this.func[this.func.length-1]=tmp;
	
	tmp=this.funcArgs[0];
	this.funcArgs[0]=this.funcArgs[this.funcArgs.length-1];
	this.funcArgs[this.funcArgs.length-1]=tmp;
	}
	

function ic_run()
	{
	var cnt=this.func.length;
	var i, obj;
	
	for(i=0;i<cnt;i++) 
		if (this.funcArgs[i].length>0)
			this.func[i](this.funcArgs[i]);
		else
			this.func[i]();
		
	this.func=Array();
	
	cnt=this.fields.length;
	for(i=0;i<cnt;i++) 
		{
		obj=document.forms[this.fields[i].formName];
		if (!obj || !obj[this.fields[i].fieldId]) continue;
		obj=obj[this.fields[i].fieldId];
		this.fields[i].fieldObj=obj;
		obj.onkeypress=formKeyPress;
		}
	}


function initClass()
	{
	this.run=ic_run;
	this.registerFunction=ic_registerFunction;
	this.submitByEnter=ic_submitByEnter;
	this.getFormByFieldObj=ic_getFormByFieldObj;
	this.setHiPriority=ic_setHiPriority;
	
	this.func=Array();
	this.funcArgs=Array();
	this.fields=Array();
	}
	
	
//****************************************************************************************

function hc_showError(message)
	{
	alert(message);
	return false;
	}
	
	
function hc_convertToObject(id)
	{
	var tmp;
	
	tmp=document.getElementById(id);
	if (!tmp) this.showError("Nie znaleziono obiektu ID '"+id+"'.");
	return tmp;
	}
	

function hc_show(ev)
	{
	var src, obj, mx, my, offX, offY, tmp;
	
	if (ev) //NN
		{
		src=ev.target;
		offX=window.pageXOffset;
		offY=window.pageYOffset;
		mx=ev.pageX;
		my=ev.pageY;
		}
	else if (window.event)
		{
		src=window.event.srcElement;
		obj=document.getElementsByTagName("html");
		obj=obj[0];
		offX=obj.scrollLeft;
		offY=obj.scrollTop;
		mx=window.event.clientX+offX;
		my=window.event.clientY+offY;
		}
	else
		return;
	
	src.hintConfig.hintTitleId.innerHTML=src.hintConfig.title;
	src.hintConfig.hintContentId.innerHTML=src.hintConfig.text.replace(/\n/g,"<br>");
	obj=src.hintConfig.hintObjectId;
	obj.style.width=src.hintConfig.width+"px";

	tmp=mx-src.hintConfig.xOffset-src.hintConfig.width;
	if (tmp<0 || tmp<offX) tmp=mx+src.hintConfig.xOffset;
	obj.style.left=tmp+"px";
	
	tmp=my-src.hintConfig.yOffset-obj.offsetHeight;
	if (tmp<0 || tmp<offY) tmp=my+src.hintConfig.yOffset;
	obj.style.top=tmp+"px";
	
	obj.style.visibility="visible";
	}


function hc_hide(ev)
	{
	var src;
	
	if (ev) //NN
		src=ev.target;
	else if (window.event)
		src=window.event.srcElement;
	else
		return;

	src.hintConfig.hintObjectId.style.visibility="hidden";
	}
	
	
function hc_registerSource(config)
	{
	var obj, prop;
	
	obj=new Object();
	for(prop in config)
		obj[prop]=config[prop];
	
	if (!obj.width) obj.width=150;
	if (!obj.xOffset) obj.xOffset=20;
	if (!obj.yOffset) obj.yOffset=20;
	if (!obj.hintTitleId) return this.showError("Brak pola 'hintTitleId' w obiekcie konfiguracyjnym komunikatu.");
	if (!obj.hintContentId) return this.showError("Brak pola 'hintContentId' w obiekcie konfiguracyjnym komunikatu.");
	if (!obj.hintObjectId) return this.showError("Brak pola 'hintObjectId' w obiekcie konfiguracyjnym komunikatu.");
	if (!obj.hintSourceId) return this.showError("Brak pola 'hintSourceId' w obiekcie konfiguracyjnym komunikatu.");
	if (!obj.title) return this.showError("Brak pola 'title' w obiekcie konfiguracyjnym komunikatu.");
	if (!obj.text) return this.showError("Brak pola 'text' w obiekcie konfiguracyjnym komunikatu.");
	
	obj.hintTitleId=this.convertToObject(obj.hintTitleId);
	if (!obj.hintTitleId) return false;
	obj.hintContentId=this.convertToObject(obj.hintContentId);
	if (!obj.hintContentId) return false;
	obj.hintObjectId=this.convertToObject(obj.hintObjectId);
	if (!obj.hintObjectId) return false;
	obj.hintSourceId=this.convertToObject(obj.hintSourceId);
	if (!obj.hintSourceId) return false;
	
	obj.hintSourceId.hintConfig=obj;
	obj.hintSourceId.onmouseover=function(ev) {hintObject.show(ev)};
	obj.hintSourceId.onmousemove=function(ev) {hintObject.show(ev)};
	obj.hintSourceId.onmouseout=function(ev) {hintObject.hide(ev)};
	}


function hintClass()
	{
	this.show=hc_show;
	this.hide=hc_hide;
	this.showError=hc_showError;
	this.convertToObject=hc_convertToObject;
	this.registerSource=hc_registerSource;
	}

//****************************************************************************************


function msc_updatePos(menuObj)
	{
	var width, offX;
	
	if (this.blockWidth==undefined || menuObj.xOffset==undefined) return;
	width = document.body.offsetWidth ? document.body.offsetWidth : window.innerWidth;	
	if (!width) return;
	offX=(Math.max(width,this.blockWidth)-this.blockWidth)/2;
	menuObj.style.left=(offX+menuObj.xOffset)+"px";
	}
	

function msc_rollOver(menuObj)
	{
	var i;

	menuObj.classObj.updatePos(menuObj);
	menuObj.style.visibility="visible";
	menuObj.classObj.setDelay(menuObj);
	
	for(i=0;i<menuObj.classObj.opened.length;i++)
		menuObj.classObj.opened[i].timer=1;
	}


function msc_rollOut(menuObj)
	{
	var i;
	
	for(i=0;i<menuObj.classObj.opened.length;i++)
		if (menuObj.classObj.opened[i]==menuObj) return;
		
	menuObj.classObj.opened.push(menuObj);
	}
	
	
function msc_setDelay(menuObj)
	{
	menuObj.timer=40;		
	}
	
	
function msc_timerEvent()
	{
	var i, arr;

	arr=Array();
	for(i=0;i<this.opened.length;i++)
		if (--this.opened[i].timer>0) 
			arr.push(this.opened[i]);
		else
			this.opened[i].style.visibility="hidden";
			
	this.opened=arr;
	}


//xOffset - use only when menu horizontal position should be related to centered object
function msc_assignMenu(linkId,menuId,xOffset)
	{
	var obj,menuObj;
	
	obj=document.getElementById(linkId);
	if (!obj) return alert("Link o ID '"+linkId+"' nie został zdefiniowany.");
	menuObj=document.getElementById(menuId);
	if (!menuObj) return alert("Menu o ID '"+menuId+"' nie zostało zdefiniowane.");

	menuObj.timer=0;
	menuObj.classObj=this;
	menuObj.onmousemove=function () {this.classObj.setDelay(this)};
	menuObj.xOffset=xOffset;
	obj.menuObj=menuObj;
	obj.triggerOverFnc=this.rollOver;
	obj.onmouseover=function () {this.triggerOverFnc(this.menuObj)};
	obj.triggerOutFnc=this.rollOut;
	obj.onmouseout=function () {this.triggerOutFnc(this.menuObj)};
	}
	
	
function msc_fixHorizontalPos(blockWidth)
	{
	this.blockWidth=blockWidth;
	}
	

	
function menuSystemClass()
	{
	this.assignMenu=msc_assignMenu;	
	this.rollOver=msc_rollOver;
	this.rollOut=msc_rollOut;
	this.timerEvent=msc_timerEvent;
	this.setDelay=msc_setDelay;
	this.fixHorizontalPos=msc_fixHorizontalPos;
	this.updatePos=msc_updatePos;
	
	this.blockWidth=null;
	this.opened=Array();
	setInterval(clock,50);
	}
	
function clock()
	{
	msc.timerEvent();		
	}
	

//************************************************************************************



function init()
	{
	initClassObj.run();
	}

initClassObj=new initClass();
hintObject=new hintClass();
