
function go(id) {	
}

function project(id) {
    window.location = 'Default.aspx?page=projects&id='+id;
}

function projectPerson(id) {
    window.location = 'Default.aspx?page=people&id='+id+'#';
}

function careers() {
    window.location = 'Default.aspx?page=careers';
}

function person(id) {
    var el = "peopleContent";
    xhr.loading.setStyle('display','block');
    var req = new Request.HTML({ url: '/request.aspx?page=person&id=' + id,
        evalScripts: false,
        evalResponse: false,
        onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
            $(el).set('html', responseHTML);
            $exec(responseJavaScript);
            utils.obfuscate();
            xhr.loading.setStyle('display', 'none');
        } .bind(this),
        onFailure: function() {
            $(el).set('text', 'Whoops! XHR request failed.');
        }
    }).get();
}

function getMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
		return window[movieName];
	} else {
		return document[movieName];
	}
}

/**
 * @param string id
 */
function setActive(id) {
	if (id!='nindex'&&id!='nidx') {
		try {
			utils.activate($(id),$$('#nav a')); 
			if(id!='nprojects') {
				$('slider').morph({'opacity':[1,0]});
			} else {
				$('slider').set({'opacity':0});
			}
		} catch(e) {}
	} else{
		$('slider').morph({'opacity':[0,1]});
	};
}


/**
 * opens and closes slider bar on idx
 */
var collapsed = true; 
var expandSlider = function(e) {
	utils.prEvent(e); 
	if(collapsed==true) {
		$('handle').addClass('opened'); 
		this.start('height', '450px');
		collapsed = false; 
	} else {
		$('handle').removeClass('opened'); 
		this.start('height', '40px');
		collapsed = true; 
	}
}

/**
 * Handles all ajax requests. 
 */
var XHR = new Class({
    Implements: Options,
    req: null,
    useFullURL: false,
    stateManager: null,
    statePrefix: '',
    siteTitle: 'BHDP architecture | ',
    pgTitleDefault: 'Architectural Firm | Work Space Planning', 
    pgTitle: '', 
    options: {},
    activeId: null,
    initialize: function(options) {
        this.setOptions(options);
        this.loading = new Element('div', { id: 'loading', html: 'Loading...', styles: { display: 'none'} });
        this.loading.inject(document.body);
        this.statesInit(this);
    },
    statesInit: function(ref) {
        this.stateManager = EXANIMO.managers.StateManager;
        this.stateManager.initialize();
        this.stateManager.onstatechange = function(e) { };
        this.stateManager.onstaterevisit = function(e) {
            if (window.location.hash) {
				var hashArr = String(window.location.hash).substr(1).split('/');
				var id = hashArr[0];
				var item = hashArr[1];
                if (['projects', 'services', 'people', 'about', 'contact'].contains(id)) {
                    utils.activate($('n' + id), $$('#nav a'));
                } else if(id.test('news')) {
                    utils.activate($('nabout'), $$('#nav a'));
			  			id = 'news'; 
                } else if(id.test('people')) {
                    utils.activate($('npeople'), $$('#nav a'));
						item = id.split('/').getLast();
			  			id = 'people'; 
		    	} else {
                    try {
                        utils.activate($(utils.getStateAssoc('n' + id)), $$('#nav a'));
                    } catch (e) { }
                }
                ref.makeRequest(null,id,item);
            }
        };
    },
    setState: function(id) {
        this.stateManager.setState(id);
        return false;
    },
    setTitle: function() {
    	str = this.pgTitle!="" ? this.pgTitle : this.pgTitleDefault; 
        this.stateManager.setTitle(this.siteTitle+str);
        return false;
    },
    request: function(a,ev,page) {
        try { 
        	utils.prEvent(ev); 
        } catch (e) { }
        var id = utils.getID(a);
        if(page === undefined) {
		    this.makeRequest(a,id);
        } else {
		    this.makeRequest(a,page,id);
        }
    },
    makeRequest: function(a,id,item) {
        this.activeId = id;
        var loadFlash = false;
        try {
            switch (id) {
                case 'index':
                    id = 'idx';
                case 'projects':
                    var mv = getMovie('idxSwf').go(id);
                    return;
                    break;
            }
	    	if(this.useFullURL) {
				this.pgTitle = a.innerHTML; 
	    	}
        } catch (e) { }

        var url = !this.useFullURL ? item != undefined && item != '' ? this.options.url+'?page='+id+'&id='+item : this.options.url+'?page='+id : this.options.url+'?'+utils.getParams(a);
	    if(item != undefined && item != '') {
            this.setState(this.statePrefix+id+"/"+item);
        } else {
            this.setState(this.statePrefix+id);
        }
		this.setTitle();

        var el = this.options.el;
        this.loading.setStyle('display', 'block');
        var req = new Request.HTML({ url: url,
            evalScripts: false,
            evalResponse: false,
            onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
                $(el).set('html', responseHTML);
                $exec(responseJavaScript);
                utils.obfuscate();
                this.loading.setStyle('display', 'none');
                this.useFullURL = false; 
                this.statePrefix = ''; 
                this.pgTitle = ''; 
            } .bind(this),
            onFailure: function() {
                $(el).set('text', 'Whoops! XHR request failed.');
            }
        }).get();
    }
}); 

