// $Id: window-management.js,v 1.1 2006/09/06 11:42:28 dano Exp $


// Standard Window Management Scripts


function open_window (url, width, height, centered, window_name, feature_string) {


	// Javascript function to open a new window

	// Required arguments are: url, width, height

	// Optional arguments are: centered, window name, feature string


	// Set window name to blank string if no window name passed

	if (!window_name) {

		window_name = '';

	}


	// Set feature string to blank string if no feature string passed

	if (!feature_string) {

		feature_string = '';

	}

	// Otherwise add a comma to the beginning

	else {

		feature_string = ',' + feature_string;

	}


	// Set starting position co-ordinates

	var x = 0;

	var y = 0;


	// Get co-ordinates of center of screen if required

	if(centered) {

		x = Math.round((screen.availWidth - width) / 2);

		y = Math.round((screen.availHeight - height) / 2);

	}


	// Build feature string

	feature_string = 'left=' + x + ',top=' + y + ',width=' + width + ',height=' + height + feature_string;


	// Open new window

	window.open(url, window_name, feature_string);


}

function perlPopUp(Image,Title,MaxWidth,MaxHeight) {
    if (!Title) {
        Title = '';
    }
    if (!MaxWidth) {
        MaxWidth = 0;
    }
    if (!MaxHeight) {
        Height = 0;
    }
    var POPUP_SCRIPT = "/popup-image.asp";
    var day = new Date();
    var id = day.getTime();

    POPUP_SCRIPT = POPUP_SCRIPT + "?-title="+ Title;
    POPUP_SCRIPT = POPUP_SCRIPT + "&-image="+ Image;
    eval("page" + id + " = window.open(POPUP_SCRIPT, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=400,height=400');");
}

// specific to sash contact us pop-up
function contactPopUp() {
    var WinWidth = '500';
    var WinHeight = '600';
    var ContactUsURL = "/vites/contactpop.asp";
    var day = new Date();
    var id = day.getTime();
    eval("page" + id + " = window.open(ContactUsURL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width="+WinWidth+",height="+WinHeight+"');");
}


// $Id: inline-validation.js,v 1.6 2007/01/28 21:36:14 dano Exp $

function valid_search () {
	
	if (document.search_form.search_for.value=='') {
		alert("Please enter a search keyword!");
		return false;
	}

	if (document.search_form.search_for.value=='Search') {
		alert("Please enter a search keyword!");
		return false;
	}
}

function doClear(theText) {
    if (theText.value == theText.defaultValue) {
        theText.value="";
   }
}


