var doODCheckName = true;
var counter=0;
var openStreamApp = false;
function getScrollPageOffsetLeft(el) {
   var rects = el.getClientRects();
   var left = 100000;
   for (var i=0;i<rects.length;i++) {
      if (left>rects[i].left) left = rects[i].left;
   }
   return left;
}
function getScrollPageOffsetTop(el) {
   var rects = el.getClientRects();
   var top = 100000;
   for (var i=0;i<rects.length;i++) {
      if (top>rects[i].top) top = rects[i].top;
   }
   return top;
}

function getPageOffsetLeft(el) {
  var left = el.offsetLeft;
  if (el.offsetParent != null) left += getPageOffsetLeft(el.offsetParent);
  return left;
}

function getPageOffsetTop(el) {
  var top = el.offsetTop;
  if (el.offsetParent != null) top += getPageOffsetTop(el.offsetParent);
  return top;
}

var onloadFuncs;
if (!onloadFuncs) onloadFuncs = new Array();

function ODAddOnLoad(f) {
   onloadFuncs.push(f);
}

function OD_doOnloadFuncs() {
   for (var i=0;i<onloadFuncs.length;i++) {
      try {
         onloadFuncs[i]();
      } catch (ex) {
         showInfoException(ex);
      }
   }
}


function OD_Onload() {
   OD_doOnloadFuncs();
   if (document.body.resizeChildren) {
      window.onresize = ODResizeTimeout;
      ODResizeTimeout();
   }
   if (!openStreamApp && window['_LoadingBlock']) {
      _LoadingBlock.style.display='none';
      _BodyBlock.style.display='block';
      OD_signalBlockShow();
   }
}
var _ODResizeTimeout
function ODResizeTimeout() {
   if (_ODResizeTimeout) clearTimeout(_ODResizeTimeout);
   _ODResizeTimeout = setTimeout("ODResize();",00);
}

var doneResizeElements = null;
function ODResize() {
   try {
      var list = document.body.resizeChildren;
      doneResizeElements = new Object();
      if (list) {
         //stackleft("ODResize");
         //document.body.style.overflow='hidden';
         var w = document.body.clientWidth;
         var h = document.body.clientHeight;
         ODResizeChildren(document.body,w,h);
         clearAlertLast();
      }
      //discardElement(doneResizeElements);
      doneResizeElements= null;
   } catch (ex) {
      ODAlert("ODResize error:"+ex);
      showInfoException(ex);
   }
}

var recurseCount = 0;
var ODResizeChildrenCnt = 0;
function ODResizeChildren(el,w,h) {
   if (!el.id) el.id="ODResizeChildrenID"+ODResizeChildrenCnt++;
   if (!doneResizeElements || !doneResizeElements[el.id]) {
      if(el.id && doneResizeElements) doneResizeElements[el.id] = true;
      //if (el == document.body) ODAlert("start "+el.resizeChildren[0].id);
      recurseCount++;
      //if (recurseCount>10) stackleft("recurseCount "+recurseCount);

      if ((""+w)!="undefined" && (""+h)!="undefined") {
         el.resizeChildrenWidth = w;
         el.resizeChildrenHeigth = h;
      }
      var list = el.resizeChildren;
      if (list) {
         //alertLast("ODResizeChildren w:"+w+" h:"+h+" "+el.id+" list.length:"+list.length);
         if ((""+w)=="undefined") w = el.resizeChildrenWidth;
         if ((""+h)=="undefined") h = el.resizeChildrenHeigth;
         for (var i=0;i<list.length;i++) {
            if (list[i].resizeFromParent) {
               var callFunc = list[i].resizeFromParent;
               callFunc(w,h,list[i]);
            } else ODAlert("noResizeFromParent:"+list[i].id+" "+list[i].outerHTML);
         }
      }
      recurseCount--;
      //if (el == document.body) ODAlert("end "+el.resizeChildren[0].id);
   } else {
      //ODAlert(el.id);
   }
}