/**
 * Applies XHR events to any navigation item. 
 * Inline Usage Example: 
 *		<a href="/somewhere" onclick="nav.go(this); return false;">make remote request</a>
 */
var Nav = new Class({
	Implements: Options,
	options: {
		el: null,
		target: null,
		useFullURL: false,
		statePrefix: false,
        usePage: false
	},
	initialize: function(options) {
		this.setOptions(options);
		this.setupEvents();
	},
	setupEvents: function() {
		$(this.options.el).getElements('a').each(function(item,index){
			var parent = item.getParent('p');
			var target = item.getProperty('target');
			if(parent==null && target!="_blank" && !item.hasClass('ign')) {
				this.addEvent(item); 
			}
		},this); 
	},
	addEvent: function(item) {
		this.setId(item); 
		item.addEvent('click',function(ev){
			if(curPage == 'careers') {
				return true;
			}
			var target = this.options.target!=undefined ? this.options.target : item; 
                target = target.getProperty('id').substr(0,1)=='c' ? $('n'+target.getProperty('id').substr(1)) : target;
			utils.trackState(item.getProperty('id'),target.getProperty('id')); 
			utils.activate(target,$$('#nav a')); 
			if(this.options.useFullURL) {
				xhr.useFullURL = true; 
			}
			if(this.options.statePrefix) {
				xhr.statePrefix = this.options.statePrefix; 
			}
            if(this.options.usePage) {
			    xhr.request(item,ev,this.options.usePage); 
            } else {
			    xhr.request(item,ev); 
            }
		}.bind(this));
	},
	setId: function(item) {
		var id = item.getProperty('id'); 
		if(!id) {
			var id = utils.getID(item); 
			item.setProperty('id','n'+id); 
		}
	},
	go: function(item) {
		xhr.request(item); 
	}
}); 

/**
 * general methods used throughout site
 */
var Utility = new Class({
	states: {
		links: [],
		activations: [],
		associations: {}
	},
	trackState: function(id,el) {
		if(!this.states.links.contains(id)) {
			this.states.links.push(id); 
			this.states.activations.push(el); 
		}
		this.states.associations = this.states.activations.associate(this.states.links);
	},
	getStateAssoc: function(id) {
		return this.states.associations[id]; 
	},
	getID: function(a) {
        return a.getProperty('href').split(/\//).getLast().replace(/^.*=/g,''); 
	},
	getParams: function(a) {
		return a.getProperty('href').split(/\//).getLast().replace(/^.*\?/g,''); 
	},
	deactivate: function(arr) {
		arr.each(function(item,index){
			item.removeClass('active'); 
		}); 
	},
	activate: function(el,arr) {
		this.deactivate(arr); 
		el.addClass('active'); 
	},
	prEvent: function(e) {
		var e = new Event(e); 
			e.stop(); 
	},
	obfuscate: function() {
		if (!document.getElementsByTagName && !document.createElement && !document.createTextNode) { return; }
		var nodes = document.getElementsByTagName("span");
		for(var i=nodes.length-1;i>=0;i--) {
			if (nodes[i].className=="email") {
				var at = / at /;
				var dot = / dot /g;
				var node = document.createElement("a");
				var address = nodes[i].firstChild.nodeValue;
					address = address.replace(at, "@");
					address = address.replace(dot, ".");
					address = address.replace(at, "@");
					address = address.replace(dot, ".");
				node.setAttribute("href", "mailto:"+address);
				node.appendChild(document.createTextNode(address));
				var prnt = nodes[i].parentNode;
				for(var j=0;j<prnt.childNodes.length;j++)
					if (prnt.childNodes[j] == nodes[i]) {
						if (!prnt.replaceChild) return;
						prnt.replaceChild(node, prnt.childNodes[j]);
						break;
					}
			}
		}
	}
}); 

/**
 * add events to window object, once dom is ready
 */
var xhr,nav,flashLoaded,utils; 
var curPage='';
window.addEvent('domready',function(){
	flashLoaded = true; 
	utils = new Utility(); 
	/* instantiate XHR and Nav objects */
	xhr = new XHR({
		url:'/request.aspx',
		/*url:'request.php',*/
		el:'content'
	}); 
	nav = new Nav({el:'nav'}); 
	new Nav({el:'footer',target:$('ncontact')}); 
	utils.obfuscate(); 
});
var workScrollBusy = false;
function scrollWorkBox(direction,numBoxes) {
	if(!workScrollBusy) {
		workScrollBusy = true;
		var myFx = new Fx.Scroll('work_center');
		if(direction == "right") {
			if($('work_scroll').getStyle('width').toInt() - $('work_center').scrollLeft <= $('work_center').getStyle('width').toInt()) {
				myFx.start(0,0);
			} else {
				myFx.start($('work_center').scrollLeft+(183*3),0);
			}
		} else {
			if($('work_center').scrollLeft <= 0) {
				myFx.start(((Math.ceil(numBoxes/3) * 3) - 3) * 183,0);
			} else {
				myFx.start($('work_center').scrollLeft-(183*3),0);
			}
		}
		workScrollBusy = false;
	}
}

function gotoProject(id) {
	window.location.href = "/#projects/"+id;
	window.location.reload();
}
