if (location.href.indexOf("dev.theycreate.co.uk") != -1 || location.href.indexOf("86.7.238.35") != -1 || location.href.indexOf("192.168.2.10") != -1) var PATH = "/hydra/";
else var PATH = "/";

var filter_showing = '';
var ajax_ready = true;
var ajax_timer = 0;
var last_requests = new Array();
var box_list = new Array();
var over_file_input = false;
 var sliding = new Array();
_debug_num = -1;

//Create a boolean variable to check for a valid Internet Explorer instance.
var xmlhttp = false;
//Check if we are using IE.
try
{
	//If the Javascript version is greater than 5.
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
	//If not, then use the older active x object.
	try
	{
		//If we are using Internet Explorer.
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch (E)
	{
		//Else we must be using a non-IE browser.
		xmlhttp = false;
	}
}

if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
{
	xmlhttp = new XMLHttpRequest();
}

function get_position(e)
{
	var left = 0;
	var top  = 0;

	while (e.offsetParent)
	{
		left += e.offsetLeft - e.offsetParent.scrollLeft;
		top  += e.offsetTop - e.offsetParent.scrollTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

function mouse_coords(ev)
{
	if(ev.pageX || ev.pageY)
	{
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:(ev.clientX + document.body.scrollLeft - document.body.clientLeft),
		y:(ev.clientY + document.body.scrollTop  - document.body.clientTop)
	};
}

function mouse_move(ev)
{
	ev = ev || window.event;

	var mouse_pos = mouse_coords(ev);

	mousex = mouse_pos.x;
	mousey = mouse_pos.y;

    if(over_file_input)
    {
        _file_input_wrap = $('file_input_wrap');
        _file_input_wrap_pos = get_position(_file_input_wrap);
        log('x: ' + (mousex - _file_input_wrap_pos.x),'y: ' + (mousey - _file_input_wrap_pos.y));
        _choose_input = $('choose_input');
        _choose_input.style.left = (_choose_input.offsetWidth * -1) + (mousex - _file_input_wrap_pos.x + 10) + 'px';
    }

	return false;
}

document.onmousemove = mouse_move;

function time()
{
	var d = new Date();
	return d.getTime();
}

function make_request(server_page, obj_id, replace_ajax)
{
	if (!replace_ajax) replace_ajax = 0;
	if (!ajax_ready)
	{
		if (!ajax_timer) ajax_timer = time();
		else if (ajax_timer - time() > 5000)
		{
			ajax_ready = true;
			ajax_timer = 0;
		}
		setTimeout('make_request("'+server_page+'", "'+obj_id+'", "'+replace_ajax+'")', 100);
	}
	else
	{
		if (server_page.indexOf('?') > -1) server_page = server_page+"&"+time();
		else server_page = server_page+"?"+time();
		ajax_ready = false;
		xmlhttp.open("GET", server_page);
		xmlhttp.onreadystatechange = function()
		{
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
			{
				var content = xmlhttp.responseText;
				if (null != $(obj_id))
				{
					$(obj_id).innerHTML = content;

					var ajaxScript = $(obj_id).getElementsByTagName("script");
					if(ajaxScript.length)
					{
						for (x = 0;x < ajaxScript.length; x++)
						eval(ajaxScript[x].innerHTML);
					}
					last_requests[obj_id] = 'make_request("'+server_page+'", "'+obj_id+'", "'+replace_ajax+'")';
				}
				if (replace_ajax != 0)
				{
					box_list[replace_ajax].ajax = server_page;
				}

				xmlhttp.onreadystatechange = function(){};
				ajax_ready = true;
			}
		}
		xmlhttp.send(null);
	}
}

function $(obj_id)
{
    return document.getElementById(obj_id);
}

function viewport_size()
{
	var viewport = new Array();

	// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight

	if (typeof window.innerWidth != 'undefined')
	{
		viewport['width'] = window.innerWidth,
		viewport['height'] = window.innerHeight
	}

   // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)

	else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0)
	{
		  viewport['width'] = document.documentElement.clientWidth,
		  viewport['height'] = document.documentElement.clientHeight
	}

	// older versions of IE

	else
	{
		  viewport['width'] = document.getElementsByTagName('body')[0].clientWidth,
		  viewport['height'] = document.getElementsByTagName('body')[0].clientHeight
	}

	return viewport;
}

function debug(debug_id,debug_var)
{
	if (!debug_id)
	{
		_debug_num ++;
		debug_id = _debug_num;
	}
	if (!(debug_element = document.getElementById('debug_'+debug_id)))
	{
		var debug_element = document.createElement("div");
		debug_element.style.position = "fixed";
		debug_element.style.right="10px";
		debug_element.style.height="15px";
		debug_element.style.backgroundColor="#E0E0E0";
		debug_element.style.font="13px/17px verdana";
		debug_element.id = "debug_"+debug_id;
		debug_element.style.bottom = 10+(debug_id*20)+"px";
		document.body.appendChild(debug_element);
	}
	debug_element.innerHTML = debug_var;
}

/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

function toggle_filter(obj_id,reset_filter)
{
    if(reset_filter)
    {
        $('filter_sector_input').value = '';
        $('filter_location_input').value = '';
        $('filter_form').submit();
    }
    if(!obj_id) return false;
    if(filter_showing && filter_showing != obj_id) toggle_filter(filter_showing);
    elem = $(obj_id);
    if(elem.style.display == 'none')
    {
        elem.style.display = '';
        filter_showing = obj_id;
    }
    else
    {
        elem.style.display = 'none';
        filter_showing = '';
    }
}

function show_application_form()
{
    _application_overlay = $('application_overlay');
    _application_form_wrap = $('application_form_wrap');
    _application_form = $('application_form');
    _wrap = $('wrap');
    resize_height = document.body.offsetHeight > _wrap.offsetHeight ? document.body.offsetHeight : _wrap.offsetHeight;

    _application_overlay.style.width = _application_overlay.offsetWidth + 'px';
    _application_overlay.style.height = resize_height + 'px';

    _application_form_wrap.style.display = 'block';

    scroll_top = document.body.scrollTop ? document.body.scrollTop : (window.pageYOffset ? window.pageYOffset : (document.body.parentElement ? document.body.parentElement.scrollTop : 0));

	var vp = viewport_size();

	var top  = Math.ceil(((vp.height - _application_form_wrap.offsetHeight) / 2) + scroll_top);

    _application_form_wrap.style.top = top +  'px';
    _application_form_wrap.style.left = (_application_overlay.offsetWidth /2) - 215 + 'px';
}

function hide_application_form(that)
{
    $('application_overlay').style.height = '0px';
    $('application_form_wrap').style.display = 'none';
}

function show_referral_form()
{
    _referral_overlay = $('referral_overlay');
    _referral_form_wrap = $('referral_form_wrap');
    _referral_form = $('referral_form');
    _wrap = $('wrap');
    resize_height = document.body.offsetHeight > _wrap.offsetHeight ? document.body.offsetHeight : _wrap.offsetHeight;

    _referral_overlay.style.width = _referral_overlay.offsetWidth + 'px';
    _referral_overlay.style.height = resize_height + 'px';

    _referral_form_wrap.style.display = 'block';

    scroll_top = document.body.scrollTop ? document.body.scrollTop : (window.pageYOffset ? window.pageYOffset : (document.body.parentElement ? document.body.parentElement.scrollTop : 0));

	var vp = viewport_size();

	var top  = Math.ceil(((vp.height - _referral_form_wrap.offsetHeight) / 2) + scroll_top);

    //_referral_form_wrap.style.top = (resize_height / 2) - (_referral_form_wrap.offsetHeight /2) + (scroll_top / 2) +  'px';
    _referral_form_wrap.style.top = top +  'px';
    _referral_form_wrap.style.left = (_referral_overlay.offsetWidth /2) - 215 + 'px';
}

function hide_referral_form(that)
{
    $('referral_overlay').style.height = '0px';
    $('referral_form_wrap').style.display = 'none';
}

function show_vacancy_form()
{
    _vacancy_overlay = $('vacancy_overlay');
    _vacancy_form_wrap = $('vacancy_form_wrap');
    _vacancy_form = $('vacancy_form');
    _wrap = $('wrap');
    resize_height = document.body.offsetHeight > _wrap.offsetHeight ? document.body.offsetHeight : _wrap.offsetHeight;

    _vacancy_overlay.style.width = _vacancy_overlay.offsetWidth + 'px';
    _vacancy_overlay.style.height = resize_height + 'px';

    _vacancy_form_wrap.style.display = 'block';

    scroll_top = document.body.scrollTop ? document.body.scrollTop : (window.pageYOffset ? window.pageYOffset : (document.body.parentElement ? document.body.parentElement.scrollTop : 0));

	var vp = viewport_size();

	var top  = Math.ceil(((vp.height - _vacancy_form_wrap.offsetHeight) / 2) + scroll_top);

    _vacancy_form_wrap.style.top = top +  'px';
    _vacancy_form_wrap.style.left = (_vacancy_overlay.offsetWidth /2) - 215 + 'px';
}

function hide_vacancy_form(that)
{
    $('vacancy_overlay').style.height = '0px';
    $('vacancy_form_wrap').style.display = 'none';
}

function home_select(which,value,that)
{
    q_str = '';
    if(value)
    {
        q_str = '?' + which + '=' + value;
        $('home_' + which + '_input').value = value;
    }
    else $('home_' + which + '_input').value = '';
    selected_sector = $('home_sector_input').value;
    selected_location = $('home_location_input').value;
    switch(which)
    {
        case 'sector':
            active_sector = getElementsByClassName('act', 'a', $('options_1'));
            active_sector[0].className = '';
            that.className = 'act';
            $('home_location_input').value = '';
            make_request(PATH + 'ajax/locations_list.php' + q_str,'options_2');
            make_request(PATH + 'ajax/home_results.php' + q_str,'home_results');
            break;

        case 'location':
            active_sector = getElementsByClassName('act', 'a', $('options_2'));
            active_sector[0].className = '';
            that.className = 'act';
            if(selected_sector)
			{
				q_str += q_str ? '&' : '?';
				q_str += 'sector=' + selected_sector;
			}
            make_request(PATH + 'ajax/home_results.php' + q_str,'home_results');
            break;
    }
}

function filter_select(which,value)
{
    if(value) $('filter_' + which + '_input').value = value;
    else $('filter_' + which + '_input').value = '';
    $('filter_form').submit();
}

function valid_email(address)
{
	var emailRegEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

    return address.match(emailRegEx);
}

function is_integer(s)
{
    for (i = 0; i < s.length; i++)
    {
        //check that current character is number
        var c = s.charAt(i);
        if (((c < '0') || (c > '9'))) return false;
    }
    //all characters are numbers
    return true;
}

function strip_chars(s, chars_to_strip)
{
    return_string = '';
    //search through string's characters one by one
    //if character is not in chars_to_strip, append to return_string
    for (i = 0; i < s.length; i++)
    {
        c = s.charAt(i);
        if (chars_to_strip.indexOf(c) == -1) return_string += c;
    }
    return return_string;
}

function valid_phone(number)
{
    plus_loc = number.indexOf('+');
    if(plus_loc > 1) return false;
    if(plus_loc != -1 && number.charAt(3) == '0') return false;
    number = strip_chars(number,'()-+ ');
    return (is_integer(number) && number.length >= 10);
}

function validate(form)
{
    form = $(form);
    valid = true;
    switch(form.id)
    {
        case 'application_form_1':
            form['a_first_name'].style.backgroundImage = '';
            if(!form['a_first_name'].value || form['a_first_name'].value == 'name')
            {
                valid = false;
                form['a_first_name'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w1_error.gif)';
            }
            form['a_surname'].style.backgroundImage = '';
            if(!form['a_surname'].value || form['a_surname'].value == 'surname')
            {
                valid = false;
                form['a_surname'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w1_error.gif)';
            }
            form['a_phone'].style.backgroundImage = '';
            if(form['a_phone'].value && form['a_phone'].value != 'contact number')
            {
                //just get rid of any nasties
                form['a_phone'].value = strip_chars(form['a_phone'].value,'()- ');
            }
            if(!valid_phone(form['a_phone'].value))
            {
                valid = false;
                form['a_phone'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w2_error.gif)';
            }
            form['a_email'].style.backgroundImage = '';
            if(!valid_email(form['a_email'].value))
            {
                valid = false;
                form['a_email'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w2_error.gif)';
            }
            form['a_profession'].style.backgroundImage = '';
            if(!form['a_profession'].value || form['a_profession'].value == 'profession')
            {
                valid = false;
                form['a_profession'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w2_error.gif)';
            }
            $('tc_agree_text').style.fontWeight = '';
            if(!form['tc_agree'].value)
            {
                valid = false;
                $('tc_agree_text').style.fontWeight = 'bold';
            }
            $('error_area').innerHTML = '';
            if(!form['file_box_1'].value && !form['file_box_2'].value)
            {
                valid = false;
                upload_fail('Please upload your CV / Covering Letter');
            }
            break;

        case 'register_form':
            form['r_first_name'].style.backgroundImage = '';
            if(!form['r_first_name'].value || form['r_first_name'].value == 'name')
            {
                valid = false;
                form['r_first_name'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w1_error.gif)';
            }
            form['r_surname'].style.backgroundImage = '';
            if(!form['r_surname'].value || form['r_surname'].value == 'surname')
            {
                valid = false;
                form['r_surname'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w1_error.gif)';
            }
            form['r_phone'].style.backgroundImage = '';
            if(form['r_phone'].value && form['r_phone'].value != 'contact number')
            {
                //just get rid of any nasties
                form['r_phone'].value = strip_chars(form['r_phone'].value,'()- ');
            }
            if(!valid_phone(form['r_phone'].value))
            {
                valid = false;
                form['r_phone'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w2_error.gif)';
            }
            form['r_email'].style.backgroundImage = '';
            if(!valid_email(form['r_email'].value))
            {
                valid = false;
                form['r_email'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w2_error.gif)';
            }
            form['r_profession'].style.backgroundImage = '';
            if(!form['r_profession'].value || form['r_profession'].value == 'profession')
            {
                valid = false;
                form['r_profession'].style.backgroundImage = 'url(' + PATH + 'images/core/application_input_w2_error.gif)';
            }
            $('tc_agree_text').style.fontWeight = '';
            if(!form['tc_agree'].value)
            {
                valid = false;
                $('tc_agree_text').style.fontWeight = 'bold';
            }
            break;

        case 'application_form_2':
            $('loader').className = '';
            $('error_area').innerHTML = '';
            if(!form['a_file'].value) valid = false;
            else
            {
                file_array = form['a_file'].value.split('.');
                ext = file_array[(file_array.length - 1)];
                exts = ['pdf','doc','docx'];
                if(!in_array(ext,exts))
                {
                    valid = false;
                    upload_fail('Only pdf or doc files are supported');
                }
            }
            if($('file_box_1').value && $('file_box_2').value)
            {
                valid = false;
                upload_fail('You may only upload two files per application. Please remove one.');
            }
            if(valid) $('loader').className = 'loading';
            break;

        case 'contact_form':
            form['c_name'].style.color = '';
            if(!form['c_name'].value || form['c_name'].value == 'name')
            {
                valid = false;
                form['c_name'].style.color = 'red';
            }
            form['c_email'].style.color = '';
            if(!valid_email(form['c_email'].value))
            {
                valid = false;
                form['c_email'].style.color = 'red';
            }
            form['c_message'].style.color = '';
            if(!form['c_message'].value || form['c_message'].value == 'message')
            {
                valid = false;
                form['c_message'].style.color = 'red';
            }
            break;
    }

    if(valid) form.submit();
}

function in_array(needle, haystack)
{
    for (key in haystack)
    {
        if (haystack[key] == needle) return true;
    }
    return false;
}

function upload_success(file_name)
{
    if(!$('file_box_1').value)
    {
        $('file_box_1').value = file_name;
        act_file_box = 1;
    }
    else if(!$('file_box_2').value)
    {
        $('file_box_2').value = file_name;
        act_file_box = 2;
    }
    new_file = '<div id="uploaded_file_' + act_file_box + '" class="uploaded_file">';
    new_file += '<p class="file_col_a">' + file_name + '</p>';
    new_file += '<p class="file_col_b"><a href="#" onclick="delete_file(\'' + act_file_box + '\');return false;">Delete</a></p>';
    new_file += '<div class="clear">&nbsp;</div>';
    new_file += '</div>';
    $('uploaded_files').innerHTML += new_file;
    $('loader').className = '';
}

function upload_fail(message)
{
    $('loader').className = '';
    if(message)
    {
        $('error_area').innerHTML = '<p>' + message + '</p>';
    }
}

function delete_file(file_box)
{
    $('uploaded_files').removeChild($('uploaded_file_' + file_box));
    $('file_box_' + file_box).value = '';
}

function toggle_checkbox(hidden_id,anchor_id,checked_class_name)
{
    hidden_input = $(hidden_id);
    //this forces the value to be a boolean
    checked = !!hidden_input.value;
    anchor = $(anchor_id);
    checked = !checked;
    hidden_input.value = checked ? '1' : '';
    if(checked)
    {
        if(anchor.className.indexOf(checked_class_name) < 0)
        {
            anchor.className += ' ' + checked_class_name;
        }
    }
    else
    {
        if(anchor.className.indexOf(checked_class_name) > -1)
        {
            anchor.className = anchor.className.replace(checked_class_name,'');
        }
    }
}

function log()
{
    if(typeof(console) != 'undefined')
    {
        for(i = 0; i < arguments.length; i++)
        {
            console.log(arguments[i]);
        }
    }
}

function init_map()
{
    if (GBrowserIsCompatible())
    {
        point = new GLatLng(51.425598,-0.356541);
        map = new GMap2($('contact_map'));
        map.setCenter(point, 14);

        letteredIcon = new GIcon(G_DEFAULT_ICON);
        letteredIcon.image = "http://www.google.com/mapfiles/markerA.png";
        markerOptions = { icon:letteredIcon };
        marker = new GMarker(point,markerOptions);

        GEvent.addListener(marker, "click", function() {
            window.open('http://maps.google.co.uk/maps?q=46+High+Street+Hampton+Hill+TW12+1PD');
        });

        map.addOverlay(marker);

        map.addControl(new GSmallMapControl());

		//second map

        pointb = new GLatLng(50.914535,-1.268869);
        mapb = new GMap2($('contact_map2'));
        mapb.setCenter(pointb, 14);

        letteredIcon = new GIcon(G_DEFAULT_ICON);
        letteredIcon.image = "http://www.google.com/mapfiles/markerA.png";
        markerOptions = { icon:letteredIcon };

        markerb = new GMarker(pointb,markerOptions);

        GEvent.addListener(markerb, "click", function() {
            window.open('http://maps.google.co.uk/maps?q=Botley+Mill+Southampton+SO30+2GB');
        });

        mapb.addOverlay(markerb);

        mapb.addControl(new GSmallMapControl());
    }
}

function slide_content(obj, amount)
{
	slide_obj = $(obj);
	var sliders = $('news_archive').getElementsByClassName('archive_holder');
	var controls = $('news_archive').getElementsByClassName('news_year');
	if (sliders)
	{
		for (var i in sliders)
		{
			if (sliders[i] != slide_obj && sliders[i].offsetHeight) slide(sliders[i].id, -30, controls[i]);
		}
	}
	slide(obj, amount);
	return false;
}

function slide(obj, amount)
{
	if (sliding[obj]) clearInterval(sliding[obj].interval);
	sliding[obj] = new Array();
	sliding[obj].obj = $(obj);
	inner = sliding[obj].obj.getElementsByClassName('archive_inner');
	sliding[obj].desired_height = inner[0].offsetHeight;

	if (amount) sliding[obj].change = amount;
	else
	{
		if (sliding[obj].obj.offsetHeight == sliding[obj].desired_height) sliding[obj].change = -30;
		else sliding[obj].change = 30;
	}

	sliding[obj].interval = setInterval("do_slide('"+obj+"')", 30);
	return false;
}

function do_slide(obj)
{
	var slider_height = sliding[obj].obj.offsetHeight;
	slider_height += sliding[obj].change;
	if (slider_height >= sliding[obj].desired_height)
	{
		sliding[obj].obj.style.height = 'auto';
		clearInterval(sliding[obj].interval);
		sliding[obj] = false;
		return false;
	}
	else if (slider_height <= 0)
	{
		sliding[obj].obj.style.height = '0px';
		clearInterval(sliding[obj].interval);
		sliding[obj] = false;
		return false;
	}
	else
	{
		sliding[obj].obj.style.height = slider_height+'px';
		return false;
	}
}