var img = new Array();
img[0] = new Image;img[0].src = "../assets/images/back-arrow-n.png";
img[1] = new Image;img[1].src = "../assets/images/back-arrow-o.png";

function backarrow(obj, state) {
	obj.src = state == 'over' ? img[1].src : img[0].src;
}

function getSelectText(objSelect) {
  var si = objSelect.selectedIndex;
  return objSelect.options[si].text;
  //var w = document.myform.mylist.selectedIndex;
  //var selected_text = document.myform.mylist.options[w].text;
}

function getElem(elemName) {
	var obj;
	if(document.getElementById) {
		obj = document.getElementById(elemName);
		if (obj)
			return obj
		else
		  return false;

	} else
	  obj = document.all[elemName];
}

function accuracy() {
	var note = "Whilst every effort is made to ensure that the information contained within this Website is correct and up to date, the GPLA makes no warranties or representations as to its accuracy and accepts no liability or responsibility for any loss due to any errors or omissions in the content of the site or caused by reliance on this information. It is advised that users check any information before acting or relying on it.\n\n";
	note += "From time to time this Website may feature content related to the law and legal developments. Such content is intended to provide general guidance only and should not be regarded as a substitute for taking legal advice in relation to your particular circumstances.";
	alert(note);
}

var vldBegan = false;

function runningIE6() {
	var agent = navigator.userAgent;
	var msiePos = agent.indexOf("MSIE");

	if (msiePos != -1) {
		var fin = agent.indexOf(";", msiePos);
		if (fin != -1) {
			var version = parseFloat(agent.substr(msiePos + 5, fin - (msiePos + 5)));
			return version <= 7.0;
		}
	}
	return false;
}

function showRecordIsLocked(ttl, lockmsg) {
	var isIE6 = runningIE6();
	if (!isIE6) {
		Modalbox.show(lockmsg, {title: ttl, width: 650, inactiveFade: false});
		Modalbox.deactivate();
	} else {
	  var okCancel = lockmsg.indexOf("unlockRecord()") != -1, msg = ttl + ": ", prsmsg = "";
	  // find H4 tag and extract H4 - <p class=\"centre
	  var pos = lockmsg.indexOf("<h4 ");
	  if (pos > -1) {
	    prsmsg = lockmsg.substr(pos);
	    pos = prsmsg.indexOf("<p class=\"");
	    if (pos > -1) {
	      prsmsg = prsmsg.substr(0, pos);
	    }
	  
	  } else
	    prsmsg = lockmsg;
		prsmsg = removeTags(prsmsg);

	  msg += prsmsg + "IF YOU ARE SEEING THIS MESSAGE, WE STRONGLY RECOMMEND THAT YOU UPDGRADE YOUR BROWSER IN ORDER TO ENJOY THE FULL BENEFITS OF THIS SITE.\n\nClick <OK> to unlock the record, or <Cancel> to return to Members Only.";
	  if (!okCancel) {
	    var answer = false;

		} else
	  	var answer = confirm(msg);
	  if (answer)
			unlockRecord();

		else
		  document.location.href = "../members/";
	}
}

function removeTags(msg) {
	// <b>, <i>, <p>, <br /> and </h4> tags... should do for now!
	var regX = new RegExp("<b>", "g");
	msg = msg.replace(regX, "");
	var regX = new RegExp("</b>", "g");
	msg = msg.replace(regX, "");
	regX = new RegExp("<i>", "g");
	msg = msg.replace(regX, "");
	regX = new RegExp("</i>", "g");
	msg = msg.replace(regX, "");
	regX = new RegExp("</p>", "g");
	msg = msg.replace(regX, "\n\n");
	regX = new RegExp("<p>", "g");
	msg = msg.replace(regX, "");
	regX = new RegExp("</h4>", "g");
	msg = msg.replace(regX, "\n\n");
	regX = new RegExp("<br />", "g");
	msg = msg.replace(regX, "\n");

	return removeHTMLTags(msg);
}

function removeHTMLTags(msg) {
	// find opening angle brace ("<") then find closing brace (">") - remove all between including braces
	var st = 0, fn = 1;
	while (fn > 0) {
	  st = msg.indexOf("<");
	  if (st > -1) {
	    fn = msg.indexOf(">", st);
	    if (fn > 0) {
	      var rep = msg.substr(st, fn + 1 - st);
	      msg = msg.replace(rep, "");
	    }
	  } else
	    fn = -1;
	}
	return msg;
}

function addClassName(elem, classname) {
	try {
		removeClassName(elem, classname);
		var clsnm = elem.className + " " + classname;
		elem.className = clsnm;
	} catch(e) {
	  alert("Error adding classname ["+classname+"] to elem."+elem.id+"."+elem.name);
	}
}

