// JavaScript Document for common routines

//initialise any jQuery functions
$(document).ready(function() {
	tvad()
	cctabs()
});

function tvad() {
	$('#tv_ad_link').fancyZoom();
}

/*Click Consult Added below 29/10/2009 */

function cctabs() {
	$(".tab:not(:first)").hide();
	$(".tab:first").show();
	$(".htabs a:first").addClass("gt_active");
	$(".htabs a").click(function(){
		$('.htabs a').removeClass('gt_active');
		$(this).addClass("gt_active");
		stringref=$(this).attr("href").split('#')[1];
		$('.tab:not(#'+stringref+')').hide();
		if($.browser.msie&&$.browser.version.substr(0,3)=="6.0"){
			$('.tab#'+stringref).show();
		}
	else
		$('.tab#'+stringref).show();
		return false;
	});
}

/* Click Consult Added - End */

/* original fuctions - look to clear up now jquery library is available - 2/10/9 */

function openChat(varUrl) {
	var winleft=(screen.width-710)/2;
	var wintop=(screen.height-455)/2;
	window.open(varUrl,'chat','toolbar=0,location=0,status=1,menubar=0,scrollbars=0,resizable=0,width=710,height=455,top='+wintop+',left='+winleft);
}

/*add target="blank" for external links */
function externalLinks() {
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") &&
		anchor.getAttribute("rel") == "external")
		anchor.target = "_blank";
	}
}
addEvent(window, 'load', externalLinks);
//window.onload = externalLinks;


/*--------------------------------------------------------------------------*/

/*
 * Form functions to allow field highlighting and hover instructions
 * http://wufoo.com
 */

addEvent(window, 'load', initForm);

var highlight_array = new Array();

function initForm(){
	initializeFocus();
}

// for radio and checkboxes, they have to be cleared manually, so they are added to the
// global array highlight_array so we dont have to loop through the dom every time.
function initializeFocus(){
	fields = getElementsByClassName(document, "*", "field");
	for(i = 0; i < fields.length; i++) {
		if(fields[i].type == 'radio' || fields[i].type == 'checkbox' || fields[i].type == 'file') {
			fields[i].onclick = function(){clearSafariRadios(); addClassName(this.parentNode.parentNode.parentNode, "focused", true)};
			fields[i].onfocus = function(){clearSafariRadios(); addClassName(this.parentNode.parentNode.parentNode, "focused", true)};
			highlight_array.splice(highlight_array.length,0,fields[i]);
		}
		else {
			fields[i].onfocus = function(){clearSafariRadios();addClassName(this.parentNode.parentNode.parentNode, "focused", true)};
			fields[i].onblur = function(){removeClassName(this.parentNode.parentNode.parentNode, "focused")};
		}
	}
}

function clearSafariRadios() {
	for(var i = 0; i < highlight_array.length; i++) {
		removeClassName(highlight_array[i].parentNode.parentNode.parentNode, 'focused');
	}
}


//http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];		
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}	
	}
	return (arrReturnElements)
}

//http://www.bigbold.com/snippets/posts/show/2630
function addClassName(objElement, strClass, blnMayAlreadyExist){
   if ( objElement.className ){
      var arrList = objElement.className.split(' ');
      if ( blnMayAlreadyExist ){
         var strClassUpper = strClass.toUpperCase();
         for ( var i = 0; i < arrList.length; i++ ){
            if ( arrList[i].toUpperCase() == strClassUpper ){
               arrList.splice(i, 1);
               i--;
             }
           }
      }
      arrList[arrList.length] = strClass;
      objElement.className = arrList.join(' ');
   }
   else{  
      objElement.className = strClass;
      }
}

//http://www.bigbold.com/snippets/posts/show/2630
function removeClassName(objElement, strClass){
   if ( objElement.className ){
      var arrList = objElement.className.split(' ');
      var strClassUpper = strClass.toUpperCase();
      for ( var i = 0; i < arrList.length; i++ ){
         if ( arrList[i].toUpperCase() == strClassUpper ){
            arrList.splice(i, 1);
            i--;
         }
      }
      objElement.className = arrList.join(' ');
   }
}

//http://ejohn.org/projects/flexible-javascript-events/
function addEvent( obj, type, fn ) {
  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] );
  } 
  else{
    obj.addEventListener( type, fn, false );	
  }
}

/* 
	Form Validation based partly on http://marcgrabanski.com/code/clean-form-validation
	Reworked by Vernon Blackmore http://www.netnak.co.uk
*/

