var version = navigator.appVersion;
var MSIE = version.indexOf('MSIE');
var MSIEVersionNumber = 0.0;
if (MSIE != -1) MSIEVersionNumber = parseFloat(version.substr(MSIE + 4, 5));

function log(a) {
	if(window.console) {window.console.log(a);}
}

//cls = class
//n = node
//t = tag
document.getElementsByClassName = function(cls,n,t)
{
	var rtn = [];
	n=n===null?document:n;
	t=t===null?'*':t;
	var els = n.getElementsByTagName ? n.getElementsByTagName(t) : document.all;
	els = (!els||!els.length ) && document.all ? document.all : els;
	if(cls==null){return els;}
	for (var i=0,j=0; i < els.length; i++)
	{
		if(els[i].className.match("(^|\\s)"+cls+"(\\s|$)"))
		{
			rtn[j++] = els[i];
		}
	}
	return rtn;
};

	function jsfAttachEvent(obj,evt,fnc)
	{
		if(window.addEventListener)
		{
			obj.addEventListener(evt, fnc, false);
		}
		else if(window.attachEvent)
		{
			obj.attachEvent('on'+evt, fnc);
		}
		else if (obj.getElementById && evt=='load')
		{
			obj.onload = fnc;
		}
	}

	function jsfOnLoadHideElements(jh)
	{
		var jhs = document.getElementsByClassName(jh,null,null);
		for(var i=0; i<jhs.length; i++)
		{
			jhs[i].style.display="none";
		}
	}

	function jsfOnLoadShowElements(js)
	{
		var jhs = document.getElementsByClassName(js,null,null);
		for(var i=0; i<jhs.length; i++)
		{
			jhs[i].style.display="";
		}
	}

	//extend an object with addition methods/properties
	function jsfExtendObject(d, s)
	{
		for (p in s)
		{
			d[p] = s[p];
		}
		return d;
	}
	
	function jsfSwapText(elements)
	{
		var elms = document.getElementsByClassName(elements,document,"A");		
		
		for(var i=0; i<elms.length; i++)
		{
			elms[i] = jsfExtendObject(elms[i],
				{
					onclick:function()
					{
					//for(var j=0; j<elms.length; j++)
					//	{
							if (elms[i].innerHTML == "Show more") {
								elms[i].innerHTML = "Show less";
							} else if
								(elms[i].innerHTML == "Show less") {
								elms[i].innerHTML = "Show more";
							}
					//	}
					}
				}
			);
		}
	}
	
	function addClass(target, theClass)
	{
		if (!hasClass(target, theClass))
		{
			if (target.className == "")
			{
				target.className = theClass;
			}
			else
			{
				target.className += " " + theClass;
			}
		}
	}
	function hasClass(target, theClass)
	{
		var pattern = new RegExp("(^| )" + theClass + "( |$)");
		if (pattern.test(target.className))
		{
			return true;
		}
	
	  return false;
	}
	function removeClass(target, theClass)
	{
		var pattern = new RegExp("(^| )" + theClass + "( |$)");
		
		target.className = target.className.replace(pattern, "$1");
		target.className = target.className.replace(/ $/, "");
	}