var afterEvalFunctions = new Array();
var evalCallBackWaitingCount = 0;
function OD_evalCallBack(str) {
   evalCallBackWaitingCount--;
   evalCallBack(str);
   if (afterEvalFunctions.length>0) {
      var loopArray = afterEvalFunctions;
      afterEvalFunctions = new Array();
      for (var i=0;i<loopArray.length;i++) {
         loopArray[i]();
      }
   }  
}
function evalCallBack(str) {
   var doMultiCall = false;
   if (ODStartMultiCall) doMultiCall = ODStartMultiCall();
   //var start = (new Date()).getTime();
   try {
      eval(str);
      //var duration = ((new Date()).getTime()-start)
      //if (duration>1000) ODAlert(duration+" "+str);
      
   } catch (ex) {
      if (scriptGivingError) scriptGivingError(str,ex);
      if (alertsOn) {
         var popup = showSpecialPopup("Error in script:","<textarea style='width:400;height:400;' id='textarea'></textArea>");
         popup.inner.all['textarea'].value = str;
      } 
      ODAlert(ex.message+":"+str);
      showInfoException(ex);
   } finally {
      if (doMultiCall) ODFlushMultiCall();
   }
}

function ODCheckName(name) {
   if (doODCheckName && window[name]) ODAlert("Name "+name+" is used more than once");
}

var keepEx = null;
var oldonError = null;
function showInfoException(ex) {
   if (alertsOn) {
      keepEx = ex;
      setTimeout("checkException()",1);
   }
}
function checkException() {
   oldonError = window.onerror;
   window.onerror=myOnError;
   throw(keepEx);
}
function myOnError(msg,url,line) {
   ODAlert(msg+" "+url+" "+line);
   window.onerror = oldonError;
   return true;
}

var designTreeID;
var nodeDivTags = new Array();
var nodeDivIDs = new Array();
var nodeDivIDNames = new Object();
var nodeDivShowBlocks = new Object();
var divNodeShowBlocks = new Object();
var nodeIdDivgroup = new Object();
var nodeDivShowBlocksAll = new Array();
var linkNodes = new Object();
var linkNodeParents = new Object();
var showNodeFuncs = new Object();
var hideNodeFuncs = new Object();
var resizeParentChildList = new Object();
var lastNode = null;
var currentNode = null;
var currentDivGroupNode = new Object();
var _navName = "IE"

var ODPropClasses = new Array();
function addPropClass(propClass,vecstr) {
}


if (navigator.appName=="Netscape") {
   _navName = "Netscape";
}


function showNodeDivsByName(name) {
   var id = nodeDivIDNames[name];
   showNodeDivs(id);
}
function hideDivGroupByName(name) {
   var id = nodeDivIDNames[name];
   hideDivGroup(id);
}
function hideDivGroup(nodeId, except) {
   var divgroup = nodeIdDivgroup[nodeId];
   for (var i=0;i<nodeDivShowBlocksAll.length;i++) {
      var div = nodeDivShowBlocksAll[i];
      if (div.divgroup==divgroup) {
         if (div.style) {
            if (div.style.display!="none") {
               if (!except || !arrayContains(except,div)) {
                  div.style.display ="none";
                  var vec = divNodeShowBlocks[div.id];
                  if (vec) {
                     for(var j=0;j<vec.length;j++) signalHideNodeDivs(vec[j]);
                  }
               }
            }
         }
      }
   }
}

var startDeb = false;
function showNodeDivs(nodeId) {
   if (linkNodes[nodeId] && linkNodes[nodeId]!=nodeId) {
      showNodeDivs(linkNodes[nodeId]);
   } else {
      var vec = nodeDivShowBlocks[nodeId];

      hideDivGroup(nodeId,vec);

      if (vec) {
         var signalIDs = new Array();
         for (var i=0;i<vec.length;i++) {
            var div = vec[i];
            div.style.display ="block";
            var vec2 = divNodeShowBlocks[div.id];
            if (vec2) {
               for(var j=0;j<vec2.length;j++) {
                  if (!arrayContains(signalIDs,vec2[j])) signalIDs.push(vec2[j]);
               }
            }
         }
         for(var j=0;j<signalIDs.length;j++) {
            signalShowNodeDivs(signalIDs[j]);
         }
      }
      lastNode = currentNode;
      currentNode = nodeId;
      var divgroup = nodeIdDivgroup[nodeId];
      if (divgroup) currentDivGroupNode[divgroup]=nodeId;
      if (linkNodeParents[nodeId]) {
         linkNodes[linkNodeParents[nodeId]] = nodeId;
      }
   }

}

function getCurrentDivGroupNode(divgroup) {
   return currentDivGroupNode[divgroup];
}

