/*
    WebSnapr - Preview Bubble Javascript
    Written by Juan Xavier Larrea
    http://www.websnapr.com
    last modified: Aug 2007, mo
		
		Modified by Craig, 2008, to support
		variable content inside the bubble
*/

if(typeof Array.prototype.push!="function"){
Array.prototype.push=ArrayPush;
function ArrayPush(_1){
this[this.length]=_1;
}
}
function ET_getElementsByClassName(_2,_3,_4){
var _5=(_3=="*"&&_2.all)?_2.all:_2.getElementsByTagName(_3);
var _6=new Array();
_4=_4.replace(/\-/g,"\\-");
var _7=new RegExp("(^|\\s)"+_4+"(\\s|$)");
var _8;
for(var i=0;i<_5.length;i++){
_8=_5[i];
if(_7.test(_8.className)){
_6.push(_8);
}
}
return (_6);
}
function in_array(needle, haystack, strict) {
    var found = false, key, strict = !!strict;
    for (key in haystack) {
        if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
            found = true;
            break;
        }
    }
    return found;
}

function bindExpandedTexts(e){
  lbActions=ET_getElementsByClassName(document,"a","expandedtext");
  for(i=0;i<lbActions.length;i++){
    if(window.addEventListener){
		  lbActions[i].addEventListener("click",attachedExpandedText,false);
      //lbActions[i].addEventListener("mouseover",attachedExpandedText,false);
      //lbActions[i].addEventListener("mouseout",detachExpandedText,false);
    }else{
		  lbActions[i].attachEvent("onclick",attachedExpandedText);
      //lbActions[i].attachEvent("onmouseover",attachedExpandedText);
      //lbActions[i].attachEvent("onmouseout",detachExpandedText);
    }
  }
}

var ET_buffer = new Array;

