/*
OBLONG TECH GENERIC JAVASCRIPT FUNCTIONS
A COLLECTION OF USEFUL FUNCTIONS CUSTOMIZED FOR GENERAL USE BY DUSTIN DANIEL
VERSION 1.2 FEB 2009

FUNCTION LIST:
elements.js
styles.js
position.js
display.js
opacity.css
cookies.js
events.js
keyevents.js
ajax.js
imagepreloader.js

*/

/*elements.js*/
function getElem(elemID) {
 if(document.getElementById){return document.getElementById(elemID);}
 else if(document.all){return document.all[elemID];}
 else if(document.layers) {return document.layers[elemID];}
 else{alert('Browser Doesn\'t Support DOM')}
 }
function $(){
 var elements = new Array();
 for (var i=0;i<arguments.length;i++){
  var element = arguments[i];
  if(typeof element == 'string') element = getElem(element);
  if(arguments.length == 1) return element;
  elements.push(element);
  }
 return elements;
 }
function getPrevSibling(elem){
 var parent = elem.parentNode;
 var first = parent.firstChild;
 while (first.nodeType !=1){
  first = first.nextSibling;
  }
 if(elem.previousSibling || elem !== first){
  prev = elem.previousSibling;
  while (prev.nodeType !=1){
   prev = prev.previousSibling;
   }
  }
  return prev;
 }
function getNextSibling(elem){
 var next = elem.nextSibling;
 while (next.nodeType !=1){
  if(next.nextSibling){next = next.nextSibling;}
  else{
   next = elem;
   }
  }
 return next;
 }

/*styles.js*/
function getStyle(e, cssProperty){
 if(typeof e=='string'){e = document.getElementById(e);}
 if(e.currentStyle){
  var convertToCamelCase = cssProperty.replace(/\-(.)/g, function(m, l){return l.toUpperCase()});
  return e.currentStyle[convertToCamelCase];
  }
 else if (window.getComputedStyle){
  var elementStyle = window.getComputedStyle(e, "");
  return elementStyle.getPropertyValue(cssProperty);
  }
 }
function setStyle(e, style, value){
 if(typeof e=='string') e = document.getElementById(e);
 var style = style.replace(/\-(.)/g, function(m, l){return l.toUpperCase()});
 e.style[style] = value;
 if(style=='opacity'){
  e.style.MozOpacity = value; //NETSCAPE+MOZILLA
  e.style.KhtmlOpacity = value; //<SAFARI1.X
  e.style.filter = "alpha(opacity=" + value*100 + ")"; //<IE6
  }
 }
function setStyles(arrayOfElements, stylesObject){
 for(var i=0;i<arrayOfElements.length;i++){
  var e = arrayOfElements[i];
  if(typeof e=='string') e = document.getElementById(e);
  for(var style in stylesObject){
   var style = style.replace(/\-(.)/g, function(m, l){return l.toUpperCase()});
   e.style[style] = stylesObject[style];
   if(style=='opacity'){
    e.style.MozOpacity = stylesObject[style]; //NETSCAPE+MOZILLA
    e.style.KhtmlOpacity = stylesObject[style]; //<SAFARI1.X
    e.style.filter = "alpha(opacity=" + stylesObject[style]*100 + ")"; //<IE6
    }
   }
  }
 }
function fixStyle(e, cssProperty){
 var value = getStyle(e, cssProperty);
 setStyle(e, cssProperty, value);
 return value;
 }

/*position.js*/
function getPosition(e){
 if(typeof e=='string') e = document.getElementById(e);
 var X=e.offsetLeft, Y=e.offsetTop, p=e;
 if(p.offsetParent){
  while (p=p.offsetParent){
   X += p.offsetLeft;
   Y += p.offsetTop;
   }
  }
 return {'x':e.offsetLeft,'y':e.offsetTop,'X':X,'Y':Y};
 }
function getScrollY(){
 var ScrollTop = document.body.scrollTop;
 if (ScrollTop==0){
  if (window.pageYOffset) ScrollTop = window.pageYOffset;
  else ScrollTop = document.body.parentElement ? document.body.parentElement.scrollTop : 0;
  }
 return ScrollTop;
 }

/*display.js*/
function show(){setStyles(arguments,{'display':'block'});}
function showi(){setStyles(arguments,{'display':'inline'});}
function hide(){setStyles(arguments,{'display':'none'});}
function visible(){setStyles(arguments,{'visibility':'visible'});}
function transparent(){setStyles(arguments,{'visibility':'hidden'});}

function toggledisplay(){
 for(var i=0;i<arguments.length;i++){
  var e = arguments[i];
  if(typeof e=='string') e = document.getElementById(e);
  if(e.style.display != 'none'){
   e.style.display = 'none';
   }
  else{
   e.style.display = '';
   }
  }
 }
