﻿var isIE = navigator.appName.indexOf("Microsoft") != -1;
// Section 1
function array_search (arr, x) {
	for(var i in arr) if (i == x) return true;
	
	return false;
}

function get_obj(str) {
    var obj;
    
    if (typeof str == "string") {
        if (document.getElementById) {
            obj = document.getElementById(str);
        } else if (document.all) {
            obj = document.all[str];
        }
    }
    return obj;
}

function submit_form(form_id, action) {
    var obj;

	obj = get_obj(form_id);
	if (obj) {
		for (var i = 0; i < obj.elements.length; i++) {
			if (obj.elements[i].type == "hidden" && obj.elements[i].name == "a") {
				obj.elements[i].value = action;
				break;
			}
		}
		obj.submit();
		return true;
	}
	return false;
}

function show_block(block_id) {
    var obj;                                                             

	obj = get_obj(block_id);
	if (obj) {
		obj.className = obj.className.indexOf(" hiddenblock") == -1 ? obj.className.replace("hiddenblock", "") : obj.className.replace(" hiddenblock", "");
	}
}

function hide_block(block_id) {
    var obj;

	obj = get_obj(block_id);
	if (obj && obj.className.indexOf("hiddenblock") == -1) {
		obj.className = obj.className.length > 0 ? obj.className + " hiddenblock" : "hiddenblock";
	}
}

function mysel_sort(n) {
	var obj = document.getElementById("mysel_table");
	if (mysel_n != n && obj) {
		i = 0;
		mysel_n = n;
		for (k = 0; k < 3; k++) {
			for (j = 0; j < mysel_array[n].length; j++) {
				a = mysel_array[n][j];
				obj.rows[i].title = a.act;
				obj.rows[i].cells[0].innerHTML = '<div class="ico-org-' + a.ico + '"></div>';
				obj.rows[i].cells[1].innerHTML = a.name;
				obj.rows[i].cells[2].innerHTML = a.act.link(a.url);
				if (a.ico == "sent") {
					obj.rows[i].cells[3].firstChild.onclick = "";
					obj.rows[i].cells[3].firstChild.style.visibility = "hidden";
				} else {
					obj.rows[i].cells[3].firstChild.id_service = a.id;
					obj.rows[i].cells[3].firstChild.onclick = function(){del_rec(this.id_service);};
					obj.rows[i].cells[3].firstChild.style.visibility = "visible";
				}
				i++;
			}
			n = (n < 2) ? n + 1 : 0;
		}
	}
}
// Section 2
function get_abs_left(obj) {
	var x = 0;
	while (obj.tagName != "BODY") {
		x += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return x;
}

function get_abs_top(obj) {
	var y = 0;
	while (obj.tagName != "BODY") {
		y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return y;
}

function clickCoords(ev)
{
    if (ev.pageX || ev.pageY) 
        return {x:ev.pageX, 
                y: ev.pageY, 
                x_rel: ev.clientX,
                y_rel: ev.clientY
                };                
    else 
        return {x: ev.clientX +document.body.scrollLeft - document.body.clientLeft,
                y: ev.clientY +document.body.scrollTop - document.body.clientTop,
                x_rel: ev.clientX,
                y_rel: ev.clientY
                };
}

function getScrollTop() {
    // get scroll - all browser compatible
	var scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
	}
	return scrOfY;
}

function getPageSize()
{    
    var xScroll, yScroll;
    
    if (window.innerHeight && window.scrollMaxY) {	
        xScroll = document.body.scrollWidth;
        yScroll = window.innerHeight + window.scrollMaxY;
    } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
        xScroll = document.body.scrollWidth;
        yScroll = document.body.scrollHeight;
    } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
        xScroll = document.body.offsetWidth;
        yScroll = document.body.offsetHeight;
    }
    
    var windowWidth, windowHeight;
    if (self.innerHeight) {	// all except Explorer
        windowWidth = self.innerWidth;
        windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
        windowWidth = document.documentElement.clientWidth;
        windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
        windowWidth = document.body.clientWidth;
        windowHeight = document.body.clientHeight;
    }	
    
    // for small pages with total height less then height of the viewport
    if (yScroll < windowHeight){
        pageHeight = windowHeight;
    } else { 
        pageHeight = yScroll;
    }

    // for small pages with total width less then width of the viewport
    if (xScroll < windowWidth){	
        pageWidth = windowWidth;
    } else {
        pageWidth = xScroll;
    }
    arrayPageSize = new Array (pageWidth,pageHeight,windowWidth,windowHeight) 
    return arrayPageSize;
}

var popup_box_timer;
function show_box(name, delay) 
{
	//alert(name);
	if (popup_box_timer) {
		clearTimeout(popup_box_timer);
		popup_box_timer = false;
	}
    PageSize = getPageSize();
    
    document.getElementById(name).style.position = "absolute";
    document.getElementById(name).style.top = (120 + getScrollTop()) + "px";//pos.y;
    document.getElementById(name).style.left = (PageSize[2]/2 - 300) + "px";//pos.x - 500;
    document.getElementById("cover").style.height = PageSize[1] + "px";
    document.getElementById("cover").style.display = "block";
	if (isIE) {
		document.getElementById("icover").style.height = PageSize[1] + "px";
		document.getElementById("icover").style.display = "block";
		document.getElementById("icover").style.filter= 'alpha(style=0,opacity=0.0)';
	}
	if (arguments.length == 1) {
	    document.getElementById(name).className = "popup";
		focus_box(name);
	} else {
		document.getElementById(name).style.left = (PageSize[2]/2 - 120) + "px";//pos.x - 500;
		popup_box_timer = setTimeout('document.getElementById("' + name + '").className = "loading";focus_box("' + name + '");', delay);
	}
}

function hide_box(name, open_cover) 
{
    document.getElementById(name).className = "hiddenblock";
    if ((arguments.length > 1 && open_cover == 1) || arguments.length == 1) {
		document.getElementById("cover").style.display = "none";
		if (isIE) document.getElementById("icover").style.display = "none";
	}
}

function hide_popup_box() {
	hide_box("popup_box");
}

