// identify explorer - not as easy as it sounds (opera likes to pretend it's IE)
var MSIE = /^ms_/.test(document.documentElement.uniqueID);
var ieVersion = (MSIE) ? navigator.appVersion.match(/MSIE (\d\.\d)/)[1] : 0;

function _addEventListener(element, eventName, func) {
	if (element.addEventListener) element.addEventListener(eventName, func, false); // W3C
	else if (element.attachEvent) element.attachEvent('on' + eventName, func); // IE
	else element['on' + eventName] = func;
}

function submitForm(formName) {
	document[formName].submit()
};

function setFormAction(formName, actionValue) {
	document[formName].action = actionValue;
};

function openWindow(url, width, height){
	var win = window.open(url, "", "toolbar=no,location=no,directories=no,status=no,menubar=0,resizable=0,copyhistory=no,width=" + width + ",height=" + height + ",scrollbars=1");
	if (win.focus) win.focus();
};

function getWindowHeight() {
	return window.innerHeight || document.documentElement.offsetHeight;
};

// convert text to HTML so we can update innerHTML safely
function encodeHTML(text) {
	return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
};

function adSetup() {
	if (window.adDrop) adDrop();
	resize();
	if (window.roundedCorners) roundedCorners.recalc();
};

// ensure that page content expands to fill the height of the screen
var MIN_HEIGHT = (MSIE) ? "height" : "minHeight";
function resize() {
	var content = document.getElementById("pagecontent");
	var footer = document.getElementById("footer");
	if (content && footer) {
		//content.style[MIN_HEIGHT] = getWindowHeight() - content.offsetTop - footer.offsetHeight;
	}
};

// event handling

function addEventHandler(element, event, handler) {
	if (element.attachEvent) element.attachEvent(event, handler);
	else if (element.addEventListener)	element.addEventListener(event.slice(2), handler, null);
};

if (!MSIE || ieVersion > 5) addEventHandler(window, "onresize", resize);
addEventHandler(window, "onload", adSetup);

//admin site functions

function setUserAction(formName, actionField, actionValue) {
    document[formName].elements[actionField].value = actionValue;
}

function setNextStep(formName, value) {
    document[formName].nextStep.value = value;
}

// script to target parent of pop-up window

function targetopener(mylink, closeme, closeonly){
	if (! (window.focus && window.opener))return true;
	window.opener.focus();
	if (! closeonly)window.opener.location.href=mylink.href;
	if (closeme)window.close();
	return false;
	}

//car finance price-poster
function constructURL(url,formName){
	amount=document.finance.borrow.value;
	newURL = url+'?amount='+amount;
	//removed opener functionality
	//window.opener.focus();
	//window.opener.location.href=newURL;
	//window.location.href=newURL;
	raw_popup(newURL,'_blank','location=0,resizable=yes,statusbar=0,scrollbars=1, menubar=0, width=780, height=500');
	//self.resizeTo(780,500);
	return false;
}

/* popup window stuff */

function isUndefined(v) {
    var undef;
    return v===undef;
}

var _POPUP_FEATURES = 'location=0,resizable=yes, statusbar=0,scrollbars=1, menubar=0, width=680, height=500';

function raw_popup(url, target, features) {
    // pops up a window containing url optionally named target, optionally having features
    if (isUndefined(features)) features = _POPUP_FEATURES;
    if (isUndefined(target  )) target   = '_blank';
    var theWindow = window.open(url, target, features);
    theWindow.focus();
    return theWindow;
}

function link_popup(src, features) {
    // to be used in an html event handler as in: <a href="..." onclick="link_popup(this,...)" ...
    // pops up a window grabbing the url from the event source's href
    return raw_popup(src.getAttribute('href'), src.getAttribute('target') || '_blank', features);
}

function fillChilds(form,name1,name2,allchilds,allparents) {
	emptySelectBox(form, name1, allchilds);
	var childid = 0;
	var start = 1;
	var name2Length = document[form][name2].length;
	if (allchilds == true) {
		childid = 1;
	}
	if (allparents == false) {
		start = 0;
	}
    var selectedvalue = 0;
	for (var i=start;i<name2Length;i++) {
		if (document[form][name2][i].selected) {

            selectedvalue = parentArr[i-start].split(";")[0];
			var tmpArr = childArr[i-start].split("|");
			for (var j=0;j<tmpArr.length;j++) {
				var tmpArr2 = tmpArr[j].split(";");
			    document[form].elements[name1].options[childid] = new Option(tmpArr2[1],tmpArr2[0]);
                childid++;
			}
		}
	}
    if (allchilds) {
        document[form].elements[name1].options[0].value = '0';
    }
}

