// JavaScript Document
//---------------------------------------------------------------------------------------------------
// cduo.js - depends on
// - mootools.v1.00.js
// - ie_png_fix.js
// - slider.js
// - form.validator.js
//
// Copyright © 2007 - ComplementaryDuo. All rights reserved.
//---------------------------------------------------------------------------------------------------
// layout options
var LayoutConf = { narrow: 650, medium: 790, wide: 950, defaults: 790, units: 'px', transition: Fx.Transitions.backOut, duration: 500 };
// text options
var TextConf = { small_text: 1, large: 1.4, defaults: 1, units: 'em', transition: Fx.Transitions.expoInOut, duration: 300 };
// slider options
var SliderConf = { width: 160, button_width: 13, max_x: 147, min_x: 0 };

var Cduo = {

 start: function() {
 new Png(); // depends on ie_png_fix_2.js
 new SmoothScroll();
 if ($('delicious')) Cduo.createDeliciousTagCloud();
 if ($('toggleExtras')) Cduo.extrasToggler();
Toolbar.create(); // depends on slider
 Layout.readDefaults();
 if ($('s')) BlogSearch.addSearchText();
if ($('commentform')) new FormValidator($('commentform')); // depends on form.validator.js
 if ($('contactform')) new FormValidator($('contactform')); // depends on form.validator.js
 },

 extrasToggler: function() {
 var extras = new Fx.Slide('extrasContainerTop', {
 mode: 'vertical',
 duration: 400,
 fps: 80,
 wait: false,
 transition: Fx.Transitions.circOut,
 onComplete: function(){
 if(this.element.getStyle('margin-top') == '0px') {
 this.wrapper.setStyle('height', 'auto');
 new Fx.Scroll(window).toElement('toggleExtras');
 }
 }
 }).hide();
 $('toggleExtras').addEvent('click', function() { extras.toggle();});
 },

 createDeliciousTagCloud: function() {
 if( Delicious ) {
 // create necessary elems
 var heading = $E('#delicious span.rss');
 var tag_list = new Element('ul', {'id':'tag_cloud'});

 // get tags from del.icio.us
 for( var k in Delicious.tags) {
 var count = Delicious.tags[k];
 var tag_item = new Element('li');

 if( count <= 5 ) { class_size = "tag_1"; }
 if( count > 5 && count <= 10 ) { class_size = "tag_2"; }
 if( count > 11 && count <= 20 ) { class_size = "tag_3"; }
 if( count > 20 ) { class_size = "tag_4"; }

 var tag_link = new Element('a', {
 'href': ('http://del.icio.us/cduo/'+k.toString()),
 'class': class_size
 });

 tag_link.appendText(k.toString());
tag_item.adopt(tag_link);
 tag_list.adopt(tag_item);
 }
 }
 tag_list.injectAfter(heading);
 }
};



var BlogSearch = { // customize wordpress search textbox
 addSearchText: function() { // add text to blog search texbox
 var el = $('s');
 el.value = el.value.trim();
 if( el.value.length < 1 ) el.value = 'Search blog';
 el.addEvent( 'focus', BlogSearch.removeSearchText ).addEvent( 'blur', BlogSearch.addSearchText );
},
 removeSearchText: function() { // not sure if necessary
 var el = $('s');
 if( el.value == 'Search blog' ) el.value = '';
 }
}



