
/** Author: Dan Stephenson // Jumpstart Design
  *  Date: --/--/2008
  *  Filename: jsFuncs.js
  *  Function: various js functions for design/functionality
  *  History: 
*/

// switch menus (requires jquery)

function toggleMenu(all, curr, classname)
{
	var menus=all.split(",");

	for(i=0; i < menus.length; i++)
	{
		if (menus[i] != "")
		{
			jQuery('#' + menus[i]).removeClass(classname);
			jQuery('#' + menus[i]  + '_page').addClass('displayNone');
		}
	}

	jQuery(curr).addClass(classname);
	jQuery(curr + '_page').removeClass('displayNone');
}

// set a form/elements value

function setValue(id, value)
{
	document.getElementById(id).value = value;
}

// set a form/elements value

function getValue(id)
{
	return document.getElementById(id).value;
}

function getChecked(id)
{
	return document.getElementById(id).checked;
}

// Popups (spam spam spam!)

function launchPopup(url, name, w, h)
{
	window.open(url,name,'menubar=no,titlebar=no,resizable=no,menubar=no,location=no,location=0,scrollbars=no,width='+w+',height='+h+',toolbar=no');
}

function launchPopupScroll(url, name, w, h)
{
	window.open(url,name,'menubar=no,titlebar=no,resizable=no,menubar=no,location=no,location=0,scrollbars=yes,width='+w+',height='+h+',toolbar=no');
}


// PHP style isset for checking if var initialized (nb. prefix ele parameter with window.)

function isset(variable_name)
{
	try
	{
		if (typeof(eval(variable_name)) != 'undefined')
		if (eval(variable_name) != null)
		return true;
	} catch(e) { }
	
	return false;
}

// create a cookie..  usage: createCookie('name','value',1);

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 var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function createCookieHrs(name,value,hours) {
	if (hours) {
		var date = new Date();
		date.setTime(date.getTime()+(hours*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function createCookieMin(name,value,mins) {
	if (mins) {
		var date = new Date();
		date.setTime(date.getTime()+(mins*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var 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 eraseCookie(name) {
	createCookie(name,"",-1);
}


// check textbox is numbers only..  usage: onkeypress="return isNumberKey(event)"

function isNumberKey(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode
	if (charCode > 31 && (charCode < 48 || charCode > 57)){
		return false;	
	}
	return true;
}


// check textbox is empty (true=yes,false=no)

function isEmpty( newString ) {
	if ( newString.length == 0  || newString == "" || newString == null || newString.charAt(0) == ' ') {
		return true;
	}
	else { return false; }
}

// allow only certain types of data into text box

var letters=' ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZabcçdefghijklmnñopqrstuvwxyzàáÀÁéèÈÉíìÍÌïÏóòÓÒúùÚÙüÜ';
var numbers='1234567890';
var signs=',.:;@-\'';
var mathsigns='+-=()*/';
var custom='<>#$%&?¿';

function alpha(e,allow) {
var k;
k=document.all?parseInt(e.keyCode): parseInt(e.which);
return (allow.indexOf(String.fromCharCode(k))!=-1);
}

function stripSpecialChars( newString ) {
     newString=filterNum(newString);
	 return newString;

     function filterNum(str) {
          re = /\$|,|@|#|~|`|\%|\*|\^|\&|\(|\)|\+|\=|\[|\-|\_|\]|\[|\}|\{|\;|\:|\'|\"|\<|\>|\?|\||\\|\!|\$|\./g;
          // remove special characters like "$" and "," etc...
          return str.replace(re, "");
     }
}


function checkSpecialChars( newString )
{
   var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";

   for (var i = 0; i < newString.length; i++) {
  	  if (iChars.indexOf(newString.charAt(i)) != -1) {
  	     return false;
      }
   }
   
   return true;
}


function changeInnerHTML( element, html )
{
   document.getElementById( element ).innerHTML = html;
}

function trim(stringToTrim)
{
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function ltrim(stringToTrim)
{
   return stringToTrim.replace(/^\s+/,"");
}

function rtrim(stringToTrim)
{
   return stringToTrim.replace(/\s+$/,"");
}

function eraseContents( id1 )
{
   var layer1 = document.getElementById( id1 );     //  current layer
   layer1.innerText = '';	
   layer1.style.display = 'none';
}

function hideLayer( id1 )
{
   var layer1 = document.getElementById( id1 );     //  current layer
   layer1.style.display = 'none';
}


function showLayer( id1 )
{
   var layer1 = document.getElementById( id1 );     //  current layer
   layer1.style.display = 'block';
}


function toggleLayer( id1 )
{
   var layer1 = document.getElementById( id1 );     //  current layer
	
   if(layer1.style.display == 'block') {
      layer1.style.display = 'none';
   } else {
      layer1.style.display = 'block';
   }
}

function toggle2Layers( id1, id2 )
{
   var layer1 = document.getElementById( id1 );     //  current layer
   var layer2 = document.getElementById( id2 );     //  new layer

   if(layer1.style.display == 'none') {
      layer1.style.display = 'block';
      layer2.style.display = 'none';
   } else {
      layer1.style.display = 'none';
      layer2.style.display = 'block';
   }

}

function toggleVisibility( id1 )
{
   var layer1 = document.getElementById( id1 );     //  current layer
	
   if(layer1.style.visibility == "hidden") {
      layer1.style.visibility = "visible";
   } else {
      layer1.style.visibility = "hidden";
   }
}

function toggle2Visibility( id1, id2 )
{
   var layer1 = document.getElementById( id1 );     //  current layer
   var layer2 = document.getElementById( id2 );     //  new layer

   if(layer1.style.display == 'none') {
      layer1.style.visibility = "visible";
      layer2.style.visibility = "hidden";
   } else {
      layer1.style.visibility = "hidden";
      layer2.style.visibility = "visible";
   }

}

function getElementHeight(Elem) {
	if (ns4) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.height;
	} else {
		if(document.getElementById) {
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		if (op5) { 
			xPos = elem.style.pixelHeight;
		} else {
			xPos = elem.offsetHeight;
		}
		return xPos;
	} 
}

function getElementWidth(Elem) {
	if (ns4) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.width;
	} else {
		if(document.getElementById) {
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		if (op5) {
			xPos = elem.style.pixelWidth;
		} else {
			xPos = elem.offsetWidth;
		}
		return xPos;
	}
}

/* delay/pause javascript (useful hack) */

function delayJS(millis) 
{
	var date = new Date();
	var curDate = null;

	do { curDate = new Date(); } 
	while(curDate-date < millis);
}

/* tests to see if string is in correct UK style postcode: AL1, BM1, BN44, RH12 etc. */

function isValidPostcodeArea(p) {
	var postcodeRegEx = /[A-Z]{1,2}[0-9]{1,2}/i;
	return postcodeRegEx.test(p);
}

/* tests to see if string is in correct UK style postcode: AL1 1AB, BM1 5YZ etc. */

function isValidPostcode(p) {
	var postcodeRegEx = /[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}/i;
	return postcodeRegEx.test(p);
}

/*	formats a VALID postcode nicely: AB120XY -> AB1 0XY */

function formatPostcode(p) {
	if (isValidPostcode(p)) {
		var postcodeRegEx = /(^[A-Z]{1,2}[0-9]{1,2})([0-9][A-Z]{2}$)/i;
		return p.replace(postcodeRegEx,"$1 $2");
	} else {
		return p;
	}
}
