var BoxWidth=140, BoxHeight=100, LeftOffset=10,SpouseRow=130, TopOffset, BoxSpace=30,mBoxHeight=40;
var VertCLHt=50,HorizLineTop,Row1Top,Row2Top,sBoxWidth=170,mBoxWidth=300,LineColour="Black",divClass="";
var LineThickness=2, pwidth=0, test=false, divID=1;
var Row1=new Array(0,1,2,3,4,5,6,4,5,5,6,6,7,7,8,8);
var spouses=2,marriage="";
var BoxNames = new Array(), capts=new Array(), texts=new Array();
var paramType = new Array("href","title","class","onclick")
function DrawBoxes(n,toff,lc){
    if (!n || n>15 || n<1 ){alert("The number of boxes must be between 1 and 15");return false};
    if(lc){LineColour=lc};
    var box=0, row=0, col=0, row0width=(spouses*sBoxWidth)+((spouses-1)*mBoxWidth);
    var row1width=(Row1[n]*BoxWidth)+((Row1[n]-1)*BoxSpace), centreLine=Math.max(row0width,row1width)/2;
    var origleft=LeftOffset;
    if (!toff || toff<30){toff=30};
    TopOffset=toff;HorizLineTop=SpouseRow+TopOffset+VertCLHt,Row1Top=HorizLineTop+50,Row2Top=Row1Top+160;
    LeftOffset+=Math.ceil(centreLine-(row0width/2));
    for (var i=0; i<spouses; i++) {PlaceBox(box,row,i,"spouse");box++;}
    PlaceBox(0,row,i,"marriage");
    LeftOffset=origleft+Math.ceil(centreLine-(row1width/2));
    //draw horizontal line
    var l=LeftOffset+3+Math.ceil(BoxWidth/2);
    pwidth=(Row1[n]-1)*(BoxWidth+BoxSpace);addHline(l,HorizLineTop,pwidth);
    //draw centre vertical line
    l+=Math.ceil(pwidth/2);addVline(l,TopOffset+82,VertCLHt+48);
    row=1;col=0;
    for (var i=0; i<n; i++){PlaceBox(box,row,col,"child"); box+=1; col+=1; if (col>Row1[n]-1) {col=0;row=2;}}
}

function PlaceBox(box,row,col,type){
    var lPos,tPos;
    switch(row){
      case 0:
        if(type=="spouse"){lPos=LeftOffset+box*(sBoxWidth+mBoxWidth);tPos=TopOffset;}
        else {lPos=LeftOffset+sBoxWidth+11;tPos=TopOffset+30;}
        break;
      case 1:
        lPos=(col*BoxWidth)+(col*BoxSpace)+LeftOffset;tPos=Row1Top;
        addVline(lPos+3+Math.ceil(BoxWidth/2),HorizLineTop,tPos - HorizLineTop);
        break;
      case 2:
        lPos =((col*BoxWidth)+(col*BoxSpace)+LeftOffset)+(Math.ceil(BoxWidth/2)+ Math.ceil(BoxSpace/2));
        tPos=Row2Top;addVline(lPos+3+Math.ceil(BoxWidth/2),HorizLineTop,tPos - HorizLineTop);
        break;
    }
    buildDiv(box,type,lPos,tPos);
}

function buildDiv(n,type,left,top){
  var height,width,sc=getContents(BoxNames[n]);
  switch(type.toLowerCase()){
      case "spouse":
          height=BoxHeight; width=sBoxWidth; if (!sc[3]){sc[3]="YSpouseBox"};
      break;
      case "marriage":
          height=mBoxHeight;width=mBoxWidth-22; sc[0]=fix(marriage);if (!sc[3]){sc[3]="YMarryBox"};
      break;
      case "child":
          height=BoxHeight; width=BoxWidth;if (!sc[3]){sc[3]="branch"};
      break;
      case "custom":
          height=0;width=0;if (!sc[3]){sc[3]=divClass};
      break;
  }

  var BoxDiv=drawDiv(left,top,height,width,sc[3]);BoxDiv.innerHTML=fix(sc[0]);
  var o=BoxDiv.style;

  if (test){idDiv(BoxDiv)}else{
    if (type!="marriage"&&(capts[n]||texts[n])){
    BoxDiv.onmouseover= function(){showPopup(n)};BoxDiv.onmouseout=function(){nd()}};
  };
  if (sc[1]){o.background=sc[1]};if (sc[2]){o.color=sc[2];}
}

function getParams(boxContents,pType){
var loc=-1,s="";
for (var i=0; i<boxContents.length; i++) {loc=boxContents[i].indexOf("=")
    s=boxContents[i].substr(0,loc).replace(/ /g,"").toLowerCase()
    if (s==paramType[pType]||s==paramType[pType].charAt(0)){return boxContents[i].substr(loc+1)}
    }
return ""
}

