/* This script and many more are available free online at
The JavaScript Source :: http://javascript.internet.com
Created by: Travis Beckham :: http://www.squidfingers.com | http://www.podlob.com
version date: 06/02/03 :: If want to use this code, feel free to do so,
but please leave this message intact. (Travis Beckham) */

// Node Functions

if(!window.Node){
  var Node = {ELEMENT_NODE : 1, TEXT_NODE : 3};
}

function checkNode(node, filter){
  return (filter == null || node.nodeType == Node[filter] || node.nodeName.toUpperCase() == filter.toUpperCase());
}

function getChildren(node, filter){
  var result = new Array();
  var children = node.childNodes;
  for(var i = 0; i < children.length; i++){
    if(checkNode(children[i], filter)) result[result.length] = children[i];
  }
  return result;
}

function getChildrenByElement(node){
  return getChildren(node, "ELEMENT_NODE");
}

function getFirstChild(node, filter){
  var child;
  var children = node.childNodes;
  for(var i = 0; i < children.length; i++){
    child = children[i];
    if(checkNode(child, filter)) return child;
  }
  return null;
}

function getFirstChildByText(node){
  return getFirstChild(node, "TEXT_NODE");
}

function getNextSibling(node, filter){
  for(var sibling = node.nextSibling; sibling != null; sibling = sibling.nextSibling){
    if(checkNode(sibling, filter)) return sibling;
  }
  return null;
}
function getNextSiblingByElement(node){
        return getNextSibling(node, "ELEMENT_NODE");
}

/**
 * Retrieves the absolute position of an element on the screen
 */
function absolutePosition(el) {
  var sLeft = 0, sTop = 0;
  var isDiv = /^div$/i.test(el.tagName);
  if (isDiv && el.scrollLeft) {
    sLeft = el.scrollLeft;
  }
  if (isDiv && el.scrollTop) {
    sTop = el.scrollTop;
  }
  var r = { x: el.offsetLeft - sLeft, y: el.offsetTop - sTop };
  if (el.offsetParent) {
    var tmp = absolutePosition(el.offsetParent);
    r.x += tmp.x;
    r.y += tmp.y;
  }
  return r;
};

function nodeScrollIntoView(node) {
  var h = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
  var offset = self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
  var pos = absolutePosition(node);
  if (pos.y + node.scrollHeight > h + offset) {
    if (node.scrollHeight > h) {
      window.scrollTo(0, pos.y);
    } else {
      window.scrollTo(0, pos.y + node.scrollHeight - h);
    }
  }
}

var lastevent = null;
var eventprint = false;
function toggleEventDisplay(node) {
	var item = getNextSiblingByElement(node.parentNode);
	if ( lastevent ) {
		lastevent.style.display = 'none';
		if ( lastevent == item ) {
			lastevent = null;
			return false;
		}
	}
	if ( !eventprint )
		lastevent = item;
	if ( item.style.display == 'none' ) {
		item.style.display = 'block';
		nodeScrollIntoView(item);
	}
	else {
		item.style.display = 'none';
	}
	
	return false;
}