var firstLoad = true;
var ShowMoreOrLess =
{		
	init:function( triggerClassName, elementsToHideClassName )
	{
		this.triggerClassName = triggerClassName;
		this.elementsToHideClassName = elementsToHideClassName;
		var triggerObjArray = document.getElementsByClassName(triggerClassName,document,"A");
		this.assignEventHandlers( triggerObjArray );
		this.hideAll();
	},
	assignEventHandlers: function( elementsArray )
	{
		for( var i=0; i<elementsArray.length; i++ )
		{
			jsfAttachEvent(elementsArray[i],"click",this.clickHandler);
			elementsArray[i].hidden = true;
			elementsArray[i].superGran = elementsArray[i].parentNode.parentNode;
		}
	},
	clickHandler: function( event )
	{
		var thisHandle = this;
		if( event.srcElement )
		{
			thisHandle = event.srcElement;
		}
		//alert(thisHandle.superGran.className);
		if( thisHandle.hidden )
		{
			//alert("show"+ thisHandle.superGran.className);
			//show the elements you want to show
			var liArray = document.getElementsByClassName(ShowMoreOrLess.elementsToHideClassName,thisHandle.superGran,"LI");
			//alert(thisHandle.superGran.childNodes.length);
			for( var z=0; z<liArray.length; z++ )
			{
				liArray[z].style.display = "";
			}
			//change the text
			thisHandle.innerHTML = "Show less";
			thisHandle.hidden = false;
		}
		else
		{
			//alert("hide");
			//hide the elements you want to hide
			var liArray = document.getElementsByClassName(ShowMoreOrLess.elementsToHideClassName,thisHandle.superGran,"LI");
			for( var z=0; z<liArray.length; z++ )
			{
				liArray[z].style.display = "none";
			}
			//change the text
			thisHandle.innerHTML = "Show more";
			thisHandle.hidden = true;
		}
		
		if( event.preventDefault )
		{
			event.preventDefault();
		}
		
		if ( event.returnValue ) 
		{
			event.returnValue = false;
		}
		
		return false;
		
	},
	hideAll: function()
	{
		//hide all the elements you want to hide on first load
		var liArray = document.getElementsByClassName(ShowMoreOrLess.elementsToHideClassName,document,"LI");
		for( var z=0; z<liArray.length; z++ )
		{
			liArray[z].style.display = "none";
		}
	}
}

