

function e(id){
	return document.getElementById(id);
}


function onRollOver(img_obj){
	img_obj.src = img_obj.src.split("-off").join("-on");
}

function onRollOut(img_obj){
	img_obj.src = img_obj.src.split("-on").join("-off");	
}  

// onMouseOver="onRollOver(this);" onMouseOut="onRollOut(this);"


/* Pagination
===================================================*/

var int_currently_visible_pagination_div = 1; 

function showPaginationPage(int_page_number){
	
	if (int_currently_visible_pagination_div == int_page_number){
		return;
	}
	
	if (e("pagediv_main_col_" + int_currently_visible_pagination_div)){
		e("pagediv_main_col_" + int_currently_visible_pagination_div).className = "hide";
	}
	
	if (e("pagination_link_" + int_currently_visible_pagination_div)){
		e("pagination_link_" + int_currently_visible_pagination_div).className="inactive";
	}
	
	if (e("pagediv_main_col_" + int_page_number)){
		e("pagediv_main_col_" + int_page_number).className = "show";
	}	
	
	if (e("pagination_link_" + int_page_number)){
		e("pagination_link_" + int_page_number).className="active";
	}
	
	int_currently_visible_pagination_div = int_page_number;

}

function goPaginationBack(){
		
	if (e("pagediv_main_col_" + String(int_currently_visible_pagination_div-1))){	
		showPaginationPage(int_currently_visible_pagination_div - 1);
	}
}

function goPaginationNext(){
	if (e("pagediv_main_col_" + String(int_currently_visible_pagination_div+1))){	
		showPaginationPage(int_currently_visible_pagination_div + 1);
	}
}


// ===== COOKIES ==============================================================================

//USAGE
//SetCookie ("goner", "This cookie must die!");
//GetCookie ("goner");


//
// "Internal" function to return the decoded value of a cookie
//
function getCookieVal (offset) {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1)
    endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}

function FixCookieDate (date) {
  var base = new Date(0);
  var skew = base.getTime(); // dawn of (Unix) time - should be 0
  if (skew > 0)  // Except on the Mac - ahead of its time
    date.setTime (date.getTime() - skew);
}

function GetCookie (name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
      return getCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
  }
  return null;
}

function SetCookie (name,value,expires,path,domain,secure) {
  document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}