function removeClassName(elem, classname) {
	try {
		var clsnm = elem.className;
		var regex = new RegExp(classname, "i");
		elem.className = clsnm.replace(regex, "");
	} catch(e) {
	  alert("Error removing classname ["+classname+"] to elem."+elem.id+"."+elem.name);
	}
}

function showError(elem, inError, errMsg, warnDiv) {
	try {
		if (warnDiv == null) {
		  if (inError) {
		    //elem.addClassName("error");
		    addClassName(elem, "error");
		    elem.title = errMsg;
			} else {
			  //elem.removeClassName("error");
			  removeClassName(elem, "error");
			  elem.title = "";
			}
		} else {
		  var elem = getElem(warnDiv);
		  if (elem) {
		    if (inError) {
		      addClassName(elem, "error");

				} else {
				  removeClassName(elem, "error");
		 		}
		  }
		}
		if (vldBegan) {
		  if (inError) {
				elem.focus();
			}
			vldBegan = false;
		}
		return inError ? errMsg : "";

	} catch(e) {
	  alert("Show error"+e.message);
	}
}

function alertErrors(msg) {
  var isIE6 = runningIE6(); //navigator.userAgent.indexOf("MSIE 6.0") != -1;
  // IE6 doesn't like Modalbox, so, if the user is that misguided, use standard alert box instead...

  if (isIE6) {
		msg = "The following errors prevented the form from submitting.\n\n" +
					" - " + msg.substr(3).replace(/---/g, "\n - ") +
					"\n\nThe errors are highlighted in red.\n" +
					"Please correct your errors and try again.";
		alert(msg);

	} else {
	  msg = "<li>" + msg.substr(3).replace(/---/g, "</li><li>") + "</li>";
	  msg = "<p class=\"subtitle\">The following errors occurred:</p>" +
					"<ol>" + msg + "</ol>" +
					"<p>These errors are marked on the form in red. Please correct them and then try again.</p>" +
					"<p class=\"centre\"><a href=\"#\" onclick=\"Modalbox.hide()\">Close</a></p>";
		Modalbox.show(msg, {title: 'Validation errors', width: 600});
	}
}

// various form validation functions
function isValidEmail(email) {
	/**
	 * Must contain the @ symbol = Test 1
	 * The name before the @ symbol must be at least one character long = Test 2
	 * Must contain a period = Test 3
	 * Each part of the domain must be one character in length or more = Test 4
	*/
	// Test 1
	if(email.indexOf("@")== -1) {
		return false;
	}
	var elements = email.split("@");
	// Test 2
	if(elements[0].length < 1) {
		return false;
	}
	var suff = elements[1].split(".");
	// Test 3
	if(suff.length < 2) {
		return false;
	}
	// Test 4
	if(suff[0].length < 1 || suff[1].length < 1) {
		return false;
	}
	// string passed the tests!
	return true;
}
function isValidDate(datTest) {
	// check that the datTest conforms to dd/mm/yyyy i.e. 2 nums then a slash, 2 more nums then a slash and then 4 nums
	if (datTest == "" || datTest == null) return false;
	
	var validformat=/^\d{2}\/\d{2}\/\d{4}$/ ;
	if(!validformat.test(datTest)) return false;

	// split datTest into component parts and then make sure that they are all valid
	var datTestBits = datTest.split("/");
	var datDay 	 	  = datTestBits[0];
	if (datDay.substr(0,1) == "0") datDay = datDay.substr(1);
	var datMonth 		= datTestBits[1];
	if (datMonth.substr(0,1) == "0") datMonth = datMonth.substr(1);
	var datYear  		= datTestBits[2];
	if (datYear.length < 4)
		if (datYear.substr(0,1) == "0") datYear = datYear.substr(1);

	var chkDate = new Date(datYear, (parseInt(datMonth)-1), datDay);

	if(chkDate.getFullYear() != datYear || chkDate.getMonth() != (datMonth - 1) || chkDate.getDate() != datDay) {
		return false;
	}
	// yep, it's passed the tests!
	return true;
}