function focus_box(name)
{
	obj = document.getElementById('popup_form'); 
    if (obj) {
		for (var i = 0; i < obj.elements.length; i++) {
			if (obj.elements[i].type == "text" || obj.elements[i].type == "radio" || obj.elements[i].type == "checkbox" || obj.elements[i].type == "textarea" || obj.elements[i].type == "password" || obj.elements[i].type == "select-one") {
				obj.elements[i].focus();
				break;
			}
		}
    }
}		
// Section 3
var xmlHttp = createXmlHttpRequestObject();
var serverAddress = "/forms/";
var showErrors = true;
var cache = new Array();
// creates an XMLHttpRequest instance
function createXmlHttpRequestObject() {
	var xmlHttp;
	// this should work for all browsers except IE6 and older
	try {
		xmlHttp = new XMLHttpRequest();
	} catch(e) {
		// assume IE6 or older
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.7.0", "MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP");
		// try every id until one works
		for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) {
			try {
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			} catch (e) {} // ignore potential error
		}
	}
	// return the created object or display an error message
	if (!xmlHttp)
		displayError("Error creating the XMLHttpRequest object.");
	else
		return xmlHttp;
}
// function that displays an error message
function displayError($message) {
	if (showErrors) {
		showErrors = false;
		alert("Error encountered: \n" + $message);
		//setTimeout("validate();", 10000);
	}
}
// make asynchronous HTTP request using the XMLHttpRequest object
function process(fields, vars) {
	if (xmlHttp) {
		var s = '';
		if (fields) {
			if (typeof fields == "string") fields = new Array(fields);
			if (typeof vars == "string") vars = new Array(vars);
			for (var i = 0; i < fields.length; i++) {
				if (fields[i] != "") s += (s == "" ? "" : "&") + encodeURIComponent(fields[i]) + "=" + encodeURIComponent(vars[i]);
			}
			if (s != "") cache.push(s);
		}
		// try to connect to the server
		try {
			// continue only if the XMLHttpRequest object isn't busy and the cache is not empty
			if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0) && cache.length > 0) {
				var cacheEntry = cache.shift();
				xmlHttp.open("POST", '/forms/', true);
                
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp.onreadystatechange = handleRequestStateChange;
				xmlHttp.send(cacheEntry);
			}
		}
		catch (e) {
			displayError(e.toString());
		}
	}
}
// function that handles the HTTP response
function handleRequestStateChange()
{
	// when readyState is 4, we read the server response
	if (xmlHttp.readyState == 4) {
		// continue only if HTTP status is "OK"
        //alert(xmlHttp.statusText);        
        if (xmlHttp.status == 200) {
			try {
				// read the response from the server
				readResponse();
                
			} catch(e) {
				// display error message
				displayError(e.toString());
			}
		} else {
			// display error message
			displayError(xmlHttp.statusText);
		}
	}
}
// read server's response
function readResponse()
{
	// retrieve the server's response
	var response = xmlHttp.responseText;
	// server error?
	if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0) throw(response.length == 0 ? "Server error." : response);
	// get response in XML format (assume the response is valid XML)
	// alert(xmlHttp.responseText);
	if (xmlHttp.responseText.indexOf('{') != -1 && xmlHttp.responseText.lastIndexOf('}') != -1) {
		var response_obj = eval("(" + xmlHttp.responseText.substring(xmlHttp.responseText.indexOf('{'), xmlHttp.responseText.lastIndexOf('}') + 1) + ")");

		if (response_obj.type == "form") {
			document.getElementById("popup_box").innerHTML = response_obj.content;
			show_box('popup_box');
			if (response_obj.onload_script != "") setTimeout(response_obj.onload_script, 50);
		}
		if (response_obj.type == "qasdata") {
			qas_data = response_obj.content; 
			show_qas_results(qas_output_object);
		}
		if (response_obj.type == "validate") {
			set_valid(response_obj.content.field_id, response_obj.content.valid);
		}
		if (response_obj.type == "suggest") {
			show_suggest(response_obj.content);
		}
		if (response_obj.type == "cat_list") {
			cats = response_obj.content;
			show_cat_list();
		}
		if (response_obj.type == "srv_list") {
			srvs = response_obj.content;
			show_srv_list(1);
		}
		if (response_obj.type == "check_field") {
			check_field(response_obj.content.form_id, response_obj.content.field_name, response_obj.content.msg);
		}
		if (response_obj.type == "reload_page") {
			location.href = response_obj.content;
		}
		if (response_obj.type == "init_validator") {
			//alert(xmlHttp.responseText);
			if (!vdata) vdata = new Array();
            vdata[response_obj.content.form_id] = response_obj.content.data;
		}
		if (response_obj.type == "search_org") {
			search_results = response_obj.content;
			show_search_results();
		}
	}
	setTimeout("process();", 200);
}
// Section 4
function post_form(obj, action, handler) {
	var fields = new Array();
	var vars = new Array();
	for (var i = 0; i < obj.elements.length; i++) {
		if ((obj.elements[i].type == "radio" || obj.elements[i].type == "checkbox") && obj.elements[i].name && obj.elements[i].checked) {
			fields[fields.length] = obj.elements[i].name;
			vars[vars.length] = obj.elements[i].value;
		}
		if ((obj.elements[i].type == "text" || obj.elements[i].type == "hidden" || obj.elements[i].type == "textarea" || obj.elements[i].type == "password" || obj.elements[i].type == "select-one") && obj.elements[i].name) {
			fields[fields.length] = obj.elements[i].name;
			vars[vars.length] = (arguments.length > 1 && obj.elements[i].name == "a") ? action : ((arguments.length > 2 && obj.elements[i].name == "h") ? handler : obj.elements[i].value);
		}
	}
	show_wait_box();
	process(fields, vars);
}

function show_form(action, uid, handler) {
	var fields = new Array();
	var vars = new Array();
	fields[0] = 'a';
	vars[0] = action;
	if (arguments.length > 1) {
		fields[1] = 'uid';
		vars[1] = uid;		
	}
	if (arguments.length > 2) {
		fields[2] = 'h';
		vars[2] = handler;		
	}
	show_wait_box();
	process(fields, vars);
}

// Section 5
function switch_expanded_section(section_name) {
	var section_state;
	var obj;
	obj = document.getElementById(section_name + "_sec_img");
	section_state = (obj.show_state != 1 ? 1 : 0);
	obj.show_state = (section_state ? 1 : 0);

	obj = document.getElementById(section_name + "_sec");
	obj.style.display = (section_state ? "block" : "none");
	
}

function switch_login_left_block() {
	var section_state;
	var obj;
	obj = get_obj('img_login_left_block');
	section_state = (obj.src.indexOf('top') != -1 ? 1 : 0);
	obj.src = (section_state ? obj.src.replace("top", "current") : obj.src.replace("current", "top"));
	obj.alt = (section_state ? "hide login" : "show login");
	if (obj.title) obj.title = (section_state ? "hide login" : "show login");
	
	obj = get_obj('login_left_block');
	obj.style.display = (section_state ? "block" : "none");
}

function switch_section(elem) {
	var obj;
	var section_state;
	
	if (elem.id) {
		obj = get_obj(elem.id + "_section");
		if (obj) {
			section_state = (obj.className.indexOf("hiddenblock") != -1 ? 1 : 0);
			obj.className = (section_state ? obj.className.replace("hiddenblock", "") : obj.className = obj.className + " hiddenblock");
			elem.innerHTML = (section_state ? "[hide]" : "[show]");
		}
	}
}

function is_registered(obj) {
	if ((obj.value == "1" && obj.checked == true) || (obj.value == "0" && obj.checked == false)) {
		document.getElementById("login_ext_sec").style.display = "block";
		document.getElementById("account_ext_sec").style.display = "none";
	} else {
		document.getElementById("login_ext_sec").style.display = "none";
		document.getElementById("account_ext_sec").style.display = "block";
	}
}

var qas_output_object = '';
var qas_data = '';
function find_address(param) {
	var fields = new Array();
	var vars = new Array();
	fields[0] = 'a';
	vars[0] = 'list';

	fields[1] = 'h';
	vars[1] = 'qas';		

	fields[2] = 'line0';
	vars[2] = document.getElementById("form_" + param + "_line0").value;		

	fields[3] = 'postcode';
	vars[3] = document.getElementById("form_" + param + "_postcode").value;
	
	qas_output_object = param;

	show_wait_box();
	process(fields, vars);
}

function show_qas_results(param) {
	var obj;	
	if (param != '') {
		obj = document.getElementById("select_" + param + "_list");
		if (obj) {
			clear_table(obj);
			if (typeof qas_data == "object") {
				for (var i = 0; i < qas_data.length; i++) {
					tr = obj.insertRow(obj.rows.length);
					td = tr.insertCell(tr.cells.length);
					td.innerHTML = "-";
					td = tr.insertCell(tr.cells.length);
					td.innerHTML = "<a href=\"#\" onclick=\"select_address_proc('" + param + "', " + i + ");\">" + get_str_address(qas_data[i]) + "</a>";
				}
			}
			tr = obj.insertRow(obj.rows.length);
			td = tr.insertCell(tr.cells.length);
			td.innerHTML = "-";
			td = tr.insertCell(tr.cells.length);
			td.innerHTML = "<a href=\"#\" onclick=\"select_address_proc('" + param + "', 'man');\">" + "I would like to enter my address manually" + "</a>";
		}
		obj = document.getElementById("select_" + param + "_block");
		if (obj) obj.style.display = "block";
		hide_address_lines(param);
	}
}

// Remove existing table rows
function clear_table(obj) {
    while (obj.rows.length > 0) {
        obj.deleteRow(0);
    }
}

function get_str_address(arr) {
    r = '';
    for(v in arr) {
        if (arr[v] && v != "country") r += (r ? ', ' : '') + arr[v];
	}
    return r != 'GBR' ? r : '';
}

function get_str_address2(arr) {
    r = '';
    for(v in arr) {
        if (arr[v]) r += (r ? ', ' : '') + arr[v];
	}
    return r != 'GBR' ? r : '';
}