function DeleteCookie (name,path,domain) {
  if (GetCookie(name)) {
    document.cookie = name + "=" +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}


/*
// ===== FADE ENGINE ==============================================================================

var mm__fade_interval = -1;
var mm__cb_arr = ['',''];
var mm__fade_obj;
var mm__fade_alpha = 0;
var mm__fade_alpha_step = 10;
var mm__fade_frame_millseconds = 5;
var mm__fade_dir = 0;

function mm__fadeIn(div_obj, cb_arr){
	mm__cb_arr[0] = cb_arr[0];
	mm__cb_arr[1] = cb_arr[1];
	clearInterval(mm__fade_interval);	
	mm__fade_obj = div_obj;
	mm__fade_alpha = 0;
	setAlpha(mm__fade_obj,mm__fade_alpha);	
	mm__fade_dir = 1;	
	mm__fadeFrame();
}

function mm__fadeOut(div_obj, cb_arr){
	mm__cb_arr[0] = cb_arr[0];
	mm__cb_arr[1] = cb_arr[1];
	clearInterval(mm__fade_interval);	
	mm__fade_obj = div_obj;
	mm__fade_alpha = 100;
	setAlpha(mm__fade_obj,mm__fade_alpha);	
	mm__fade_dir = -1;	
	mm__fadeFrame();
}

function mm__fadeFrame(){

	mm__fade_alpha+=(mm__fade_alpha_step*mm__fade_dir);
	
	if (mm__fade_dir>0){
		mm__fade_alpha = Math.min(100,mm__fade_alpha);
	} else if (mm__fade_dir<0){
		mm__fade_alpha = Math.max(0,mm__fade_alpha);
	}
		
	setAlpha(mm__fade_obj, mm__fade_alpha)
	
	if ((mm__fade_dir>0 && mm__fade_alpha == 100) || (mm__fade_dir<0 && mm__fade_alpha == 0) ){
		
		if (mm__cb_arr.length > 0 ){
			if (mm__cb_arr[0].length > 0 ){
				eval(mm__cb_arr[0] + "('" +mm__cb_arr[1]+"')" );
			}
		}
	
	} else {
	
		mm__fade_interval = setTimeout("mm__fadeFrame()",mm__fade_frame_millseconds);
		
	}
}


function setAlpha(obj_ref, percentage) {
		if (obj_ref.filters && obj_ref.filters[0]) {
			if (typeof obj_ref.filters[0].opacity == "number") { //if IE6+
				obj_ref.filters[0].opacity = percentage;
			} else { //else if IE5.5-
				obj_ref.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+percentage+")";
			}
		} else if (obj_ref.style.MozOpacity) {
			obj_ref.style.MozOpacity = percentage / 101;
		} else if (obj_ref.style.KhtmlOpacity) {
			obj_ref.style.KhtmlOpacity = percentage / 100;
		}
	}
	
// <div style="zoom: 1; margin-top: 0px; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);-moz-opacity:100;-khtml-opacity:100;" 

*/


function validate_form(obj,field_array)
{
	//alert('validating form');
	var field_len = field_array.length;
	for(var i=0;i<field_len;i++)
	{
		var field_info = field_array[i];
		var field_id = field_info[0];
		var field_title = field_info[1];
		var field_datatype = field_info[2];
		
		if(field_datatype=='email')
		{
			if(!testEmail(obj,field_id))
			{
				showEmailError(field_title);
				fieldFocus(obj, field_id);
				return false;
			}
		}else if(field_datatype=='string')
		{		
			field_minlength = field_info[3];
			if(!testString(obj,field_id,field_minlength))
			{
				showStringError(field_title, field_minlength);
				fieldFocus(obj, field_id);
				return false;
			}			
		}else if(field_datatype=='combo')
		{
			if(!testCombo(obj,field_id))
			{
				showComboError(field_title);
				fieldFocus(obj, field_id);
				return false;
			}			
		}		
	}
	return true;
}


function fieldFocus(obj, field)
{
	obj[field].focus();
	//obj[field].style.border="1px solid red";
}

function testString(obj,field,minLen)
{
	var val = obj[field].value;
	if(val.length < minLen)
	{
		return false;
	}else{
		return true;
	}
}

function testCombo(obj,field)
{
	var val = obj[field].value;
	if(val=='')
	{
		return false;
	}else{
		return true;
	}
}
function testEmail(obj,field)
{

	var val = obj[field].value;
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(val))
	{
		return true;
	}else{
		return false;
	}
}

function showEmailError(field)
{
	alert("Invalid email in '" + field + "' field, please fix and re-submit.");
	return false;
}
function showStringError(field,minLen)
{
	alert("Invalid entry in '" + field + "' field, must be at least "+ minLen+" characters in length, please fix and re-submit.");
	return false;
}
function showComboError(field)
{
	alert("Please select item in '" + field + "'.");
	return false;
}
function showError(field)
{
	alert("Invalid entry in '" + field + "' field, please fix and re-submit.");
	return false;	
}


// SCROLLER

var Scroller = {
	speed			: 100,
	aniLen			: 1000,
	clipH			: 373,
	thumbMax		: 333,
	thumbH			: 40,
	scrollbarH		: 373,
	scrollTop		: 0,
	scrollLeft		: 0,
	minRes			: 10,
	ie4				: navigator.appName == "Microsoft Internet Explorer" && !document.getElementById,
	ns4				: document.layers ? 1 : 0,
	dom				: document.getElementById ? 1 : 0,
	mac				: navigator.platform == "MacPPC",
	mo5				: navigator.userAgent.indexOf("Gecko") != -1,

	imgElevBack1	: ypImage("Images/x.gif"),
	imgElevBack2	: ypImage("Images/x.gif"),
	imgElevBack3	: ypImage("Images/x.gif"),

	imgThumb1		: ypImage("Images/x.gif"),
	imgThumb2		: ypImage("Images/x.gif"),

	imgUp1			: ypImage("Images/x.gif"),
	imgUp2			: ypImage("Images/x.gif"),
	imgUp3			: ypImage("Images/x.gif"),
	imgDn1			: ypImage("Images/x.gif"),
	imgDn2			: ypImage("Images/x.gif"),
	imgDn3			: ypImage("Images/x.gif"),

	dir:0,lastTime:0,aniTimer:0,dragActive:0,dragLastY:0,dragStartOffset:0,
	startPos:0,startTime:0,accel:0,endPos:0,dist:0
}


