/**
 * Main JS Script
 * @author Bogumil Wrona <bogdan.wrona@tehnet.uk.com>
 * @copyright TEHNET IT Solutions
 */

document.observe('dom:loaded', init);

function loadFlashTopBanner()
{
	//	SWF BANNER:
	var so = new SWFObject("/uploads/banners/" + $('topB').value, "topBanner", "468", "60", "8", "#FFFFFF");
	so.addParam("quality", "high");
	so.addParam("wmode", "transparent");
	so.addParam("menu", "false");
	so.write("top_banner");
}

function init()
{

//	LOGIN AREA:
	// Try.these( function() { var fDV_1 = new DefVal('client_email', 'email') } );
	Try.these( function() { var fDV_2 = new DefVal('agency_email', 'email') } );
	// Try.these( function() { var fDV_3 = new DefVal('client_password', 'password') } );
	Try.these( function() { var fDV_4 = new DefVal('agency_password', 'password') } );
	
//	LIVE CLOCK:
	Try.these( function() { var clock = new Clock('timer') } );
//	var clock = new Clock('timer');
	
//	ROLL OVER IMAGES:
	$$('.rollover').each(function(e) 
	{
		e.identify();
		if (e.hasClassName('selected')) selectedIMG(e);
		else {
			e.observe('mouseover', rollOver);
			e.observe('mouseout', rollOut);
		}
	});
	
//	LEFT MENU ROLL OVER (change background colour):
	$$('.submenu_1', '.submenu_2', '.submenu_3', '.submenu_4', '.submenu_5', '.submenu_6', '.submenu_7').each(function(e) 
	{		
		if(! e.hasClassName('selected'))
		{
			e.identify();
			e.observe('mouseover', leftMenuRollOver);
			e.observe('mouseout',  leftMenuRollOut);
		}							
	});
	
	/*
	 * HIDE WEB DEBUG DETAILS ON LAUNCH :
	 */
	// check if web debug is on
    if ($('sfWebDebugBar')) sfWebDebugToggleMenu();
	
}

function leftMenuRollOver(evt)
{
	Event.element(evt).removeClassName('submenu_1');
	Event.element(evt).addClassName('submenu_2');
}

function leftMenuRollOut(evt)
{
	Event.element(evt).removeClassName('submenu_2');
	Event.element(evt).addClassName('submenu_1');
}

var DefVal = Class.create(
{
	initialize: function(fieldID, defaultVal) 
	{
		this.field = $(fieldID);
		this.fieldID = fieldID;
		this.defaultVal = defaultVal;
		
		this.isPasswordType = (this.field.type == 'password') ? true : false;
		if(Prototype.Browser.IE) this.isPasswordType = false;
		
		if(this.field.value == '') this.setDefVal();
		
		Event.observe(this.field, 'focus', this.fieldOnFocus.bindAsEventListener(this, true));
		Event.observe(this.field, 'blur', this.fieldOnBlur.bindAsEventListener(this, true));
		
	},
	clear: function() 
	{
		this.field.value = '';		
		if(this.isPasswordType) this.field.type = 'password';
	},
	setDefVal: function() 
	{
		this.field.value = this.defaultVal;
		if(this.isPasswordType) this.field.type = 'text';
	},
	isDefVal: function(){
		return (this.field.value.strip() == this.defaultVal);
	},
	fieldOnFocus: function()
	{
		if(this.isDefVal()) this.clear();
	},
	fieldOnBlur: function()
	{
		if(this.field.value.strip() == '') this.setDefVal();
	}
});

var Clock = Class.create(
{
	initialize: function(objID){
		this.obj = $(objID);		
		new PeriodicalExecuter(this.displayTime.bind(this), 1);
	},
	getTime: function()
	{
		var currentTime = new Date();
		return (currentTime.getHours().toPaddedString(2) + ":" + currentTime.getMinutes().toPaddedString(2) + ":" +currentTime.getSeconds().toPaddedString(2));
	},
	displayTime: function()
	{
		this.obj.update(this.getTime());
	}
});

function selectedIMG(objID)
{
	obj = $(objID);
	if(obj.src.match(".gif")) {
		newSrc = obj.src.replace(new RegExp(".gif\\b"), "_2.gif");
	}
	else if($obj.src.match(".jpg")) {
		newSrc = obj.src.replace(new RegExp(".jpg\\b"), "_2.jpg");
	}
	else {
		newSrc = obj.src.replace(new RegExp(".png\\b"), "_2.png");
	}
	obj.src = newSrc;
	obj.up('a').replace(obj);
}

function rollOver(evt) {
		rollOverImage = Event.element(evt);		
		if(rollOverImage.src.match(".gif")) {
			newSrc = rollOverImage.src.replace(new RegExp(".gif\\b"), "_2.gif");
		}
		else if(rollOverImage.src.match(".jpg")) {
			newSrc = rollOverImage.src.replace(new RegExp(".jpg\\b"), "_2.jpg");
		}
		else {
			newSrc = rollOverImage.src.replace(new RegExp(".png\\b"), "_2.png");
		}
		rollOverImage.src = newSrc;
}

