/*global window, $, $JQuery, OS*/

/**
 * OSI Core JavaScript Version 0.0.$Rev
 * Author: Robert Martone $author iheartweb [at] gmail.com
 */
/*global window, $, $JQuery, OSI*/

/**
 * OSI Core Javascript Libray
 * @version 0.6 $Rev: 97 $
 * @author Robert Martone iheartweb[at]gmail[dot]com
 * @date $Date: 2009-02-04 16:06:57 -0600 (Wed, 04 Feb 2009) $
 */

///////////////////////////////////////////////////////////////////////////////
// Core
///////////////////////////////////////////////////////////////////////////////

if (typeof OSI == "undefined" || !OS) {
	OS = {};
}

OS.bootstrap = (function () {
	return function () {
		throw new Error('Bootstrap has already executed.');
	}
})();

///////////////////////////////////////////////////////////////////////////////
// Environment
///////////////////////////////////////////////////////////////////////////////

OS.env = {

	'section': null,

	'getSectionName': function () {
		if (this.section !== null) {
			return this.section;
		} else {
			var section = window.location.pathname;
			section = window.unescape(section.slice(1, -1));
			if (section.indexOf('/') !== -1) {
				section = section.slice(0, section.indexOf('/'));
			}
			section = section.replace(/_/g, '-');
			if (section === '') {
				section = 'homepage';
			}
			return this.section = section;
		}
	}
};

///////////////////////////////////////////////////////////////////////////////
// Language
///////////////////////////////////////////////////////////////////////////////

OS.lang = {};

OS.lang.typeOf = function (value) {
	var s = typeof value;
	if (s === 'object') {
		if (value) {
			if (typeof value.length === 'number' &&
			!(value.propertyIsEnumerable('length')) &&
			typeof value.splice === 'function') {
				s = 'array';
			}
		} else {
			s = 'null';
		}
	}
	return s;
};
OS.lang.Class = function (args) {
	var Class = {};
	Class.name = args.name;

	// Auto-initialize
	$(document).ready(function () {
		// Class.initialize();
	});

	// Return our beautiful new Class
	return Class;
};

///////////////////////////////////////////////////////////////////////////////
// Actions
///////////////////////////////////////////////////////////////////////////////

OS.action = {};
OS.action.AbstractPage = function (sections) {
	var AbstractPage = OS.lang.Class({name: 'AbstractPage'}),
		applicableContexts = [];

	switch (OS.lang.typeOf(sections)) {
	case 'string':
		applicableContexts.push(sections);
		break;
	case 'array':
		applicableContexts = sections;
	default: break;
	}

	if (applicableContexts.length === 0) {
		$(document).ready(function () {
			AbstractPage.initialize();
		});
	} else {
		for (var i=0; i < applicableContexts.length; i++) {
			if ($('body').hasClass(applicableContexts[i])) {
				$(document).ready(function () {
					AbstractPage.initialize();
				});
				break;
			}
		}
	}

	return AbstractPage;
};
OS.action.Common = (function () {

	var Common = OS.action.AbstractPage();
	Common.initialize = function () {
		// JavaScript body class helper name thing
		$('body').addClass('js');
		
		$('#navigation-primary li').removeClass('selected');

		return Common;
	}

})();
OS.action.Homepage = (function () {
	var Homepage = OS.action.AbstractPage('home');

	Homepage.initialize = function () {

		var controls = $('li#laos a, li#sp a, li#cm a, li#tb a, li#oa a, li#eac a'),
			slides = $('div.slide'),
			FancyDomIterator;

		FancyDomIterator = new OS.ui.FancyDomIterator($('div#postcards'), {'slides': slides, 'controls': controls});

		controls.hover(function (event) {
			var control = $(this);
			event.preventDefault();
			if (control.hasClass('selected') === false) {
				FancyDomIterator.goto($('#' + control.attr('href').split('#')[1]));
				controls.removeClass('selected');
				control.addClass('selected');
			}
		});

		slides.fadeIn(0).fadeOut(0);
		$('#executive-assessment-and-coaching').addClass('selected');
		$('li#laos a').hover();
		$('#navigation-primary li.home').addClass('selected');

	};

	return Homepage;

})();

OS.action.ContactUs = (function () {
	var Contact = OS.action.AbstractPage('contact_us');

	Contact.initialize = function () {
		$('#navigation-primary li.contact_us').addClass('selected');
	};

	return Contact;

})();

OS.action.Services = (function () {
	var Services = OS.action.AbstractPage('services');

	Services.initialize = function () {
		$('#navigation-primary li.services').addClass('selected');
	};

	return Services;

})();

OS.action.AssessmentCenter = (function () {
	var AssessmentCenter = OS.action.AbstractPage('assessment_center');

	AssessmentCenter.initialize = function () {
		$('#navigation-primary li.assessment_center').addClass('selected');
	};

	return AssessmentCenter;

})();

OS.action.OurApproach = (function () {
	var OurApproach = OS.action.AbstractPage('our_approach');

	OurApproach.initialize = function () {
		$('#navigation-primary li.our_approach').addClass('selected');
	};

	return OurApproach;

})();


OS.ui = {};
OS.ui.FancyDomIterator = function (container, options) {
	var FancyDomIteratorUI = $(this),
	defaultOptions = {
		'speed': 0,
		'transition': 250,
		'slides': $('.slides', container),
		'controls': $('.controls a', container),
		'style': 'fancy-dom-iterator-ui'
	};

	options = $.extend(true, {}, defaultOptions, options);

	container.addClass(options.style);
	options.slides.addClass(options.style + '-slide');


	FancyDomIteratorUI.goto = function (slide) {
		var selected = $('.' + options.style + '-slide' + '.selected');
		slide.fadeIn(0, function() {}).addClass('next');
		selected.fadeOut(options.transition, function () {
			selected.removeClass('selected');
			slide.addClass('selected').removeClass('next');
		});

		if(selected.length === 0) {
			options.slides.eq(0).addClass('selected').removeClass('next');
		}
	}

	return FancyDomIteratorUI;

}