function hide_address_lines(param) {
	var obj;
	for (var i = 0; i < 7; i++) {
		obj = document.getElementById("tr_" + param + "_line" + i);
		if (obj) obj.className = "hiddenblock";
	}
}

function show_address_lines(param) {
	var obj;
	for (var i = 0; i < 7; i++) {
		obj = document.getElementById("tr_" + param + "_line" + i);
		if (obj) obj.className = "";
	}
}

function select_address_proc(param, n) {
	var obj;
	obj = document.getElementById("select_" + param + "_block");
	if (obj) obj.style.display = "none";
	show_address_lines(param);
	if (n != "man") {
		for (var i = 0; i < 4; i++) {
			obj = document.getElementById("form_" + param + "_line" + i);
			if (obj) obj.value = qas_data[n]["line" + i];
		}
		obj = document.getElementById("form_" + param + "_city");
		if (obj) obj.value = qas_data[n]["city"];
		obj = document.getElementById("form_" + param + "_postcode");
		if (obj) obj.value = qas_data[n]["postcode"];
		obj = document.getElementById("form_" + param + "_country");
		if (obj) obj.value = qas_data[n]["country"];

	}
}

function validate(obj) {
	var fields = new Array();
	var vars = new Array();

	if (obj && obj.id) {
		if (obj.id.indexOf("form_fields_") != -1 || obj.id == "form_fax" || obj.id == "form_postcode" || obj.id == "form_company" || obj.id == "form_fname" || obj.id == "form_lname" || obj.id == "form_email" || obj.id == "form_from_line0" || obj.id == "form_from_postcode" || obj.id == "date_from" || obj.id == "form_to_line0" || obj.id == "form_login" || obj.id == "form_pass" || obj.id == "form_pass2" || obj.id == "form_mobile" || obj.id == "form_secret_answer") {
			fields[0] = 'h';
			vars[0] = 'validate';		
		
			fields[1] = 'field_id';
			vars[1] = obj.id;		
	
			fields[2] = 'field_name';
			vars[2] = obj.name;
	
			fields[3] = 'field_value';
			vars[3] = obj.value;

			process(fields, vars);
		}
	}
}

function set_valid(obj_id, valid) {
	var obj;
	var class_re = /( mandatory| valid)/i;

	obj = document.getElementById(obj_id); 	
    if (obj) {
		switch (valid) {
			case 1:
				obj.className = obj.className.replace(class_re, "") + " mandatory";
				break;
			case 2:
				obj.className = obj.className.replace(class_re, "") + " valid";
				break;
			case 3:
				obj.className = obj.className.replace(class_re, "");
				break;
		}
	}
}

var form_values = new Array();
/*
function validate_form() {
	var obj;
	var obj2;
	var is_form_valid = true;

	obj = get_obj('service_info_form'); 
    if (obj) {
		for (var i = 0; i < obj.elements.length; i++) {
			if (obj.elements[i].id && (obj.elements[i].type == "text" || obj.elements[i].type == "textarea" || obj.elements[i].type == "password" || obj.elements[i].type == "select-one")) {
				if (obj.elements[i].className.indexOf('mandatory') != -1) {
					is_form_valid = false;
				}

				if (obj.elements[i].value != form_values[obj.elements[i].id]) {
					validate(obj.elements[i]);
					form_values[obj.elements[i].id] = obj.elements[i].value;
					break;
				}
			}
		}
    }

	obj = get_obj('btn_sendnow_inact');
	obj2 = get_obj('btn_sendnow_act');
	if (obj && obj2) {
		obj.style.display = is_form_valid ? "none" : "block";
		obj2.style.display = is_form_valid ? "block" : "none";
	}

}
*/
function validate_form() {
	var obj;
	var obj2;
	var is_form_valid = true;
	var err = '';

	obj = get_obj('service_info_form'); 
	is_form_valid = check_form(obj, 0);

	obj = get_obj('btn_sendnow_inact');
	obj2 = get_obj('btn_sendnow_act');
	if (obj && obj2) {
		obj.style.display = is_form_valid ? "none" : "block";
		obj2.style.display = is_form_valid ? "block" : "none";
	}
	obj = get_obj('btn_sendnow_inact2');
	obj2 = get_obj('btn_sendnow_act2');
	if (obj && obj2) {
		obj.style.display = is_form_valid ? "none" : "block";
		obj2.style.display = is_form_valid ? "block" : "none";
	}
	setTimeout("validate_form();", 250);
	return is_form_valid;
}

var old_search_val;
function org_suggest() {
	var obj;
	var fields = new Array();
	var vars = new Array();

	obj = get_obj("org_search");
    if (obj) {
		if (obj.value != old_search_val && obj.value != obj.defaultValue) {
			obj.setAttribute("autocomplete", "off");
			fields[0] = 'h';
			vars[0] = 'suggest';		
			
			fields[1] = 'field_value';
			vars[1] = obj.value;

			if (obj.value.length > 1) process(fields, vars);
			
			old_search_val = obj.value;
		}
    }
}

var search_drop_down;
function show_suggest(data) {
	var obj;

	obj = get_obj('org_search');
	if (obj) {
		if (!search_drop_down) {
			search_drop_down = document.createElement("div");
			search_drop_down.className = "suggestions search";
			search_drop_down.style.width = obj.offsetWidth + "px";
			document.body.appendChild(search_drop_down);
		}
		if (search_drop_down) {
			if (data.length > 0) {
				search_drop_down.innerHTML = data + '<div class="flright sm"><a href="./" onmousedown="hide_suggest();">close</a></div>';
				search_drop_down.style.left = get_abs_left(obj) + "px";
				search_drop_down.style.top = (get_abs_top(obj) + obj.offsetHeight) + "px";
				search_drop_down.style.visibility = "visible";
			} else {
				hide_suggest();
			}
		}
	}
}

function hide_suggest() {
	if (search_drop_down) {
		search_drop_down.style.visibility = "hidden";
	}	
}

setInterval("org_suggest()", 250);


// Section 6
var cats = new Array();
var srvs = new Array();
var cur_group = 0;
var cur_cat = 0;
var cat_fails_counter = 0;


function show_level2(id_group) {
	var obj;

	for (var i in gcats) {
		obj = get_obj('gcat' + i);
		if (obj) {
			obj.style.backgroundColor = (i == id_group) ? gcat_back[id_group] : "";
			obj.className = (i == id_group) ? "catsel" : "dotdash";
		}
		obj = get_obj('gcatimg' + i);
		if (obj) {
			obj.src = (i == id_group) ? gcat_icon2[id_group] : gcat_icon1[i];
		}
	}

	obj = get_obj('catborder');
	if (obj) {
		obj.style.backgroundColor = gcat_font[id_group];
		obj.style.borderColor = gcat_font[id_group];
	}
	
	obj = get_obj('catheader');
	if (obj) {
		obj.innerHTML = gcats[id_group];
	}
	
	obj = get_obj('catback');
	if (obj) {
		obj.style.backgroundColor = gcat_back[id_group];
	}

	obj = get_obj('catlist');
	if (obj) {
		obj.style.color = gcat_font[id_group];
		clear_table(obj);
		for (var i in gcatcats[id_group]) {
			tr = obj.insertRow(obj.rows.length);
			if (obj.rows.length % 2 == 0) tr.style.backgroundColor = gcat_even[id_group];
			td = tr.insertCell(tr.cells.length);
			td.className = "catitem";
			if (i == "council") {
				td.innerHTML = '<span onmouseover="this.style.textDecoration=\'underline\';" onmouseout="this.style.textDecoration=\'\';" onclick="show_form(' + "'councils'" + ');">' + gcatcats[id_group][i] + '</span>';
			} else {
				td.innerHTML = '<span onmouseover="this.style.textDecoration=\'underline\';" onmouseout="this.style.textDecoration=\'\';" onclick="show_level3(' + i + ');">' + gcatcats[id_group][i] + '</span>';
			}
		}
		while (obj.rows.length < 13) {
			tr = obj.insertRow(obj.rows.length);
			td = tr.insertCell(tr.cells.length);
			td.innerHTML = "&nbsp;";
		}
	}
	
	obj = get_obj('catnav1');
	if (obj) obj.innerHTML = "";
	obj = get_obj('catnav2');
	if (obj) obj.innerHTML = "";

	cur_group = id_group;
	cur_cat = 0;
}

