/*************************************************
AUTHOR: David Mingos
CONTACT: http://dmdesigns.com/contact/
*************************************************/

Event.observe(window, 'load', function() {
   
   loadActiveStylesheet();

   $$('#text-sizer a').each(function(link) {
      link.onclick = function() {
			setActiveStyleSheet(link.title);
			return false;
		}
   })

});

Event.observe(window, 'unload', unloadActiveStylesheet);


function validateEmail(address) {
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(address);
}

function autoClearInput(input) {

   if($(input)) {

      input = $(input);

      if(input.type == 'text' || input.type == 'textarea') {
         input.onfocus = function() {
            if (this.value == this.defaultValue){
               this.value='';
               this.removeClassName('defaultValue');
            }
         };

         input.onblur = function() {
            if (!this.value) {
               this.value = this.defaultValue;
               this.addClassName('defaultValue');
            }
         };
         
         if (input.value == input.defaultValue) input.addClassName('defaultValue');
         else input.removeClassName('defaultValue');

      }
   }

}


/* SCRIPT FROM SON OF SUCKERFISH DROPDOWNS
*******************************************************************************
Source: http://www.htmldog.com/articles/suckerfish/dropdowns/ 
*/

sfHover = function() {
   if (document.getElementById('nav')) {
   	var sfEls = document.getElementById('nav').getElementsByTagName('LI');
   	for (var i=0; i<sfEls.length; i++) {
   		sfEls[i].onmouseover=function() {
   			this.className += ' sfhover';
   		}
   		sfEls[i].onmouseout=function() {
   			this.className = this.className.replace(new RegExp(' sfhover\\b'), '');
   		}
   	}
   }
}
if (window.attachEvent) window.attachEvent('onload', sfHover); // for ie 6 only

/* ****************************************************************************
 * END SON OF SUCKERFISH DROPDOWNS
** ************************************************************************** */


/* SCRIPT FROM A LIST APART'S STYLESHEET SWITCHER
*******************************************************************************
Source: http://www.alistapart.com/stories/alternate/ 
Modifications:
   The window.onload and window.onunload statements have been put 
   into functions called loadActiveStylesheet() and unloadActiveStylesheet() so
   that they play well with other loading and unloading logic. Loading and 
   unloading is handled in custom.js.
*/

function setActiveStyleSheet(title) {
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == title) a.disabled = false;
    }
  }
}

function getActiveStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

function loadActiveStylesheet(e) {
  var cookie = readCookie("style");
  var title = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(title);
}

function unloadActiveStylesheet(e) {
  var title = getActiveStyleSheet();
  createCookie("style", title, 365);
}

var cookie = readCookie('style');
var title = cookie ? cookie : getPreferredStyleSheet();
setActiveStyleSheet(title);

/* ****************************************************************************
 * END STYLESHEET SWITCHER
** ************************************************************************** */


/* DEBUG DEBUG MESSAGES WINDOW
*******************************************************************************
*/

function debug(message) {
	var debuggerId = 'activity-log';
	if (!document.getElementById(debuggerId)) {
		buglog = document.createElement('div');
		buglog.id = debuggerId;

		buglog.style.position = 'absolute';
		buglog.style.top = '15px';
		buglog.style.right = '15px';
		buglog.style.backgroundColor = 'lightyellow';
		buglog.style.color = 'black';
		buglog.style.border = '1px solid black';
		buglog.style.paddingRight = '20px';
		buglog.style.opacity = '0.8';
		
		document.body.appendChild(buglog);

		drglog = new DebugDragger('drglog',buglog);
		drglog.SetEvents();
	} else {
		buglog = document.getElementById(debuggerId);
	}

	if (buglog.childNodes.length == 0) {
		logtitle = getNewElement(buglog.id, 'p');
		logtitle.style.textAlign='right';
		logtitle.style.marginLeft='15px';
		logtitle.style.borderBottom = '1px dotted black';
		logtitle.innerHTML = '<strong style=\'cursor:default\'>Activity Log</strong>';
		ol = getNewElement(buglog.id, 'ol');
		ol.onmouseover = function() {
			drglog.draggable = false;
		}
		ol.onmouseout = function() {
			drglog.draggable = true;
		}
		clearbutton = getNewElement(buglog.id, 'p');
		clearbutton.style.textAlign='right';
		//clearbutton.innerHTML += '<button onclick="document.getElementById(buglog.id).style.display=\'none\';return false;">Hide</button>\n';
		clearbutton.innerHTML += '<button onclick="document.getElementById(buglog.id).parentNode.removeChild(document.getElementById(buglog.id));return false;">Close</button>';
	} else {
		ol = buglog.childNodes[1];
	}

	var li = getNewElement(ol.id, 'li');
	li.style.whiteSpace = 'pre';
	document.getElementById(li.id).appendChild(document.createTextNode(message));
	buglog.style.display = 'block';
}