function togglevisibility(){
 for(var i=0;i<arguments.length;i++){
  var e = arguments[i];
  if(typeof e=='string') e = document.getElementById(e);
  if(e.style.visibility != 'hidden'){
   e.style.visibility = 'hidden';
   }
  else{
   e.style.visibility = 'visible';
   }
  }
 }

/*opacity.css*/
function opacityDimmer(id, opacEnd, millisec){
 var e = document.getElementById(id);
 var opacCurr = e.style.opacity == null || e.style.opacity == '' ? (isNaN(getStyle(id,'opacity')) ? 100 : fixStyle(id,'opacity')*100) : e.style.opacity*100;

 var speed = Math.round(millisec / 100);
 var timer = 0;
 
 if(opacCurr>opacEnd){
  for(i=opacCurr;i>=opacEnd;i--){
   setTimeout("setStyle('" + id + "','opacity'," + i/100 + ")",(timer * speed));
   timer++;
   }
  }
 else if(opacCurr<opacEnd){
  for(i=opacCurr;i<=opacEnd;i++){
   setTimeout("setStyle('" + id + "','opacity'," + i/100 + ")",(timer * speed));
   timer++;
   }
  }
 }
function fadein(e){
 opacityDimmer(e, 100, 500);
 }
function fadeout(e){
 opacityDimmer(e, 0, 500);
 }

/*cookies.js*/
function getCookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ';', len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}
function setCookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //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-1970 00:00:01 GMT';
}

/*events.js*/
function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);

/* fire onclick event of elem object */
function triggerOnClick(elem){
   if (document.all){ elem.fireEvent("onclick"); }
   else {
    var clickEvent = window.document.createEvent("MouseEvent");
    clickEvent.initEvent("click", false, true);
    elem.dispatchEvent(clickEvent);
  }
  return false;
 }
 
/*keyevents.js*/
function keyCode(evt){
 var evt = ( window.event || evt );
 var key = ( evt.keyCode || evt.charCode || evt.which || 0 );
 return key;
 }
/*
KEYCODES:
ENTER = 13
TAB = 9
SHIFT = 16
ARROWUP = 38
ARROWDOWN = 40
*/
function isEnterKey(evt){if(keyCode(evt)==13) return true; else return false;}
function isTabKey(evt){if(keyCode(evt)==9) return true; else return false;}
function isShiftKey(evt){if(keyCode(evt)==16) return true; else return false;}
function isArrowUpKey(evt){if(keyCode(evt)==38) return true; else return false;}
function isArrowDownKey(evt){if(keyCode(evt)==40) return true; else return false;}

var isShiftKeyHeld = false;
addEvent(document,'keydown',function(evt){if(isShiftKey(evt)) isShiftKeyHeld = true; });
addEvent(document,'keyup',function(evt){if(isShiftKey(evt)) isShiftKeyHeld = false; });

function cancelTabKey(evt){
 if(getKeyCode(evt)==9){
  if(window.event){//IE
   evt.cancelBubble = true; evt.returnValue = false;
   }
  else{
   evt.preventDefault(); evt.stopPropagation();
   }
  return true;
  }
 else return false;
 }

function triggerOnClickViaEnterKey(evt){
 var evt = ( window.event || evt );
 if (evt && evt.keyCode == 13){
  var e = (evt.target || evt.srcElement);
  triggerOnClick(e);
  return false;
  }
 }

/*ajax.js*/
var xmlhttp = new Array();
function ajaxload(url, params, id, onComplete){
 //object = {url,params,onStart,onComplete}
 id = id ? id : randstr() ;
 xmlhttp[id]='';
 
 if(window.ActiveXObject){ xmlhttp[id] = new ActiveXObject("Microsoft.XMLHTTP");}
 else if(window.XMLHttpRequest){ xmlhttp[id] = new XMLHttpRequest();}

 xmlhttp[id].onreadystatechange = function(){
  if (xmlhttp[id].readyState==4
   && (xmlhttp[id].status==200 || window.location.href.indexOf("http")==-1)
   ){
   if(id && document.getElementById(id)){ document.getElementById(id).innerHTML = xmlhttp[id].responseText;}
   if(onComplete){setTimeout(onComplete,10);};
   }
  }
 xmlhttp[id].open('POST', url, true);
 xmlhttp[id].setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 xmlhttp[id].send(params);

 }

function randstr(len,chars){
	chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"+chars;
	if(!len){len = 8;};
	var randomstring = '';
	for (var i=0; i<len; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
 return randomstring;
}

/*imagepreloader.js*/
function MM_preloadImages()
{ //v3.0
  var d = document;
  if (d.images) {
	if (!d.MM_p) d.MM_p = new Array();
	var i,j = d.MM_p.length,a = MM_preloadImages.arguments;
	for (i = 0; i < a.length; i++)
	  if (a[i].indexOf("#") != 0) {
		d.MM_p[j] = new Image;
		d.MM_p[j++].src = a[i];
	  }
  }
}

