﻿window.onload = function ()
{ 	
	/* define all objects with light border(s) */
	lightElementsBorder = new Array(
		$('tfc-menu'), 
		$('tsc-menu'), 
		$('bottom-first-cell'),
		$('bottom-second-cell')
	);
	/* define all objects with light font color */
	lightElementsColor = new Array();
	/* define all objects with light background color */
	lightElementsBgr = new Array(
		$('form-buttons'),
		$('response-text')
	);
	/* define all objects with dark font color */
	darkElementsColor = new Array(
		$('first-slider-container'),
		$('second-slider-container'),
		$('response-text')
	);
	/* define all objects with dark background color */
	darkElementsBgr = new Array(
		$('top-container'),
		$('bottom-container'),
		$('contact-form')
	);
	
	lightElementsBorder = lightElementsBorder.concat($$('input'));
	lightElementsColor = lightElementsColor.concat($$('input'));
	lightElementsBorder.push(document.getElementsByTagName('textarea')[0]);
	lightElementsColor.push(document.getElementsByTagName('textarea')[0]);	
	lightElementsColor = lightElementsColor.concat($$('div#main-container a'));
	lightElementsColor.push(document.getElementsByTagName('body')[0]);
	lightElementsBgr.push(document.getElementsByTagName('body')[0]);
	
	darkElementsColor = darkElementsColor.concat($$('div#language-container a'));
	darkElementsColor = darkElementsColor.concat($$('div#contact-container a'));
	darkElementsColor = darkElementsColor.concat($$('div#form-buttons a'));
	darkElementsColor = darkElementsColor.concat($$('div#validators a'));
	darkElementsBgr = darkElementsBgr.concat($$('input'));
	darkElementsBgr = darkElementsBgr.concat($$('textarea'));
	
	initializeColor();
	initializeStartActions();
	initializeSliders();	
}

function initializeColor() {
	var darkColor = Cookie.get('dark');
	var lightColor = Cookie.get('light');
	if (darkColor != null) {
		setDarkColor('rgb('+darkColor+','+darkColor+','+darkColor+')');
	}
	if (lightColor != null) {
		setLightColor('rgb('+lightColor+','+lightColor+','+lightColor+')');
	}	
}

function initializeStartActions() {
	var dr = 2;
	new Effect.toggle('bfc-content','blind', {duration:dr});
	new Effect.toggle('bsc-content','blind', {duration:dr});
	new Effect.toggle('tfc-helper','blind', {duration:dr});
	new Effect.toggle('tfc-content','blind', {duration:dr});
	new Effect.toggle('tsc-helper','blind', {duration:dr});
	new Effect.toggle('tsc-content','blind', {duration:dr});
	//new Effect.PopOut('main-container', {duration:3});
	
	$('first-slider-container').style.display = 'block';
	$('second-slider-container').style.display = 'block';
	
	//Opera hack
	if(/Opera/.test(navigator.userAgent))
	$('validators').setStyle({position:'fixed'});
	
	new Effect.Pulsate('fsc-handle', {delay:2});
	new Effect.Pulsate('ssc-handle', {delay:2});
	
	observeMenuToggle('bfc-title','bfc-content', '');
	observeMenuToggle('bsc-title','bsc-content', '');
	observeMenuToggle('tfc-title','tfc-content', 'tfc-helper');
	observeMenuToggle('tsc-title','tsc-content', 'tsc-helper');
	
	blockButton('contact-us');
	blockButton('cancel-form');
	blockButton('submit-form');	
	toView = new Array('contact-form-container');
	observeForm('contact-us', toView, 'block');
	observeForm('cancel-form', toView, 'none');
	submitForm('submit-form');
}