function signalShowNodeDivs(nodeId) {
   var doMultiCall = window.startMultiCall && startMultiCall();
   var funcs = showNodeFuncs[nodeId];
   if (funcs) {
      for (var i=0;i<funcs.length;i++) {
         var func = funcs[i];
         if (startDeb) ODAlert(func);
         if (func) func(nodeId);
      }
   }
   OD_signalBlockShow();
   if (doMultiCall) flushMultiCall();
}
function signalHideNodeDivs(nodeId) {
   var doMultiCall = window.startMultiCall && startMultiCall();
   var funcs = hideNodeFuncs[nodeId];
   if (funcs) {
      for (var i=0;i<funcs.length;i++) {
         var func = funcs[i];
         func(nodeId);
      }
   }
   if (doMultiCall) flushMultiCall();
}

function addDivShowBlockNetscape(nodeId,divid,divgroup,nodeName) {
   var div = document.getElementById(divid);
   addDivShowBlock(nodeId,div,divgroup,nodeName);
}

function addDivShowBlock(nodeId,div,divgroup,nodeName) {
   if (nodeName) {
      nodeDivIDs.push(nodeId);
      nodeDivIDNames[nodeName] = nodeId
   }
   var vec = nodeDivShowBlocks[nodeId];
   if (vec == null) {
      vec = new Array();
      nodeDivShowBlocks[nodeId] = vec;
   }
   vec.push(div);

   if (div.id) {
      var vec = divNodeShowBlocks[div.id];
      if (vec == null) {
         vec = new Array();
         divNodeShowBlocks[div.id] = vec;
      }
      vec.push(nodeId);
   }

   nodeDivShowBlocksAll.push(div);
   div.divgroup = divgroup;
   div.nodeId = nodeId;
   nodeIdDivgroup[nodeId] = divgroup;
}
function showLastNode() {
   showNodeDivs(lastNode);
}

function setLinkNodeParent(parent,children) {
   for (var i=0;i<children.length;i++) {
      linkNodeParents[children[i]]=parent;
   }
}

function setLinkNode(parent,child) {
   linkNodes[parent] = child;
}
function setLinkNodeByName(parent,child) {
   var parentid = nodeDivIDNames[parent];
   var childid = nodeDivIDNames[child];
   setLinkNode(parentid,childid);
}

function addOnShowNodeByName(name,func) {
   var nodeId = nodeDivIDNames[name];
   addOnShowNode(nodeId,func);
}

function addOnShowNode(nodeId,func) {
   var funcs = showNodeFuncs[nodeId];
   if (!funcs) funcs = showNodeFuncs[nodeId] = new Array();
   funcs.push(func);
}


function addOnHideNodeByName(name,func) {
   var nodeId = nodeDivIDNames[name];
   addOnHideNode(nodeId,func);
}

function addOnHideNode(nodeId,func) {
   var funcs = hideNodeFuncs[nodeId];
   if (!funcs) funcs = hideNodeFuncs[nodeId] = new Array();
   funcs.push(func);
}
var count=0;
function sendNewSize(el,w,h) {
   ODAlert(el.id+" uses sendNewSize, use ODResizeChildren instead");
   var pid = el.id;
   if (el.nodeName=="BODY") pid="BODY";
   var list = resizeParentChildList[pid];
   if (list) {
      for (var i=0;i<list.length;i++) {
         try {
            list[i].newSize(w,h);
         } catch (ex) {
            showInfoException(ex);
         }
      }
   }
}

var debugstr1='';

function findParentResize(el,child,notagain) {
   if (el==null) {
      if (child!=null && child.length) {
         for (var i=0;i<child.length;i++) {
            ODAlert(child[i].outerHTML);
         }
      }
   } else {
      if (!child) {
         child=el;
         return findParentResize(el.parentNode,child,notagain);
      } else {
         if (el.nodeName=="BODY" || el.isResizeParent) {
            var pid = el.id;
            if (el.nodeName=="BODY") pid="BODY";
            ODAlert(child.id+" uses findParentResize, use ODFindParentResize instead");
            var list = resizeParentChildList[pid];
            if (!list) {
                resizeParentChildList[pid] = list = new Array();
            }
            list.push(child);

         } else {
            return findParentResize(el.parentNode,child,notagain);
         }
      }
   }
}


function getCookieVal(offset) {
   var endstr = document.cookie.indexOf ( ";", offset );
   if ( endstr == -1 ) {
      endstr = document.cookie.length;
   } 
   return unescape(document.cookie.substring(offset, endstr));
}