function jsfOnLoadAttachHideShow(trg,hsi,hse,caf,imp,imm,sht,hdt,shd,ca2)
{
	//get all raw triggers
	var tgs = document.getElementsByClassName(trg,document.body,"input");
	tgs = tgs.concat(document.getElementsByClassName(trg,document.body,"select"));
	tgs = tgs.concat(document.getElementsByClassName(trg,document.body,"option"));
	
	//get all raw elements
	var elm = document.getElementsByClassName(hse,document.body,"div");
	elm.concat(document.getElementsByClassName(hse,document.body,"span"));

	//for all the raw triggers with/without numbers
	var reg = new RegExp("(^|\\w*)"+hsi+"(\\d*|([\\w* ]))");
	var reg2 = new RegExp("(^|\\w*)"+caf+"(\\d*|([\\w* ]))");
	
	//set up hide/show element attributes and methods
	for(var i=0; i<elm.length; i++)
	{
		//if i have an associated image, let me control it's hide/show
		//get all images associated with me
		elm[i] = jsfExtendObject(elm[i],
			{
				hide:function()
				{
					this.style.display = "none";
					this.hidden = true;
				},
				show:function()
				{
					this.style.display = "";
					this.hidden = false;
				},
				init:function()
				{
					this.hidden = this.style.display===""?false:true;
				},
				hidden:false,
				hsElement:true,
				images:[]
			}
		);
		elm[i].init();
	}

	//set up all the triggers with the elements
	for(var i=0; i<tgs.length; i++)
	{
		switch(tgs[i].tagName)
		{
			case "INPUT":
				if(tgs[i].type == 'text') {
					tgs[i] = jsfExtendObject(tgs[i],
					{
						onkeyup:function()
						{
							//get all elements that match the item class
							var els = document.getElementsByClassName(reg.exec(this.className)[0],null,"DIV");
	
							//only close elements not controlled by me
							
							if(this.className.match(caf) && caf.length>0)
							{
								var ael = document.getElementsByClassName(reg2.exec(this.className)[0],null,"DIV");
								for(var j=0;j<ael.length;j++)
								{
									ael[j].hide();
								}
							}
							
							if (!firstLoad)
							if(this.className.match(ca2) && ca2.length>0)
							{
								var ael = elm;
								for(var j=0;j<ael.length;j++)
								{
									if(ael[j].className.match(ca2) && reg.exec(this.className)[0]!=reg.exec(ael[j].className)[0])
									{
										ael[j].hide();
									}
								}
							}
								
							for(var j=0; j<els.length; j++)
							{
								//hide/show anything that isn't the trigger
								if(this.className.match('jstString')) {
									var tempval = this.value;
								}
								else {
									var tempval = this.value.replace(/[^0-9a-zA-Z.]/g,"");
								}
								if(els[j].hsElement)
								{
									if(this.tagName=="INPUT" && tempval != 0 && this.className.match(sht))
									{
										els[j].show();
									}
									if(this.tagName=="INPUT" && tempval != 0 && this.className.match(hdt))
									{
										els[j].hide();
									}
									if(this.tagName=="INPUT" && this.className.match(shd))
									{
										if(tempval != 0)
										{
											els[j].show();
										}
										else
										{
											els[j].hide();
										}
									}
								}
							}
							
							for(var j=0; j<els.length; j++)
								{
									if(this.className.match(ca2) && ca2.length>0 && els[j].className.match(ca2))	
								  {
										var tempval = this.value.replace(/[^0-9a-zA-Z.]/g,"");
										alert(tempval);
										if (this.tagName=="INPUT" && tempval > 0)
										{
											 els[j].show();
										}
										else
										{
											 els[j].hide();
										}
										
									}
								}
						}//onkeyup close
					}
					)
					tgs[i].onkeyup();
				}
				else {
					tgs[i] = jsfExtendObject(tgs[i],
					{
						onclick:function()
						{
							//alert(this.id+' onclick called');
							//get all elements that match the item class
							var els = document.getElementsByClassName(reg.exec(this.className)[0],null,"DIV");
	
							//only close elements not controlled by me
							
							if(this.className.match(caf) && caf.length>0)
							{
								var ael = document.getElementsByClassName(reg2.exec(this.className)[0],null,"DIV");
								for(var j=0;j<ael.length;j++)
								{
									ael[j].hide();
								}
							}
							
							if (!firstLoad) {
								if(this.className.match(ca2) && ca2.length>0)
								{
									ael = elm;
									for(var j=0;j<ael.length;j++)
									{
										if(ael[j].className.match(ca2) && reg.exec(this.className)[0]!=reg.exec(ael[j].className)[0])
										{
											ael[j].hide();
										}
									}
								}
							}
							
							for(var j=0; j<els.length; j++)
							{
								//hide/show anything that isn't the trigger
								if(els[j].hsElement)
								{
									if(this.tagName=="INPUT" && this.checked==true && this.className.match(sht))
									{
										els[j].show();
									}
									else if(this.tagName=="INPUT" && this.checked==true && this.className.match(hdt))
									{
										els[j].hide();
									}
									else if(this.tagName=="INPUT" && this.className.match(shd))
									{
										if(this.checked)
										{
											els[j].show();
										}
										else
										{
											els[j].hide();
										}
									}
								}
							}
							
							for(var j=0; j<els.length; j++)
								{
									if(this.className.match(ca2) && ca2.length>0 && els[j].className.match(ca2))	
								  {
										if (this.tagName=="INPUT" && this.checked==true)
										{
											 els[j].show();
										}
										else
										{
											els[j].hide();
										}
										
									}
								}
							
								
	//						return false;
						}//onclick close
					}
					);
					if(tgs[i].checked) tgs[i].onclick();
				}
				break;
			case "SELECT":
				tgs[i] = jsfExtendObject(tgs[i],
					{
						onchange:function()
						{
							//get all elements that match the item class
//								alert(reg.exec(this.className)[0]);
//								return;
//								var els = document.getElementsByClassName(reg.exec(this.className)[0],null,null);
							var els = this.getElementsByTagName("OPTION");
//								alert(els.length);
//								return;
	
							//only close elements not controlled by me
							if(this.className.match(caf) && caf.length>0)
							{
								var ael = document.getElementsByClassName(reg2.exec(this.className)[0],null,"DIV");
								for(var j=0;j<ael.length;j++)
								{
									ael[j].hide();
								}
							}
							
							if(this.className.match(ca2) && ca2.length>0)
							{
								ael = elm;//document.getElementsByClassName(hse,document.body,"div");
								for(var j=0;j<ael.length;j++)
								{
									if(ael[j].className.match(ca2) && reg.exec(this.className) && reg.exec(this.className)[0]!=reg.exec(ael[j].className)[0])
									{
										ael[j].hide();
									}
								}
							}
	
							for(var j=0; j<els.length; j++)
							{
								//hide/show anything that isn't the trigger
									if(els[j].hideShow && this.options[this.selectedIndex]==els[j])
									{
										els[j].hideShow();
									}
							}
	//						return false;
						}
					}
				);
				
				
				break;
			case "OPTION":
				tgs[i] = jsfExtendObject(tgs[i],
					{
						hideShow:function()
						{
							var els = document.getElementsByClassName(reg.exec(this.className)[0],null,"DIV");								//only close elements not controlled by me
							if(this.className.match(caf) && caf.length>0)
							{
								var ael = document.getElementsByClassName(reg2.exec(this.className)[0],null,"DIV");
								for(var j=0;j<ael.length;j++)
								{
									if(reg.exec(this.className)[0]!=reg.exec(ael[j].className)[0])
									{
										ael[j].hide();
									}
								}
							}	
							if(this.className.match(ca2) && caf.length>0)

							{
								ael = elm;//document.getElementsByClassName(hse,document.body,"div");
								for(var j=0;j<ael.length;j++)
								{
									if(ael[j].className.match(ca2) && reg.exec(this.className)[0]!=reg.exec(ael[j].className)[0])
									{
										ael[j].hide();
									}
								}
							}		
							for(var j=0; j<els.length; j++)
							{
								if(els[j].hsElement)
								{
									if(this.className.match(hdt))
									{
										els[j].hide();
									}
									if(this.className.match(sht))
									{
										els[j].show();
									}
								}
							}
							
						}
					}
				);
//					tgs[i].hideShow();
				break;
		}
	}
	
	for(var i=0; i<tgs.length; i++)
	{
		if(tgs[i].tagName=="SELECT")
		{
			tgs[i].onchange();
		}
	}
}
function jsfOnLoadAttachHS(trg,hsi,hse,caf,imp,imm)
{
	
	//get all raw triggers
	var tgs = document.getElementsByClassName(trg,null,"a");
	
	//get all raw elements
	var elm = document.getElementsByClassName(hse,null,null);

	//for all the raw triggers with/without numbers
	var reg = new RegExp("(^|\\w*)"+hsi+"(\\d*|([\\w* ]))");
	
	//set up hide/show element attributes and methods
	for(var i=0; i<elm.length; i++)
	{
		//if i have an associated image, let me control it's hide/show
		//get all images associated with me
		elm[i] = jsfExtendObject(elm[i],
			{
				hide:function()
				{
					this.style.display = "none";
					this.hidden = true;
					for(var i=0;i<this.images.length;i++)
					{
						if(this.images[i])
						{
							if(this.images[i].className.match(imp))
							{
								this.images[i].style.display="inline";
							}
							if(this.images[i].className.match(imm))
							{
								this.images[i].style.display="none";
							}
						}
						if(this.texts[i])
						{
							if(this.texts[i].className.match(imp))
							{
								this.texts[i].style.display="inline";
							}
							if(this.texts[i].className.match(imm))
							{
								this.texts[i].style.display="none";
							}
						}
					}
					removeClass(this.parentNode.parentNode,'selected');
				},
				show:function()
				{
					this.style.display = "";
					this.hidden = false;
					for(var i=0;i<this.images.length;i++)
					{
						if(this.images[i])
						{
							if(this.images[i].className.match(imp))
							{
								this.images[i].style.display="none";
							}
							if(this.images[i].className.match(imm))
							{
								this.images[i].style.display="inline";
							}
						}
						if(this.texts[i])
						{
							if(this.texts[i].className.match(imp))
							{
								this.texts[i].style.display="none";
							}
							if(this.texts[i].className.match(imm))
							{
								this.texts[i].style.display="inline";
							}
						}
					}
					addClass(this.parentNode.parentNode,'selected');
				},
				toggle:function()
				{
					if(this.hidden)
					{
						this.show();
					}
					else
					{
						this.hide();
					}
				},
				init:function()
				{
					this.hidden = this.style.display===""?false:true;
					var as = document.getElementsByClassName(reg.exec(this.className)[0],null,"A");
					if (as.length) {
						this.images = as[0].getElementsByTagName("img");
						this.texts = as[0].getElementsByTagName("span");
					}
					
					for(var i=0;i<this.images.length;i++)
					{
						if(this.images[i].className.match(imp))
						{
							this.images[i].style.display="inline";
						}
						if(this.images[i].className.match(imm))
						{
							this.images[i].style.display="none";
						}
					}
					
					for(var i=0;i<this.texts.length;i++)
					{
						if(this.texts[i].className.match(imp))
						{
							this.texts[i].style.display="inline";
						}
						if(this.texts[i].className.match(imm))
						{
							this.texts[i].style.display="none";
						}
					}
				},
				hidden:false,
				hsElement:true,
				images:[]
			}
		);
		elm[i].init();
	}

	//set up all the triggers with the elements
	for(var i=0; i<tgs.length; i++)
	{
		tgs[i] = jsfExtendObject(tgs[i],
			{
				onclick:function()
				{
					
					//get all elements that match the item class
					var els = document.getElementsByClassName(reg.exec(this.className)[0],null,null);

					//only close elements not controlled by me
					if(this.className.match(caf) && caf.length>0)
					{
						ael = document.getElementsByClassName(hse,null,null);
						for(var j=0;j<ael.length;j++)
						{
							if(ael[j].className.match(caf) && reg.exec(this.className)[0]!=reg.exec(ael[j].className)[0])
							{
								ael[j].hide();
							}
						}
					}

					for(var j=0; j<els.length; j++)
					{
						//hide/show anything that isn't the trigger
						if(els[j].hsElement)
						{
							els[j].toggle();
						}
					}
					return false;
				}
			}
		);
	}
}