var cleanValidator = {
	init: function (settings,errormessage) {
		this.settings = settings;
		this.form = document.getElementById(this.settings["formId"]);
		formInputs = this.form.getElementsByTagName("input");

		for(i=0;i<formInputs.length;i++)
		{
			if(formInputs[i].getAttribute("type") != "submit") {
				input = formInputs[i];
				input.style.background = "";
				//input.style.border = "1px solid "+this.settings["inputColors"][1];	//don'tforce borders on load
			}
		};

		this.form.onsubmit = function () {
			error = cleanValidator.validate(errormessage);
			if(error.length < 1) {
				return true;
			} else {
				if (error !=" ") {cleanValidator.printError(error);}
				return false;
			}
		};
	},
	validate: function (errormessage) {
		error = '';
		var errorField;
		var errorFields = "";
		validationTypes = new Array("isRequired", "isTicked", "isSelected", "isFirstchoice", "isEmail", "isNumeric", "isDay", "isMonth", "isYear", "isPostcode");
		for(n=0; n<validationTypes.length; n++) {
			var x = this.settings[validationTypes[n]];
			if(x != null) {
				for(i=0; i<x.length; i++) 
				{
					var restoreborder = true;
					inputField = document.getElementById(x[i]);
					errorField = inputField.name + "_error";
					document.getElementById(errorField).style.display = "none";
					switch (validationTypes[n]) {
						case "isRequired" :
							valid = isRequired(inputField.value);
							break;
						case "isTicked" :
							valid = inputField.checked;
							restoreborder = false;
							break;
						case "isSelected" :
							var selectedIndex = inputField.selectedIndex;
							valid = true;
							if (inputField.options[selectedIndex].value=="") {valid = false;}
							break;
						case "isFirstchoice" :
							valid = getfirstchoice(inputField);
							restoreborder = false;
							break;	
						case "isNumeric" :
							valid = regtest(inputField.value,"\\d*"); break;
						case "isDay" :
							valid = isRange(inputField.value,1,31);
							break;
						case "isMonth" :
							valid = isRange(inputField.value,1,12);	break;
						case "isYear" :
							valid = isRange(inputField.value,1900,2049); break;
						case "isText" :
							valid = regtest(inputField.value,"\\D*"); break;
						case "isEmail" :
							valid = regtest(inputField.value,"[^\\s()<>@,;:\\/]+@\\w[\\w\\.-]+\\.[a-z]{2,}");	break;
						case "isPostcode" :
							valid = regtest(inputField.value,"[A-Za-z]{1,2}[0-9A-Za-z]{1,2}[ ]?[0-9]{0,1}[A-Za-z]{2}");	break;
					}
					if(!valid) {errorFields = errorFields + "," + inputField.name+",";}
					if(valid) {if (errorFields.indexOf(inputField.name+",") > 0) valid = !valid; }
					
					if(!valid) {
						error = errormessage + " ";
						inputField.style.background = this.settings["errorColors"][0];
						inputField.style.border = "1px solid "+this.settings["errorColors"][1];
						document.getElementById(errorField).style.display = "inline";
						
						} else {
						inputField.style.background = "";
						//restore the borders if the field is not radio/checkbox
						if (restoreborder) {
							inputField.style.border = "1px solid "+this.settings["inputColors"][1];
							} else {
							inputField.style.border = "none";
							}
						}
				}
			}
		}
		return error;
	},
	printError: function (error) {
		alert(error);
	}
};

function isRequired(str){
	if ((str == null) || (str.length == 0)) {return false};
	return true;
}
function isTicked(str){
	return str;
}
function regtest(str,expr) {
	if ( (str == null) || (str.length == 0)) return true;
	var re = new RegExp("^"+expr+"$","i");
	return re.test(str);
}

// returns true if the string only contains characters 0-9 and is not null and is in range 1-31
function isRange(str,startvalue,endvalue){
	if ((str == null) || (str.length == 0)) {return true};	//ignore empty fields (need to use isRequired for these)
	var re = /^\d*$/
	var result = re.test(str);
	if (!result) {return false;}
	var strno = parseInt(str);
	if (strno < startvalue || strno > endvalue) return false;
	return true;
}

//Checks to see if the first option in a radio group is checked
function getfirstchoice(radioObj) {
	if(!radioObj)
		return false;
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return true;
		else
			return false;
		if(radioObj[0].checked) {
			return true;
		}
	return false;
}