var int_scrollertimeout_id = -1;
var int_total_waits = 0;


Scroller.init = function(int_is_repeater) {
	
	
	
	with (this) {
		
		
		// gather pieces
		//alert("scroller")
		this.lyrFrame			= getLyr("scroller", document)
		
		//alert("scrollbar")
		this.lyrScrollbar		= getLyr("scrollbar", lyrFrame)
		
	//	alert("thumb")
		this.lyrThumb			= getLyr("thumb", lyrScrollbar)
		
		//alert("marker")
		this.lyrMarker			= getLyr("marker", lyrScrollbar)
		
		//alert("elevUp")		
		this.lyrElevUp			= getLyr("elevUp", lyrScrollbar)
		
		//alert("elevDn")
		this.lyrElevDn			= getLyr("elevDn", lyrScrollbar)
		
		//alert("scrollUp")
		//this.lyrScrollUp		= getLyr("scrollUp", lyrFrame)
		
		//alert("scrollDn")
		//this.lyrScrollDn		= getLyr("scrollDn", lyrFrame)
		//this.lyrThumbArrowUp	= getLyr("thumbArrowUp", lyrScrollbar)
		//this.lyrThumbArrowDn	= getLyr("thumbArrowDn", lyrScrollbar)
		    
		//alert("container")
		this.lyrContainer		= getLyr("container", lyrFrame)
		
	//	alert("content")
		this.lyrContent			= getLyr("content", lyrContainer)

		// calculate some values
		this.docH				= Math.max(ns4 ? lyrContent.document.height : lyrContent.offsetHeight, clipH)
		this.scrollH			= docH - clipH
		
		
		if(int_is_repeater != 1){
			// Reset
			this.scrollTop = 0;
			int_total_waits=0;
		} else {
			int_total_waits++;
		}
		// Try five times then give up.
		if (int_total_waits < 5){
			clearTimeout(int_scrollertimeout_id);
			if (this.scrollH < 1){
				// Update every second.
				//int_total_waits++
				int_scrollertimeout_id = setTimeout("Scroller.init(1)" , 1000);
				return;
			}
		} 
		
		
		if (this.scrollH < 1){
			
		} else {
			if(e("scrollbar")){
				e("scrollbar").className="show";
			}	
		}
		
		if (this.docH > clipH) {
			// hook events
			lyrElevUp.onmousedown   = slideTo
			lyrElevDn.onmousedown	= slideTo
			lyrThumb.onmousedown    = startDrag
			lyrThumb.onmouseover    = function() { Scroller.toggleThumb(true) }
			lyrThumb.onmouseout     = function() { Scroller.toggleThumb(false) }
			lyrThumb.ondragstart	= function() { return false; }
			lyrElevUp.onmouseover   = function() { Scroller.toggleElev(Scroller.lyrElevUp, 2) }
			lyrElevUp.onmouseout    = function() { Scroller.toggleElev(Scroller.lyrElevUp, 1) }
			lyrElevDn.onmouseover	= function() { Scroller.toggleElev(Scroller.lyrElevDn, 2) }
			lyrElevDn.onmouseout	= function() { Scroller.toggleElev(Scroller.lyrElevDn, 1) }
			//lyrScrollDn.onmouseover = function() { Scroller.toggleButton("Dn", 2); Scroller.startScroll('+'); }
			//lyrScrollDn.onmousedown = function() { Scroller.toggleButton("Dn", 3); Scroller.speed = 350; return false }
			//lyrScrollDn.onmouseup   = function() { Scroller.toggleButton("Dn", 2); Scroller.speed = 100 }
		//	lyrScrollDn.onmouseout  = function() { Scroller.toggleButton("Dn", 1); Scroller.endScroll() }
			//lyrScrollUp.onmouseover = function() { Scroller.toggleButton("Up", 2); Scroller.startScroll('-') }
		//	lyrScrollUp.onmousedown = function() { Scroller.toggleButton("Up", 3); Scroller.speed = 350; return false }
			//lyrScrollUp.onmouseup   = function() { Scroller.toggleButton("Up", 2); Scroller.speed = 100 }
		//	lyrScrollUp.onmouseout  = function() { Scroller.toggleButton("Up", 1); Scroller.endScroll() }
//
			// initialize some settings
			lyrThumb.s.top = 0

			// ns4.
			if (document.layers) { 
				lyrThumb.captureEvents(Event.MOUSEDOWN)
				lyrElevDn.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE)
				lyrElevUp.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE)
				//lyrScrollUp.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP)
				//lyrScrollDn.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP)
			}

			// mozilla5.
			if (mo5) document.getElementById("scrollerMo5Shim").style.height = docH
		} 
		else 
		{
		//	this.lyrScrollbar.s.visibility = 
		//		this.lyrScrollUp.s.visibility =
		//		this.lyrScrollDn.s.visibility = 
		//		'hidden';
		}

		// all done!
		this.loaded = true
	}
}