var Toolbar = {

 create: function() {
 // Commented section doesn't work with Safari
// --
 //div_elems = [ 'toolbar', 'reset', 'layout_slider_container', 'slider_bar', 'slider_gone_bar', 'slider_button', 'slider_empty_bar', 'text_slider_container', 'text_slider_bar', 'text_slider_gone_bar', 'text_slider_button', 'text_slider_empty_bar' ];
//div_elems.each( function(el) { eval( "var " + el + " = new Element( 'div' ); " + el + ".setProperty( 'id', el.toString() );" ); });

 var toolbar = new Element('div', { 'id': 'toolbar' });
 var reset = new Element('div', { 'id': 'reset' });
 var layout_slider_container = new Element('div', { 'id': 'layout_slider_container' });
 var slider_bar = new Element('div', { 'id': 'slider_bar' });
 var slider_gone_bar = new Element('div', { 'id': 'slider_gone_bar' });
 var slider_button = new Element('div', { 'id': 'slider_button' });
 var slider_empty_bar = new Element('div', { 'id': 'slider_empty_bar' });
 var text_slider_container = new Element('div', { 'id': 'text_slider_container' });
 var text_slider_bar = new Element('div', { 'id': 'text_slider_bar' });
 var text_slider_gone_bar = new Element('div', { 'id': 'text_slider_gone_bar' });
 var text_slider_button = new Element('div', { 'id': 'text_slider_button' });
 var text_slider_empty_bar = new Element('div', { 'id': 'text_slider_empty_bar' });

 toolbar.injectBefore($('container'));

 var clearing = new Element('div');
 clearing.setProperty('class', 'clearing');

 toolbar.adopt(text_slider_container);
 toolbar.adopt(clearing);
 toolbar.adopt(layout_slider_container);
 toolbar.adopt(clearing);
 toolbar.adopt(reset);

 text_slider_container.adopt(text_slider_bar);
 layout_slider_container.adopt(slider_bar);

 slider_bar.adopt(slider_gone_bar);
 slider_bar.adopt(slider_button);
 slider_bar.adopt(slider_empty_bar);

text_slider_bar.adopt(text_slider_gone_bar);
 text_slider_bar.adopt(text_slider_button);
 text_slider_bar.adopt(text_slider_empty_bar);

 $('toolbar').setStyle('display', 'block');
 $('toolbar').setStyle('display', 'block'); // Show toolbar if JavaScript enabled
 Toolbar.addEffects();
 Toolbar.addSliders();
},

addEffects: function() {
 var toolbar_slide = new Fx.Style( $('toolbar'), 'left', { wait: false, duration:500, transition: Fx.Transitions.circOut, fps: 50}).set(-180);
 var toolbar_opacity = new Fx.Style( 'toolbar', 'opacity', { duaration: 200, transition: Fx.Transitions.quartInOut } );
 $('toolbar').addEvent( 'mouseover', function(event) {
 var e = new Event(event);
 var reltg = e.relatedTarget;
 if( reltg ) {
 while($(reltg) != this && reltg.nodeName != 'HTML') reltg = reltg.parentNode;
 if( $(reltg) == this ) return;
 toolbar_slide.custom( -180, 0);
 // don't apply opacity effect cause ie7 messes up transparency
 if (!window.ie7) toolbar_opacity.start(1,.9);
 }
 }).addEvent('mouseout', function(event){
 var e = new Event(event);
 var reltg = e.relatedTarget;
 if( reltg ) {
 while ($(reltg) != this && reltg.nodeName != 'HTML') reltg = reltg.parentNode;
 if ($(reltg) == this) return;
 toolbar_slide.custom(0, -180)
 // don't apply opacity effect cause ie7 messes up transparency
 if (!window.ie7) toolbar_opacity.start(.9,1);
 }
 });
 $('reset').addEvent( 'click', Layout.resetToDefault );
 },

 addSliders: function() {
 var layout_slider = new Slider( 'slider_bar', 'slider_button', 'slider_gone_bar', 'slider_empty_bar', {
 onComplete: function(anh) {
 var max_width = Window.getWidth()-20;
 var min_width = LayoutConf.narrow;
 var diff = max_width - min_width;
 if( diff > 0 ) {
var ratio = parseFloat(anh[0]/SliderConf.width);
 var cur_width = min_width + Math.round(ratio*diff);
 if( cur_width >= min_width ) {
 Layout.setLayoutWidth( cur_width, null );
 }
 } else {
 Layout.setLayoutWidth( min_width, null );
 }
 }
 });
 var text_slider = new Slider( 'text_slider_bar', 'text_slider_button', 'text_slider_gone_bar', 'text_slider_empty_bar', {
 onComplete: function(anh) {
 var diff = parseFloat(TextConf.large - TextConf.small_text);
 var ratio = parseFloat(anh[0]/SliderConf.width);
 var curr_size = TextConf.small_text + ratio*diff;
 if( curr_size >= TextConf.small_text ) {
 Layout.setTextSize( curr_size, null );
 }
 }
 });
 },

 setLayoutSliderPosition: function() { // Calculate and set layout size slider position
 var curr_width = (Cookie.get('LAYOUT_WIDTH') || LayoutConf.defaults).toInt();
 var max_width = Window.getWidth().toInt();
 var slider_position = ( max_width <= curr_width ) ? SliderConf.max_x : Math.round((SliderConf.width*(curr_width - LayoutConf.narrow))/(max_width-LayoutConf.narrow));
 var slider_empty_width = (SliderConf.width - SliderConf.button_width) - slider_position;
 $('slider_button').setStyle('left', (slider_position).toString() + 'px');
 $('slider_gone_bar').setStyle('width', (slider_position).toString() + 'px');
 $('slider_empty_bar').setStyles({
 'left': (slider_position+SliderConf.button_width).toString() + 'px',
 'width': (slider_empty_width).toString() + 'px'
});
 },

 setTextSliderPosition: function() { // Calculate and set text size slider position
 var curr_size = parseFloat(Cookie.get('TEXT_SIZE') || TextConf.small_text );
 var slider_position = Math.round((SliderConf.width*(curr_size - TextConf.small_text))/(TextConf.large-TextConf.small_text));
 var slider_width = (SliderConf.width - SliderConf.button_width) - slider_position;
 $('text_slider_button').setStyle('left', (slider_position).toString() + 'px');
 $('text_slider_gone_bar').setStyle('width', (slider_position).toString() + 'px');
 $('text_slider_empty_bar').setStyles({
 'left': (slider_position+SliderConf.button_width).toString() + 'px',
 'width': (slider_width).toString() + 'px'
 });
 }
}



