/* Get dom element */
function $() {
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string') 
      element = document.getElementById(element); 
    if (arguments.length == 1)
      return element;
    elements.push(element);
  }
  return elements;
}

/* get URL parameters */
function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}


/* Gets the current year for copyright info */
function writeCurrentYear(){
  var date = new Date();
  document.write(date.getFullYear());
}

function setSubmitBt(){
	Spry.$$("input.button-submit").forEach(function(n) {
			n.onmouseover= function(){
				addClassName(n, "button-submit-over");
			}
			n.onmouseout= function(){
				removeClassName(n, "button-submit-over");
			}

		}
	);
}

Spry.Utils.addLoadListener(setSubmitBt);


// ********************** Image rollover and preload setup **********************

/* Preload Images */
/*var imgs = new Array();
imgs[0] = new Image();
imgs[0].src = "images/bg/submenu_triangle_on.gif";
imgs[1] = new Image();
imgs[1].src = "images/icons/contact_on.gif";
imgs[2] = new Image();
imgs[2].src = "images/icons/home_on.gif";
imgs[3] = new Image();
imgs[3].src = "images/icons/directions_on.gif";
imgs[4] = new Image();
imgs[4].src = "images/icons/spec_sheet_on.gif";*/

function rolloverInit() {
	// rollover setup
	Spry.$$("img[class~=bt]").forEach(function(n) { setupRollover(n) });
	// mousedown setup
	Spry.$$("img[class~=dn]").forEach(function(n) { setupMouseDown(n) });

};
Spry.Utils.addLoadListener(rolloverInit);


// Find out filename without extension from img src path
function xtractFilename(data){
	var m = data.match(/(.*)[\/\\]([^\/\\]+)\.\w+$/);
	return m[2];
}
// extract filename with extension from image src path
function xtractFileWithExt(data){
	var m = data.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/);
	return m[2];
}

// extract just the extension from an image filename
function xtractExt(data){
	data = data.replace(/^\s|\s$/g, ""); //trims string
	
	if (data.match(/([^\/\\]+)\.(jpg|jpeg|gif|png)$/i)){
		return RegExp.$2;
	}
}

// Setup image to rollover
function setupRollover(thisImage) {
	
	var srcString = thisImage.src;
	if(srcString.search("_act") != -1){
		srcString = srcString.replace("_act","");
	}
	
	thisImage.outImage = new Image();
	thisImage.outImage.src = srcString;
	thisImage.onmouseout = rollOut;
	
	thisFilename = xtractFileWithExt(thisImage.src);
	
	thisImage.overImage = new Image();
	thisImage.overImage.src = "images/" + xtractFilename(srcString) + "_over."+xtractExt(thisFilename);
	thisImage.onmouseover = rollOver;
}

// Setup image to click
function setupMouseDown(thisImage){
	
	var srcString = thisImage.src;
	if(srcString.search("_act") != -1){
		srcString = srcString.replace("_act","");
	}
	
	thisFilename = xtractFileWithExt(srcString);
	
	thisImage.downImage = new Image();
	thisImage.downImage.src = "images/" + xtractFilename(srcString) + "_dn."+xtractExt(thisFilename);
	thisImage.onmousedown = mouseDown;
	
	thisImage.onmouseup = rollOver;
}


function mapRollOver(file){
	var thisClass = "active";
	if (!this || !thisClass || (this.className && this.className.search(new RegExp("\\b" + thisClass + "\\b")) == -1)){
		elem.src = "images/"+file+".gif";
	}
}

function rollOver() {
	var thisClass = "active";
	if (!this || !thisClass || (this.className && this.className.search(new RegExp("\\b" + thisClass + "\\b")) == -1)){
		this.src = this.overImage.src;
	}

}

function rollOut() {
	var thisClass = "active";
	if (!this || !thisClass || (this.className && this.className.search(new RegExp("\\b" + thisClass + "\\b")) == -1)){
		this.src = this.outImage.src;
	}
}

function mouseDown() {
	var thisClass = "active";
	
	if (!this || !thisClass || (this.className && this.className.search(new RegExp("\\b" + thisClass + "\\b")) == -1)){
		this.src = this.downImage.src;
	}
}

// ***************** Hide / Display functions **********************

// Toggle visibility
function showHide(id){					
	var e = $(id);			
	if(e.style.visibility == 'visible'){ 	// Element already visible
		e.style.visibility = 'hidden';
	}else{ // element not visible
		e.style.visibility = 'visible';
	}
}

// Toggle display
function displayHide(id){					
	var e = $(id);
	if(e.style.display == 'block'){ 	// Element already visible
		e.style.display = 'none';
	}else{ // element not visible
		e.style.display = 'block';
	}
}

// Hide an element with an id
function hide(id){					
	var e = $(id);			
	e.style.display = 'none';
}

// Show an element
function show(id){					
	var e = $(id);			
	e.style.display = 'block';
}


// swap a style class 
function swapClass(elem, class1, class2){
	var e = $(elem);
	if(e.className != class2){
		e.className = class2;	
	}else{
		e.className = class1;	
	};
};


// ******************** Add / Remove style classes ************************

// Append a class to an element that may or may not already have a class
function addClassName(element, className){
	
	var ele = $(element);
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) != -1))
		return;
	ele.className += (ele.className ? " " : "") + className;
};

// Remove a class from an element that may or may not already have a class
function removeClassName(element, className){
	
	var ele = $(element);
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) == -1))
		return;
	ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");
};

// Add/Remove a class from an element that may or may not already have a class
function toggleClass(element, className){
	
	var ele = $(element);
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) != -1)){
		removeClassName(element, className);
	}else{
		addClassName(element, className);
	}
}

/*********************** FORM FUNCTIONS ****************************/

function isEmpty(str){
  return (str == null) || (trim(str).length == 0);
}

function isEmail(str){
  var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
  return re.test(str);
}

function trim(str){
  return str.replace( /\s+$/g, "" );
}

function convertName(str){
  str = str.charAt(0).toUpperCase() + str.substr(1);
  return str.replace(/_/g, " ");
}

function setFieldFocus(form){  
  
  if(form != null && form.elements[0] != null) {  
    for(var i = 0; i < form.length; i++){
      if(form.elements[i].type != "hidden" &&
         !form.elements[i].disabled &&
         !form.elements[i].readOnly){
           form.elements[i].focus();
           break;         
      }    
    }
  }
}