function setupEventCalendars(sdate, edate, stime, etime) {
	window.scal = Calendar.setup({
//			inputField  : 'sdate',
//			button      : 'sdate_cal',
			flat        : "sdate", // ID of the parent element
			flatCallback : eventDateChanged, // our callback function
			range       : [2009, 2999],
			showOthers  : true,
			cache       : false,
			ifFormat    : '%b %e, %Y',
			firstDay    : 0,          // 0 = Sunday, 1 = Monday
			singleClick : true,       // single or double click to close
			weekNumbers : false,       // Show week numbers
			showsTime   : false,      // Show time as well as date
			timeFormat  : '12',       // 12 or 24 hour clock
			date        : sdate       // Initial date/time for popup
	});

	window.ecal = Calendar.setup({
//			inputField  : 'edate',
//			button      : 'edate_cal',
			flat        : "edate", // ID of the parent element
			flatCallback : eventDateChanged, // our callback function
			range       : [2009, 2999],
			showOthers  : true,
			cache       : false,
			ifFormat    : '%b %e, %Y',
			firstDay    : 0,          // 0 = Sunday, 1 = Monday
			singleClick : true,       // single or double click to close
			weekNumbers : false,       // Show week numbers
			showsTime   : false,      // Show time as well as date
			timeFormat  : '12',       // 12 or 24 hour clock
			date        : edate?edate:sdate       // Initial date/time for popup
	});
window.ecal.theLastDate = window.ecal.date;
window.scal.theLastDate = window.scal.date;

	document.getElementById('sdate_val').value = window.scal.date.print('%b %e, %Y');
	document.getElementById('sdate_disp').innerHTML = window.scal.date.print('%b %e, %Y');
	if ( edate ) {
		document.getElementById('edate_val').value = window.ecal.date.print('%b %e, %Y');
		document.getElementById('edate_disp').innerHTML = window.ecal.date.print('%b %e, %Y');
		window.ecal.uset = true;
	}

	new timepicker(stime,'stime','stime_val','stimedisp');
	new timepicker(etime,'etime','etime_val','etimedisp');
}

function eventDateChanged(calendar) {
    // Beware that this function is called even if the end-user only
    // changed the month/year.  In order to determine if a date was
    // clicked you can use the dateClicked property of the calendar:
//	if (!calendar.theLastDate.equalsTo(calendar.date)) {
    if (calendar.dateClicked) {
		calendar.dateClicked = false;
//      calendar.theLastDate = calendar.date;
      calendar.uset = true;
      // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
      var y = calendar.date.getFullYear();
      var m = calendar.date.getMonth();     // integer, 0..11
      var d = calendar.date.getDate();      // integer, 1..31
      // redirect...
      //window.location = "/" + y + "/" + m + "/" + d + "/index.php";
	  document.getElementById(this.flat.id+'_val').value = calendar.date.print('%b %e, %Y');
	  document.getElementById(this.flat.id+'_disp').innerHTML = calendar.date.print('%b %e, %Y');
	  if ( this.flat.id == 'sdate' && !window.ecal.uset ) {
		  document.getElementById('edate_disp').innerHTML = document.getElementById(this.flat.id+'_disp').innerHTML;
		  window.ecal.setDate(window.scal.date);
	  }		  
    }
  };

function gtime2ttime(gtime) {
	XHOURSX = 60*60;
	XMINSX = 60;
	h24 = parseInt(gtime/XHOURSX);
	h12 = (gtime != 0 && h24%12 == 0)?12:(h24%12)
	m = parseInt((gtime-h24*XHOURSX)/XMINSX);
	pm = ( h24 >= 12 && h24 < 24 );

	return { h12:h12, h24:h24, m:m, pm:pm };
	//var adate = new Date;
	//datef = 'January, 1 2005 '+h24+':'+m+':00';
	//adate.setTime(Date.parse(datef));
	//document.write(adate.getHours()+':'+adate.getMinutes());
}