Layout = {

 readDefaults: function() {
 Layout.readTextSize();
 Layout.readLayoutWidth();
 Toolbar.setTextSliderPosition();
 Toolbar.setLayoutSliderPosition();
 },

 readTextSize: function() {
 var text_size = parseFloat(Cookie.get('TEXT_SIZE'));
 if( text_size > TextConf.small_text ) { $$('.variableFontSize').each(function(el){ el.setStyle('fontSize', text_size+TextConf.units ); }); }
 },

 readLayoutWidth: function() {
 var layout_width = ( Cookie.get('LAYOUT_WIDTH') || LayoutConf.defaults ).toInt();
 if( layout_width != LayoutConf.medium ) { $$('.resizable').each( function(el){ el.setStyle('width', layout_width+LayoutConf.units ); }); }
 },

 resetToDefault: function() { // reset layout and text size to defaults values
 Layout.setLayoutWidth( LayoutConf.defaults, null );
 Layout.setTextSize( TextConf.defaults, null );
 },

 setTextSize: function( size, e ) { // set text size by reading from cookie or set defaults
 if( e != null ) { var e = new Event(e); e.preventDefault(); }
 var text_size = Cookie.get('TEXT_SIZE') || TextConf.small_text.toString();
 var new_size = size.toString();
 if(( text_size != new_size ) || !text_size ) {
 $$('.variableFontSize').each( function(el) { // iterate through affected elements and change text size
 var text_size_change = new Fx.Style(el, 'fontSize', {
 duration: TextConf.duration,
 unit: TextConf.units,
 transition: TextConf.transition,
 onComplete: function() { // remember layout width using the cookie and set slider position
 Cookie.set( 'TEXT_SIZE', new_size, { path: "/", duration: false } );
 Toolbar.setTextSliderPosition();
 }
 });
 text_size_change.custom( parseFloat(text_size), parseFloat(new_size) );
 });
 }
 },

 setLayoutWidth: function( size, e ) { // set the layout width by reading from cookie or set defaults
 if( e != null ) { var e = new Event(e); e.preventDefault(); }
 var layout_width = (Cookie.get( 'LAYOUT_WIDTH' ) || LayoutConf.defaults ).toInt();
 var new_width = size.toInt();
 if(( layout_width != new_width ) || !layout_width ) {
 $$('.resizable').each( function(el) { // iterate through affected elements and change their width
 var width_change = new Fx.Style( el, 'width', { wait: false,
 fps: 60,
 duration: LayoutConf.duration,
 unit: LayoutConf.units,
 transition: LayoutConf.transition,
 onComplete: function() { // remember layout width using the cookie and set slider position
 Cookie.set( 'LAYOUT_WIDTH', new_width, { path: "/", duration: false } );
 Toolbar.setLayoutSliderPosition();
 }
 });
 width_change.custom( layout_width, new_width );
 });
 }
 }
}

window.onDomReady( function() { Cduo.start(); });