/* Wordpress CMS rules:
 * PORTFOLIO POSTS
 * -a single post will be published as a portfolio group
 * -must have category 'portfolio'
 * -Title will be heading
 * -Images must be grouped into single 'gallery' format
 * -Images must be in the correct order as per:
 *    'image1_thumb', 'image1', 'image2_thumb', 'image2', ...
 * -First image will be shown as portfolio menu image
 * -Images (including thumbs) can have ANY filename
 * -Portfolio groups are prioritized by date (newest 1st)
 * -thumbs should be 100px width
 *
 *
 */

var buttonhighlight;
var button_background_grey = new Image();
button_background_grey.src = 'pics/button_background_grey.jpg';
var button_background = new Image();
button_background.src = 'pics/button_background.jpg';
var loadinganimcylontimer;
var loadinganimcylonx;
var loadinganimcylonincr = 5;
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
//  if (/MSIE/.test(navigator.userAgent)) {
    var yoffset=0;
  }
else {   var yoffset = -1; }
var leftgap;
var pfgalleryopen;
var pagetoload = "";
var newsitem;
var newsitemslisted = 0;
var maxnewsitems = 2;
var loginbuttononreload = false;

function loaded() {
  if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
    var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
    if (ieversion<=6) {
      document.write("Please upgrade your browser to view this site");
      return;
    }
  }
  loadmain('home.html');
  buttonhighlight=2;
  buttonover(1);
  buttonclicked(1);
  leftgap = document.getElementById('maintable').offsetLeft;
  //newssize();
  loadnews();
}

function buttonover(id) {
	if (id != buttonhighlight) {
		var a= document.getElementById(id);
		a.style.backgroundColor = "#dddddd";
		a.style.color = "#ffffff";
		//a.style.fontWeight='bold';
    a.style.backgroundImage = "url(pics/button_background_grey.jpg)";
	}
}

function buttonout(id) {
	if (id != buttonhighlight) {
		var a;
    if (a= document.getElementById(id)) {
      a.style.backgroundColor = "#000000";
      a.style.color = "#ffffff";
      a.style.fontWeight='normal';
      a.style.backgroundImage = "none";
    }
	}
}

function buttonclicked(id) {
	var n = buttonhighlight;
	buttonhighlight = id;
	buttonout(n);
	var b = document.getElementById(buttonhighlight);
	var a = document.getElementById(id);
	a.style.backgroundColor = '#ffffff';
	a.style.color = '#000000';
  a.style.fontWeight='bold';
  a.style.backgroundImage = "url(pics/button_background.jpg)";
}

function openxmlhttp(theurl, functionname) {
  xmlhttp=null;
  if (window.XMLHttpRequest) {// code for all new browsers
    xmlhttp=new XMLHttpRequest(); }
  else if (window.ActiveXObject) {// code for IE5 and IE6
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    theurl += "?" + new Date().getTime();
  }
  if (xmlhttp!=null) {
    xmlhttp.onreadystatechange=functionname; //event handler function call;
    xmlhttp.open("GET",theurl,true);
    xmlhttp.send(null);
  }
}

function examplefunctionname() { //xmlhttp event handler
  if (xmlhttp.readyState==4) {// 4 = "loaded"
    if (xmlhttp.status==200) {// 200 = OK
      //code
    }
  }
}

function loadmain(url) {
  var a = document.getElementById('contentpane');
  openxmlhttp(url,mainloaded);
  var xy = findpos(a);
  var x = xy[0] + 20;
  var y = xy[1] + 10;
  loadinganim(x,y);
  a.innerHTML = "";
  scrollbaroffset(); 
}

function mainloaded() { //xmlhttp event handler
  if (xmlhttp.readyState==4) {// 4 = "loaded"
    if (xmlhttp.status==200) {// 200 = OK
      setTimeout('delayedmainloaded();', 0);
    }
  }
}

function delayedmainloaded() {
  var a = document.getElementById('contentpane');
  a.innerHTML = xmlhttp.responseText; 
  var b = document.getElementById('mainscript');
  eval(b.innerHTML);
  scrollbaroffset();
}