function show_level3(id_cat) {
	var obj;
	var fields = new Array();
	var vars = new Array();

	if (cur_cat != id_cat) {
		hide_cat_list();
		
		fields[0] = 'h';
		vars[0] = 'srv_list';
		
		fields[1] = 'id_cat';
		vars[1] = id_cat;
	
		process(fields, vars);
	}

	cur_cat = id_cat;
}

var hide_cat_list_counter = 0;
var show_cat_list_counter = 0;
var hide_cat_list_timer = 0;
function hide_cat_list() {
	var obj;
	var n;
	
	if (hide_cat_list_counter == 0) {
		obj = get_obj('catlist');
		if (obj) {
			n = obj.rows.length;
			clear_table(obj);
			for (var i = 0; i < n; i++) {
				tr = obj.insertRow(obj.rows.length);
				td = tr.insertCell(tr.cells.length);
				td.innerHTML = "&nbsp;";
			}
		}
		obj = get_obj('catheader');
		if (obj) {
			obj.innerHTML = "&nbsp;";
		}
		obj = get_obj('catnav1');
		if (obj) obj.innerHTML = "";
		obj = get_obj('catnav2');
		if (obj) obj.innerHTML = "";

		hide_cat_list_counter = 11;
		show_cat_list_counter = 0;
	}
	
	if (hide_cat_list_counter > 0) {
		obj = get_obj("catborder");
		if (obj) {
			obj.style.width = (hide_cat_list_counter * 40) + "px";
		}
		if (hide_cat_list_counter > 1) hide_cat_list_timer = setTimeout("hide_cat_list();", 50);
		hide_cat_list_counter--;
	}
}

function show_srv_list(p) {
	var obj;
	var srv_per_page = 20;
	var srv_min = new Array();
	var srv_max = new Array();
	var srv_prev = 0;
	var n = 0;
	var navstr = "";
	var a;
	var catstr = "";
	var trim_re = / \([0-9]+\)$/i;
	
	if (hide_cat_list_counter > 0 && hide_cat_list_timer != 0) {
		hide_cat_list_counter = 0;
		clearTimeout(hide_cat_list_timer);
		hide_cat_list_timer = 0;
	}

	if (show_cat_list_counter < 11) {
		obj = get_obj("catborder");
		if (obj) {
			if (show_cat_list_counter > 0) obj.style.width = (show_cat_list_counter * 40) + "px";
		}
		setTimeout("show_srv_list(" + p + ");", 50);
		show_cat_list_counter++;
		return;
	}
	
	if (show_cat_list_counter == 11) {
		obj = get_obj("catborder");
		if (obj) {
			obj.style.width = "492px";
		}
	}
	
	for (var i in gcatcats[cur_group]) {
		if (i == "council") {
			catstr += (catstr == "" ? "" : " | ") + '<span onclick="show_form(' + "'councils'" + ');">' + gcatcats[cur_group][i].replace(trim_re, "") + '</span>';
		} else if (i == cur_cat) {
			catstr += (catstr == "" ? "" : " | ") + '<span style="text-decoration: underline;" onclick="show_level3(' + i + ');">' + gcatcats[cur_group][i].replace(trim_re, "") + '</span>';
		} else {
			catstr += (catstr == "" ? "" : " | ") + '<span onclick="show_level3(' + i + ');">' + gcatcats[cur_group][i].replace(trim_re, "") + '</span>';
		}
	}

	obj = get_obj('catheader');
	if (obj) {
		obj.innerHTML = '<div class="catitem">' + catstr + '</div>';
	}

	obj = get_obj('catlist');
	if (obj) {
		clear_table(obj);
		for (var i in srvs) {
			if (n % srv_per_page == 0) {
				srv_min[srv_min.length] = i;
				if (srv_prev > 0) srv_max[srv_max.length] = srv_prev;
			}
			srv_prev = i;
			if (n >= (p - 1) * srv_per_page && n < p * srv_per_page) {
				tr = obj.insertRow(obj.rows.length);
				if (obj.rows.length % 2 == 0) tr.style.backgroundColor = gcat_even[cur_group];
				td = tr.insertCell(tr.cells.length);
				if (mysel_search(i)) {
					a = mysel_search(i);
					td.className = "catitem";
					td.innerHTML = '<img src="/img/cat/marker.gif" width="12" height="12" /> <span onmouseover="this.style.textDecoration=\'underline\';" onmouseout="this.style.textDecoration=\'\';" onclick="location.href=\'' + a.url + '\';">' + srvs[i] + '</span>';
					td = tr.insertCell(tr.cells.length);
					td.className = "catitem catadd"; //catreview
					td.innerHTML = '<span onmouseover="this.style.textDecoration=\'underline\';" onmouseout="this.style.textDecoration=\'\';" onclick="location.href=\'' + a.url + '\';">' + a.act + '</span>' + (a.ico == "sent" ? '' : ' <img src="/img/ico-recyclebin-sm2.gif" width="9" height="11" alt="remove this organisation" title="remove this organisation" style="cursor:pointer;" onclick="del_rec(' + a.id + ');" />');
				} else {
					td.className = "catitem";
					td.innerHTML = '<img src="/img/1x1.gif" width="12" height="12" /> <span onmouseover="this.style.textDecoration=\'underline\';" onmouseout="this.style.textDecoration=\'\';" onclick="location.href=\'/organisations/?gcat=' + cur_group + '&cat=' + cur_cat + '&a=add&id=' + i + '\';">' + srvs[i] + '</span>';
					td = tr.insertCell(tr.cells.length);
					td.className = "catitem catadd";
					td.innerHTML = '<span onmouseover="this.style.textDecoration=\'underline\';" onmouseout="this.style.textDecoration=\'\';" onclick="location.href=\'/organisations/?gcat=' + cur_group + '&cat=' + cur_cat + '&a=add&id=' + i + '\';">add</span>';
				}
			}
			n++;
		}
		
		if (srv_prev > 0) srv_max[srv_max.length] = srv_prev;
		
		while (obj.rows.length < 13) {
			tr = obj.insertRow(obj.rows.length);
			td = tr.insertCell(tr.cells.length);
			td.innerHTML = "&nbsp;";
			td = tr.insertCell(tr.cells.length);
			td.innerHTML = "&nbsp;";
			td = tr.insertCell(tr.cells.length);
			td.innerHTML = "&nbsp;";
		}
	}

	if (n > srv_per_page) {
		for (var i = 1; i < n / srv_per_page + 1; i++) {
			//navstr += (navstr == "" ? "" : "| ") + (p == i ? srvs[srv_min[i-1]].substring(0, 3) + '-' + srvs[srv_max[i-1]].substring(0, 3) : '<span class="catnav catadd" onclick="show_srv_list(' + i + ');">' + srvs[srv_min[i-1]].substring(0, 3) + '-' + srvs[srv_max[i-1]].substring(0, 3) + '</span>');
			navstr += (navstr == "" ? "" : " | ") + '<span class="catnav catadd" title="from &quot;' + srvs[srv_min[i-1]].substring(0, (srvs[srv_min[i-1]].indexOf(" ", 20) == -1 ? srvs[srv_min[i-1]].length : srvs[srv_min[i-1]].indexOf(" ", 20))) + '&quot; to &quot;' + srvs[srv_max[i-1]].substring(0, (srvs[srv_max[i-1]].indexOf(" ", 20) == -1 ? srvs[srv_max[i-1]].length : srvs[srv_max[i-1]].indexOf(" ", 20))) + '&quot;" onclick="show_srv_list(' + i + ');">' + (p == i ? '<b>' : '') + i + (p == i ? '</b>' : '') + '</span>';
		}
	}
	if (navstr != "") navstr = (p > 1 ? '<span class="catnav catadd" onclick="show_srv_list(' + (p - 1) + ');">Previous</span> ' : 'Previous ') + navstr + (p < n / srv_per_page ? ' <span class="catnav catadd" onclick="show_srv_list(' + (p + 1) + ');">Next</span>' : ' Next');	
	obj = get_obj('catnav2');
	if (obj) obj.innerHTML = navstr;
	if (navstr != "") navstr = "<b>Page " + p + "</b> of " + Math.ceil(n / srv_per_page);
	obj = get_obj('catnav1');
	if (obj) obj.innerHTML = navstr;
}