function getCookie(name){
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while ( i < clen ) {
    var j = i + alen;
    if ( document.cookie.substring( i, j ) == arg ) {
      return getCookieVal ( j );
    }
    i = document.cookie.indexOf( " ", i ) + 1;
    if ( i == 0 ){
      break;
    }
  }
  return null;
}


function setCookie(name, value) {
  var argv = setCookie.arguments;
  var argc = setCookie.arguments.length;
  var expires = (argc > 2) ? argv[2] : null;
  var path = (argc > 3) ? argv[3] : null;
  var domain = (argc > 4) ? argv[4] : null;
  var secure = (argc > 5) ? argv[5] : false;

  document.cookie = name + "=" + escape (value) +
    ( ( expires == null ) ? "" : ( "; expires=" + expires.toGMTString() ) ) +
    ( ( path == null ) ? "" : ( "; path=" + path ) ) +
    ( ( domain == null ) ? "" : ( "; domain=" + domain ) ) +
    ( ( secure == true ) ? "; secure" : "" );
}

function deleteCookie(name) {
  var exp = new Date();
  exp.setTime ( exp.getTime() - 1 );  // This cookie is history
  var cval = getCookie ( name );
  document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString() + "; path=/";
}

function arrayContains(array,value) {
   var result =false;
   for (var i=0;result==false && i<array.length;i++) {
      result = (array[i] == value);
   }
   return result;
}

function _sp(count) {
   var str = "";
   for(var i=0;i<count;i++) str+=" ";
   return str;
}

function trim(str) {
   return str.replace(/^\s*|\s*$/g,"");
}


function stringToVector(str) {
   var result = new Array();
   if (str) {
      if (str.length>0 && str.charAt(0)=='[') reg = new RegExp("]");
      else reg = new RegExp(">");
      
      var vec = trim(str).split(reg);
      for(var i=0;i<vec.length;i++) result.push(decodeString(vec[i].substring(1)))
   }
   return result;
}

function vectorToString(vec) {
   var startTime = (new Date()).getTime();
   if(vec.length>0) {
      var encodedVec = new Array();
      for (var i=0;i<vec.length;i++) encodedVec.push(encodeString(vec[i]));
      return "["+encodedVec.join("][")+"]";
   } else return "";
}

var encodeStringFrom=null;
var encodeStringTo =null;
var encodeEscapeFrom = new Array();
var encodeEscapeTo = new Array();
function fillEncodeStrings() {
   encodeStringFrom = new Array();
   encodeStringTo = new Array();
   encodeStringFrom.push(">"); encodeStringTo.push("&sgt;");
   encodeStringFrom.push("<"); encodeStringTo.push("&slt;");
   encodeStringFrom.push("["); encodeStringTo.push("&sbo;");
   encodeStringFrom.push("]"); encodeStringTo.push("&sbc;");
   encodeStringFrom.push("&"); encodeStringTo.push("&samp;");
   encodeStringFrom.push('"'); encodeStringTo.push("&squot;");
   encodeStringFrom.push("\n"); encodeStringTo.push("&s#13;");
   encodeStringFrom.push("\r"); encodeStringTo.push("&s#10;");
   
   encodeEscapeFrom = new Array();
   encodeEscapeTo = new Array();
   encodeEscapeFrom.push(">"); encodeEscapeTo.push("&gt;");
   encodeEscapeFrom.push("<"); encodeEscapeTo.push("&lt;");
   encodeEscapeFrom.push("["); encodeEscapeTo.push("&sbo;");
   encodeEscapeFrom.push("]"); encodeEscapeTo.push("&sbc;");
   encodeEscapeFrom.push("&"); encodeEscapeTo.push("&amp;");
   encodeEscapeFrom.push('"'); encodeEscapeTo.push("&quot;");
   encodeEscapeFrom.push("\n"); encodeEscapeTo.push("&#13;");
   encodeEscapeFrom.push("\r"); encodeEscapeTo.push("&#10;");
}

function encodeString(str) {
   if (!encodeStringFrom) fillEncodeStrings();
   return stringConverting(str,encodeStringFrom,encodeStringTo);
}
function decodeString(str) {
   if (str.indexOf("&s")<0) return str;
   if (!encodeStringFrom) fillEncodeStrings();
   return stringConverting(str,encodeStringTo,encodeStringFrom);
}

