$(document).ready(pageLoaded);

var bgcolor ='';
var mouses = new Object;
mouses['community']=0;
mouses['financial']=0;
mouses['legal']=0;

function pageLoaded()
{
	if($("#search-form").length)
	{
		bgcolor=$('#search-form').css('background-color');
		
		if(bgcolor.match(/#/))
		{
			bgcolor = bgcolor.substr(1,6);
		}
		else
		{
			bgcolor = rgb2hex($('#search-form').css('background-color'));
		}
		
		$("#search-form.section form select#sector").change(function(){updateSector(this);});
		$("#search-form.section form select#region").change(function(){updateRegion(this);});
	}
	
	$("ul.top-level.nav li a.drop-down").click(function(){dropDown(this); return false;});
	$("html").click(function(){$("ul.top-level.nav li ul").fadeOut(100);});
	$(".top-level.header ul.nav li a").mouseover(function(){peek(this, 'in');});
	$(".top-level.header ul.nav li a").mouseout(function(){peek(this, 'out');});
	
	$("form #submit").click(function(){return validateForm(this);});
	
	$(".check").click(function(){return checkMessage();});
	
	$('body#admin.add form select.job-sector-select').change(function(){updateRoles(this);});
	$('body#admin.add form select.job-sector-select').change();
	
	$('input.job-submit').click(function(){return checkJobFields();});
	
	$('ul.collapse').hide();
	$('div.collapse').show();
	$('div.collapse').click(function()
	{
		$('ul.collapse').slideDown(500);
		$('div.collapse').slideUp(500);
	});
}

function checkJobFields()
{
	var errors = false;
	
	$('form .not-blank').each(function()
	{
		if($(this).val().trim() == '')
		{
			if (!errors){scrollTop = this;}
			errors = true;
			$(this).addClass('invalid-data');
		}
	});
	
	$('form .not-zero').each(function()
	{
		if($(this).val().trim() == '0')
		{
			if (!errors){scrollTop = this;}
			errors = true;
			$(this).addClass('invalid-data');
		}
	});
	
	$('form .not-unknown option:selected').each(function()
	{
		if($(this).text() == 'Unknown')
		{
			if (!errors){scrollTop = $(this).parent().parent();}
			errors = true;
			$(this).parent().parent().addClass('invalid-data');
		}
	});
	
	if(errors)
	{
		var scrollTo = jQuery(scrollTop).offset().top - 50;
		jQuery('html,body').animate({scrollTop: scrollTo}, 500, function(){jQuery(scrollTop).focus();});
		return false;
	}
	else
	{
		return true;
	}
}

function updateRoles(that)
{
	var sector = $(that).val();
	
	if(sector != '')
	{
		$.get('/site-design/behaviour/ajax.php', {command:'getRoles', sector:sector}, function(data)
		{
			$('body#admin form select.job-roles-options').html('<option></option>'+data);
		});
	}
	else
	{
		$('body#admin form select.job-roles-options').html('<option>Please select a sector...</option>');
	}
}

function checkMessage()
{
	var check=confirm("Are you sure?");
	
	if (check==true)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function validateForm(that)
{
	var form = $(that).parent('form');
	var errors = false;
	var scrollTop;
	
	jQuery(form).find('.error-message').remove();
	jQuery(".invalid-data").removeClass('invalid-data');
	
	var arrayOfChecks = new Array();
	
	arrayOfChecks['.required'] = ['jQuery(this).val() == ""', 'Required'];
	
	arrayOfChecks['.email'] = ['!jQuery(this).val().match("^[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$")', 'Invalid E-Mail'];
	
	arrayOfChecks['.day'] = ['jQuery(this).val() > 31 || jQuery(this).val() < 1', 'Invalid Date'];
	arrayOfChecks['.month'] = ['jQuery(this).val() > 12 || jQuery(this).val() < 1', 'Invalid Date'];
	arrayOfChecks['.year'] = ['jQuery(this).val() > 2200 || jQuery(this).val() < 1850', 'Invalid Date'];
	
	for (var i in arrayOfChecks)
	{
		jQuery(i).each(function()
		{
			if (eval(arrayOfChecks[i][0]))
			{
				jQuery(this).addClass('invalid-data');
				var label = jQuery(this).prevAll('label')[0];
				
				if (!$(label).children('span').hasClass('error-message'))
				{
					jQuery(label).append('<span class="error-message">('+arrayOfChecks[i][1]+')</span>');
				}
				
				if (!errors){scrollTop = this;}
				errors = true;
			}
		});
	}
	

	if (jQuery('input#email-1').val() != jQuery('input#email-2').val())
	{
		jQuery('input#email-1').addClass('invalid-data');
		jQuery('input#email-2').addClass('invalid-data');
		jQuery('input#email-1').after('<span class="error-message">Email addresses do not match</span>');
		jQuery('input#email-2').after('<span class="error-message">Email addresses do not match</span>');
		if (!errors){scrollTop = this;}
		errors = true;
	}
	
	if($('#agree:checked').val() !="on")
	{
		$('#agree').parent().addClass('invalid-data');
		if (!errors){scrollTop = this;}
		errors = true;
	}
	else
	{
		$('#tempErrorMessage').remove();
	}

	
	if (errors)
	{
		var scrollTo = jQuery(scrollTop).offset().top - 50;
		jQuery('html,body').animate({scrollTop: scrollTo}, 500, function(){jQuery(scrollTop).focus();});
		return false;
	}
	else
	{
		return true;
	}
}

function peek(that, mood)
{
	var sector = $(that).attr('id').replace('-link','');
	
	switch(mood)
	{
		case 'in':
		{
			var string = $(that).css('background-image');
			
			if(string.match(/hidden/gi))
			{
				if(mouses[sector]>30)
				{
					$(that).animate({ backgroundPositionY: '63px' }, 100, function(){
					
						$(that).css({backgroundImage:'url("/site-design/presentation/css/images/'+sector+'-button-broken.png")'});
					});
				}
				else
				{
					$(that).animate({ backgroundPositionY: '0' }, 350);
				}
			}
			mouses[sector]++;
			break;
		}
		case 'out':
		{
			var string = $(that).css('background-image');
			
			if(string.match(/hidden/gi))
			{
				if(mouses[sector]<31)
				{
					$(that).animate({ backgroundPositionY: '-20px' }, 350);
				}
			}
			break;
		}
	}
}

function dropDown(that)
{
	$("ul.top-level.nav li ul").fadeOut(100);
	that = $(that).parent('li');
	$(that).children('ul').fadeIn(100);
}

function updateRegion(that)
{	
	var region = $(that).val();
	
	$("#search-form.section form select#city-id").html('<option></option><optgroup label="Loading Cities..."></optgroup>');
	
	$.get('/site-design/behaviour/ajax.php', {command:'getCities', region:region}, function(data)
	{
		$("#search-form.section form select#city-id").html('<option></option>'+data);
	});
}


function updateSector(that)
{	
	var sector = $(that).val();

	$("#search-form.section form select#role-id").html('<option></option><optgroup label="Loading Roles..."></optgroup>');
	
	$.get('/site-design/behaviour/ajax.php', {command:'getRoles', sector:sector}, function(data)
	{
		$("#search-form.section form select#role-id").html('<option></option>'+data);
	});
		
	switch(sector)
	{
		case 'Legal':
		{
			newColor = "00A7D6";
			break;
		}
		case 'Financial':
		{
			newColor = "E50E63";
			break;
		}
		case 'Community':
		{
			newColor = "93107E";
			break;
		}
		default:
		{
			newColor = "003C76";
			break;
		}
	}
	
	colorFade('search-form', 'background', bgcolor, newColor, 5, 30);
	bgcolor = newColor;
}


// main function to process the fade request //
function rgb2hex(rgb) {
 rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
 function hex(x) {
  hexDigits = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
  return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
 }
 return hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}

function colorFade(id,element,start,end,steps,speed) {
  var startrgb,endrgb,er,eg,eb,step,rint,gint,bint,step;
  var target = document.getElementById(id);
  steps = steps || 20;
  speed = speed || 20;
  clearInterval(target.timer);
  endrgb = colorConv(end);
  er = endrgb[0];
  eg = endrgb[1];
  eb = endrgb[2];
  if(!target.r) {
    startrgb = colorConv(start);
    r = startrgb[0];
    g = startrgb[1];
    b = startrgb[2];
    target.r = r;
    target.g = g;
    target.b = b;
  }
  rint = Math.round(Math.abs(target.r-er)/steps);
  gint = Math.round(Math.abs(target.g-eg)/steps);
  bint = Math.round(Math.abs(target.b-eb)/steps);
  if(rint == 0) { rint = 1 }
  if(gint == 0) { gint = 1 }
  if(bint == 0) { bint = 1 }
  target.step = 1;
  target.timer = setInterval( function() { animateColor(id,element,steps,er,eg,eb,rint,gint,bint) }, speed);
}

// incrementally close the gap between the two colors //
function animateColor(id,element,steps,er,eg,eb,rint,gint,bint) {
  var target = document.getElementById(id);
  var color;
  if(target.step <= steps) {
    var r = target.r;
    var g = target.g;
    var b = target.b;
    if(r >= er) {
      r = r - rint;
    } else {
      r = parseInt(r) + parseInt(rint);
    }
    if(g >= eg) {
      g = g - gint;
    } else {
      g = parseInt(g) + parseInt(gint);
    }
    if(b >= eb) {
      b = b - bint;
    } else {
      b = parseInt(b) + parseInt(bint);
    }
    color = 'rgb(' + r + ',' + g + ',' + b + ')';
    if(element == 'background') {
      target.style.backgroundColor = color;
    } else if(element == 'border') {
      target.style.borderColor = color;
    } else {
      target.style.color = color;
    }
    target.r = r;
    target.g = g;
    target.b = b;
    target.step = target.step + 1;
  } else {
    clearInterval(target.timer);
    color = 'rgb(' + er + ',' + eg + ',' + eb + ')';
    if(element == 'background') {
      target.style.backgroundColor = color;
    } else if(element == 'border') {
      target.style.borderColor = color;
    } else {
      target.style.color = color;
    }
  }
}

// convert the color to rgb from hex //
function colorConv(color) {
  var rgb = [parseInt(color.substring(0,2),16), 
    parseInt(color.substring(2,4),16), 
    parseInt(color.substring(4,6),16)];
  return rgb;
}