function mysel_search (id) {
	var a;
	
	if (typeof mysel_array == "object") {
		for (var k = 0; k < 3; k++) {
			for (var j = 0; j < mysel_array[k].length; j++) {
				a = mysel_array[k][j];
				if (a.id == id) {
					return a;
				}
			}
		}
	}
	return false;
}

// Section 7
var checked_elements = new Array();
var vdata = false;
var is_form_checked = false;
var title_valid = true;
var fname_valid = true;
function checkme(elem, id_msg) {
	var obj;
    
    var msg_obj = get_obj(id_msg);
	var str_obj = get_obj(id_msg + "_str");
	var left_sbracket = /\[/g;
	var right_sbracket = /\]/g;
	var param;
	var id_form = elem.form.id;
    
	var field_re = /^form_/i;
	var field;
	var v;
	var str = "";

	param = elem.name.replace(left_sbracket, "_");
	param = param.replace(right_sbracket, "");

	field = param.replace(field_re, '');
	v = elem.value;

                
	if (vdata[id_form]["filter"]) v = filter_field(vdata[id_form]["filter"], field, v);
	   
//	if (elem.validator_old_value != v) {
		str = "";
		if (is_form_checked && v == "") {
			str = helpstr[param];
		} else {
			if (vdata[id_form]["validator"]) {
				str = validate_field(vdata[id_form]["validator"], field, v, param, elem);
			}
		}
		elem.validator_str = str;
		elem.validator_valid = (str == "") ? true : false;
		elem.validator_old_value = v;
//	}
// account_reg_form patch
	var form_valid_patch = true;
	if (param == "form_title") title_valid = elem.validator_valid;
	if (param == "form_fname") fname_valid = elem.validator_valid;
	if (is_form_checked && id_form == "account_reg_form") {
		if (param == "form_fname" && !title_valid) form_valid_patch = false;
		if (param == "form_lname" && !(title_valid && fname_valid)) form_valid_patch = false;
		if (!form_valid_patch) return false;
	}

	if (elem.validator_valid && form_valid_patch) {
		if (msg_obj) {
			msg_obj.className = "hiddenblock";
			msg_obj.innerHTML = "";
		}
		if (str_obj) {
			str_obj.className = "f-str f-t-ok";
		}
		return true;
	} else {
		if (is_form_checked || (v != "" && v != "0")) {
			if (msg_obj) {
				msg_obj.className = "f-msg f-msg-err";
				msg_obj.innerHTML = str;
			}
			if (str_obj) {
				str_obj.className = "f-str f-t-error";
			}
		}
		return false;
	}

//	elem.validator_current = false;
//	elem.validator_selected = true;
	return true;
}

function helpme(elem, id_msg) {
	var obj;
	var msg_obj;
	var str_obj;
	var left_sbracket = /\[/g;
	var right_sbracket = /\]/g;
	var param;
	var id_form = elem.form.id;

	if (vdata && vdata[id_form]) {
		param = elem.name.replace(left_sbracket, "_");
		param = param.replace(right_sbracket, "");
		msg_obj = get_obj(id_msg);

		// account_reg_form patch
		var form_valid_patch = true;
		if (is_form_checked && id_form == "account_reg_form") {
			if (param == "form_fname" && !title_valid) form_valid_patch = false;
			if (param == "form_lname" && !(title_valid && fname_valid)) form_valid_patch = false;
			if (!form_valid_patch) return true;
		}

		if (msg_obj) {
			msg_obj.className = "f-msg";
			msg_obj.innerHTML = helpstr[param];
		}
		str_obj = get_obj(id_msg + "_str");
		if (str_obj) {
			str_obj.className = "f-str f-t-hint";
		}
	}
//	elem.validator_current = true;
//	elem.validator_selected = true;
	return true;
}

function check_field (id_form, fieldname, str) {
	var obj;
	var elem;

	obj = get_obj(id_form); 
	if (obj) {
		for (var i = 0; i < obj.elements.length; i++) {
			if (obj.elements[i].name == fieldname) {
				elem = obj.elements[i];
				elem.validator_str = str;
				elem.validator_valid = (str == "") ? true : false;				
			}
		}
	}
}

function check_form (obj, show_alert_flag) {
	var err = "";
	var left_sbracket = /\[/g;
	var right_sbracket = /\]/g;
	var param;
	var elem;
	var highlight_flag = true;

	is_form_checked = true;

	for (var i = 0; i < obj.elements.length; i++) {
		if (obj.elements[i].type && obj.elements[i].type != "hidden" && obj.elements[i].className.indexOf("hidden") == -1) {
			obj.elements[i].focus();
            
		}
	}

	for (var i = 0; i < obj.elements.length; i++) {
		if (obj.elements[i].name && obj.elements[i].type && obj.elements[i].type != "hidden" && obj.elements[i].type != "button" && obj.elements[i].className.indexOf("hidden") == -1) {
			elem = obj.elements[i];
			if (!elem.validator_valid && elem.validator_str) {
				err += elem.validator_str + "<br /><br />";
				if (highlight_flag) {
					//elem.focus();
					highlight_flag = false;
				}
			}
		}
	}
    
	if (err != "") {
		//alert(err);
		//if (arguments.length == 1 || show_alert_flag == 1) show_alert(err);
		return false;
	} else {
		return true;	
	}
}

function init_validator (id_form, exclusions) {
	var fields = new Array();
	var vars = new Array();

	if (!vdata[id_form]) {
		fields[0] = 'h';
		vars[0] = 'init_validator';
	
		fields[1] = 'form_id';
		vars[1] = id_form;
		
		if (arguments.length >= 2) {
			fields[2] = 'exclusions';
			vars[2] = exclusions;			
		}

		process(fields, vars);
	}
	//setTimeout("validator('" + id_form + "');", 250);
}

function validator(id_form) {
	var obj;
	var obj2;
	var msg_obj;
	var is_form_valid = true;
	var left_sbracket = /\[/g;
	var right_sbracket = /\]/g;
	var param;
	var field_re = /^form_/i;
	var field;
	var elem;
	var v;
	var class_re = /( valid| mandatory)/i;
	var class_msg_re = /( opttext| toentertext| errtext)/i;
	
	if (vdata[id_form]) {
		obj = get_obj(id_form); 
		if (obj) {
			for (var i = 0; i < obj.elements.length; i++) {
				if (obj.elements[i].name && obj.elements[i].name.indexOf("form[") != -1) {
					elem = obj.elements[i];
					param = elem.name.replace(left_sbracket, "_");
					param = param.replace(right_sbracket, "");
					msg_obj = get_obj(param + "_msg");
					obj2 = get_obj(param);
					if (obj2) {
						if (obj2.className.indexOf('toenter') != -1) {
							field = param.replace(field_re, '');
							v = elem.value;
							if (vdata[id_form]["filter"]) v = filter_field(vdata[id_form]["filter"], field, v);
							if (elem.validator_old_value != v) {
								str = "";
								if (v == "") {
									str = helpstr[param];
								} else {
									if (vdata[id_form]["validator"]) {
										str = validate_field(vdata[id_form]["validator"], field, v, param, elem);
									}
								}
								elem.validator_str = str;
								elem.validator_valid = (str == "") ? true : false;
								elem.validator_old_value = v;
							}
							if (elem.validator_valid) {
								obj2.className = obj2.className.replace(class_re, "") + " valid";
								if (msg_obj) {
									msg_obj.className = msg_obj.className.replace(class_msg_re, "");
									msg_obj.innerHTML = "&nbsp;";
								}
							} else {
								obj2.className = obj2.className.replace(class_re, "") + " mandatory";
								if (elem.validator_selected) {
									if (msg_obj) {
										msg_obj.className = msg_obj.className.replace(class_msg_re, "") + " errtext";
										if (msg_obj.innerHTML != elem.validator_str) msg_obj.innerHTML = elem.validator_str;
									}
								}
							}							
						} else {
							field = param.replace(field_re, '');
							v = elem.value;
							if (vdata[id_form]["filter"]) v = filter_field(vdata[id_form]["filter"], field, v);
							if (elem.validator_old_value != v) {
								str = "";
								if (v == "") {
									str = "";
								} else {
									if (vdata[id_form]["validator"]) {
										str = validate_field(vdata[id_form]["validator"], field, v, param, elem);
									}
								}
								elem.validator_str = str;
								elem.validator_valid = (str == "") ? true : false;
								elem.validator_old_value = v;
							}
							if (elem.validator_valid) {
								if (msg_obj) {
									if (elem.validator_current && v == "") {
										msg_obj.className = msg_obj.className.replace(class_msg_re, "") + " opttext";
										if (msg_obj.innerHTML != helpstr[param]) msg_obj.innerHTML = helpstr[param];
									} else {
										msg_obj.className = msg_obj.className.replace(class_msg_re, "");
										msg_obj.innerHTML = "&nbsp;";					
									}
								}
							} else {
								if (elem.validator_selected) {
									if (msg_obj) {
										msg_obj.className = msg_obj.className.replace(class_msg_re, "") + " errtext";
										if (msg_obj.innerHTML != elem.validator_str) msg_obj.innerHTML = elem.validator_str;
									}
								}
							}
						}
					}
				}
			}
		}
	}
	//setTimeout("validator('" + id_form + "');", 250);
}