function getNewElement(parentId, eltag) {
	var parentEl = document.getElementById(parentId);
	var childEl = document.createElement(eltag);
	childEl.id = parentEl.id + '-child'+ parentEl.childNodes.length;
	parentEl.appendChild(childEl);
	return childEl;
}

function DebugDragger(id,target,handle) {	
	this.id = id;
	this.target = target; //object to drag
	handle = handle ? handle : target; //if no handle, entire object
	this.handle = handle; //object child - to drag
	
	this.dragging = false;
	this.clickable = true;
	
	this.draggable = true;
}

DebugDragger.prototype.SetEvents = function () {

	var me = this;
	
	this.handle.ondrag = function() { return false; };
	this.handle.onselectstart = function() { return false; };
	
	this.handle.onmousedown = function (evt) {		
		evt = evt ? evt : window.event;

		me.MouseDownX = evt.pageX ? evt.pageX : evt.clientX;
		me.MouseDownY = evt.pageY ? evt.pageY : evt.clientY;
		
		if (!me.draggable) return;

		me.dragging = true;
			
		me.MouseOffsetX = me.MouseDownX - me.FindPosX();
		me.MouseOffsetY = me.MouseDownY - me.FindPosY();
			
		document.onmousemove = function (evt) {
			if (me.dragging) {
				evt = evt ? evt : window.event;
					
				me.MouseX = evt.pageX ? evt.pageX : evt.clientX;
				me.MouseY = evt.pageY ? evt.pageY : evt.clientY;
					
				var x = me.MouseX - me.MouseOffsetX;
				var y = me.MouseY - me.MouseOffsetY;
				
				me.target.style.right = '';
				me.target.style.bottom = '';

				me.target.style.left = x + 'px';
				me.target.style.top = y + 'px';
			}
			return false;
		};
			
		return false;
	};
	this.handle.onmouseup = function() {
		document.onmousemove = null;
		me.dragging = false;
		
		if (me.MouseUp) { //function set
			me.MouseUp();
		}

		return false;
	};
};

DebugDragger.prototype.ClickAction = function(inFunc) {
	var me = this; //passed as object to function set
	if (!inFunc) { //passed in null
		this.handle.onclick = null;
	} else {
		this.handle.onclick = function(evt) {
			evt = evt ? evt : window.event;
			if(me.RegisterClick(evt)) {
				inFunc(me);
			}
		};
	}
};

DebugDragger.prototype.MouseOver = function(inFunc) {
	var me = this; //passed as object to function set
	this.target.onmouseover = function() {
		inFunc(me);
		
		return;
	};
};

DebugDragger.prototype.MouseOut = function(inFunc) {
	var me = this; //passed as object to function set
	this.target.onmouseout = function() {
		inFunc(me);
		
		return;
	};
};

DebugDragger.prototype.AddMouseUp = function(inFunc) {
   //not set as a handler
	var me = this; //passed as object to function set
	var tmp = this.MouseUp;
	this.MouseUp = function (tmp) {
		if (tmp) {
			tmp();
		}
		inFunc(me);
	}
	//inFunc(this); //passed as object to function set
	
	return;
};

DebugDragger.prototype.RegisterClick = function (evt) {
	if (!this.clickable) {
		return false;
	} else {
		this.MouseUpX = evt.pageX ? evt.pageX : evt.clientX;
		this.MouseUpY = evt.pageY ? evt.pageY : evt.clientY;
		
		var x = this.MouseDownX - this.MouseUpX;
		var y = this.MouseDownY - this.MouseUpY;
		
		if (Math.abs(x) < 3 && Math.abs(y) < 3) {
			this.dragging = false;
			return true;
		} else {
			return false;
		}
	}
};

DebugDragger.prototype.FindPosX = function () {
	var curleft = 0;
	var obj = this.target;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
};

DebugDragger.prototype.FindPosY = function () {
	var curtop = 0;
	var obj = this.target;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
};
/* ****************************************************************************
 * END DEBUG MESSAGES WINDOW
** ************************************************************************** */