function emptySelectBox(form, boxname, allchilds){
	var length = Number(document.forms[form].elements[boxname].options.length);

	if (navigator.appName.indexOf("Netscape") != -1) {
		for (var i=(length); i > 0; i--) {
			document.forms[form].elements[boxname].options[i]=null;
		}
	} else if (navigator.userAgent.indexOf("Opera") != -1) {
		for(var i=(length); i > 0; i--) {
			document.forms[form].elements[boxname].options.remove(i);
		}
	} else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) >= 4)) {
		for(var i=(length); i > 0; i--) {
			document.forms[form].elements[boxname].options.remove(i);
		}
	} else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) < 4)) {
		for (var i=(length-1); i > 0; i--) {
			document.forms[form].elements[boxname].options[i].selected = false;
		}
	} else {
		for (var i=(length-1); i > 0; i--) {
			document.forms[form].elements[boxname].options[i].selected = false;
		}
	}
	if (navigator.appName.indexOf("Netscape") == -1) {
		if (allchilds) {
			document.forms[form].elements[boxname].options[0] = new Option("All","0",true,true);
		} else {
			document.forms[form].elements[boxname].options[0] = new Option("","0",true,true);
		}
		document.forms[form].elements[boxname].options[0].selected = true;
	}
}

var numb = '0123456789';

function isValid(parm,val) {
  if (parm == "") return true;
  for (i=0; i<parm.length; i++) {
    if (val.indexOf(parm.charAt(i),0) == -1) return false;
  }
  return true;
}

function isNum(parm) {return isValid(parm,numb);}

function openLocationWindow(formName, fieldName, parameterName, url){
    url = url + '?' + parameterName + '=' + document[formName].elements[fieldName].value + '&locationfield=' + fieldName;
	openWindow(url, '700','400');
};

function returnValueToOpener(formName, fieldName, localFormName, localFieldName, multiple) {
    if (formName != null && fieldName != null && localFormName != null && localFieldName != null) {
        var returnValue = this.document.forms[localFormName].elements[localFieldName].value;
        if (multiple) {
            var array = new Array();
            array = this.document.forms[localFormName].elements[localFieldName];
            var finished = false;
            var index = 0;
            while(!finished || index < array.length) {
                if (array[index].checked == true) {
                    returnValue = array[index].value;
                    finished = true;
                }
                index++;
            }
        }
        window.opener.document[formName].elements[fieldName].value = returnValue;        
    }
};

function closeLocationWindow(formName) {
    window.close();
    window.opener.document[formName].submit();
    window.opener.focus();
};

// Used by the <input:select> tag to remember options when the user navigates back in history
function rememberoptions_load(inputSelect) {
	if (inputSelect && inputSelect.form && inputSelect.options) {
		var hValues = inputSelect.form[inputSelect.name + '_values'];
		var hText = inputSelect.form[inputSelect.name + '_text'];
		var hSelected = inputSelect.form[inputSelect.name + '_selected'];
		if (hValues && hText && hSelected && hValues.value.length > 0) {
			// deserialize the arrays from the hidden fields
			var optionValues = hValues.value.split(';');
			var optionText = hText.value.split(';');
			var optionSelected = hSelected.value.split(';');

			// Delete all existing options.
			while (inputSelect.options.length>0) inputSelect.options.remove(0);

			for (var i=0; i<optionValues.length; ++i) {
				// Create a new option
				var option = new Option(optionText[i], optionValues[i]);
				// Add the option to the select tag
				inputSelect.options[i] = option;
				// Mark the option as selected if it should be
				for (var j=0; j<optionSelected.length; ++j) if (option.value == optionSelected[j]) {
					option.selected = true;
				}
			}
		}
	}
}

// Used by the <input:select> tag to remember options when the user navigates back in history
function rememberoptions_save(inputSelect) {
	if (inputSelect && inputSelect.form && inputSelect.options) {
		var options = inputSelect.options;
		var optionValues = new Array(), optionText = new Array(), optionSelected = new Array();

		// Store options to arrays
		for (var i=0; i<options.length; ++i) {
			var option = options[i];
			optionValues.push(option.value);
			optionText.push(option.text);
			if (option.selected) optionSelected.push(option.value);
		}

		// Serialize the arrays to hidden fields
		inputSelect.form[inputSelect.name + '_values'].value = optionValues.join(';');
		inputSelect.form[inputSelect.name + '_text'].value = optionText.join(';');
		inputSelect.form[inputSelect.name + '_selected'].value = optionSelected.join(';');
	}
}

// Used by the <input:select> tag to remember options when the user navigates back in history
function rememberoptions_registerEventHandlers(formName, selectTagName) {
	// Find formName if it's missing.
	if (!formName || formName.length==0) {
		var tags = document.getElementsByName(selectTagName);
		if (tags.length>0 && tags[0] && tags[0].form && tags[0].form.name) formName = tags[0].form.name;
	}
	var form = document.forms[formName];
	if (form) {
		var selectTag = form[selectTagName];
		if (selectTag) {
			_addEventListener(form, 'submit', function() { rememberoptions_save(selectTag); });
			_addEventListener(window, 'load', function() { rememberoptions_load(selectTag); });
		}
	}
}