function filter_field(flt, field, value) {
	var re_rtrim = /^\s+/;
	var re_ltrim = /\s+$/;
	var re_nondigit = /[^0-9]+/g;
	
	if (flt[field]) {
		if (flt[field] == "trim") {
			value = value.toString();
			value = value.replace(re_rtrim, "");
			value = value.replace(re_ltrim, "");
		} else if (flt[field] == "stripnondigits") {
			value = value.toString();
			value = value.replace(re_nondigit, "");
		}
	}
	return value;
}

function validate_field(flt, field, value, param, elem) {
	var str = "";
	var fields = new Array();
	var vars = new Array();
	var obj;
    
	if (flt[field]) {    
		for (i in flt[field]) {            
			if (i == 'isempty') {
				if (value == '') str = flt[field][i];
			} else if (i == 'iszero') {
				if (value == '0') str = flt[field][i];
			} else if (i == 'isnotemail') {
				if (value != '' && !string_is_email(value)) str = flt[field][i];
			} else if (i == 'isnotlogin') {
				if (value != '' && !string_is_login(value)) str = flt[field][i];
			} else if (i == 'loginexists') {
				if (value != '') {
					fields[0] = 'h';
					vars[0] = 'check_field';
				
					fields[1] = 'field_id';
					vars[1] = param;

					fields[2] = 'field_name';
					vars[2] = elem.name;
			
					fields[3] = 'form_id';
					vars[3] = elem.form.id;
			
					fields[4] = 'field_value';
					vars[4] = elem.value;
					
					process(fields, vars);
				}
			} else if (i== 'isnotpassword') {
				if (value != '' && value.length < 6) str = flt[field][i];
			} else if (i == 'passdiff') {
				obj = get_obj("form_pass");
				if (obj) {
					if (obj.value != value) str = flt[field][i];
				}
			} else if (i == 'isnotmobile') {
				if (value != '' && !string_is_mobile(value)) str = flt[field][i];
			} else if (i == 'isnotdate') {
				if (value != '' && !string_is_date(value)) str = flt[field][i];
			} else if (i == 'isnotpostcode') {
				if (value != '' && !string_is_postcode(value)) str = flt[field][i];
			}
		}
	}
	/*
	if (elem.form.id == "address_details_form") {
		obj = get_obj("form_from_checked");
		if (!obj || obj.value == "0") {
			if (str == "" && (field == "from_line1" || field == "from_postcode")) str = msgstr["need_to_confirm_address"]; 
		}
		obj = get_obj("form_to_checked");
		if (!obj || obj.value == "0") {
			if (str == "" && (field == "to_line1" || field == "to_postcode")) str = msgstr["need_to_confirm_address"]; 
		}
	}
	*/
	return str;
}

function string_is_email(str) {
	var re = /^([a-z0-9_]|\-|\.)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,4}$/i;
    return re.test(str) ? true : false;
}

function string_is_login(str) {
	var re = /^[a-z0-9_]+$/i;
    return re.test(str) ? true : (string_is_email(str) ? true : false);
}

function string_is_mobile(str) {
	var re = /^07[0-9]{9}$/i;
    return re.test(str) ? true : false;
}

function string_is_phone_city(str) {
	var re = /^0[0-9]{10}$/i;
    return re.test(str) ? true : false;
}

function string_is_phone_city_short(str) {
	//var re = /^0[1-2]{1}[0-9]{9}$/i;
    var re = /^0[0-9_]+$/i;
    return re.test(str) ? true : false;
}

function string_is_phone_mixed(str) {
    var re = /^0[1,2,7]{1}[0-9]{9}$/i;
    return re.test(str) ? true : false;
}


function string_is_postcode(str) {
	//var re = /^[A-Z]{1,2}[0-9A-Z]{1,2}\s*[0-9]{1}[A-Z]{2}$/i;
    //return re.test(str) ? true : false;
	return str.length < 3 ? false : true;
}

function string_is_date(str) {
	var re = /^\d{2}\.\d{2}\.\d{4}$/;
    return re.test(str) ? true : false;
}

function show_alert (err) {
	var obj;
	obj = get_obj('popup_box');
	if (obj) {
		obj.innerHTML = get_alert_box(err);
		show_box('popup_box');
	}
}

function show_incomplete_box () {
	var obj;
	obj = get_obj('popup_box');
	if (obj) {
		obj.innerHTML = get_incomplete_box();
		show_box('popup_box');
	}	
}

function show_confirm_box (err, url_yes, url_no) {
	var obj;
	obj = get_obj('popup_box');
	if (obj) {
		obj.innerHTML = get_confirm_box(err, url_yes, url_no);
		show_box('popup_box');
	}
}

function show_new_move_invitation (fname) {
	var obj;
	obj = get_obj('popup_box');
	if (obj) {
		obj.innerHTML = get_new_move_invitation_box(fname);
		show_box('popup_box');
	}	
}

function show_continue_box (msg, url, alt_url) {
	var obj;
	obj = get_obj('popup_box');
	if (obj) {
		obj.innerHTML = get_continue_box(msg, url, alt_url);
		show_box('popup_box');
	}
}

function show_msg_box (msg) {
	var obj;
	obj = get_obj('popup_box');
	if (obj) {
		obj.innerHTML = get_msg_box(msg);
		show_box('popup_box');
	}
}

function show_wait_box(msg) {
	var obj;
	hide_box('popup_box', 0)
	obj = get_obj('popup_box');
	if (obj) {
        obj.innerHTML = get_wait_box();
		show_box('popup_box', 500);
	}
}

function show_notsaved_box (url) {
	var obj;
	obj = get_obj('popup_box');
	if (obj) {
		obj.innerHTML = get_notsaved_box(url);
		show_box('popup_box');
	}
}

function show_ok_box (err) {
	var obj;
	obj = get_obj('popup_box');
	if (obj) {
		obj.innerHTML = get_ok_box(err);
		show_box('popup_box');
	}
}