function initializeSliders() {
	
	var firstColorSlider = new Control.Slider('fsc-handle','fsc-track',
		{axis:'vertical',
	        onSlide:function(v){
	        	var vFixed = (v*255).toFixed();;
	        	$('fsc-hex-out').innerHTML = vFixed;
				setDarkColor('rgb('+vFixed+','+vFixed+','+vFixed+')');           	
	        },
	        onChange:function(v){
	        	var vFixed = (v*255).toFixed();
	        	Cookie.set('dark', vFixed, 365);
	        }
       }
  	);
  	var secondColorSlider = new Control.Slider('ssc-handle','ssc-track',
		{axis:'vertical',
	        onSlide:function(v){
	        	var vFixed = (v*255).toFixed();
	        	$('ssc-hex-out').innerHTML = vFixed;
	        	setLightColor('rgb('+vFixed+','+vFixed+','+vFixed+')');  	
	        },
	        onChange:function(v){
		    	var vFixed = (v*255).toFixed();
		    	Cookie.set('light', vFixed, 365);
    		}
      }
  	);
  	
  	var startDarkSlider = Cookie.get('dark');
  	var startLightSlider = Cookie.get('light');
  	if (startDarkSlider == null || startDarkSlider < 0 || startDarkSlider > 255) {
  		startDarkSlider = 0.8;
  	} else {
  		$('fsc-hex-out').innerHTML = startDarkSlider;
  		startDarkSlider = (startDarkSlider/255).toFixed(2);
  	}
  	if (startLightSlider == null || startLightSlider < 0 || startLightSlider > 255) {
  		startLightSlider = 1;
  	} else {
  		$('ssc-hex-out').innerHTML = startLightSlider;
  		startLightSlider = (startLightSlider/255).toFixed(2);
  	}
  	firstColorSlider.setValue(startDarkSlider);
  	secondColorSlider.setValue(startLightSlider);
}

function setDarkColor(setColor) {
	for (var j = 0; j < darkElementsColor.length; j++) 
  	darkElementsColor[j].style.color = setColor;
    for (var j = 0; j < darkElementsBgr.length; j++) 
  	darkElementsBgr[j].style.backgroundColor = setColor; 
}

function setLightColor(setColor) {
	for (var j = 0; j < lightElementsBorder.length; j++) 
    lightElementsBorder[j].style.borderColor = setColor;
    for (var j = 0; j < lightElementsColor.length; j++)
	lightElementsColor[j].style.color = setColor;
	for (var j = 0; j < lightElementsBgr.length; j++)
	lightElementsBgr[j].style.backgroundColor = setColor; 
}

function blockButton(button) {
	$(button).onclick = function() {
		return false;
	}
}

function observeForm (element, toView, display) {
	Event.observe(
			$(element), 
			'click', 
			function (event) {
			for (var j = 0; j < toView.length; j++) {
	          	new Effect.toggle(
	          		toView[j], 
	          		'appear', 
		          	{afterFinish: function(event){if (display == 'block')Form.focusFirstElement('cform')}}
	          	);
		    }
			}, 
			false
		);
}

function centreElement(element) {
	$(element).style.opacity = "0";
	if ($(element).style.display == 'none') $(element).style.display = 'block';
	var elHeight = (($(element).offsetHeight/2)+ 15).toFixed();
	var elWidth = ($(element).offsetWidth/2).toFixed();
	$(element).style.marginTop = '-' + elHeight + 'px';
	$(element).style.marginLeft = '-' + elWidth + 'px';
	if ($(element).style.display == 'block') $(element).style.display = 'none';
}

function observeResponse(element, toclose, text) {
	$(element).innerHTML = text;
	centreElement(element);
	centreElement(element);
	Effect.Appear(
        		$(element),  
          	{afterFinish: function(event){
          			new Effect.Fade(
		          		$(element),
		          		{delay:3}
	          		);
	          		if (toclose != '') new Effect.Fade(
		          		$(toclose),
		          		{delay:3, afterFinish: function(event){$('cform').reset();}}
	          		);
          		}
          	}
  );
  
}

function submitForm(element) {
	Event.observe(
			$(element), 
			'click', 
			function (event) {
				var opt = {
				    // Use POST
				    method: 'post',
				    // Send this lovely data
				    postBody: Form.serialize('cform'),
				    // Handle successful response
				    onSuccess: function(t) {
				    	var response = t.responseText;
				    	if (/^Error:/.test(response)) {
				    		response = response.replace(/^Error:/, '');
				    		observeResponse('response-text', '', response);
				    	} else {
				    		//$('cform').reset();
				    		observeResponse('response-text', 'contact-form-container', response);
				    	}
				    },
				    // Handle 404
				    on404: function(t) {
				    		observeResponse('response-text', '', 'Error 404: location "' + t.statusText + '" was not found.');
				    },
				    // Handle other errors
				    onFailure: function(t) {
				    		observeResponse('response-text', '', 'Error ' + t.status + ' -- ' + t.statusText);
				    }
				}
				new Ajax.Request('/cgi-bin/contact.pl', opt);
			}, 
			false
		);
}

function observeMenuToggle (title, content, helper) {
	Event.observe(
		$(title), 
		'click', 
		function (event) {
			if (helper != '')
			new Effect.toggle(helper,'blind');
			new Effect.toggle(content,'blind');
		}, 
		false
	);
}