/* ------------------------------------------
   Tutorial Mouse Scripts v 1.0
   Hacked from SociaLink Library v 1.3
   Coded by Ronald Northrip
   June 2009
   
   All code here is Copyright Protected.
   Use or distribution without permission is
   strictly prohibited.
   Copyright 2009. All Rights Reserved.
   Ronald Northrip Software Incorporated
   http://www.rnsoft.com/
   ------------------------------------------ */
   

// Global Settings & Variables -----------------
tutDisplayBlockID="tutImageBlock"
tutBlockOutlineColor="#3366CC"
tutZoomState=0
tutMouseCurrentOrigObj=null

// Functions  ----------------------------------

function tutGetBaseURL(curURL) {
   if (curURL.substring(0,5).toLowerCase()=="file:") { return "" }
   var lookAfter=curURL.indexOf("://")
   if (lookAfter==-1) { return curURL } else { lookAfter+=3 }
   var firstSlash=curURL.indexOf("/",lookAfter)
   if (firstSlash==-1) { firstSlash=curURL.length }
   return curURL.substring(0,firstSlash)
}

function tutGetWindowWidthOrHeight(sizeStr,wOrH) {
   if (sizeStr) {
      var xpos=sizeStr.indexOf("x")
      if (xpos>-1) {
         if (wOrH=="w") {
            return parseInt(sizeStr.substring(0,xpos))
         } else {
            return parseInt(sizeStr.substring(xpos+1,sizeStr.length))
         }
      }
   }
   return 0
}

function tutURLEncode(plaintext,useperc20)
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	// rn added unicode support for %uXXXX
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
	        if (useperc20) { 
	           encoded += "%20";
	        } else {
		       encoded += "+";				// x-www-urlencoded, rather than %20
		    }
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
				encoded += ch
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
}

function tutActiveClick(cid,lid,obj) {
}