function stringConverting(str,arrayFrom,arrayTo) {
   str=""+str;
   var result = "";
   if (str) {
         var minArray = new Array();
         for (var j=0;j<arrayFrom.length;j++) {
            minArray.push(str.indexOf(arrayFrom[j],0));
         }
         var temp = "";
         var count = 0;
         var length = str.length
         var i=0;
         var found = 0;
         while (found>=0) {
            found=-1;
            var minIndex = length;

            for (var j=minArray.length;j>=0;j--) {
               var index = minArray[j];
               if (index>=0 && index<minIndex) {
                  minIndex = index;
                  found = j;
               }
            }
            if (found>=0) {
               temp+=str.substring(i,minIndex)+arrayTo[found];
               i=minIndex+arrayFrom[found].length;
               minArray[found] = str.indexOf(arrayFrom[found],i);
            } else {
               temp+=str.substr(i);
            }

            count++;
            if (count>50) {
               count = 0;
               result+=temp;
               temp="";
            }
         }
         result+=temp;
   }
   return result;
}

var ParentResizeArray = new Array();
var ParentResize_EventAttached = false;
var ODFindParentResizeCount=0;
function ODFindParentResize(el,child,notagain) {
   if (!child) {
      ODFindParentResizeCount=0;
      child=el;
      return ODFindParentResize(el.parentNode,child,notagain);
   } else if (el) {
      if (ODFindParentResizeCount++>50 && ODFindParentResizeCount<55) ODAlert("ODFindParentResize "+ODFindParentResizeCount);
      if (el.nodeName=="BODY" || el.isResizeParent) {
         
         var pid = el.id;
         if (el.nodeName=="BODY") pid="BODY";
         var list = el.resizeChildren;
         if (!list) {
            list = el.resizeChildren = new Array();
            if (!ParentResize_EventAttached) {
               ParentResize_EventAttached= true;
               window.attachEvent("onunload",ParentResize_cleanupAll);
            }
            ParentResizeArray.push(el);
         }
         if (!arrayContains(list,child)) list.push(child);
         if (child.resizeParent && child.resizeParent!=el) ODAlert("Double ODFindParentResize "+el.id);
         child.resizeParent = el;
         return el;
      } else {
         return ODFindParentResize(el.parentNode,child,notagain);
      }
   } //else ODAlert("no el :"+stacktrace());
   return null;
}


function ODRemoveParentResize(child) {
   if (child) {
      var el = child.resizeParent;
      if (el) {
         var list = el.resizeChildren;
         if (list) {
            removeFromArray(list,child);
            if (list.length==0) {
               removeFromArray(ParentResizeArray,el);
               el.resizeChildren=null;
            }
         }
         child.resizeParent=null;
      }
   }
}


function ParentResize_cleanupAll() {
   for (var i=ParentResizeArray.length-1;i>=0;i--) {
      ParentResizeArray[i].resizeChildren=null;
   }
}

function OD_checkVisible_Old(node) {
   var visible = true;
   while (node && visible) {
      if (node.style && node.style.display) visible=(node.style.display!='none');
      node = node.parentNode;
   }
   return visible;
}

function OD_checkVisible(checkNode) {
   if (!checkNode) ODAlert("OD_checkVisible checkNode==null\n"+stacktrace());
   if (checkNode.lastNotVisibleParent && checkNode.lastNotVisibleParent.style.display=='none') return false;
   else {
      var visible = true;
      var node = checkNode;
      while (node && visible) {
         if (node.style && node.style.display && node.style.display=='none') visible=false;
         else node = node.parentNode;
      }
      if (!visible) checkNode.lastNotVisibleParent = node;
      else checkNode.lastNotVisibleParent = null;
      return visible;
   }
}

var OD_ListenBlockShowFuncs = new Array();
var OD_ListenBlockShowParams = new Array();
function OD_AddListenBlockShow(func,param) {
   OD_ListenBlockShowFuncs.push(func);
   OD_ListenBlockShowParams.push(param);
}

function OD_signalBlockShow() {
	var doMultiCall = false;
   if (window['ODStartMultiCall']) doMultiCall = ODStartMultiCall();
   for (var i=0;i<OD_ListenBlockShowFuncs.length;i++) {
      var startTime = (new Date).getTime();
      OD_ListenBlockShowFuncs[i](OD_ListenBlockShowParams[i]);
      var time = (new Date).getTime()-startTime;
   }
   if (doMultiCall) ODFlushMultiCall();
}