function timepicker(t,container,input,disp) {
	this.t = t;
	this.t2 = gtime2ttime(t);
	this.obj = document.getElementById(container);
	this.input = input?document.getElementById(input):null;
	this.disp = disp?document.getElementById(disp):null;

	var minutes = ['00','15','30','45'];

	this.setup = function() {
		var _self = this;
		var s;
		for ( ii = 0; ii <= 12; ii++ ) {
			s = document.createElement('span');
			s.className = 'timep'+(_self.t2.h12==ii?' sel':'');
			s.innerHTML = ii==0?'None':ii;
			s.onclick = function() {
				var node = getFirstChild(_self.obj, "SPAN");
				var i;
				for ( i=0; i<=12 && node; i++, node = getNextSibling(node,'SPAN') ) {
					if ( node == this ) {
						node.className = 'timep sel';
						_self.t2.h12 = i;
						_self.t2.h24 = ((i%12) + (_self.t2.pm?12:0))%24;
						if ( i== 0 ) {
							pt = 'Time Not Set';
							pn = 0;
						}
						else {
							if ( _self.t2.h24 == 0 ) _self.t2.h24 = 24;
							pt = _self.t2.h12+':'+(_self.t2.m<10?'0':'')+_self.t2.m+(_self.t2.pm?'pm':'am');
							pn = _self.t2.h24*60*60+_self.t2.m*60;
						}
						if ( _self.input ) _self.input.value = pn;
						if ( _self.disp ) _self.disp.innerHTML = pt;
					}
					else {
						node.className = 'timep';
					}
				}
				return false;
			};
			this.obj.appendChild(s);
			if ( ii == 0 ) {
				s = document.createElement('br');
				this.obj.appendChild(s);
			}
		}

		s = document.createElement('br');
		this.obj.appendChild(s);

		for ( ii = 0; ii < minutes.length; ii++ ) {
			s = document.createElement('span');
			s.className = 'timep'+(_self.t2.m==parseInt(minutes[ii])?' sel':'');
			s.innerHTML = ":"+minutes[ii];
			s.onclick = function() {
				var node = getFirstChild(_self.obj, "SPAN");
				var i = 1;
				for ( i=0; i<=12 && node; i++, node = getNextSibling(node,'SPAN') ) ;
				
				for ( i=0; i<minutes.length && node; i++, node = getNextSibling(node,'SPAN') ) {
					if ( node == this ) {
						node.className = 'timep sel';
						_self.t2.m = parseInt(minutes[i]);
						if ( _self.t2.h12 != 0 ) {
							pt = _self.t2.h12+':'+(_self.t2.m<10?'0':'')+_self.t2.m+(_self.t2.pm?'pm':'am');
							pn = _self.t2.h24*60*60+_self.t2.m*60;
							if ( _self.input ) _self.input.value = pn;
							if ( _self.disp ) _self.disp.innerHTML = pt;
							_self.update();
						}
					}
					else {
						node.className = 'timep';
					}
				}
				return false;
			};
			this.obj.appendChild(s);
		}

		s = document.createElement('br');
		
		this.obj.appendChild(s);

		for ( ii = 0; ii < 2; ii++ ) {
			s = document.createElement('span');
			s.className = 'timep'+(((_self.t2.pm?1:0)==ii)?' sel':'');
			s.innerHTML = (ii?'PM':'AM');
			s.onclick = function() {
				var node = getFirstChild(_self.obj, "SPAN");
				var i = 1;
				for ( i=0; i <= (12+minutes.length) && node; i++, node = getNextSibling(node,'SPAN') ) ;
				
				for ( i=0; i<2 && node; i++, node = getNextSibling(node,'SPAN') ) {
					if ( node == this ) {
						node.className = 'timep sel';
						_self.t2.pm = i?true:false;
						if ( _self.t2.h12 != 0 ) {
							_self.t2.h24 = ((_self.t2.h12%12) + (_self.t2.pm?12:0))%24;
							pt = _self.t2.h12+':'+(_self.t2.m<10?'0':'')+_self.t2.m+(_self.t2.pm?'pm':'am');
							pn = _self.t2.h24*60*60+_self.t2.m*60;
							if ( _self.input ) _self.input.value = pn;
							if ( _self.disp ) _self.disp.innerHTML = pt;
						}
					}
					else {
						node.className = 'timep';
					}
				}
				return false;
			};
			this.obj.appendChild(s);
		}
    };
	this.update = function() {
		var node = getFirstChild(this.obj, "SPAN");
		for ( i=0; i<=12 && node; i++, node = getNextSibling(node,'SPAN') ) {
			if ( i == 0 ) {
				pt = "None";
			}
			else {
				pt = i+':'+(this.t2.m<10?'0':'')+this.t2.m;
			}
			node.innerHTML = pt;
		}
		if ( this.t2.h12 == 0 ) {
			pt = 'Time Not Set';
			pn = 0;
		}
		else {
			if ( this.t2.h24 == 0 ) this.t2.h24 = 24;
			pt = this.t2.h12+':'+(this.t2.m<10?'0':'')+this.t2.m+(this.t2.pm?'pm':'am');
			pn = this.t2.h24*60*60+this.t2.m*60;
		}
		if ( this.input ) this.input.value = pn;
		if ( this.disp ) this.disp.innerHTML = pt;

	}
	this.setup();
	this.update();
};