Scroller.startScroll = function(dir) {
	if (this.aniTimer) window.clearTimeout(this.aniTimer)

	this.dir		= dir
	this.lastTime	= (new Date()).getTime() - this.minRes
	this.startPos	= this.scrollTop
	this.aniTimer	= window.setTimeout("Scroller.scroll()", this.minRes)
}

Scroller.scroll = function() {
	this.aniTimer	= window.setTimeout("Scroller.scroll()", this.minRes)
	var now			= (new Date()).getTime()
	var elapsed		= now - this.lastTime
	var ny			= eval(this.scrollTop + this.dir + (elapsed * this.speed / 1000))
	this.lastTime	= now
	if (ny > this.scrollH && this.dir == "+" || ny < 0 && this.dir == "-") {
		this.endScroll()
		this.jumpTo(this.dir == "+" ? this.scrollH : 0)
	}
	else this.jumpTo(ny)
}

Scroller.endScroll = function() {
	if (this.aniTimer) this.aniTimer = window.clearTimeout(this.aniTimer)
}

Scroller.startDrag = function(e) {
	if (!e) e = window.event
	with (Scroller) {
		if (aniTimer) window.clearTimeout(aniTimer)
		var ey = e.pageY ? e.pageY : e.y
		dragLastY = ey
		dragStartOffset = ey - parseInt(lyrThumb.s.top)
		dragActive = true
		if (ns4) window.document.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP)
		window.document.onmousemove = doDrag
		window.document.onmouseup = stopDrag
	}
	return false
}

Scroller.doDrag = function(e) {
	if (!e) e = window.event
	var s  = Scroller
	var ey = (e.pageY ? e.pageY : e.y)
	var dy = ey - s.dragLastY
	var ny = parseInt(Scroller.lyrThumb.s.top) + dy

	// constrain
	if (ny >= s.thumbMax) s.dragLastY = s.thumbMax + s.dragStartOffset
	else if (ny < 0) s.dragLastY = s.dragStartOffset
	else s.dragLastY = ey
	ny = Math.min(Math.max(ny, 0), s.thumbMax)

	s.jumpTo(ny * s.scrollH / s.thumbMax)
	return false;
}

Scroller.positionThumbArrows = function(ny) {
	//this.lyrThumbArrowUp.s.top = ny - 6
	//this.lyrThumbArrowDn.s.top = ny + 15
}

Scroller.stopDrag = function() {
	Scroller.dragActive = false
	Scroller.toggleThumb(false)
	if (Scroller.ns4) window.document.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP)
	window.document.onmousemove = null
	window.document.onmouseup   = null
}

// slideTo gets called in the scope of lyrElevUp or lyrElevDn
Scroller.slideTo = function(e) {
	if (!e) e = window.event
	var ey = e.offsetY ? e.offsetY : e.layerY
	if (typeof ey == "undefined") ey = 0
	var ny = (this.id == "elevDn") ? ey-14 : ey
	ny += this.s.top == "" ? 0 : parseInt(this.s.top)
	ny *= Scroller.scrollH / Scroller.thumbMax
	ny = Math.min(ny, Scroller.scrollH)

	with (Scroller) {
		startTime = (new Date()).getTime()
		startPos = scrollTop
		endPos = ny
		dist = endPos - startPos
		accel = dist / 1000 / 1000
		if (aniTimer) aniTimer = window.clearInterval(aniTimer)
		aniTimer = window.setInterval("Scroller.slide()", 10)
	}
}