function funcname(f) {
   var s = null;
   var m = f.toString().match(/function (\w*)/)
   if (m) s = m[1];
   if ((s == null) || (s.length==0)) return "anonymous";
   return s;
}

// version for ie6
function stacktrace_old() {
    var s = "";
    for (var a = arguments.caller; a !=null; a = a.caller) {
      s += "->"+funcname(a.callee) + "\n";
      if (a.caller == a) {s+="*"; break;}
    }
    return s;
}

// IE7 version 
function stacktrace() {
   var s = "";
   var func = arguments.callee.caller;
   var count = 0;
   while (func && count++<40) {
      s+=" ->"+funcname(func)+"\n";
      func = func.caller;
   }
   if (func) s+=" ->...\n";
   return s;
}

function getScrollPageOffsetLeft(el) {
   var rects = el.getClientRects();
   var left = 100000;
   for (var i=0;i<rects.length;i++) {
      if (left>rects[i].left) left = rects[i].left;
   }
   return left;
}
function getScrollPageOffsetTop(el) {
   var rects = el.getClientRects();
   var top = 100000;
   for (var i=0;i<rects.length;i++) {
      if (top>rects[i].top) top = rects[i].top;
   }
   return top;
}

function arrayContains(array,value) {
   var result =false;
   for (var i=0;result==false && i<array.length;i++) {
      result = (array[i] == value);
   }
   return result;
}


function removeFromArray(array,value) {
   var index = arrayIndexOf(array,value);
   if (index>=0) array.splice(index,1);
}

function arrayIndexOf(array,value,start) {
   if (!start) start=0;
   var result =-1;
   for (var i=start;result==-1 && i<array.length;i++) {
      if (array[i] == value) result = i;
   }
   return result;
}

function arrayInsertAt(array,value,index) {
   array.splice(index,0,value);
}

function arrayInsertBefore(array,value,before) {
   var index = arrayIndexOf(array,before,0);
   if (index<0) array.push(value);
   else {
      arrayInsertAt(array,value,index);
   }
}

function createTable() {
   var table = document.createElement("Table");
   table.border=0;
   table.cellSpacing=0;
   table.cellPadding=0;
   table.id = "createTable";
   return table;
}

function two_diggits(num) {
   if (num<10) return "0"+num;
   else return num;
}

function dateStr(vdate) {
   var str = two_diggits(vdate.getDate())+"-"+two_diggits(vdate.getMonth()+1)+"-"+vdate.getFullYear()+" "+two_diggits(vdate.getHours())+":"+two_diggits(vdate.getMinutes())+":"+two_diggits(vdate.getSeconds());
   return str;
}

function shortDateStr(vdate) {
   var str = two_diggits(vdate.getDate())+"-"+two_diggits(vdate.getMonth()+1)+"-"+vdate.getFullYear();
   return str;
}

function getInputChecks(div) {
   var result = new Array();
   var types = new Array();
   var inputs = div.getElementsByTagName("INPUT");
   for (var i=0;i<inputs.length;i++) {
      var input = inputs[i];
      if (input.type=='checkbox' || input.type=='radio') {
         result.push(input.checked);
         types.push(input.type);
      }
   }
   return result;
}

function setInputChecks(div,array) {
   var result = new Array();
   var types = new Array();
   var inputs = div.getElementsByTagName("INPUT");
   var count = 0;
   for (var i=0;i<inputs.length;i++) {
      var input = inputs[i];
      if (input.type=='checkbox' || input.type=='radio') {
         input.checked = array[count++];
      }
   }
   return result;
}

function getEmbed(name) {
   var result = null;
   for (var i=0;i<document.embeds.length;i++) {
      var embed = document.embeds[i];
      if (embed.id==name) result = embed;
   }
   return result;
}
function getOffsetLeft (el) {
  var ol = el.offsetLeft;
  while (((el = el.offsetParent) != null))
    ol  += el.offsetLeft - el.scrollLeft;
  return ol;
}

function getOffsetTop (el) {
  var ot = el.offsetTop;
  while (((el = el.offsetParent) != null))
    ot += el.offsetTop - el.scrollTop;
  return ot;
}


function nothing() {
}
function returnFalse() {
   return false;
}

function returnTrue() {
   return true;
}