function loadinganim(x,y) {
  if (!x || !y) {
    return;
  }
  var a=document.getElementById('loadinganim');
  a.style.left = x;
  a.style.top = y;
  var str = "<div id='loadinganimcylon' class='loadinganimcylon'> </div>";
  str += "<div class='loadinganimtxt'><i>Loading...</i></div>";
  a.innerHTML = str;
  a.style.display = "";
  loadinganimcylonx = 0;
  document.getElementById('loadinganimcylon').style.display='none';
  clearTimeout(loadinganimcylontimer);
  loadinganimcylontimer = setTimeout("loadinganimcylon(); document.getElementById('loadinganimcylon').style.display=''", 200);
}

function loadinganimcylon() {
  clearTimeout(loadinganimcylontimer);
  var a=document.getElementById('loadinganim');
  var b;
  if (b = document.getElementById('loadinganimcylon')) {
    b.style.display = '';
    var maxx = a.offsetWidth - b.offsetWidth;
    if (loadinganimcylonx + loadinganimcylonincr > maxx || loadinganimcylonx + loadinganimcylonincr < 0) {
      loadinganimcylonincr = loadinganimcylonincr * -1; }
    loadinganimcylonx += loadinganimcylonincr;
    b.style.left = loadinganimcylonx;
    loadinganimcylontimer = setTimeout('loadinganimcylon()', 50);
  }
}

function loadinganimoff() {
  var a = document.getElementById('loadinganim').style.display = "none";
  a.innerHTML = "";
}

function findpos(obj) { // derived from http://bytes.com/groups/javascript/148568-css-javascript-find-absolute-position-element
  var left = 0;
  var top = 0;
  var ll = 0;
  var tt = 0;
  while(obj) {
    lb = parseInt(obj.style.borderLeftWidth);
    if (lb > 0) { ll += lb }
    tb = parseInt(obj.style.borderTopWidth);
    if (tb > 0) { tt += tb; }
    left += obj.offsetLeft;
    top += obj.offsetTop;
    obj = obj.offsetParent;
  }
  left += ll*-yoffset;
  top += tt*-yoffset;
  return [left,top];
}

function portfolioloaded() {
  openxmlhttp('/wordpress/?feed=rss2', portfolioxmlloaded);
}

function portfolioxmlloaded() {
  if (xmlhttp.readyState==4) {// 4 = "loaded"
    if (xmlhttp.status==200) {// 200 = OK
      displayportfolio(xmlhttp.responseXML);
    }
  }
}

