// JavaScript Document

/**
*	Mainframe parameters
**/
window.mainframe = {
	imagesArray : null,

	backgroundImg : null,

	resizeInt:null,

	isHome : false,

	isShown: true,

	imgObj : new Image(),

	showTextBox : true,

	firstLoad : false,

	/**	function innerWidth
	* returns the innerWidth of the window, crossbrowser
	**/
	innerWidth : function() {
		if(window.innerWidth){

			return window.innerWidth;
		}
		else if(document.documentElement.clientWidth){
			return document.documentElement.clientWidth;
		}
	},

	/**	function innerHeight
	* returns the clientHeight of the window, crossbrowser
	**/
	innerHeight : function() {
		if(window.innerHeight){
			return window.innerHeight;
		}
		else if(document.documentElement.clientHeight){
			return document.documentElement.clientHeight;
		}
	},


	/** function isSafari
	* returns true or false
	**/
	isSafari : function(){
		return (navigator.userAgent.toLowerCase().indexOf("safari") != -1);
	},

	/** function isIE6
	* returns true or false
	**/
	isIE6 : function(){
		return (navigator.userAgent.toLowerCase().indexOf("msie 6") != -1);
	},

	/** function isIE
	* returns true or false
	**/
	isIE : function(){
		return (navigator.userAgent.toLowerCase().indexOf("msie") != -1);
	},

	getCookie : function(cookiename){
		var cookiestring=""+document.cookie;
	 	var index1=cookiestring.indexOf(escape(cookiename));
		if (index1==-1 || cookiename=="") return "";
			var index2=cookiestring.indexOf(';',index1);
		if (index2==-1) index2=cookiestring.length;
			return cookiestring.substring(index1+cookiename.length+1,index2);
	},

	setCookie : function(name, value, expires, path, domain, secure){
		document.cookie= name + "=" + escape(value) +
		((expires) ? "; expires=" + expires.toGMTString() : "") +
	    ((path) ? "; path=" + path : "") +
	    ((domain) ? "; domain=" + domain : "") +
	    ((secure) ? "; secure" : "");
	},

	resizeBackground : function() {
		w = mainframe.innerWidth();
		h = mainframe.innerHeight();

		var image_scale = mainframe.imgObj.width/mainframe.imgObj.height;
		var window_scale = w/h;

		if (image_scale>window_scale){
			var wid = Math.floor(h*image_scale);

			$('#background_image').attr('width',wid);
			$('#background_image').attr('height',h);
		}
		else{
			var hei = Math.floor(w/image_scale);

			$('#background_image').attr('width',w);
			$('#background_image').attr('height',hei);
		}
	},


	doOnResize : function() {
		//create a little delay to "unstress" IE and Opera during resizing
		try {
			window.clearTimeout(this.resizeInt);
			this.resizeInt = null;
		}
		catch (err){
			//nice catch
		}
		this.resizeInt = window.setTimeout("mainframe.resizeBackground()", 20);

	},

	hideMenu : function(callbackfunc){
	    $('#menu_control').unbind('click',mainframe.hideMenu);

		$('#menu_control').addClass('show_menu');
		$('#hide_label').hide();
		$('#show_label').show();

		$('#logo_oma').css('visibility','hidden');
		$('#home_menu').slideUp();
		$('#home_content').slideUp(function(){
			$('#home_innercontainer').animate({width:'140px',left:0,marginLeft:0}, function(){
			    $('#menu_control').bind('click',mainframe.showMenu);
				$('#menu_control').show();
			    mainframe.isShown = false;
			    if(typeof callbackfunc == 'function') { callbackfunc();}
			});
		});
	},

	showMenu : function(){
	    $('#menu_control').unbind('click',mainframe.showMenu);
        $('#menu_control').removeClass('show_menu');
		if (!mainframe.showTextBox) {
			$('#menu_control').hide();
		}
		$('#hide_label').show();
		$('#show_label').hide();

		$('#home_innercontainer').animate({width:'990px',left:'50%',marginLeft:'-495px'}, function(){

			$('#logo_oma').css('visibility','visible');
			$('#home_menu').slideDown();
			$('#home_content').slideDown();
			$('#menu_control').bind('click',mainframe.hideMenu);
			mainframe.isShown = true;
		});
	},

	setImageObj : function(newImg,callback){

	    this.imgObj.src = newImg;
		this.imgObj.onload = callback;
		this.imgObj.onerror = function(){ };
	},

	init : function (firstload){



		mainframe.firstLoad = firstload;

		//get an random image from the array
		if( (mainframe.getCookie('bgimage') != "") && (mainframe.getCookie('bgindex') != "") && (mainframe.getCookie('flag') != "")) {

			//init from cookies
			var index = parseInt(mainframe.getCookie('bgindex'));
			this.backgroundImg = this.imagesArray[index].src;
			slideshow.currentImage = index;
		} else {

			//init from randomize
			var randomIndex = Math.floor ( Math.random() * this.imagesArray.length );
			if(this.imagesArray.length > 0) {
				var randomImage = this.imagesArray[randomIndex].src;
				mainframe.setCookie('bgimage', randomImage);
				mainframe.setCookie('bgindex', randomIndex);
				mainframe.setCookie('flag', 1);
				this.backgroundImg = randomImage;
				slideshow.currentImage = randomIndex;
			} else {
				// If no images are set the site does not initialize
				// Added this to initialize the site without background images
				window.setTimeout("mainframe.doOnFirstLoad()",300);
			}
		}
		//bind menu controls
		$('#show_label').hide();
		$('#menu_control').bind('click',mainframe.hideMenu);
		$(window).resize(function(){
			mainframe.doOnResize();
		});

		//$('#home_menu').hide();


		$('#home_content').hide();
		$('.home_innercontainer').css('width','184px');
		$('#menu_control').hide();
		$('#logo_oma').css('visibility','hidden');
		$('#home_innercontainer').css('top',mainframe.innerHeight()+'px');
		$('#home_maincontainer').show();

		//ie image caching bug
		if (mainframe.isIE()) {
			mainframe.setImageObj(this.backgroundImg,null);
			window.setTimeout("mainframe.doOnFirstLoad()",300);
		}
		else {
			mainframe.setImageObj(this.backgroundImg,mainframe.doOnFirstLoad);
		}
		//$('#background_image').attr('src', this.backgroundImg).load(mainframe.doOnFirstLoad);


		if (this.isHome){
			slideshow.init();
		}
		// If a link gets selected, call blur
		$('a').bind('focus',function() {
        	this.blur();
    	});

	},

	doOnFirstLoad : function() {


		mainframe.resizeBackground();

		$('#background_image').attr('src', mainframe.backgroundImg);

		$('#loading').hide();

		$('#background_image').show();

		// If the page loads first animate, else just position
		if (mainframe.firstLoad) {
			$('#home_innercontainer').animate({
				'top': '75px'
			}, 2000, 'swing', function(){
				$('#home_slider').show();
				$('#home_content').show();
				$('.home_innercontainer').css('width', '990px');
				if (!mainframe.showTextBox) {
					$('#menu_control').hide();
				} else {
					$('#menu_control').show();
				}
				$('#logo_oma').css('visibility', 'visible');
			});
		} else {

			$('#home_innercontainer').css('width', '990px');
			$('#home_slider').show();
			$('#home_content').show();
			$('#home_menu').show();
			$('.home_innercontainer').css('width', '990px');
			if (!mainframe.showTextBox) {
				$('#menu_control').hide();
			} else {
				$('#menu_control').show();
			}
			$('#logo_oma').css('visibility', 'visible');
		}

	}
}