var cachedInsertBlocks = new Object();
function hideInsertBlock(blockName) {
   var block = cachedInsertBlocks[blockName];
   if (!block) {
      block = cachedInsertBlocks[blockName] = document.getElementById("DIVBlock_"+blockName);
   }
   if (block) {
      if (block.length) {
         for (var i=0;i<block.length;i++) block[i].style.display='none';
      } else block.style.display='none';
   }
}

function showInsertBlock(blockName) {
   var block = cachedInsertBlocks[blockName];
   if (!block) {
      block = cachedInsertBlocks[blockName] = document.getElementById("DIVBlock_"+blockName);
   }
   if (block) {
      if (block.length) {
         for (var i=0;i<block.length;i++) block[i].style.display='block';
      } else block.style.display='block';
   }
}

var ODPropClasses = new Object();
function ODAddPropClass(propClass,vec) {
   ODPropClasses[propClass] = vec;
}

function ODGetPropClass(propClass) {
   return ODPropClasses[propClass];
}








function ODGetPropClassProperty(propClass,property,defaultValue) {
   var result =null;
   var vec = ODGetPropClass(propClass);
   if (vec) {
      for (var i=0;i<vec.length && result==null;i++) if (vec[i]==property) result = vec[i+1];
   }
   if (result==null || result=="") result = defaultValue;
   return result;
}


function insertIntoSpan(span,html) {
   span.innerHTML = html;
}
function createElementFromHTML(html) {
   return document.createElement(html);
}
function checkNull(val,def) {
   if (val==null || val=="") return def;
   else return val;
}
function removeNode(node) {
   discardElement(node);
}
function isParentOf(parent,child) {
   if (parent==child) return true;
   else {
      if (child && child.parentNode) return isParentOf(parent,child.parentNode);
      else return false;
   }
}

function isChildOf(child,parent) {
   if (child==parent) return true;
   if (child && child.parentNode) return isChildOf(child.parentNode,parent);
   else return false;
}

function findPopupDocumentBody(el) {
   if (!el) return document.body;
   else if (el.popupId) return el;
   else return findPopupDocumentBody(el.parentNode);
}

function getPopupPosition(x,y,width,height) {
   var result=new Object();
   var bodyW = document.body.clientWidth;
   var bodyH = document.body.clientHeight;
   if (x+width>bodyW) {
      if(x-width>0) x=x-width;
      else x=0;
   }
   if (y+height>bodyH) {
      if(y-height>0) y=y-height;
      else y=0;
   }
   result.x=x;
   result.y=y;
   return result;
}

function evalFunctions(str) {
   var f = start = 0;
   while (start>=0) {
      var start = str.indexOf("function ",start);
      if (start>=0) {
         
         eval(str.substring(f,start));
         var open = str.indexOf("(",start);
         var funcname = str.substring(start+9,open);
         var close = str.indexOf(")",open);
         var contStart = str.indexOf("{",close)+1;

         var count=1;
         start = contStart;
         while (count>0 && start>=0) {
            var accOpen = str.indexOf("{",start);
            var accClose = str.indexOf("}",start);
            if (accOpen>=0 || accClose>=0) {
               if (accOpen<0) accOpen=str.length+1;
               if (accClose<0) accOpen=str.length+1;
               if (accOpen<accClose) {
                  count++;
                  start=accOpen+1;
               } else {
                  count--;
                  start=accClose+1;
               }
            } else start=-1;
         }
         if (start>=0) {
            var cont= str.substring(contStart,start-1);
            var  params = new Array();
            open++;
            while (open>=0) {
               var comma = str.indexOf(",",open);
               if (comma>=0 && comma<close) {
                  var param = str.substring(open,comma);
                  if (param) params.push(param);
                  open=comma+1;
               } else {
                  var param = str.substring(open,close);
                  if (param) params.push(param);
                  open =-1;
               }
            }
            if (params.length==2) {
               try {
                  window[funcname] = new Function(params[0],params[1],cont);
               } catch(ex) {
                  //ODAlert(params[0]+","+params[1]+","+params[2]+","+params[3]+","+params[4]+","+params[5]+","+params[6]+","+params[7]+","+params[8]+","+params[9]+","+params[10]+","+params[11]+","+cont);
                  ODAlert("error at "+start +" funcname:"+funcname+" params[0]:"+params[0]+" cont:"+cont+" \nin:"+str);
               }
            } else {
               for(var i=params.length;i<12;i++) params.push("paramNo_"+i);
               try {
                  window[funcname] = new Function(params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],cont);
               } catch(ex) {
                  //ODAlert(params[0]+","+params[1]+","+params[2]+","+params[3]+","+params[4]+","+params[5]+","+params[6]+","+params[7]+","+params[8]+","+params[9]+","+params[10]+","+params[11]+","+cont);
                  ODAlert("error at "+start +" funcname:"+funcname+" params[0]:"+params[0]+" cont:"+cont+" \nin:"+str);
               }
            }
            
            
            f = start;
         }
         
      } else eval(str.substring(f));
   }
}