jsfAttachEvent(window,'load',jsfOnLoad);

function jsfOnLoad()
{
	if (MSIE == -1 || MSIEVersionNumber > 5.2) {
		jsfOnLoadAddMoreLess();
		jsfOnLoadHideElements("jstHide");
		jsfOnLoadShowElements("jstShow");
		jsfOnLoadAttachHS("jstHideShowTrigger","jstHideShowItem","jstHideShowElement","jstHideAllFirst","jstHsPlus","jstHsMinus");
		jsfOnLoadAttachHideShow("jstHsTrg","jstHsItem","jstHsElm","jstHideAllFirst","jstHsPlus","jstHsMinus","jstShowTrg","jstHideTrg","jstShowHideTrg","jstHideAllSecond");
		ShowMoreOrLess.init( "listItemTrigger", "listItemHidden" );
	}
	
	jsfPopups('popupLink');
}


function jsfPopups(cls) {
	var links = document.getElementsByClassName(cls,document.body,'a');
	for(var i=0;i<links.length;i++) {
  		links[i].onclick = function() {
		var win = window.open(this.href,'formWin'+new Date().getTime(),'scrollbars,menubar=false,status=false,height=400,width=560,resizable');
		return false; 
		}
	}
}


function jsfOnLoadAddMoreLess () {
	elms = document.getElementsByClassName("jstHideShowTrigger",null,"a");
	for (i = 0; i < elms.length; i++) elms[i].innerHTML = '<img style="display: inline;" class="jstHsPlus jstShow" src="/_img/misc/plus.gif" alt="Expand content" /> <img style="display:none;" class="jstHsMinus jstHide" src="/_img/misc/minus.gif" alt="Contract content" />';
}

            function showhide(layer_ref) { 
                var state;
                var btnsrc;
                
                if (document.all) { //IS IE 4 or 5 (or 6 beta) 
                    state = document.all(layer_ref.id).style.display; 
                } 
                if (document.layers) { //IS NETSCAPE 4 or below 
                    state = document.layers[layer_ref.id].display; 
                } 
                if (document.getElementById &&!document.all) { 
                    state = document.getElementById(layer_ref.id).style.display; 
                }     
                
                if (state == 'block' || state == '') { 
                    state = 'none'; 
                    btnsrc = 'images/plus.gif';
                } 
                else { 
                    state = 'block'; 
                    btnsrc = 'images/minus.gif';
                } 
                
                if (document.all) { //IS IE 4 or 5 (or 6 beta) 
                    eval( "document.all." + layer_ref.id + ".style.display = state"); 
                    eval( "document.all." + 'btn' + layer_ref.id + ".src = btnsrc"); 
                } 
                if (document.layers) { //IS NETSCAPE 4 or below 
                    document.layers[layer_ref.id].display = state; 
                    document.layers['btn' + layer_ref.id].src = btnsrc;
                } 
                if (document.getElementById &&!document.all) { 
                    hza = document.getElementById(layer_ref.id); 
                    hza.style.display = state; 
                    document.getElementById('btn' + layer_ref.id).scr = btnsrc;
                } 
            } 

function printSelection(node){

  var content='<html><body>' + node.innerHTML + '</body></html>';
  var pwin=window.open(node.id,'print_content','width=700,height=350');

  pwin.document.open();
  pwin.document.write(content);
  //pwin.document.close();
 
  //setTimeout(function(){pwin.close();},1000);

}