function validate_field(InputObject,RegularExpression) {
	if(!RegularExpression) { return; } // Exiting because no RE has been passed
	
	// NB: This could be much slicker -- needs re-writing !!!!!
	
	// Change object to handle SELECT inputs
	var InputIsSelect = 0;
	if(InputObject.type.match(/^select/)) {
		//InputObject = InputObject.options[InputObject.selectedIndex];
		InputIsSelect = 1;
	}
	
	var EmailRegex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var ForenameRegex = /^[a-zA-Z'\-\. ]{1,}$/;
	var SurnameRegex = /^[a-zA-Z'\- ]{2,}$/;
	var AddressRegex = /^[0-9a-zA-Z'\-,\. ]{4,}$/;
	var TelephoneRegex = /^\d{5} \d{5}\d?$/;
	var PostcodeRegex = /^[A-Z][0-9A-Z]{1,3} \d[A-Z]{2}$/;
	// Can pass 'email' as second arg if wish to use regex above to test emails
	if(RegularExpression == 'email') {
		RegularExpression = EmailRegex;
		InputObject.value = InputObject.value.toLowerCase();
		// Remove any starting or trailing whitespace
		InputObject.value = InputObject.value.replace(/(^\s+|\s+$)/g,'');
	}
	if(RegularExpression == 'telephone') {
		RegularExpression = TelephoneRegex;
		InputObject.value = InputObject.value.replace(/\D+/g,'');
		InputObject.value = InputObject.value.replace(/^44/,'');
		InputObject.value = InputObject.value.replace(/^([^0]\d+)/, '0$1');
		InputObject.value = InputObject.value.replace(/(\d{5})(\d+)/,'$1 $2');
	}
	if(RegularExpression == 'forename') {
		RegularExpression = ForenameRegex;
		InputObject.value = InputObject.value.toLowerCase();
		// Remove any starting or trailing whitespace
		InputObject.value = InputObject.value.replace(/(^\s+|\s+$)/g,'');
		// Remove any multiple whitespace (replace with single space)
		InputObject.value = InputObject.value.replace(/(\s)\s+/g,' ');
		InputObject.value = capitaliseString(InputObject.value);
	}
	if(RegularExpression == 'surname') {
		RegularExpression = SurnameRegex;
		InputObject.value = InputObject.value.toLowerCase();
		// Remove any starting or trailing whitespace
		InputObject.value = InputObject.value.replace(/(^\s+|\s+$)/g,'');
		// Remove any multiple whitespace (replace with single space)
		InputObject.value = InputObject.value.replace(/(\s)\s+/g,' ');
		InputObject.value = capitaliseString(InputObject.value);
	}
	if(RegularExpression == 'address') {
		RegularExpression = AddressRegex;
		InputObject.value = InputObject.value.toLowerCase();
		// Remove any starting or trailing whitespace
		InputObject.value = InputObject.value.replace(/(^\s+|\s+$)/g,'');
		// Remove space before commas
		InputObject.value = InputObject.value.replace(/\s+,/g,',');
		// Add space after commas
		InputObject.value = InputObject.value.replace(/,/g,', ');
		// Remove any multiple whitespace (replace with single space)
		InputObject.value = InputObject.value.replace(/(\s)\s+/g,' ');
		InputObject.value = capitaliseString(InputObject.value);
	}
	if(RegularExpression == 'postcode') {
		RegularExpression = PostcodeRegex;
		InputObject.value = InputObject.value.toUpperCase();
		// Remove any non-chars
		InputObject.value = InputObject.value.replace(/[^A-Z0-9]+/g,'');
		// Add space before inward part
		InputObject.value = InputObject.value.replace(/(.*)(\d[A-Z]{2})$/,'$1 $2');
	}
	if(!InputIsSelect && InputObject.value.match(RegularExpression)) {
		// Matched
		addPassClass(InputObject);
		//InputObject.className=InputObject.className+' pass';
		//document.getElementById(InputObject.name+'-pass').className='show-inline';
		//document.getElementById(InputObject.name+'-fail').className='hide';
        showTick(InputObject.name);
	}
	else if(InputIsSelect && InputObject.options[InputObject.selectedIndex].value.match(RegularExpression)) {
		// Matched
		addPassClass(InputObject);
		//InputObject.className=InputObject.className+' pass';
		//document.getElementById(InputObject.name+'-pass').className='show-inline';
		//document.getElementById(InputObject.name+'-fail').className='hide';
        showTick(InputObject.name);
	}
	else {
		// Failed to match
		addFailClass(InputObject);
		//InputObject.className=InputObject.className+' fail';
		//document.getElementById(InputObject.name+'-fail').className='show-inline';
		//document.getElementById(InputObject.name+'-pass').className='hide';
        showCross(InputObject.name);
	}
}

function capitaliseString(InputString) {
	var SplitString = new Array;
	var OutputString = '';
	SplitString = InputString.split(/\b/);
	for(var i = 0; i < SplitString.length; i++) {
		if(SplitString[i].match(/^(de|des|di|dalla|della|der|den|du|von|van|fon|la|of|on|over|upon)$/)) {
			// nada - do not capitalise these words
		}
		else {
			if(SplitString[i].match(/^mc/)) {
				// cap first and third
				SplitString[i] = SplitString[i].substr(0,1).toUpperCase() + SplitString[i].substr(1,1) + SplitString[i].substr(2,1).toUpperCase() + SplitString[i].substr(3);
			}
			else if(SplitString[i].match(/^mac/)) {
				// cap first and fourth
				SplitString[i] = SplitString[i].substr(0,1).toUpperCase() + SplitString[i].substr(1,2) + SplitString[i].substr(3,1).toUpperCase() + SplitString[i].substr(4);
			}
			else {
				// cap first only
				SplitString[i] = SplitString[i].substr(0,1).toUpperCase() + SplitString[i].substr(1);
			}
		}
	}
	OutputString = SplitString.join('');
	return OutputString;
}

function overrideValidation(FormField) {
	FormField.onblur = function () {};
}

function addPassClass(InputObject) {
	InputObject.className=InputObject.className.replace(/(fail|pass)/g,'');
	InputObject.className=InputObject.className+' pass';
}

function addFailClass(InputObject) {
	InputObject.className=InputObject.className.replace(/(fail|pass)/g,'');
	InputObject.className=InputObject.className+' fail';
}

function showTick(element_name) {
    var tick_array = document.getElementsByName(element_name+'-pass');
    for( var i = 0; i < tick_array.length; i++ ) {
		tick_array[i].className='show-inline';
    }
    var cross_array = document.getElementsByName(element_name+'-fail');
    for( var i = 0; i < cross_array.length; i++ ) {
		cross_array[i].className='hide';
    }
}

function showCross(element_name) {
    var tick_array = document.getElementsByName(element_name+'-pass');
    for( var i = 0; i < tick_array.length; i++ ) {
		tick_array[i].className='hide';
    }
    var cross_array = document.getElementsByName(element_name+'-fail');
    for( var i = 0; i < cross_array.length; i++ ) {
		cross_array[i].className='show-inline';
    }
}


// $Id: prefill-form.js,v 1.3 2007/01/28 20:59:30 dano Exp $

// Switch to using ByName instead of ById so don't have to break W3C rules and duplicate IDs

function prefill(element_name,element_value) {
	//var element_type = document.getElementById(element_name).type;
    var element_array = document.getElementsByName(element_name);
    for( var i = 0; i < element_array.length; i++ ) {
        var element_type = element_array[i].type;
	    if(element_type.match(/^select/)) { prefill_select(element_array[i],element_value); }
	    else if(element_type == 'checkbox') { prefill_checkbox(element_array[i],element_value); }
    	else if(element_type == 'radio') { prefill_radio(element_array[i],element_value); }
	    else if(element_type == 'text') { prefill_text(element_array[i],element_value); }
    	else if(element_type == 'textarea') { prefill_text(element_array[i],element_value); }
	    else { /* nada */ }
    }
}
function prefill_select(select_object,option_value) {
	//var select_object = document.getElementById(select_id);
	if(option_value == '') {
		select_object.selectedIndex = 0; // Use first option if passed value is empty string
		return 1; // ...and finish
	}
	for(var i = 0; i < select_object.options.length; i++) {
		if(select_object.options[i].value == option_value) {
			select_object.selectedIndex = i;
		}
	}
}
function prefill_radio(radio_object,radio_value) {
	//var radio_object = document.getElementsByName(radio_name);
	for(var i = 0; i < radio_object.length; i++) {
		if(radio_object[i].value == radio_value) {
			radio_object[i].checked = true;
		}
	}
}
function prefill_checkbox(checkbox_object,checked_flag) {
	var checked_value = false;
	if(checked_flag) { checked_value = true; }
	//checkbox_object = document.getElementById(checkbox_id);
	checkbox_object.checked = checked_value;
}
function prefill_text(text_object,text_value) {
	//var text_object = document.getElementById(text_id);
	text_object.value = text_value;
}


// $Id: tools.js,v 1.2 2007/01/30 13:29:27 dano Exp $

function clear_field(input_object) {
    if(input_object.defaultValue && input_object.value == input_object.defaultValue) {
        input_object.value = "";
    }
}

function check_field_is_not_empty(form_object,field_name) {
    var alert_message = 'Please enter a value in the form!'; // default message
    if(field_name.match(/^search/)) {
        alert_message = 'Please enter a keyword or phrase to search for!';
    }
    if(form_object.elements[field_name].value == "") {
        window.alert(alert_message);
        return false;
    }
    if(form_object.elements[field_name].value == "Search") {
        window.alert(alert_message);
        return false;
    }
    return true;
}