function testUrl(str) {
   return (""+document.location).indexOf(str)>=0;
}

function discardElement(element) {
   if (element) {
       var garbageBin = document.getElementById('IELeakGarbageBin');
       if (!garbageBin) {
           garbageBin = document.createElement('DIV');
           garbageBin.id = 'IELeakGarbageBin';
           garbageBin.style.display = 'none';
           document.body.appendChild(garbageBin);
       }

       // move the element to the garbage bin
       garbageBin.appendChild(element);
       garbageBin.innerHTML = '';
   }
}
function discardElements(elements) {
   if (elements) {
       var garbageBin = document.getElementById('IELeakGarbageBin');
       if (!garbageBin) {
           garbageBin = document.createElement('DIV');
           garbageBin.id = 'IELeakGarbageBin';
           garbageBin.style.display = 'none';
           document.body.appendChild(garbageBin);
       }

       // move the element to the garbage bin
       for (var i=0;i<elements.length;i++) garbageBin.appendChild(elements[i]);
       garbageBin.innerHTML = '';
   }
}

var stackleftRecursieCount=0;
function stackleftRecursie() {
   stackleftRecursieCount++;
   stackleftRecursie();
}
function stackleft(str) {
   stackleftRecursieCount=0;
   try {
      stackleftRecursie()
   } catch(ex) {
   }
   ODAlert(str+" stackleft:"+stackleftRecursieCount);
}
var alertString = "";
var alertTimeout = null;
function alertLast(str) {
   if (alertString==null) alertString = str;
   else alertString = str+"\n"+alertString;
   if (alertTimeout) clearTimeout(alertTimeout);
   alertTimeout = setTimeout("ODAlert(alertString);alertString=null;",2000);
}

function clearAlertLast() {
   alertString==null;
   if (alertTimeout) clearTimeout(alertTimeout);
}

var alertsOn=false;
var signalODAlert=new Array();
var lastODAlert=null;
function setODAlertsOn(on) {
   alertsOn = on;
}
function ODAlert(str) {
   if (alertsOn) alert(str);
   for (var i=0;i<signalODAlert.length;i++) {
      signalODAlert[i](str);  
   }
   lastODAlert =str;
}

function alertLastODAlert() {
   if (lastODAlert) alert(lastODAlert);
}

// Checks to see if the given object is an Array or a String
function isArray(obj) {
   var result = true;
   try {
      if (obj.substring(0)==obj.substring(0)) result=false; 
   } catch (ex) {
      //showInfoException(ex);
   }
   return result;
}

function ignoreBackspace() {
   document.attachEvent("onkeydown",ignoreBackspaceEvent);
}

function ignoreBackspaceEvent(evt) {
   if (typeof evt == 'undefined') evt = window.event;
   if (evt) {
      var keyCode = evt.keyCode ? evt.keyCode : evt.charCode;
      if (keyCode == 8) {
         var el = event.srcElement;
         if (el.tagName.toUpperCase()=='INPUT' && (el.type=='text' || el.type=='file' || el.type=='password')) return true;
         else if (el.tagName.toUpperCase()=='TEXTAREA') return true;
         else if (el.contentEditable) return true;
         else return false;
      }
   }
   return true;
}

function clearSelection() {
   var range = document.body.createTextRange();
   range.moveToElementText(document.body.firstChild); 
   range.collapse();
   range.select();
   document.selection.empty();
}

function OD_getLocationServerString() {
	var locStr = ""+document.location;
	var index = locStr.indexOf("/",10);
	if (index>=0) locStr = locStr.substring(0,index);
	return locStr;
}

function OD_makeFullURL(url) {
	if (url.indexOf("/")==0) url = OD_getLocationServerString()+url;
	return url;
}