function displayportfolio(xml) {
  var html = "";
  pfgalleryopen = null;
  var items = xml.getElementsByTagName("item");
  for (var n = 0 ; n < items.length ; n++) {
    var category = items[n].getElementsByTagName('category')[0].firstChild.nodeValue;
    if (/portfolio/i.test(category)) {
      var itemelements = items[n].getElementsByTagName("*");
      for(var i = 0; i < itemelements.length ; i++) {
        if (/content/i.test(itemelements[i].tagName)) { //chrome fix, it doesn't like content:encoded
          var contents = itemelements[i].firstChild.nodeValue;
          break;
        }
      }
      var title = items[n].getElementsByTagName('title')[0].firstChild.nodeValue;
      var imgsrc = contents.match(/\ssrc="\S*"/gi);
      var imgcache = new Image();
      imgcache.src = imgsrc[0].replace(/\ssrc=|"/ig,"");
      var imgheight = contents.match(/\sheight="\d+"/gi);
      var imgwidth = contents.match(/\swidth="\d+"/gi);
      var sizestr = "height='"+imgheight[0].replace(/\sheight=|"/ig,"")+"' ";
      sizestr += "width='"+ imgwidth[0].replace(/\swidth=|"/ig,"") +"'";
      //menu
      html += "<div id='pfmenu"+(n+1)+"' style='border-top: 1px solid #999999; cursor: pointer'"
      html += "onmouseover='this.style.backgroundColor=&quot;#dddddd&quot;'"
      html += "onmouseout='this.style.backgroundColor=&quot;#ffffff&quot;'"
      html += "onclick ='portfolioshowgallery("+(n+1)+");'>"
      html += "<table><tr><td style='padding-left: 30px; padding-top: 5px; padding-bottom: 5px'>"
      html += "<img src='"+imgsrc[0].replace(/\ssrc=|"/ig,"")+"'"+sizestr+"/>";
      html += "</td><td style='padding-left: 30px;'>"
      html += "<div><b>"
      html += title ;
      html += "</b></div>"
      var textelements = contents.match(/<p.*>.+<\/p>/gi);
      html += textelements[0].replace(/<\/p>/,"").replace(/<p.*>/,"");
      html += "</td></tr></table></div>"
      //gallery
      html += "<div id='pfgallery"+(n+1)+"' style='border-top: 1px solid #999999; display: none'>"
      html += "<table width='100%'><tr>"
      html += "<td width='500px' style='padding-left: 20px; padding-top: 5px;'>"
      html += "<b>" + title + "</b></td>"
      html += "<td style='padding-top: 5px'>";
      html += "<a class='btn' href='javascript: portfolioclosegallery("+(n+1)+")'>&nbsp;<i>Close</i>&nbsp;</a></td></tr></table>"
      html += "<div style='padding-left: 30px; padding-top: 10px; padding-right: 20px; padding-bottom: 10px'>"
      for (var i = 0 ; i < textelements.length ; i++) {
        var str = textelements[i].replace(/<\/p>/,"").replace(/<p.*>/,"");
        if (/\S/.test(str)) {
          if (i>0) { html += "<table><tr><td style='height: 6px;'></td></tr></table>" }
          html += str;
        }
      }
      html += "</div>"
      var tdnum = 0;
      html += "<div style='padding-left: 20px;'><table><tr valign='top'>"
      for (var i = 1 ; i < imgsrc.length ; i=i+2) {
        sizestr = "height='"+imgheight[i].replace(/\sheight=|"/ig,"")+"' ";
        sizestr += "width='"+ imgwidth[i].replace(/\swidth=|"/ig,"") +"'";
        html += "<td style='padding-left: 5px; padding-bottom: 5px'>";
        html += "<a href='"+imgsrc[i+1].replace(/\ssrc=|"/ig,"")+"' class='highslide' onclick='return hs.expand(this, config1 )'"
        html += "title='"+title+"'>";
        html += "<img src='"+imgsrc[i].replace(/\ssrc=|"/ig,"")+"'"+sizestr+"'/>";
        html += "</a></td>";
        tdnum ++;
        if (tdnum > 4) {
          html += "</tr><tr valign='top'>"
          tdnum = 0;
        }
      }
      html += "</tr></table></div><table><tr><td style='height: 6px;'></td></tr></table></div>"
    }
  }
  loadinganimoff();
  document.getElementById('result').innerHTML = html;
  document.getElementById('page').style.display = "";
  scrollbaroffset();
}


function portfolioshowgallery(n) {
  if (pfgalleryopen) {
    document.getElementById('pfgallery'+pfgalleryopen).style.display = "none";
    document.getElementById('pfmenu'+pfgalleryopen).style.display = "";
  }
  pfgalleryopen = n;
  document.getElementById('pfmenu'+n).style.display = "none";
  document.getElementById('pfgallery'+n).style.display = "";
  scrollbaroffset();
}

function portfolioclosegallery(n) {
  pfgalleryopen = null;
  document.getElementById('pfmenu'+n).style.display = "";
  document.getElementById('pfgallery'+n).style.display = "none";
  scrollbaroffset();
}

function scrollbaroffset() {
  document.body.style.marginRight = 0; //NEW
  document.body.style.marginLeft = 0; // NEW
  var w = document.getElementById('maintable').offsetLeft;
  if (w > leftgap) { // scrollbar just went away
    document.body.style.marginRight = (w - leftgap)*2;
  }
  if (w < leftgap) { // scrollbar just appeared
    document.body.style.marginLeft = (leftgap -w)*2;
  }
}

function loginbutton() {
  var b;
  if (b = document.getElementById('loginbutton')) {
    var a = document.getElementById('maintable');
    b.style.top = a.offsetHeight - 25;
    b.style.display = '';
    b.style.left = a.offsetLeft + a.offsetWidth - b.offsetWidth - 20;
  }
}

function pagecontent(page) {
  pagetoload = page;
  openxmlhttp('/wordpress/?feed=rss2', pagecontentloaded);
}

function pagecontentloaded() {
  if (xmlhttp.readyState==4) {// 4 = "loaded"
    if (xmlhttp.status==200) {// 200 = OK
      displaypagecontent(xmlhttp.responseXML);
    }
  }
}

function displaypagecontent(xml) {
  var items = xml.getElementsByTagName("item");
  for (var n = 0 ; n < items.length ; n++) {
    var category = items[n].getElementsByTagName('category')[0].firstChild.nodeValue;
    if (/pagecontent/i.test(category)) {
      var itemelements = items[n].getElementsByTagName("*");
      for(var i = 0; i < itemelements.length ; i++) {
        if (/content/i.test(itemelements[i].tagName)) { //chrome fix, it doesn't like content:encoded
          var contents = itemelements[i].firstChild.nodeValue;
          break;
        }
      }
      var title = items[n].getElementsByTagName('title')[0].firstChild.nodeValue;
      if (title.toLowerCase().indexOf(pagetoload) != -1) { break; }
    }
  }
  var a= document.getElementById('hiddendiv');
  a.innerHTML = contents;
  var elements = a.getElementsByTagName('a');
  for (var i = 0 ; i < elements.length ; i++) {
    elements[i].className = 'std';
  }
  html = "";
  var elements = a.getElementsByTagName('p');
  for (var i = 0 ; i < elements.length ; i++) {
    var str = elements[i].innerHTML;
    if (/\S/.test(str)) {
    if (i>0) { html += "<table><tr><td style='height: 8px;'></td></tr></table>" }
    html += str;
    }
  }
  document.getElementById('page_content').innerHTML = html;
  loadinganimoff();
  document.getElementById('page').style.display = "";
  scrollbaroffset();
  if (/home/i.test(pagetoload)) { loginbutton(); }
}

function loadnews() {
  opennewsxmlhttp('/wordpress/?feed=rss2', newsloaded);
}

function opennewsxmlhttp(theurl, functionname) {
  newsxmlhttp=null;
  if (window.XMLHttpRequest) {// code for all new browsers
    newsxmlhttp=new XMLHttpRequest(); }
  else if (window.ActiveXObject) {// code for IE5 and IE6
    newsxmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    theurl += "?" + new Date().getTime();
  }
  if (xmlhttp!=null) {
    newsxmlhttp.onreadystatechange=functionname; //event handler function call;
    newsxmlhttp.open("GET",theurl,true);
    newsxmlhttp.send(null);
  }
}

function newsloaded() {
  if (newsxmlhttp.readyState==4) {// 4 = "loaded"
    if (newsxmlhttp.status==200) {// 200 = OK
      displaynewslist(newsxmlhttp.responseXML);
    }
  }
}

function displaynewslist(xml) {
  //newsitemslisted=0;
  var items = xml.getElementsByTagName("item");
  html = "";
  var totalnewsitems = newsitemslisted;
  var newsitemsshown = 0;
  for (var n = newsitemslisted ; n < items.length ; n++) {
    var category = items[n].getElementsByTagName('category')[0].firstChild.nodeValue;
    if (/news/i.test(category)) {
      totalnewsitems ++;
      if (newsitemsshown < maxnewsitems) {
        newsitemsshown ++;
        var title = items[n].getElementsByTagName('title')[0].firstChild.nodeValue;
        var description = items[n].getElementsByTagName('description')[0].firstChild.nodeValue;
        html += "<table><tr><td style='height: 8px;'></td></tr></table>";
        html += "<a class='news' href='javascript: newsmain(&quot;"+n+"&quot)'><b>"+title+"</b></a>";
        html += "<table><tr><td style='height: 3px;'></td></tr></table>";
        html += "<div>"+description+"</div>";
//        html += "<table><tr><td style='height: 3px;'></td></tr></table>";
//        html += "<a class='news' href='javascript: newsmain(&quot;"+n+"&quot)'>&nbsp;Read More...&nbsp;</a>";
        html += "<table><tr><td style='height: 6px;'></td></tr></table>";
      }
    }
  }
//  html += newsitemslisted+" "+maxnewsitems+" "+totalnewsitems;
  if (newsitemslisted > 0 && (newsitemslisted + maxnewsitems) >= totalnewsitems ) {
    html += "<a class='news' href='javascript: newsprevious()'>&nbsp;&larr;Previous&nbsp;</a>";
    html += "<table><tr><td style='height: 6px;'></td></tr></table>";
  }
  if (newsitemslisted == 0 && (newsitemslisted + maxnewsitems) <= totalnewsitems ) {
    html += "<div style='text-align: right'>";
    html += "<a class='news' href='javascript: newsnext()'>&nbsp;More Reading&rarr;&nbsp;</a>";
    html += "</div>";
    html += "<table><tr><td style='height: 6px;'></td></tr></table>";
  }
  if (newsitemslisted > 0 && totalnewsitems > (newsitemslisted + maxnewsitems)) {
    html += "<div style='text-align: center'>";
    html += "<a class='news' href='javascript: newsprevious()'>&nbsp;&larr;Previous&nbsp;</a>";
    html += "&nbsp; &nbsp; &nbsp; &nbsp;"
    html += "<a class='news' href='javascript: newsnext()'>&nbsp;More Reading&rarr;&nbsp;</a>";
    html += "</div>";
    html += "<table><tr><td style='height: 6px;'></td></tr></table>";
  }
  document.getElementById('newspane').innerHTML = html;
  if (loginbuttononreload) { loginbutton(); }
  else { loginbuttononreload = true; }
  scrollbaroffset();
}

function newsnext() {
  newsitemslisted += maxnewsitems;
  loadnews();
}

function newsprevious() {
  newsitemslisted = newsitemslisted - maxnewsitems;
  loadnews();
}

function newssize() {
  var a= document.getElementById('newspane');
  var xy = findpos(a);
  a.style.height = document.body.offsetHeight - xy[1];
}

function resize() {
  leftgap = document.getElementById('maintable').offsetLeft;
  loginbutton();
  //newssize();
}

function newsmain(n) {
  opennewsxmlhttp('/wordpress/?feed=rss2', newsmainloaded);
  newsitem = n;
  var a = document.getElementById('contentpane');
  var xy = findpos(a);
  var x = xy[0] + 20;
  var y = xy[1] + 10;
  loadinganim(x,y);
  a.innerHTML = "";
  var x = buttonhighlight;
  buttonhighlight = null;
  buttonout(x);
  scrollbaroffset();
}

function newsmainloaded() {
  if (newsxmlhttp.readyState==4) {// 4 = "loaded"
    if (newsxmlhttp.status==200) {// 200 = OK
      newsmaindisplay(newsxmlhttp.responseXML);
    }
  }
}

function newsmaindisplay(xml) {
  var items = xml.getElementsByTagName("item");
  var title = items[newsitem].getElementsByTagName('title')[0].firstChild.nodeValue;
  var itemelements = items[newsitem].getElementsByTagName("*");
  for(var i = 0; i < itemelements.length ; i++) {
    if (/content/i.test(itemelements[i].tagName)) { //chrome fix, it doesn't like content:encoded
      var contents = itemelements[i].firstChild.nodeValue;
      break;
    }
  }
  var a= document.getElementById('hiddendiv');
  a.innerHTML = contents;
  var elements = a.getElementsByTagName('a');
  for (var i = 0 ; i < elements.length ; i++) {
    elements[i].className = 'std';
  }
  if (pagetoload == "") { pagetoload = 'portfolio'; }
  html = "";
  html += "<div style='padding: 20px; padding-top: 0px'>";
  //html += "<a class='std' href='javascript:loadmain(&quot;"+pagetoload+".html&quot;)'><i>Close</i></a>";
  html += "<table><tr><td style='height: 16px;'></td></tr></table>";
  html += "<b>"+title+"</b>";
  html += "<table><tr><td style='height: 12px;'></td></tr></table>";
  html += a.innerHTML;
  html += "</div>";
  loadinganimoff();
  document.getElementById('contentpane').innerHTML = html;
  scrollbaroffset();
}

function slideshow() {
/***********************************************
* Ultimate Fade In Slideshow v2.0- (c) Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for this script and 100s more
***********************************************/
var mygallery=new fadeSlideShow({
	wrapperid: "fadeshow1", //ID of blank DIV on page to house Slideshow
	dimensions: [300, 220], //width/height of gallery in pixels. Should reflect dimensions of largest image
	imagearray: [
		["pics/rotating/upper_lonsdale5-300.jpg"],
		["pics/rotating/upper_lonsdale10-300.jpg"],
		["pics/rotating/Glenview-exterior2_300.jpg"],
		["pics/rotating/w22-1-300.jpg"],
		["pics/rotating/w22-2-300.jpg"],
		["pics/rotating/w22-9-300.jpg"],
		["pics/rotating/upper_lonsdale9-300.jpg"] //<--no trailing comma after very last image element!
	],
	displaymode: {type:'auto', pause:2500, cycles:0, wraparound:false},
	persist: false, //remember last viewed slide and recall within same session?
	fadeduration: 750, //transition duration (milliseconds)
	descreveal: "ondemand",
	togglerid: ""
})
}