Scroller.slide = function() {
	with (this) {
		var now = (new Date()).getTime()
		var elapsed = now - startTime
		if (elapsed > 1000) endScroll()
		else {
			var t = 1000 - elapsed
			var ny = endPos - t * t * accel
			jumpTo(ny)
		}
	}
}

Scroller.jumpTo = function(ny) {
	var thumbTop = ny * this.thumbMax / this.scrollH
	this.lyrElevUp[document.layers ? "clip" : "style"].height = thumbTop
	this.lyrElevDn[document.layers ? "clip" : "style"].height = this.scrollbarH - thumbTop
	this.lyrElevDn.s.top = thumbTop
	this.lyrThumb.s.top = thumbTop
	this.lyrContent.s.top = -ny
	this.positionThumbArrows(ny * this.thumbMax / this.scrollH)
	this.scrollTop = ny  
}

Scroller.toggleThumb = function(bOn) {
	var img = this.getFirstImage(this.lyrThumb)
	//img.src = !bOn && !this.dragActive ? this.imgThumb1.src : this.imgThumb2.src
	if (!bOn && !this.dragActive) this.toggleThumbArrows(false)
	else {
		this.positionThumbArrows(parseInt(this.lyrThumb.s.top))
		this.toggleThumbArrows(true)
	}
}

Scroller.toggleThumbArrows = function(bOn) {
	//this.lyrThumbArrowUp.s.visibility = bOn ? "visible" : "hidden"

	//this.lyrThumbArrowDn.s.visibility = bOn ? "visible" : "hidden"
}

Scroller.toggleElev = function(lyr, iState) {
	var img = this["imgElevBack" + iState];
	with (this) {
		//if (document.layers) lyr.document.images[0].src = img.src;
		//else lyr.firstChild.src = img.src;
		lyr.onmousemove = iState == 2 ? moveMarker : null
		if (iState == 1) lyrMarker.s.visibility = "hidden"
	}
}

Scroller.moveMarker = function(e) {
	with (Scroller) {	
		if (!lyrThumb.active) {
			if (!e) e = window.event
			var ey = e.layerY ? e.layerY : e.offsetY
			if (isNaN(ey)) ey = 0
			var ny = Math.round(ey / 2) * 2
			ny += (this.s.top == "" ? 0 : parseInt(this.s.top))
			ny -= 1
			lyrMarker.s.top = ny
			lyrMarker.s.visibility = "visible"
		}
	}
}

Scroller.toggleButton = function(suffix, iState) {
	var lyr = eval("Scroller.lyrScroll" + suffix)
	var img = this.getFirstImage(lyr)
	//img.src = "scroll"+suffix+iState+".gif"
}

Scroller.getLyr = function(sLyrId, oNestRef) {
	var o
	if (document.all) {
		o = oNestRef.all[sLyrId]
	} else if (document.layers) {		
		o = oNestRef.layers[sLyrId]
	} else {
		o = this.recursiveNs6Get(sLyrId, oNestRef)
	}
	o.s = document.layers ? o : o.style
	return o
}

// this is kinda slow for ns6 -> 
// but best way I could think of w/o totally bloating the code.
Scroller.recursiveNs6Get = function(id, p) {
	if (p.childNodes) {
		for (var i = 0; i < p.childNodes.length; i++) {
			if (p.childNodes[i].id == id) return p.childNodes[i]
			else if (p.childNodes[i].childNodes.length > 0) {
				var obj = Scroller.recursiveNs6Get(id, p.childNodes[i])
				if (obj && obj != null) return obj
			}
		}
	}
	return false
}

Scroller.getFirstImage = function(lyr) {
	return document.layers ? lyr.document.images[0] : document.all ? lyr.all.tags("IMG")[0] : lyr.getElementsByTagName("IMG")[0]
}

function ypImage(s) {
	var oImg  = new Image()
	// oImg.src = "Images/x.gif" ;//s
	return oImg
}

function dbg(obj) {
	var s = ""
	for (prop in obj) s += prop + ":" + obj[prop] + "\n"
	alert(s)
}
function e(id){
	 return document.getElementById(id);
}
	