window.slideshow = {
	imagesArray : null,

	currentImage : 0,

	total : 0,

	imageJqueryObj : null,

	overlayJqueryObj :null,

	init : function(){
		//slideshow logic
		this.total = this.imagesArray.length;

	    //hover handling
        slideshow.addHover('arrow_slide_prev');
	    slideshow.addHover('arrow_slide_next');

	    //click handlind
	    $('#arrow_slide_prev').bind('click',slideshow.previousImage);
	    $('#arrow_slide_next').bind('click',slideshow.nextImage);

		this.imageJqueryObj = $('#background_image');
		this.overlayJqueryObj = $('#background_overlay');

		var bulletContainer = $('#home_slider_bullets');

		for (var i=0; i < this.total; i++) {
		    bulletContainer.append('<span id="slide_'+i+'" onclick="slideshow.openImage('+i+');" class="bullet">&nbsp;</span>');
		}

		$('#slide_'+this.currentImage).addClass('selected_bullet');
		slideshow.updateInfoBar();
	},

	updateInfoBar : function (){
		var imageInfos = this.imagesArray[this.currentImage];
		if (imageInfos != undefined) {
			if (imageInfos.text != '') {
				$('#project_title').html(imageInfos.text);

				$('#project_title').show();
			}
			else {
				$('#project_title').hide();
			}
		} else {
			$('#project_title').hide();
		}

	},

	switchImage : function(direction,callback) {


		$('#slide_'+this.currentImage).removeClass('selected_bullet');

		this.currentImage += parseInt(direction);

		if (this.currentImage == this.total) this.currentImage = 0;
		if (this.currentImage == -1) this.currentImage = this.total-1;

		slideshow.openCurrentImage(callback);
		//});
	},

	openImage : function(index){
		if (mainframe.isShown){
	        mainframe.hideMenu(function(){slideshow.openImage(index);});
	        return;
	    }

		$('#slide_'+this.currentImage).removeClass('selected_bullet');
		this.currentImage = index;
		slideshow.openCurrentImage();
		mainframe.setCookie('bgimage', slideshow.imagesArray[slideshow.currentImage].src);
		mainframe.setCookie('bgindex', slideshow.currentImage);
	},

	openCurrentImage : function(callback){

		$('#slide_'+this.currentImage).addClass('selected_bullet');
		slideshow.updateInfoBar();

		//this.overlayJqueryObj.fadeIn('fast',function(){

			this.overlayJqueryObj.show();
			slideshow.imageJqueryObj.hide();
			$('#loading').show();
             slideshow.imageJqueryObj.removeAttr('src');

			var imgSrc = slideshow.imagesArray[slideshow.currentImage].src;

			//ie doesn't execute the callback function if the image has already been cached
			if (mainframe.isIE()) {
				mainframe.setImageObj(imgSrc,null);

				mainframe.resizeBackground();
				slideshow.imgHasLoaded(imgSrc);

				if(typeof callback == 'function') callback();

			}
			else {

				mainframe.setImageObj(imgSrc,function(){
					mainframe.resizeBackground();
					slideshow.imgHasLoaded(imgSrc);
					if(typeof callback == 'function') callback();
				});
			}
	},


	imgHasLoaded : function(imgSrc){



		slideshow.imageJqueryObj.attr('src',imgSrc);

		$('#loading').hide();//('fast',function(){
		slideshow.imageJqueryObj.show();
		slideshow.overlayJqueryObj.hide();
	},

	nextImage : function() {

	    if (mainframe.isShown){
	        mainframe.hideMenu(slideshow.nextImage);
	        return;
	    }

	    $('#arrow_slide_next').unbind('click',slideshow.nextImage);
	    slideshow.switchImage(1,function(){
	        $('#arrow_slide_next').bind('click',slideshow.nextImage);
	    });
		mainframe.setCookie('bgimage', slideshow.imagesArray[slideshow.currentImage].src);
		mainframe.setCookie('bgindex', slideshow.currentImage);
	},

	previousImage : function() {

        if (mainframe.isShown){
	        mainframe.hideMenu(slideshow.previousImage);
	        return;
	    }

        $('#arrow_slide_prev').unbind('click',slideshow.previousImage);
	    slideshow.switchImage(-1,function(){
	        $('#arrow_slide_prev').bind('click',slideshow.previousImage);
	    });
		mainframe.setCookie('bgimage', slideshow.imagesArray[slideshow.currentImage].src);
		mainframe.setCookie('bgindex', slideshow.currentImage);

	},

	addHover : function(id){
	    var elementId = id;

        $('#'+elementId).hover(
			function() {
				$(this).children('img').attr('src','images/'+elementId+'_roll.png');
			},

			function() {
				$(this).children('img').attr('src','images/'+elementId+'.png');
			}
		);
	}
}