function check_pwd_strength (pwd) {
	var obj;
	var strength_scale = new Array();

	strength_scale[0] = "#CCCCCC";
	strength_scale[1] = "#FF0000";	
	strength_scale[2] = "#FF9900";	
	strength_scale[3] = "#FFFF00";
	strength_scale[4] = "#66FF00";
	strength_scale[5] = "#00FF00";

	var base = 0;
	var combos = 0;
	var strength = 0;

	if (pwd.match(/[a-z]/)) {
		base += 26;
	}

	if (pwd.match(/[A-Z]/)) {
		base += 26;
	}

	if (pwd.match(/[0-9]/)) {
		base += 10;
	}

	if (pwd.match(/[^a-zA-Z0-9]/)) {
		base += 33;
	}

	combos=Math.pow(base,pwd.length);

	if(combos == 1) {
		strength = 0;
	} else if(combos > 1 && combos < 1000000) {
		strength = 1;
	} else if (combos >= 1000000 && combos < 1000000000000) {
		strength = 2;
	} else if (combos >= 1000000000000 && combos < 1000000000000000000) {
		strength = 3;
	} else if (combos >= 1000000000000000000 && combos < 1000000000000000000000000) {
		strength = 4;
	} else {
		strength = 5;
	}

	obj = get_obj("pwd_strength_scale");
	if (obj) {
		obj.rows[0].cells[0].style.backgroundColor = strength_scale[strength];
		obj.rows[0].cells[0].style.width = (strength * 30) + "px";
		obj.rows[0].cells[1].style.width = (150 - strength * 30) + "px";
	}
	obj = get_obj("pwd_strength_help");
	if (obj) obj.innerHTML = helpstr["pwd_strength_" + strength];
}

function man_adds() {
	var obj;
	show_form('manual_adds1');	
}

function check_manual_field (elem) {
	var obj;
	var elem_id = elem.id;
	
	if (elem.value == "other") {
		obj = get_obj("td_" + elem_id);
		if (obj) {
			obj.innerHTML = '<input type="text" name="' + elem.name + '" value="" class="inp-med inp" id="' + elem_id + '" />';
			obj = get_obj(elem_id);
			if (obj) {
				obj.focus();
			}
		}
	}
}

function compact_bd () {
	var obj;
	var db = "";
	var d = 0;
	var m = 0;
	var y = 0;
	
	obj = get_obj("form_datebirth_day");
	if (obj) d = obj.value;
	obj = get_obj("form_datebirth_month");
	if (obj) m = obj.value;
	obj = get_obj("form_datebirth_year");
	if (obj) y = obj.value;

	if (d && m && y && d != 0 && m != 0 && y != 0) db = d + "." + m + "." + y;
	
	obj = get_obj("form_hidden_bd");
	if (obj) obj.value = db;
}

function del_rec (id_rec) {
	show_confirm_box("Are you sure you want to delete this organisation?<br />", "/organisations/?a=del&id=" + id_rec, "javascript:hide_popup_box();");
}

function highlight_row (elem, action) {
	if (action == "out") {
		elem.className = "";
	} else {
		elem.className = "highlight";
	}
}

var tt_show_timer;
var tt_hide_timer;
var tt_text = new Array();
function show_tooltip (elem, dx, dy) {
	var obj;
	
	obj = get_obj("tooltip");
	if (obj && elem.id && tt_text[elem.id]) {
		if (tt_hide_timer) {
			clearTimeout(tt_hide_timer);
			tt_hide_timer = false;
		}
		obj.style.left = (get_abs_left(elem) + dx) + "px";
		obj.style.top = (get_abs_top(elem) + elem.offsetHeight + dy) + "px";
		document.getElementById("tooltip_text").innerHTML = tt_text[elem.id];
		if (!elem.onmouseout) elem.onmouseout = hide_tooltip;
		if (!obj.onmouseout) obj.onmouseout = hide_tooltip;
		if (!obj.onmouseover) obj.onmouseover = function () {if (tt_hide_timer) {clearTimeout(tt_hide_timer);tt_hide_timer = false;}};
		tt_show_timer = setTimeout(function () {
			document.getElementById("tooltip").style.visibility = "visible";								 
		}, 500);
	}
}

function hide_tooltip () {
	var obj;
	
	obj = get_obj("tooltip");
	if (obj) {
		tt_hide_timer = setTimeout(function () {
			document.getElementById("tooltip").style.visibility = "hidden";								 
		}, 500);
	}
}

function check_chb (obj) 
{
	for (var i = 0; i < obj.elements.length; i++) {
		if (obj.elements[i].type == "checkbox" && obj.elements[i].checked) {
			return obj.elements[i].value;
		}
	}
	return false;
}

function check_review_form () {
	var obj;
	var obj2;
	var f;
	
	f = check_chb(get_obj("review_notifications_form")) ? true : false;
	obj = get_obj("btn_resend_act");
	obj2 = get_obj("btn_resend_inact");
	if (obj && obj2) {
		obj.style.display = f ? "block" : "none";
		obj2.style.display = f ? "none" : "block";
	}
	obj = get_obj("btn_cancel_act");
	obj2 = get_obj("btn_cancel_inact");
	if (obj && obj2) {
		obj.style.display = f ? "block" : "none";
		obj2.style.display = f ? "none" : "block";
	}
}

function resend_conf (type) {
	if (type == "resend") {
		show_continue_box(msgstr["resend_orgs_conformation"], "javascript:submit_form('review_notifications_form', 'resend');", "javascript:hide_popup_box();")
	} else if (type == "cancel") {
		show_continue_box(msgstr["cancel_orgs_conformation"], "javascript:submit_form('review_notifications_form', 'cancel');", "javascript:hide_popup_box();")
	} 	
}

// Section 8
// Move Details form
function check_addr(elem, type) {
	var obj;
	
	if (elem.value != elem.defaultValue) {
		obj = get_obj("form_" + type + "_checked_");
		if (obj) obj.value = 0;
		for (var i = 0; i < elem.form.elements.length; i++) {
			obj = elem.form.elements[i];
			if (obj.type == "hidden" && (obj.name == "form[" + type + "][line2]" || obj.name == "form[" + type + "][line3]" || obj.name == "form[" + type + "][line4]" || obj.name == "form[" + type + "][city]" || obj.name == "form[" + type + "][country]")) {
				obj.value = "";
			}
		}
	
	}
}