// openWindow(url,w,h,tb,stb,l,mb,sb,rs,x,y)
function openWindow(url,w,h,tb,stb,l,mb,sb,rs,x,y){
var t=(document.layers)? ',screenX='+x+',screenY='+y: ',left='+x+',top='+y; //A LITTLE CROSS-BROWSER CODE FOR WINDOW POSITIONING
tb=(tb)?'yes':'no'; stb=(stb)?'yes':'no'; l=(l)?'yes':'no'; mb=(mb)?'yes':'no'; sb=(sb)?'yes':'no'; rs=(rs)?'yes':'no';
var x=window.open(url, 'newWin'+new Date().getTime(), 'scrollbars='+sb+',width='+w+',height='+h+',toolbar='+tb+',status='+stb+',menubar='+mb+',links='+l+',resizable='+rs+t);
x.focus();
}

function writeWindow(content,w,h,tb,stb,l,mb,sb,rs,x,y){
var t=(document.layers)? ',screenX='+x+',screenY='+y: ',left='+x+',top='+y; //A LITTLE CROSS-BROWSER CODE FOR WINDOW POSITIONING
tb=(tb)?'yes':'no'; stb=(stb)?'yes':'no'; l=(l)?'yes':'no'; mb=(mb)?'yes':'no'; sb=(sb)?'yes':'no'; rs=(rs)?'yes':'no';
var x=window.open('', 'newWin'+new Date().getTime(), 'scrollbars='+sb+',width='+w+',height='+h+',toolbar='+tb+',status='+stb+',menubar='+mb+',links='+l+',resizable='+rs+t);
x.document.write(content);
x.focus();
}

function eventFormatInfo() {
	content = '<html><head><link href="/fto.css" rel="stylesheet" type="text/css" /></head><body>';
	content += '<table cellpadding="0" cellspacing="0" border="0"><tr><td align="center" valign="top" class="main-block"><div align="center">';
	content += '<div class="event"><div style="font-size:2em;">Premium Event Listing Format</div><div class="details" style="font-size:1.35em;">'+
			   '[b]<strong>Text here will be bold</strong>[/b]<br />'+
			   '[i]<em>Text here will be italicized</em>[/i]<br />'+
			   '[u]<u>Text here will be underlined</u>[/u]<br />'+
			   '[url]<a href="http://www.text_here_will_become_a_link.com">www.text_here_will_become_a_link.com</a>[/url]<br />'+
			   '[url=www.mywebsite.com]<a href="http://www.mywebsite.com">Put the website after the = sign, and you can put your linked text here to customize the look of your hyperlink</a>[/url]<br />'+
			   '';
	content += '</div></div><form><input type="button" value="Close" onClick="self.close()"></form></div></td></tr></table></body></html>';

	w = 600; h = 300;
	writeWindow(content, w, h,0,0,0,0,0,0,(screen.width-w)/2,(screen.height-h)/2);
}

function scrollup(obj, pps) {
	
	obj.timer = setTimeout(function(ms) {
		var y = obj.offsetTop;
		var r = parseInt(pps/20);
		
		if ( (obj.offsetHeight+obj.offsetTop) > obj.offsetParent.offsetHeight ) {
			y = obj.offsetTop - r;
			if ( (obj.offsetHeight+y) <= obj.offsetParent.offsetHeight ) {
				y = obj.offsetParent.offsetHeight-obj.offsetHeight;
				clearTimeout(obj.timer);
			}
			else {
				scrollup(obj,pps);
			}
			obj.style.top = y+'px';
		}
	}, 50);
}