//
//getPageSize()
//Returns array with page width, height and window width, height
//Core code from - quirksmode.org
//Edit for Firefox by pHaez
//
var ie=document.all&&document.getElementById;

function getPageSize(){	
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}
	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

//Determine if a reference is defined
function defined(o) {
  return (typeof(o)!="undefined");
};

function cssHypen2Camel(property) {
    if (!defined(property) || property==null) { return null; }
    if (property.indexOf("-")<0) { return property; }
    var str = "";
    var c = null;
    var l = property.length;
    for (var i=0; i<l; i++) {
      c = property.charAt(i);
      str += (c!="-")?c:property.charAt(++i).toUpperCase();
    }
    return str;
}

function cssGet(o, property) {
    if (o==null) { return null; }
    var val = null;
    var camelProperty = cssHypen2Camel(property);
    // Handle "float" property as a special case
    if (property=="float") {
      val = cssGet(o,"cssFloat");
      if (val==null) { 
        val = cssGet(o,"styleFloat"); 
      }
    }
    else if (o.currentStyle && defined(o.currentStyle[camelProperty])) {
      val = o.currentStyle[camelProperty];
    }
    else if (window.getComputedStyle) {
      val = window.getComputedStyle(o,null).getPropertyValue(property);
    }
    else if (o.style && defined(o.style[camelProperty])) {
      val = o.style[camelProperty];
    }
    // For color values, make the value consistent across browsers
    // Convert rgb() colors back to hex for consistency
    if (/^\s*rgb\s*\(/.test(val)) {
      val = css.rgb2hex(val);
    }
    // Lowercase all #hex values
    if (/^#/.test(val)) {
      val = val.toLowerCase();
    }
    return val;
};

function getHeight() {
    var body = document.body;
    if(body == null) {
    	var bodies = document.getElementsByTagName("BODY");
        if (bodies!=null && bodies.length>0) {
          body = bodies[0];
        }    	
    }
    var innerHeight = (defined(self.innerHeight)&&!isNaN(self.innerHeight))?self.innerHeight:0;
    if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
        var topMargin = parseInt(cssGet(body,'marginTop'),10) || 0;
        var bottomMargin = parseInt(cssGet(body,'marginBottom'), 10) || 0;
        var alt = (!defined(self.innerHeight) || isNaN(self.innerHeight))?0:self.innerHeight;
        return Math.max(body.offsetHeight + topMargin + bottomMargin, document.documentElement.clientHeight, document.documentElement.scrollHeight, alt);
    }
    var alt = (!defined(self.innerHeight) || isNaN(self.innerHeight))?0:self.innerHeight;
    return Math.max(body.scrollHeight, body.clientHeight, alt);
}

function doResize() {
	var pageSize = new Array();
	pageSize = getPageSize();
	var height = (getHeight()-60)+'px';
	if (navigator.userAgent.toLowerCase().indexOf("msie") != -1) {
		document.getElementById('content').style.height = height;
	} else {
		document.getElementById('content').style.height =  (pageSize[1]-60)+'px';
	}
}