function emptySelectBox(form, boxname, allchilds){
	var length = Number(document.forms[form].elements[boxname].options.length);

	if (navigator.appName.indexOf("Netscape") != -1) {
		for (var i=(length); i > 0; i--) {
			document.forms[form].elements[boxname].options[i]=null;
		}
	} else if (navigator.userAgent.indexOf("Opera") != -1) {
		for(var i=(length); i > 0; i--) {
			document.forms[form].elements[boxname].options.remove(i);
		}
	} else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) >= 4)) {
		for(var i=(length); i > 0; i--) {
			document.forms[form].elements[boxname].options.remove(i);
		}
	} else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) < 4)) {
		for (var i=(length-1); i > 0; i--) {
			document.forms[form].elements[boxname].options[i].selected = false;
		}
	} else {
		for (var i=(length-1); i > 0; i--) {
			document.forms[form].elements[boxname].options[i].selected = false;
		}
	}
	if (navigator.appName.indexOf("Netscape") == -1) {
		if (allchilds) {
			document.forms[form].elements[boxname].options[0] = new Option("All","0",true,true);
		} else {
			document.forms[form].elements[boxname].options[0] = new Option("","0",true,true);
		}
		document.forms[form].elements[boxname].options[0].selected = true;
	}
}
var parentArr = new Array();
var childArr = new Array();

            parentArr[0] = "1;Canoe";
            childArr[0] = "1;Canadian|2;Cornwall|3;Plastic Canoe";
            
            parentArr[1] = "6;Dayboat";
            childArr[1] = "5;Cara 16|6;Merlin Rocket|7;Wooden Clinker";
            
            parentArr[2] = "7;Dinghy";
            childArr[2] = "9;Avon|10;Enterprise|11;Mirror|12;Pico Sailing|13;Zodiac";
            
            parentArr[3] = "11;Motor Cruiser";
            childArr[3] = "160;Alicraft|19;Birchwood|20;Bounty|21;Bourne 40|161;Cabincruiser|22;Cleopatra 28|23;Colvic Traveller|24;Contest|25;Conway|26;Coronet|27;De Groot 38|28;Dell Quay|29;Eastwood|30;Eastwood 24|31;Elysian|32;Fairlane|33;Falcon|34;Freeman|35;Freeman 26|36;Gaff Cutter|37;Hardy Family|38;Hardy Regatta|39;Herwaplast|40;Hunter|41;Jeanneau Leader|42;King Brothers|43;Mayland 17|44;Microplas|45;Microplas Galaxy 20|46;Norman 266|47;Orkadian|48;Orkadian 20|49;Orkney Boats|50;Osborne Swallow|51;Otter 24|140;Passat 23|141;Picton|142;Pilgrim|143;Princess 25|144;Princess Pilgrim|145;Rlm 31|146;Saga|147;Seamaster|148;Senior 26|149;Shetland 640|150;Souters|151;Springer|152;Sunseeker|153;Teal 22|154;Teal Sportsman|155;Viking|159;Walton 24|156;Western|157;Westrel Cadet|158;Winner Baronet";
            
            parentArr[4] = "5;Multi-hull";
            childArr[4] = "59;Catamaran|60;Trimaran";
            
            parentArr[5] = "4;Narrow boat";
            childArr[5] = "139;Other";
            
            parentArr[6] = "3;Speedboat";
            childArr[6] = "101;Baja Force|102;Bayliner|103;Campion|104;Capelli|105;Draco|106;Ebtide|107;Fletcher|108;Fletcher 190|109;Fletcher Arrow Sport|110;Four Winns|111;Glastron|112;Johnson|113;Mastercraft|114;Maxum|115;Orkney Coastliner|116;Picarooner|117;Plan Craft Revenger 25|118;Redbay|119;Reflection|120;Regal 2100|121;Regal Express|122;Rinker V190|123;Salcombe Flyer|124;Sea Hogg Hunter|126;Searay|125;Sedoo Challenger|127;Selva|128;Shakespeare 650|129;Shetland Family 4|130;Shetland Signature|131;Ski Nautique|132;Slinkcraft 23|133;Triumph|134;Vector Bowrider|135;Warrior 165|136;Wellcraft|137;Westerly 25";
            
            parentArr[7] = "2;Yacht";
            childArr[7] = "61;Atlantic Viking|62;Beneteau First 24|63;Bermudan Sloop|64;Caprice|65;Cinder|66;Cinder 22|67;Classic|68;Contest|69;Dufour|70;Elkins|71;Etchells|72;Hunter 27|73;Hunter Mistral|74;Itchen Ferry|75;Laser|76;Limbo|77;Listang|78;Macwester 26|79;National Redwing|80;Newbridge Navigator|81;Nova 27|82;Pegasus|83;Rampart|84;Sadler 29|85;Seaking|86;Shetland Kestrel|87;Shipper|88;Sussex One|89;Topper|90;Trapper 500|91;Turtle|92;Twister 28|93;Van De Stadt|94;Varne 27|95;Wallasea|96;Wayfarer|99;Westerley Centaur 26|97;Westerley Lowbow|98;Westerley Pembroke";
            
            parentArr[8] = "10;Fishing boat";
            childArr[8] = "162;Commercial Vessel|15;Folkboat|16;Wooden";
            
            parentArr[9] = "9;Other";
            childArr[9] = "138;Other";