function attachedExpandedText(_b){

    removeAllExpandedTexts();

	var _c;
	if(_b["srcElement"]){
		_c=_b["srcElement"];
	}else{
		_c=_b["target"];
	}
	if (_c.href == undefined){
		_c=_c.parentNode;
	}
	// buffer to stop duplicate bubbles
	if (in_array(_c.name, ET_buffer)) return;
	ET_buffer[ET_buffer.length] = _c.name;
	var _d=_c.href;
	// create html elements
	var table_width = 500;  // MAGIC NUMBER
	var _e = (findPos(_c)[0] - table_width + 20);  // MAGIC NUMBER
	_e = _e + 200 // craigdietrich.com contingency
	var scrolled = document.getElementById('scrollable').scrollLeft;
	if (scrolled > 10) _e = _e - (scrolled); // craigdietrich.com contingency
	if (_e < 10) _e = 10; // protect against going off the left side of the page  // MAGIC NUMBER
	var _e_window = (window.innerWidth>document.body.offsetWidth)?window.innerWidth:document.body.offsetWidth;  // proect right side
	if ((_e + table_width) > (_e_window-40)) _e = _e_window - table_width - 40;  // MAGIC NUMBER
	var _f=findPos(_c)[1]+34;  // MAGIC NUMBER
	if (window.ActiveXObject) _f = _f + 70; // IE
	var _10=document.createElement("table");
    _10.cellSpacing = 0;
    _10.cellPadding = 0;
	var table_body=document.createElement("tbody");
	_10.appendChild(table_body);
	document.getElementsByTagName("body")[0].appendChild(_10);
	_10.className="expandedtext";
	if (BrowserDetect.browser == 'Explorer') {
	    _10.style.zIndex=99999;
	    _10.style.position="absolute";
		_10.style.top=_f;
		_10.style.left=_e;
		_10.style.width="500px";
		_10.style.paddingTop="0";
		_10.style.paddingLeft="0";
		_10.style.paddingBottom="0";
		_10.style.paddingRight="0";
		_10.style.marginTop="0";
		_10.style.marginLeft="0";
		_10.style.marginBottom="0";
		_10.style.marginRight="0";
		//_10.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + bubbleImagePath + "',sizingMethod='image')";
	} else {
	  _10.setAttribute("style","z-index: 99999; position: absolute; top: "+_f+"px ; left: "+_e+"px ; width: 500px; padding: 0; margin: 0;");
	  // background: url("+ bubbleImagePath +") no-repeat;
	}
	if (BrowserDetect.browser == 'Safari' || BrowserDetect.browser == 'Konqueror' ) {
	  var _height = _f;
	  _10.setAttribute("style","z-index: 99999; position: absolute; top: "+_f+"px ; left: "+_e+"px ; width: 500px; padding: 0; margin: 0;");
	}

	var table_tr1=document.createElement("TR");
	table_body.appendChild(table_tr1);
	var table_td1=document.createElement("TD");
	table_tr1.appendChild(table_td1);
	table_td1.innerHTML = '<img src="/common/images/expandedtext_bg_top.png" />';

	var table_tr2=document.createElement("TR");
	table_body.appendChild(table_tr2);
	var table_td2=document.createElement("TD");
	table_tr2.appendChild(table_td2);
	table_td2.style.background="url(/common/images/expandedtext_bg_middle.png)";
	table_td2.style.backgroundRepeat='repeat-y';
	var iHtml = _c.name;  // This is a hack.  Uses the name="" attribute to pass the bubble text content
  if (iHtml.length==0) iHtml = _c.parentNode.name; // IE
	var close_div = document.createElement("DIV");
	close_div.style.padding='0px 16px 0px 0px';
	close_div.style.margin='0px 20px 0px 26px';
	close_div.style.fontSize = '13px';  // CAUTION
	close_div.style.textAlign='right';
	close_div.innerHTML = '[ <a href="javascript:void(null);" onclick="javascript:removeExpandedText(this);">X</a> ]';
	table_td2.appendChild(close_div);
	var table_div = document.createElement("DIV");
	table_div.style.padding='0px 14px 0px 0px';
	table_div.style.margin='6px 20px 8px 26px';
  table_div.style.fontSize = '11px';
	
	// pull out javascript, because Safari/Chrome won't run it when inserted inside <script> tags
  // should be using RegExp...
	var iHtml_script = iHtml.indexOf('<script>');
	if (iHtml_script != -1) {
	  iHtml_script = iHtml.substr((iHtml_script+8));
	  iHtml_script = iHtml_script.substr(0, iHtml_script.indexOf('</script>'));
	  var iHtml = iHtml.substr(0, iHtml.indexOf('<script>'));
	}
	
  table_div.innerHTML = iHtml;
  table_td2.appendChild(table_div);
	if (table_div.offsetHeight > 310) {
	  table_div.style.overflow = 'auto';
	  table_div.style.height = '310px';
  }

	var table_tr3=document.createElement("TR");
	table_body.appendChild(table_tr3);
	var table_td3=document.createElement("TD");
	table_tr3.appendChild(table_td3);
	table_td3.innerHTML = '<img src="/common/images/expandedtext_bg_bottom.png" />';

	if (iHtml_script != -1) eval(iHtml_script);  // dangerous?
	
}

function removeAllExpandedTexts() {
  lbActions=ET_getElementsByClassName(document,"table","expandedtext");
  for(i=0;i<lbActions.length;i++){
    lbActions[i].parentNode.removeChild(lbActions[i]);
  }
  clearETBuffer();
}

function removeExpandedText(objToRemove) {
  clearETBuffer();
  var parent_table = objToRemove.parentNode.parentNode.parentNode.parentNode.parentNode; // yowzers....
  parent_table.parentNode.removeChild(parent_table);
}

function clearETBuffer() {
  ET_buffer = new Array;
}

function detachExpandedText(_linkuniqueid){
  lbActions=ET_getElementsByClassName(document,"table","expandedtext");
  for(i=0;i<lbActions.length;i++){
    lbActions[i].parentNode.removeChild(lbActions[i]);
  }
}
if(window.addEventListener){
  addEventListener("load",bindExpandedTexts,false);
}else{
  attachEvent("onload",bindExpandedTexts);
}
function findPos(obj){
var _14=curtop=0;
if(obj.offsetParent){
_14=obj.offsetLeft;
curtop=obj.offsetTop;
while(obj=obj.offsetParent){
_14+=obj.offsetLeft;
curtop+=obj.offsetTop;
}
}
return [_14,curtop];
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();