function isValidPassword(datTest) {
	// must be seven chars or more
	datTest= datTest.toString();
	var l = datTest.length;
	if (l < 7)
		return false;
	// must contain at least one of these
	var vldAlt = "01234567890_-+=[{]}'@#~,.<>/?�!�$%^&*()";
	var conVld = false;
	for (var i = 0; i < l; i++) {
		if (vldAlt.indexOf(datTest.substr(i, 1)) != -1)
			conVld = true;
	}
	if (!conVld)
		return false;
	// must contain a mixture of uppoer and lowercase letters!=
	return (datTest != datTest.toLowerCase());
}
function isNumeric(datTest, moreThanZero) {
	if (moreThanZero == null)
	  moreThanZero = false;
	var data = parseFloat(datTest.toString().replace("�", ""));
	if (moreThanZero) {
		if (data == 0)
		  return false;
		else if (datTest == "")
		  return false;
	}
	return !isNaN(data);
}
function warn(divname, inError) {
	try {
		var div = $(divname);
		if (!inError)
			div.removeClassName('formerror');
		else
			div.addClassName('formerror');
	} catch(e) {
		alert("Error: " + e.message);
	}
	return inError;
}
function formElems(objFrm) {
	var names = "";
	if (objFrm.elements) {
		var l = objFrm.elements.length - 1;
		for (var i = 0; i <= l; i++)
			names += objFrm.elements[i].name + "\n";
	}
	return names;
}
function copy(obj, toID) {
	var copyVal = obj.value;
	var targ    = $(toID);
	if (targ)
		targ.value = copyVal;
}
function display(id, on) {
	var elem = $(id);
	if (elem) {
			if (on) elem.show();
			else elem.hide();
	}
}
var isinprocess = false;
function hidePopup() {
	var cont = $("popup");
	if (cont) {
		cont.parentNode.removeChild(cont);
		isinprocess = false;
		return true;
	}
	return false;
}
function showRatings(parentDIV) {
	if (parentDIV) {
	  var ttl1 = document.createElement("div");
	  with (ttl1) {
			className = "quality";
	    innerHTML = "Quality<br />";
	  }
		for (var i = 1; i < 5; i++) {
		  var rat = document.createElement("img");
		  with (rat) {
		    src = "../assets/images/rating-star.png";
		    alt = i;
		    id = "qual" + i;
		    className = "clickable";
		  }
		  ttl1.appendChild(rat);
		}
		var ttl2 = document.createElement("div");
		with (ttl2) {
		  className = "price";
		  innerHTML = "Price<br />";
		}
		for (i = 1; i < 5; i++) {
		  rat = document.createElement("img");
		  with (rat) {
		    src = "../assets/images/rating-star.png";
		    alt = i;
		    id = "prc" + i;
		    className = "clickable";
		  }
		  ttl2.appendChild(rat);
		}
		parentDIV.appendChild(ttl1);
		parentDIV.appendChild(ttl2);
		bindRatingsEvents();
	}
}
function bindRatingsEvents() {
	for (var i = 1; i < 5; i++) {
		var qual = $("qual"+i);
		var prc  = $("prc"+i);
		Event.observe(qual, "click", rateQuality.bindAsEventListener(qual, i));
		Event.observe(prc,  "click", ratePrice.bindAsEventListener(prc, i));
	}
}
var ticks = new Array(), frmRate = null;
function rateQuality(e, idx) {
  for (var i = 1; i < 5; i++) {
    var rat = $("qual"+i);
    rat.src = i <= idx ? ticks[0].src : ticks[1].src;
  }
  var objhid = frmRate.qualIdx;
  if (objhid)
    objhid.value = idx;
}
function ratePrice(e, idx) {
  for (var i = 1; i < 5; i++) {
    var rat = $("prc"+i);
    rat.src = i <= idx ? ticks[0].src : ticks[1].src;
  }
  var objhid = frmRate.prcIdx;
  if (objhid)
    objhid.value = idx;
}
function loadImages(frmRat) {
	if (frmRat == null)
	  frmRate = frmRat;
	else
	  frmRate = document.forms[0];

	ticks[0] = new Image();
	ticks[0].src = "../assets/images/rating-star.png";
	ticks[1] = new Image();
	ticks[1].src = "../assets/images/rating-off.png";
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
function atHome() {
  // find either "/gpla/" or ".co.uk/" - if there's another "/" after this, we're in a subdir
  var url = document.URL;
  var idxPos = url.indexOf("/gpla/");
  if (idxPos == -1) // not local, so check live site URL
    idxPos = url.indexOf(".co.uk/");

  if (url.indexOf("/", idxPos + 8) == -1)
    return true;
  // if all else fails return "not in the root dir!"
  return false;
}
function resetEdit(redir) {
  // configure the relative path to the function
  var inRoot = atHome();
  var toRoot = inRoot ? "" : "../";
  var url = toRoot+"admin/getdata.php?func=editstart";

  // make the ajax request and redirect to the appropriate page, if all goes well...
  new Ajax.Request(url, {
    method: 'get',
    onFailure: function() {
      alert("Sorry, your unable to access this page at this time.\nIf this keeps happening, please report this to the GPLA.");
    },
    onSuccess: function() {
      document.location.href = redir;
    }
  });
}

function checkForApos(obj,removeOnly) {
  if (removeOnly == null)
    removeOnly = false;
  var txt = obj.value;
  var newreg = /\W/g;
  var idxpos = txt.search(newreg);
  if (idxpos > -1) {
    var newtxt = txt;
    if (!removeOnly)
      newtxt = txt.substring(idxpos + 1);
    newtxt = newtxt.replace(newreg, "");
    obj.value = newtxt;
  }
}