// Section 9
// Carousel
function CarouselInit () {
    if (document.getElementById('carousel2')) {
        document.getElementById('carousel2').style.width = (block_width * numofblocks * 3) + "px";
//	document.getElementById('carousel').style.width = block_width;
        s = document.getElementById('carousel2').innerHTML;
        document.getElementById('carousel2').innerHTML = '<table border="0" cellpadding="0" cellspacing="0"><tr><td>' + s + '</td><td>' + s + '</td><td>' + s + '</td></tr></table>';
        AutoCarousel();
    } else {
        if (initcount < 10) {
            initcount++;
            setTimeout("CarouselInit();", 100);
        }
    }
}
function AutoCarousel() {
    if (autoscroll == 1) {
        DecXpos();
        setTimeout("AutoCarousel();", 7000);
    }
}
function IncXpos() {   
    dx = dx + 10;
    xpos = xpos + 10;
    if (Math.abs(xpos) >= block_width * numofblocks) xpos = 0;
    document.getElementById('carousel2').style.left=(xpos - block_width * numofblocks) + "px";
    if (id_timer != 0) clearTimeout(id_timer);
    if (dx < block_width) {
        id_timer = setTimeout('IncXpos(0);', 10);
    } else {
        dx = 0;
    }
}
function DecXpos() {   
    dx = dx + 10;
    xpos = xpos - 10;
    if (Math.abs(xpos) >= block_width * numofblocks) xpos = 0;
    document.getElementById('carousel2').style.left=(xpos - block_width * numofblocks) + "px";
    if (id_timer != 0) clearTimeout(id_timer);
    if (dx < block_width) {
        id_timer = setTimeout('DecXpos(0);', 10);
    } else {
        dx = 0;
    }
}
function MM_swapImgRestore() {
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() {
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() {
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// Section 10
function install_popup () {
	var x;
	var i;

	x = document.getElementsByTagName('a');
	for (i = 0; i < x.length; i++) {
		if (x[i].href.indexOf("organisations") == -1 && x[i].href != "#" && x[i].href != "./" && x[i].href.indexOf("account/reg/") == -1 && x[i].target != "_blank") {
			x[i].href = "javascript:show_notsaved_box('" + x[i].href + "');";
		}
	}
}

function howhear_onchange (elem, agent_rows) {
	var obj;
	if (agent_rows.indexOf(elem.value) != -1) {
		show_ok_box(msgstr['enter_agent_name']);
		obj = get_obj('form_agentname_popup');
		if(obj) obj.value = document.getElementById('form_agentname').value;
	}
}

// Section 11
function get_org_form (id_service) {
	var fields = new Array();
	var vars = new Array();

	fields[0] = 'a';
	vars[0] = 'show_notification_form';
	fields[1] = 'ids';
	vars[1] = id_service;		

	show_wait_box();
	process(fields, vars);
}

// Section 12
// Search for organisation
var search_results = new Array();
// send query to server
function get_search_results(str) {
	var obj;
	var fields = new Array();
	var vars = new Array();

	fields[0] = 'h';
	vars[0] = 'search_org';
	
	fields[1] = 'title';
	vars[1] = str;

	obj = get_obj('search_org_results_list');
	if(obj) {
		clear_table(obj);
		tr = obj.insertRow(obj.rows.length);
		td = tr.insertCell(tr.cells.length);
		hide_suggest();
		show_block('search_org_results');
		if (str.length < 3) {
			td.innerHTML = msgstr["enter_at_least_3chars"];
			return;
		} else {
			td.innerHTML = msgstr["searching_wait"];
			process(fields, vars);
		}
	}
	return;
}

// show search results
function show_search_results () {
	var obj;
	var tr;
	var td;
	var col = 0;
	var id_gcat = 0;
	var str = '';

	obj = get_obj('search_org_results_list');
	if(obj) {
		clear_table(obj);

		for(var id_cat in search_results) {
			id_gcat = search_results[id_cat]['id_gcat'];
			col++;
			if (col > 4) col = 1;	
			if (col == 1) tr = obj.insertRow(obj.rows.length);
			td = tr.insertCell(tr.cells.length);
			str = '<h6>' + search_results[id_cat]['title'] + '</h6>';
			for(var id_srv in search_results[id_cat]['services']) {
				str += '<a href="/organisations/?gcat=' + id_gcat + '&cat=' + id_cat + '&a=add&id=' + id_srv + '" onclick="get_org_form(' + id_srv + ');return false;">' + search_results[id_cat]['services'][id_srv] + '</a>';
			}
			td.innerHTML = str;
		}
	}
}

// Section 13
function get_address_form (type, postcode) {
	var fields = new Array();
	var vars = new Array();

	if (type == "from" && document.getElementById("form_from_address_postcode") && document.getElementById("form_to_postcode") && document.getElementById("form_to_postcode").value != "") {
		if (document.getElementById("form_from_address_postcode").value == document.getElementById("form_" + type + "_postcode").value) {
			get_address_form("to", document.getElementById("form_to_postcode").value);
			return;
		}
	}

	fields[0] = 'a';
	vars[0] = 'show_address_form';
	fields[1] = 'type';
	vars[1] = type;		
	fields[2] = 'line1';
	vars[2] = '';		
	fields[3] = 'postcode';
	vars[3] = postcode;		

	show_wait_box();
	process(fields, vars);
}

function get_address_manual_form (type, postcode) {
	var fields = new Array();
	var vars = new Array();

	fields[0] = 'a';
	vars[0] = 'show_address_manual_form';
	fields[1] = 'type';
	vars[1] = type;		
	fields[2] = 'line1';
	vars[2] = '';		
	fields[3] = 'postcode';
	vars[3] = postcode;		

	show_wait_box();
	process(fields, vars);
}

function save_address_form (obj, type) {
	var elem = get_obj("form_" + type + "_address");

	if (elem) {
		if (obj.address) {
			if (obj.address.type == "hidden") { // one address
				elem.value = obj.address.value;
			} else {
				for (var i = 0; i < obj.address.length; i++) { // list of addresses
					if (obj.address[i].checked) {
						elem.value = obj.address[i].value;
					}
				}
			}
		} else { // manual address form
			elem.value = obj.line1.value;
			elem.value += ", " + obj.line2.value;
			elem.value += ", " + obj.line3.value;
			elem.value += ", " + obj.line4.value;
			elem.value += ", " + obj.city.value;
			elem.value += ", " + obj.postcode.value;
			elem.value += ", " + obj.country.value;
			//document.getElementById("form_" + type + "_line1").value = obj.line1.value; // write back to main form
			document.getElementById("form_" + type + "_postcode").value = obj.postcode.value;
		}
	}
	
	if (type == "from" && document.getElementById("form_from_address_postcode")) {
		document.getElementById("form_from_address_postcode").value = document.getElementById("form_" + type + "_postcode").value;
	}

	if (type == "from" && document.getElementById("form_to_postcode").value != "") {
		get_address_form('to', document.getElementById("form_to_postcode").value);
	} else {
		if (document.getElementById("account_reg_confirmation_form")) {
			hide_box('popup_box');
			show_wait_box();
			document.getElementById("account_reg_confirmation_form").submit();
		}
		if (document.getElementById("address_details_form")) document.getElementById("address_details_form").submit();
	}
}

function pack_to_address (obj) {
	var elem = get_obj("form_to_address");

	if (elem) {
		elem.value = obj.line1.value;
		elem.value += ", " + obj.line2.value;
		elem.value += ", " + obj.line3.value;
		elem.value += ", " + obj.line4.value;
		elem.value += ", " + obj.city.value;
		elem.value += ", " + obj.postcode.value;
		elem.value += ", " + obj.country.value;
	}
}

function check_address_form (obj) {
	var elem;
	
	if (obj.line1.value == "") {
		elem = get_obj("manual_address_err_block");
		if (elem) {
			elem.className = "text-error";
			elem.innerHTML = "Please enter Address Line 1";
		}
		return false;
	}
	if (obj.city.value == "") {
		elem = get_obj("manual_address_err_block");
		if (elem) {
			elem.className = "text-error";
			elem.innerHTML = "Please enter Town";
		}
		return false;
	}
	return true;
}

// Section 14
// hide/show notification box
var scroll_width_timer = false;
function notif_switch (elem) {
	var isopen = (elem.title == 'hide');
	var obj;
	
	if (scroll_width_timer) {
		clearTimeout(scroll_width_timer);
		scroll_width_timer = false;
	}

	elem.title = isopen ? 'show' : 'hide';
	elem.alt = isopen ? 'show' : 'hide';
	elem.src = isopen ? '/img/f-notif-show.gif' : '/img/f-notif-hide.gif';
	obj = get_obj('notif_sent');
	if (obj) {
		obj.className = isopen ? 'hiddenblock' : 'notif-sent';
	}
	obj = get_obj('notif_selected');
	if (obj) {
		obj.className = isopen ? 'hiddenblock' : '';
	}
	if (isopen) {
		scroll_width(200, obj ? 50 : 30, 'notification_block');
	} else {
		obj = get_obj('notification_block');
		if (obj) {
			obj.style.width = '200px';
		}
	}
	document.cookie = "notification_block=" + (isopen ? "0" : "1");
}

function scroll_width(from, to, elem_id) {
	if (from > to) {
		from = from - 10;
		obj = get_obj('notification_block');
		if (obj) {
			obj.style.width = from + 'px';
		}	
		scroll_width_timer = setTimeout("scroll_width(" + from + ", "  + to +  ", '" + elem_id + "');", 10);
	} else {
		scroll_width_timer = false;
	}
}

var sse_cookie = setInterval("check_cookie();", 200);
var sse_limit = 10;
function check_cookie() {
	if (document.cookie && document.cookie.search(/SSEGROUP=1/) > -1) {
		document.cookie = "SSEGROUP=" + ";path=/";
		sse_limit--;
		if (sse_limit < 1) clearInterval(sse_cookie);
		//tb_show('Warning', '/properties/ajax/ajax_property_alert.php?height=160&amp;width=440', false);
		alert('Scottish and Southern are working through a backlog of notifications. Your tenant or landlord should get a letter within 21 working days. However, if you are outside this time-frame and are concerned, please give us a call on 01244 505 808. There are currently no service problems with any of the other suppliers.');
	}
}