function rollOut(evt) {
		rollOutImage = Event.element(evt);
		if(rollOutImage.src.match(".gif")) {
			newSrc = rollOutImage.src.replace(new RegExp("_2.gif\\b"), ".gif");
		}
		else if(rollOverImage.src.match(".jpg")) {
			newSrc = rollOutImage.src.replace(new RegExp("_2.jpg\\b"), ".jpg");
		}
		else {
			newSrc = rollOutImage.src.replace(new RegExp("_2.png\\b"), ".png");
		}
		rollOutImage.src = newSrc;
}

var LocationManager = Class.create();
LocationManager.prototype = {
	initialize: function() {
		
	},
	highlightCounties: function(obj) {
		var objToManipulate = $(obj);
		var ile = objToManipulate.options.length;
		var isOrderToHighlight = false;
		for(var i=0; i < ile; i++)
		{
			if((parseInt(objToManipulate.options[i].value) < 0) && (objToManipulate.options[i].selected))
			{
				isOrderToHighlight = true;
				objToManipulate.options[i].selected = false;
			}
			else {
				if(parseInt(objToManipulate.options[i].value) < 0) 
				{
					isOrderToHighlight = false;
				}
				else {
					if(isOrderToHighlight && (objToManipulate.options[i].value != "L_3") && (objToManipulate.options[i].value != "L_1000")) objToManipulate.options[i].selected = true;
				}
			}
		}
	}
};

var SelectOption = Class.create({
	initialize: function(allOptionsID, selectedOptionsID, button1, button2) {
		this.allOptionsID = allOptionsID;
		this.selectedOptionsID = selectedOptionsID;
		this.button1 = button1;
		this.button2 = button2;
		this.deleteFromSelect(this.allOptionsID, this.selectedOptionsID);
		
		//this.sortOptions(this.allOptionsID);
		//this.sortOptions(this.selectedOptionsID);
		
		Event.observe(this.button1, 'click', this.moveAtoB.bindAsEventListener(this));
		Event.observe(this.button2, 'click', this.moveBtoA.bindAsEventListener(this));
		
	},
	moveAtoB: function()
	{
		this.moveSelected(this.allOptionsID, this.selectedOptionsID);
	},
	moveBtoA: function()
	{
		this.moveSelected(this.selectedOptionsID, this.allOptionsID);
	},
	makeArray: function(obj)
	{
		var objToManipulate = $(obj);
		var arrayOptions = new Array();
		var len = $(obj).options.length;
		for(var i=0; i < len; i++)
		{
			arrayOptions.push(new Array($(obj).options[i].value, $(obj).options[i].innerHTML));
		}
		return arrayOptions;
	},	
	testArray: function(arr) {
		alert(arr.inspect());
	},	
	sortOptions: function(obj)
	{
	
		var lb = $(obj);
		arrTexts = new Array();
		arrValues = new Array();
		arrOldTexts = new Array();
		
		for(i=0; i<lb.length; i++)
		{
			arrTexts[i] = lb.options[i].text;
			arrValues[i] = lb.options[i].value;
			
			arrOldTexts[i] = lb.options[i].text;
		}
		
		arrTexts.sort();
		
		for(i=0; i<lb.length; i++)
		{
			lb.options[i].text = arrTexts[i];
			for(j=0; j<lb.length; j++)
			{
				if (arrTexts[i] == arrOldTexts[j])
				{
					lb.options[i].value = arrValues[j];
					j = lb.length;
				}
			}
		}
		
				
	},	
	renderOptions: function(obj, optionsArray) {
		$(obj).options.length = 0;
		for(var i=0; i < $A(optionsArray).length; i++)
		{
			var txt = html_entity_decode($A(optionsArray)[i][1]);
			$(obj).options[$(obj).options.length] = new Option(txt, html_entity_decode($A(optionsArray)[i][0]));			
		}
	},	
	isValueExists: function(obj, optionValue)
	{
		var opts = $A($(obj).childNodes)
		var opt = opts.find( function(el){
			return (el.value == optionValue);
		});
		var retVal = "";
		if(typeof opt != 'undefined') retVal = 1;
		else retVal = 0;
		return retVal;
	},	
	deleteFromSelect: function(obj, compareObj) {
		var objToManipulate = $(obj);
		var newArrayOptions = new Array();
		var len = $(obj).options.length;
		for(var i=0; i < len; i++)
		{
			if(! this.isValueExists($(compareObj), $(obj).options[i].value))
			{
				var txt = html_entity_decode($(obj).options[i].innerHTML);
				newArrayOptions.push(new Array($(obj).options[i].value, txt));
			}
		}
		$(obj).options.length = 0;
		this.renderOptions($(obj), $A(newArrayOptions));
	},	
	moveSelected: function(selectSource, selectDest) {
		if($(selectSource).options.length > 0)
		{
			var len = $(selectSource).options.length;
			for(var i=0; i < len; i++)
			{
				if($(selectSource)[i].selected)
				{
					var txt = html_entity_decode($(selectSource).options[i].innerHTML);
					$(selectDest).options[$(selectDest).options.length] = new Option(txt, $(selectSource).options[i].value);
				}
			}
			this.deleteFromSelect(selectSource, selectDest);
			this.sortOptions(selectDest);
		}
	},	
	deleteOption: function(obj, optionID)
	{
		$(obj).options[optionID] = null;
	},	
	selectAll: function(obj)
	{
		var opt, i=0;
		while( opt = $(obj).options[i++] )
		{
			opt.selected = true;
		}
	}
});