function tutViewAreaClientWidth() {
   return tutViewAreaFilterResults (
      window.innerWidth ? window.innerWidth : 0,
      document.documentElement ? document.documentElement.clientWidth : 0,
      document.body ? document.body.clientWidth : 0
   );
}
function tutViewAreaClientHeight() {
   return tutViewAreaFilterResults (
      window.innerHeight ? window.innerHeight : 0,
      document.documentElement ? document.documentElement.clientHeight : 0,
      document.body ? document.body.clientHeight : 0
   );
}
function tutViewAreaScrollLeft() {
   return tutViewAreaFilterResults (
      window.pageXOffset ? window.pageXOffset : 0,
      document.documentElement ? document.documentElement.scrollLeft : 0,
      document.body ? document.body.scrollLeft : 0
   );
}
function tutViewAreaScrollTop() {
   return tutViewAreaFilterResults (
      window.pageYOffset ? window.pageYOffset : 0,
      document.documentElement ? document.documentElement.scrollTop : 0,
      document.body ? document.body.scrollTop : 0
   );
}
function tutViewAreaFilterResults(n_win, n_docel, n_body) {
   var n_result = n_win ? n_win : 0;
   if (n_docel && (!n_result || (n_result > n_docel)))
      n_result = n_docel;
   return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

function tutBlockHideFromLink() {
   //hide the block
   var block = document.getElementById(tutDisplayBlockID)
   //block.style.display = 'none'
   block.style.visibility = 'hidden'
}

function tutBlockDoNothing() {
   //do nothing to the block
}

function tutBlockHideFromDiv(event) {
   //hide the block -- tricky as it may be triggered by many elements within the div
   var current, related;

   if (window.event) {
	 current = this;
	 related = window.event.toElement;
   }
   else {
	 current = event.currentTarget;
	 related = event.relatedTarget;
   }
 
   if (current != related && !tutNodeContains(current, related)) {
	  var block = document.getElementById(tutDisplayBlockID)
	  //block.style.display = 'none'
      block.style.visibility = 'hidden'
   }
}

function tutNodeContains(a, b) {
  while (b.parentNode)
    if ((b = b.parentNode) == a)
      return true;
  return false;
}

function tutRemoveChildrenFromNode(node) {
   if (node==null) return
   while (node.hasChildNodes()) {
      node.removeChild(node.firstChild);
   }
}

function tutCalculatePosition(obj){
   var curobj=obj
   var left=0
   var top=0
   do {
      if (curobj.offsetLeft) {
         left+=curobj.offsetLeft
      }
      if (curobj.offsetTop) {
         top+=curobj.offsetTop
      }
      curobj=curobj.offsetParent
   } while (curobj!=null)
   if (left<0) {left=0}
   if (top<0) {top=0}
   return Array(left,top)
}

function tutBlockGenerate() {
   var out='<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td align="right">'
   out+='<table border="0" cellpadding="5" cellspacing="0"><tr><td bgcolor="'+tutBlockOutlineColor+'">'
   out+='<span class="tutsmtext" style="color: #ffffff;">Click to Zoom</span>'
   out+='</td></tr></table>'
   out+='</td></tr></table>'
   return out
}

function tutBlockDisplay(obj) {
   var setlen=0
   var pos=tutCalculatePosition(obj)
   // var w=obj.getAttribute("width")
   // var h=obj.getAttribute("height")
   var w=obj.offsetWidth
   var h=obj.offsetHeight
   var bw=2
   var block = document.getElementById(tutDisplayBlockID)
   var blockIsNew=false
   if (block==null) {
      blockIsNew=true
	  block = document.createElement('div')
      block.id=tutDisplayBlockID
   }
   tutRemoveChildrenFromNode(block) //empty the block before filling it
   block.innerHTML=tutBlockGenerate()
   //recalculate and rebuild position every time
   block.style.width=w-bw-bw
   block.style.height=h-bw-bw
   block.style.position="absolute"
   block.style.left = pos[0]+'px'
   //block.style.left = '0px'
   block.style.top = pos[1]+'px'
   block.style.zIndex = "99999"
   block.style.border=bw+"px"
   block.style.borderStyle="solid"
   block.style.borderColor=tutBlockOutlineColor
   //block.style.display = 'block'
   block.style.visibility = 'visible'
   block.onmouseout=tutBlockHideFromDiv
   block.onmousedown=tutZoomDiv

   if (blockIsNew) { 
      if (document.body) { document.body.appendChild(block) }
      else { document.documentElement.appendChild(block) }
      pos=tutCalculatePosition(obj)
      block.style.left = pos[0]+'px'
      //block.style.left = '0px'
      block.style.top = pos[1]+'px'
   }
}

function tutZoomGenerate(obj) {
   //var w=obj.getAttribute("width")
   //var h=obj.getAttribute("height")
   var w=obj.offsetWidth
   var h=obj.offsetHeight
   var src=obj.getAttribute("src")
   var smt=src.substring(src.length-7,src.length-4)
   var ext=src.substring(src.length-4,src.length)
   if (smt=="_sm") { src=src.substring(0,src.length-7)+"_lg"+ext }
   var bw=2
   var bg=tutBlockOutlineColor
   var cb="images/corner"
   var out='<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td align="center">'
   out+='<table border="0" cellpadding="0" cellspacing="0">'
   out+='<tr height="'+bw+'"><td width="'+bw+'" bgcolor="'+bg+'"><img src="'+cb+'/tl.gif"></td>'
   out+='<td bgcolor="'+bg+'"></td><td width="'+bw+'" bgcolor="'+bg+'"><img src="'+cb+'/tr.gif"></td></tr>'
      
   out+='<tr><td bgcolor="'+bg+'"></td><td align="center" bgcolor="'+bg+'">'
   out+='<img src="'+src+'">'
   out+='<td bgcolor="'+bg+'"></td></tr>'
   
   
   out+='<tr height="'+bw+'"><td width="'+bw+'" bgcolor="'+bg+'"><img src="'+cb+'/bl.gif"></td>'
   out+='<td bgcolor="'+bg+'"></td><td width="'+bw+'" bgcolor="'+bg+'"><img src="'+cb+'/br.gif"></td></tr>'
   out+='</table>'
   
   out+='</td></tr></table>'
   return out
}

function tutZoomDisplay(obj) {
   var setlen=0
   var pos=tutCalculatePosition(obj)
   var block = document.getElementById(tutDisplayBlockID)
   var blockIsNew=false
   if (block==null) {
      blockIsNew=true
	  block = document.createElement('div')
      block.id=tutDisplayBlockID
   }
   tutRemoveChildrenFromNode(block) //empty the block before filling it
   block.innerHTML=tutZoomGenerate(obj)
   //recalculate and rebuild position every time
   block.style.width="100%"
   block.style.height=""
   block.style.position="absolute"
   //block.style.left = pos[0]+'px'
   block.style.left = '0px'
   block.style.top = pos[1]+'px'
   block.style.zIndex = "99999"
   block.style.border="0px"
   block.style.borderStyle="solid"
   block.style.borderColor=tutBlockOutlineColor
   //block.style.display = 'block'
   block.style.visibility = 'visible'
   block.onmouseout=tutBlockDoNothing
   block.onmousedown=tutBlockHideFromLink

   if (blockIsNew) { 
      if (document.body) { document.body.appendChild(block) }
      else { document.documentElement.appendChild(block) }
      pos=tutCalculatePosition(obj)
      //block.style.left = pos[0]+'px'
      block.style.left = '0px'
      block.style.top = pos[1]+'px'
   }
}

function tutExtendByClass(tag, cls, evType, fn) {
   var list=document.getElementsByTagName(tag)
   if ((list!=null) && (list.length>0)) {
      for (var i=0; i<list.length; i++) {
         if (list[i].getAttribute("class")==cls) {
            tutAddEvent(list[i], evType, fn)
         }
      }
   }
}

function tutAddEvent(obj, evType, fn){ 
   if (obj.addEventListener){ 
	  obj.addEventListener(evType, fn, false); 
	  return true; 
   } else if (obj.attachEvent){ 
	  var r = obj.attachEvent("on"+evType, fn); 
	  return r; 
   } else { 
	  return false; 
   } 
}


function tutMouseLaunch() {
   tutExtendByClass('img', 'imgroll', 'mouseover', tutMouseover)
   tutExtendByClass('img', 'imgroll500', 'mouseover', tutMouseover)
   //tutExtendByClass('img', 'imgroll', 'mouseout', tutMouseout)
}

function tutMouseover() {
   tutMouseCurrentOrigObj=this
   tutBlockDisplay(tutMouseCurrentOrigObj)
}

function tutMouseout() {
   //tutBlockHideFromLink()
}

function tutZoomDiv() {
   tutZoomDisplay(tutMouseCurrentOrigObj)
}

tutAddEvent(window, 'load', tutMouseLaunch);