function getContents(contents){
 var aContents=contents.split("|"),boxBgColour,boxTxtColour,result=new Array("","","","");
  if(aContents.length>1){result[1]=aContents[0];if(aContents.length>2){result[2]=aContents[1]};
  result[0]=aContents[aContents.length-1];return result}
  else{aContents=contents.split("//");
      if (aContents.length>1){result[0]=aContents[0];
      var h=getParams(aContents,0),t=getParams(aContents,1).replace(/\x27/g,"&#39;"),c=getParams(aContents,2),oc=getParams(aContents,3);
      if (c){result[3]=c};if (oc){h="#"};
        if (h){
        var a="<a href='"+h+"'";if (t){a+=" title='"+t+"'"}; if(oc){a+=' onclick="'+oc+'; return false;"'};a+=">";
        if (result[0].indexOf("[")>=0) {result[0]=result[0].replace("[",a)} else {result[0]=a+result[0]}
        if (result[0].indexOf("]")>=0) {result[0]=result[0].replace("]","</a>")} else {result[0]+="</a>"}
        return result;
      }
      return result;
    }
  else {result[0]=aContents[0];return result}
  }
}

function addNote(s,l,t,w){
  var BoxDiv=drawDiv(l,t,0,w),o=BoxDiv.style,sc=getContents(s);
  if (sc[1]){o.background=sc[1]};if(sc[2]){o.color=sc[2]};if (sc[3]){BoxDiv.className=sc[3]};
  BoxDiv.innerHTML=fix(sc[0]);}

function addBox(s,n,l,t){buildDiv(n,s,l,t)}
function addCustom(s,n,l,t){divClass=s;buildDiv(n,"custom",l,t);}
function addChild(n,l,t){addBox("child",n,l,t)};
function addSpouse(n,l,t){addBox("spouse",n,l,t)};
function addMarriage(n,l,t){addBox("marriage",n,l+sBoxWidth+11,t+30)};
function addHline(l,t,w){drawLine(l,t,LineThickness,w)};
function addVline(l,t,h){drawLine(l,t,h,LineThickness)};
function colorHline(l,t,w,c,h){if (!h){h=LineThickness};drawLine(l,t,h,w,c)}
function colorVline(l,t,h,c,w){if (!w){w=LineThickness};drawLine(l,t,h,w,c)}

function drawLine(l,t,h,w,colour){
  var LineDiv = window.document.createElement("div"); document.body.appendChild(LineDiv);
  var o=LineDiv.style;setDiv(l,t,h,w,o);
  if (colour){o.background=colour} else {o.background=LineColour};o.fontSize="1px";
  if(test){idDiv(LineDiv)};
}
function drawDiv(l,t,h,w,ClassName){
  var BoxDiv = window.document.createElement("div"); document.body.appendChild(BoxDiv);
  if (ClassName){BoxDiv.className=ClassName};var o=BoxDiv.style;setDiv(l,t,h,w,o);
  return BoxDiv;
}

function setDiv(l,t,h,w,o){o.position="absolute"; o.visibility="visible";
    o.top=t+"px"; o.left=l+"px";if(h>0){o.height=h+"px"};if(w>0){o.width=w+"px"}}

function idDiv(div){
  if (!test){return};
  var id=divID;divID++; div.id="d"+id;
  div.onmouseover= function(){showPopup(id)};div.onmouseout=function(){nd()};
}

function fix(s){var fixed=s.replace(/_/g,"&nbsp;&nbsp;&nbsp;&nbsp;");fixed=fixed.replace(/~/g,"<br />");return fixed;}

function showPopup(n){
    if(!test){overlib(fix(texts[n]),fix(capts[n]))}else{
    var d=document.getElementById("d"+n),o=d.style, caption=d.id;
    var bodytext="top: "+o.top+"</br>left: "+o.left+"</br>width: "+o.width+"</br>height: "+o.height;
    bodytext+="</br>top indent: "+TopOffset+"px</br>left indent: "+LeftOffset+"px";
    overlib(bodytext,caption);};
};

function OpenNotes(f){window.open(f,"","height=500, width=800,top=150,left=50, scrollbars=yes, resizable=yes")}
function CloseNote(){if (history.length > 1){window.history.back();}else{window.close();}}
function ef_CloseNote(){if (history.length > 1){window.history.back();}else{window.close();}}
function ef_undiscovered(page){var href="http://www.undiscoveredscotland.co.uk/"+page+"/index.html";window.open(href,"_Blank")}
function ef_mailme(){window.open("mailto: origins@mcskimming.org.uk")}