// AdvancedSelect - it is working with <select id="onlyOneToSelect_A"><option...../></select><select id="onlyOneToSelect_B"><option...../></select>
// You can specify as many fields as you want and all of them will be synchronised!
// Usage example:
//document.observe('dom:loaded', function() {
//	var observer = new AdvancedSelect('onlyOneToSelect_A', 'onlyOneToSelect_B');
//});
var AdvancedSelect = Class.create({
	initialize: function() {
		this.allOptions = new Array();
		this.objectsToManipulate = new Array();
		this.selectedValuesPerObject = new Array();
		var argsLength = arguments.length;
		for(var i=0; i < argsLength; i++)
		{
			this.objectsToManipulate.push(arguments[i]);
			Event.observe(arguments[i], 'change', this.deleteSelectedFromAnothers.bindAsEventListener(this));
		}
		if(this.objectsToManipulate.length > 0) this.allOptions = this.makeArray(this.objectsToManipulate[0]);
		this.refresh();
	},
	refresh: function()
	{
		this.deleteSelectedFromAnothers(null);
	},
	deleteSelectedFromAnothers: function(evt) 
	{
		for(var i=0; i < this.objectsToManipulate.length; i++)
		{
			this.selectedValuesPerObject[i] = $(this.objectsToManipulate[i]).options[$(this.objectsToManipulate[i]).selectedIndex].value;
		}
		for(var i=0; i < this.objectsToManipulate.length; i++)
		{
			this.renderOptions($(this.objectsToManipulate[i]), this.allOptions);
			for(var j=0; j < this.selectedValuesPerObject.length; j++)
			{
				if(i != j)
				{
					this.deleteOption($(this.objectsToManipulate[i]), this.selectedValuesPerObject[j]);
				}
			}
			this.highlightValue($(this.objectsToManipulate[i]), this.selectedValuesPerObject[i]);
		}		
	},
	highlightValue: function(obj, val)
	{
		for(var i=0; i < $(obj).options.length; i++)
		{
			if($(obj).options[i].value == val) $(obj).selectedIndex = i;
		}
	},
	deleteOption: function(obj, val)
	{
		for(var i=0; i < $(obj).options.length; i++)
		{
			if(($(obj).options[i].value == val) && ($(obj).options[i].value != '')) $(obj).options[i] = null;
		}
	},
	makeArray: function(obj)
	{
		var objToManipulate = $(obj);
		var arrayOptions = new Array();
		var len = $(obj).options.length;
		for(var i=0; i < len; i++)
		{
			arrayOptions.push(new Array($(obj).options[i].value, $(obj).options[i].innerHTML));
		}
		return arrayOptions;
	},
	renderOptions: function(obj, optionsArray) {
		$(obj).options.length = 0;
		for(var i=0; i < $A(optionsArray).length; i++)
		{
			var txt = html_entity_decode( $A(optionsArray)[i][1]);
			$(obj).options[$(obj).options.length] = new Option( txt,  $A(optionsArray)[i][0] );			
		}
	},
	testArray: function(arr) {
		alert(arr.inspect());
	}
});

function html_entity_decode( string ) {
    // http://kevin.vanzonneveld.net
    // +   original by: john (http://www.jd-tech.net)
    // +      input by: ger
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: html_entity_decode('Kevin &amp; van Zonneveld');
    // *     returns 1: 'Kevin & van Zonneveld'
 
    var ret, tarea = document.createElement('textarea');
    tarea.innerHTML = string;
    ret = tarea.value;
    return ret;
}

Element.addMethods(
{
	wrap: function(element, tagName) 
	{
		element = $(element);
		var wrapper = document.createElement(tagName);
		element.parentNode.replaceChild(wrapper, element);
		wrapper.appendChild(element);
		return Element.extend(wrapper);
	}
});

function MM_preloadImages() { //v3.0
  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];}}
}


// script by http://www.hypergurl.com 

function addToFavorites() 
{ 
	var urlAddress = "http://www.ajobcy.com"; 
	var pageName = "Let the agency find your job"; 
	if (window.external) 
	{ 
		window.external.AddFavorite(urlAddress,pageName) ;
	} else { 
		alert("Sorry! Your browser doesn't support this function."); 
	} 
} 