﻿var _track = false;

if (document && document.location && document.location.toString() && document.location.toString().toLowerCase().indexOf('localhost') < 0) {
    _track = true;
}

if (_track) {

    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-5035473-1']);
    //_gaq.push(['_trackPageview']);

    try {
        (function() {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();
    } catch (ex) { }

    var DID = 30422;
    var MyPageName = '';
    //var pcheck=(window.location.protocol == "https:") ? "https://sniff.visistat.com/live.js":"http://stats.visistat.com/live.js";
    //document.writeln('<scr'+'ipt src="'+pcheck+'" type="text\/javascript"><\/scr'+'ipt>');
}

var _site_map;
var _path;

var _acclaro_root;
var _acclaro_json;
var _acclaro_twitter_empty;
var _acclaro_twitter_count;

var _content_left = null;
var _content_right = null;

var _content_left_new = null;
var _content_right_new = null;

var _content_right_element = 0;
var _content_right_new_element = 0;

var _content_left_element = 0;
var _content_left_new_element = 0;

var _content_right_ajax;

var _content_right_element_list = new Array();
var _content_left_element_list = new Array();

var _initialized = false;
var _is_ready = false;
var _is_loaded = false;
var _header_visible = false;

var _loading_element;
var _hash;
var _circles = new Array();

function _loading(visible) {
    if (!_loading_element) {
        _loading_element = $('<div class="acclaro_loading"><span>loading</span></div>');
        $(document.body).append(_loading_element);
    }

    if (visible) {
        _loading_element.show();
    } else {
        _loading_element.hide();
    }
}

function _init() {
    _soundManager_init();
    
    if (!_initialized) {
        _initialized = true;

        $('.acclaro_canvas').append($('<div class="top_nav"><a href="/" class="logo">home</a><span class="links"><a id="top_nav_human" class="link human" href="/human_connection">[human connection]</a><span class="pipe">&nbsp;</span><a  id="top_nav_about" class="link about" href="/about">about</a><span class="pipe">&nbsp;</span><a id="top_nav_work" class="link work" href="/work">work</a><span class="pipe">&nbsp;</span><a id="top_nav_exchange" class="link exchange" href="/exchange">exchange</a><span class="pipe">&nbsp;</span><a id="top_nav_contact" class="link contact" href="/contact">contact</a></span></div><div class="content"><span class="content_left" id="content_left"><span class="lines" style="top:-100%;" id="lines"><a href="#" class="circle c0" id="circle_0">&nbsp;</a><a href="#" class="circle c1" id="circle_1" >&nbsp;</a><a href="#" class="circle c2" id="circle_2" >&nbsp;</a><a href="#" class="circle c3" id="circle_3" >&nbsp;</a><a href="#" class="circle c4" id="circle_4" >&nbsp;</a><a href="#" class="circle c5" id="circle_5" >&nbsp;</a><a href="#" class="circle c6" id="circle_6" >&nbsp;</a></span></span><span class="content_right"></span><span class="content_left_new" id="content_left_new"></span><span class="content_right_new"></span></div><div class="bottom_nav"><div class="links" id="bottom_nav_links" ></div></div>'));

        _init_acclaro_circles();

        $('.acclaro_canvas').hide();
        $('.content').hide();
        $('#lines').hide();

        $('.top_nav .link').html('&nbsp;');
        $('.top_nav .logo').html('&nbsp;');
        
        var c;
        for(var i=0; i < 7; i++){
            c = $('.c'+i);
            _circles.push(c);
        }

        _acclaro_root = $('#acclaro_root').val();
        _acclaro_twitter_empty = $('#acclaro_twitter_empty').val();
        _acclaro_twitter_count = parseInt($('#acclaro_twitter_count').val());

        $('a').click(_anchor_click);

        _hash = new hash_library();
        _hash.set_root(_acclaro_root);
        _hash.set_callback(_load_url);
    }
}

function _ready() {
    if (!_is_ready) {
        _is_ready = true;
        
        _loading(true);
        _init();
        _load_url();        
    }
}

function _load() {
    if (!_is_loaded) {
        _is_loaded = true;

        _loading(false);
        _init();
        _load_url();

        _transition_header();
    }
}

function _popstate() {    
    _load_url();
}

function acclaro_init_site_map(o) {
    _acclaro_json = o;
    
    if(_acclaro_json){
        for(var i = 0; i < _acclaro_json.length; i++){
            _acclaro_json.left_content = clean_string(_acclaro_json.left_content);
            _acclaro_json.right_content = clean_string(_acclaro_json.right_content);
            _acclaro_json.uri = clean_string(_acclaro_json.uri);
            _acclaro_json.parent_uri = clean_string(_acclaro_json.parent_uri);
            _acclaro_json.bottom_nav_parent = clean_string(_acclaro_json.bottom_nav_parent);
        }
    }

    if (_is_ready) {
        _init();
        _load_url();        
    }
}

var _hash_value;
function _load_url() {
    if (window.location) {
        var hash = _hash.get_hash();

        if (hash) {
            if (_hash_value != hash) {
                _hash_value = hash;

                _load_page_from_path(_hash_value, false, true);
            }
        } else {
            _load_page_from_path(window.location.toString(), false, true);
        }
    }
}

function _anchor_click(event) {
    if (this && $(this)) {
        
        var link = $(this);
        var href = link.attr('href');

        var prefix = location.protocol + "//" + location.host;

        if (href.indexOf(prefix) == 0) {
            href = href.substring(prefix.length);
        }

        if (href && href.toLowerCase().indexOf('http') < 0) {
            if (event) {
                event.preventDefault();
            }

            _load_page_from_path(href);

            return false;
        }
    }

    return true;
}

function clean_string(a) {
    if(a){
        while (a && a.length > 0 && a.indexOf("\\") >= 0) {
            a = a.replace("\\", "/");
        }

        while (a && a.length>0 && a.indexOf("/")==0) {
            a = a.replace("/", "");
        }

        while (a && a.length > 0 && a.lastIndexOf("/") == a.length - 1) {
            a = a.substring(0, a.length - 1);
        }

        while (a && a.length > 0 && a.indexOf(" ") == 0) {
            a = a.replace(" ", "");
        }

        while (a && a.length > 0 && a.lastIndexOf(" ") == a.length - 1) {
            a = a.substring(0, a.length - 1);
        }

        a = a.toLowerCase();
    }
    
    return a;
}

var _preload_left_images_complete = false;

function _preload_left_images() {
    if (!_preload_left_images_complete) {
        _preload_left_images_complete = true;
        
        if (_acclaro_json) {
            var found = false;
            var j;
            var e;

            for (var i = 0; i < _acclaro_json.length; i++) {
                if (_acclaro_json[i].left_content) {
                    found = false;

                    if (_content_left_element_list) {
                        j = 0;
                        while (!found && j < _content_left_element_list.length) {
                            if (_acclaro_json[i].left_content == _content_left_element_list[j].path) {
                                found = true;
                            }
                            j++;
                        }
                    }

                    if (!found) {
                        e = $('<span class="content_left_wrapper"></span>');
                        e.css('background-image', 'url(' + _acclaro_root + _acclaro_json[i].left_content + ')');
                        $('.content_left').append(e);

                        var o = { path: clean_string(_acclaro_json[i].left_content), element: e };
                        _content_left_element_list.push(o);

                        e.css("top", "-100%");
                        e.hide();
                    }
                }
            }
        }
    }
}

function _load_page_from_path(path, bottom, prevent_hash) {
    
    if (_acclaro_json && _acclaro_json.length > 0) {

        var page_info = _parse_location(path, bottom);
        
        var index = 0;
        var found = false;

        while (!found && index < _acclaro_json.length) {
            if (_acclaro_json[index] && _acclaro_json[index].uri && _acclaro_json[index].uri == page_info.name) {
                found = true;
            } else {
                index++;
            }
        }

        if (!found) {
            index = 0;
            
            page_info = _parse_location('');

            while (!found && index < _acclaro_json.length) {
                if (_acclaro_json[index] && _acclaro_json[index].uri && _acclaro_json[index].uri == page_info.name) {
                    found = true;
                } else {
                    index++;
                }
            }
        }

        $('#top_nav_human').removeClass('human_select');
        $('#top_nav_about').removeClass('about_select');
        $('#top_nav_work').removeClass('work_select');
        $('#top_nav_exchange').removeClass('exchange_select');
        $('#top_nav_contact').removeClass('contact_select');

        if (found) {
            if (_acclaro_json[index].title) {
                document.title = 'acclaro - ' + _acclaro_json[index].title;
            } else {
                document.title = 'acclaro';
            }

            if (page_info.uri != _path) {

                _path = page_info.uri;
                
                if (!prevent_hash) {
                    if (history && history.pushState) {
                        history.pushState(new Date(), document.title, page_info.uri);
                    } else if (window && window.location) {
                        _hash.set_hash(page_info.uri);
                    }
                }

                if (_track) {
                    try {
                        if (_gaq) {
                            _gaq.push(['_trackPageview', '/' + page_info.name]);
                        }

                        MyPageName = '/' + page_info.name;

                        if (typeof (VisiStat) == 'function') {
                            VisiStat();
                        } else {
                            (function() {
                                var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
                                ga.src = (window.location.protocol == "https:") ? "https://sniff.visistat.com/live.js" : "http://stats.visistat.com/live.js";
                                var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
                            })();
                            //var pcheck=(window.location.protocol == "https:") ? "https://sniff.visistat.com/live.js":"http://stats.visistat.com/live.js";
                            //document.writeln('<scr'+'ipt src="'+pcheck+'" type="text\/javascript"><\/scr'+'ipt>');	        
                        }
                    } catch (ex) { }
                }

                
                switch (_acclaro_json[index].menu_class) {
                    case 'human_connection':
                        $('#top_nav_human').addClass('human_select');
                        break;
                    case 'about':
                        $('#top_nav_about').addClass('about_select');
                        break;
                    case 'work':
                        $('#top_nav_work').addClass('work_select');
                        break;
                    case 'exchange':
                        $('#top_nav_exchange').addClass('exchange_select');
                        break;
                    case 'contact':
                        $('#top_nav_contact').addClass('contact_select');
                        break;
                    default:
                        break;
                }

                var parent_uri = null;
                var a = null;
                var parent_count = 0;
                var loop_count = 0;
                
                while ((parent_count == 0 || (parent_count == 1 && _acclaro_json[index].bottom_nav)) && loop_count <= 1) {

                    $('#bottom_nav_links').empty();

                    if (_acclaro_json[index].bottom_nav_label) {
                        $('#bottom_nav_links').append($('<span class="bottom_nav_label" id="bottom_nav_label" >' + _acclaro_json[index].bottom_nav_label + '</span>'));

                        $('.bottom_nav_label').text(_acclaro_json[index].bottom_nav_label);
                        $('.bottom_nav_label').show();
                    }
                    
                    for(var j=0; j < _circles.length; j++){
                        _circles[j].attr('href', 'javascript:;');                        
                    }
        
                    parent_count = 0;
                    circle_nav_count = 0;

                    for (var j = 0; j < _acclaro_json.length; j++) {
                    
                        parent_uri = _acclaro_json[index].uri;
                    
                        if (page_info.bottom || loop_count>0) {
                            parent_uri = _acclaro_json[index].parent_uri;
                        }
                        
                        if (
                            (_acclaro_json[j].uri == parent_uri) ||
                            (_acclaro_json[j].parent_uri == parent_uri && _acclaro_json[j].bottom_nav)
                        ) {
                            a = $('<a href="javascript:_load_page_from_path(\'' + _acclaro_root + _acclaro_json[j].uri + '\', ' + ( _acclaro_json[j].uri == parent_uri ? 'false': 'true') + ');">&nbsp;</a>');
                            a.addClass('link');

                            if (_acclaro_json[j].uri == page_info.name) {
                                a.addClass('selected');
                            }

                            $('#bottom_nav_links').append(a);

                            parent_count++;
                        }
                        
                        parent_uri = 'home';

                        if (_acclaro_json[index].circle_nav_parent){
                            parent_uri = _acclaro_json[index].circle_nav_parent;
                        }

                        if (
                            (clean_string(parent_uri) == clean_string(_acclaro_json[j].uri)) ||
                            (clean_string(_acclaro_json[j].parent_uri) == clean_string(parent_uri) && _acclaro_json[j].circle_nav) ||
                            (clean_string(_acclaro_json[j].circle_nav_parent) == clean_string(parent_uri) && _acclaro_json[j].circle_nav)
                            ) {
                            if (circle_nav_count < _circles.length) {
                                _circles[circle_nav_count].attr('href', _acclaro_json[j].uri);
                            }
                            circle_nav_count++;
                        }

/*
                        parent_uri = _acclaro_json[index].parent_uri;

                        if (_acclaro_json[j].circle_nav_parent == page_info.name) {
                            parent_uri = page_info.name;
                        }

                        if (!_acclaro_json[j].circle_nav_parent) {
                            parent_uri = 'home';
                        }

                        if (_acclaro_json[j].circle_nav_parent == parent_uri && _acclaro_json[j].circle_nav) {
                            if (circle_nav_count < _circles.length) {
                                _circles[circle_nav_count].attr('href', _acclaro_json[j].uri);
                            }
                            circle_nav_count++;
                        }
*/                        
                    }

                    loop_count++;
                }
               

                if (parent_count == 1) {
                    $('#bottom_nav_links').empty();
                }

                var trans = false;

                if (_content_left != _acclaro_json[index].left_content && _content_left_new != _acclaro_json[index].left_content) {

                    _content_left_new = _acclaro_json[index].left_content;

                    if (_content_left_new_element) {
                        _content_left_new_element.hide();
                        _content_left_new_element.stop(false, true);
                    }

                    _content_left_new_element = 0;

                    for (var i = 0; i < _content_left_element_list.length; i++) {
                        if (_content_left_element_list[i].path == _content_left_new) {
                            _content_left_new_element = _content_left_element_list[i].element;
                            break;
                        }
                    }

                    if (!_content_left_new_element) {
                        if (_content_left_new) {
                            _content_left_new_element = $('<span class="content_left_wrapper"></span>');
                            _content_left_new_element.css('background-image', 'url(' + _acclaro_root + _content_left_new + ')');
                            $('.content_left').append(_content_left_new_element);
                        } else {
                            _content_left_new_element = $('#lines');
                        }

                        var o = { path: clean_string(_content_left_new), element: _content_left_new_element };
                        _content_left_element_list.push(o);

                        //_content_left_new_element.css("top", "-100%");
                    }

                    trans = true;
                }

                if (_content_right != _acclaro_json[index].right_content && _content_right_new != _acclaro_json[index].right_content) {
                    _content_right_new = _acclaro_json[index].right_content;

                    if (_content_right_new_element) {
                        _content_right_new_element.hide();
                        _content_right_new_element.stop(false, true);
                    }

                    _content_right_new_element = 0;

                    for (var i = 0; i < _content_right_element_list.length; i++) {
                        if (_content_right_element_list[i].path == _content_right_new) {
                            _content_right_new_element = _content_right_element_list[i].element;
                            break;
                        }
                    }

                    if (!_content_right_new_element) {
                        if (_content_right_ajax) {
                            _content_right_ajax.abort();
                        }

                        if (_content_right_new.indexOf('twitter:') == 0) {
                            _content_right_ajax = $.ajax({
                                type: "GET",
                                url: 'http://search.twitter.com/search.json?rpp=' + _acclaro_twitter_count + '&callback=_load_right_twitter&' + _content_right_new.substring(8),
                                dataType: "jsonp",
                                jsonp: '_load_right_twitter',
                                error: _load_right_content_error
                            });
                        } else {
                            _content_right_ajax = $.ajax({
                                type: "GET",
                                url: _acclaro_root + _content_right_new,
                                dataType: "html",
                                success: _load_right_content,
                                error: _load_right_content_error
                            });
                        }

                        trans = false;
                    }
                    else {
                        trans = true;
                    }
                }

                if (trans) {
                    _transition();
                }
            }
        }            
    }
}

function _load_right_twitter(o) {
    if (o.results) {
        var d = $('<span class="header_space">&nbsp;</span><span class="h1">exchange</span><span></span>');
        var di;

        if (d && d.length > 0) {
            di = $(d[d.length - 1]);

            if (di) {
                var dc;

                if (o && o.results && o.results.length) {
                    for (var i = 0; i < o.results.length; i++) {
                        dc = $('<span class="p">' + o.results[i].text + '</span>');
                        di.append(dc);
                    }
                } else {
                    dc = $('<span class="p">' + _acclaro_twitter_empty + '</span>');
                    di.append(dc);
                }
            }
        }
        
        _load_right_content(d);
    }    
}

function _load_right_content(data) {
    _content_right_ajax = 0;

    _content_right_new_element = $('<span class="content_right_wrapper"></span>');
    if (data && data.toString().toLowerCase().indexOf('<!doctype')==-1) {
        _content_right_new_element.append(data);

        $('a', _content_right_new_element).click(_anchor_click);
    }
    $('.content_right').append(_content_right_new_element);

    var o = { path: _content_right_new, element: _content_right_new_element };
    _content_right_element_list.push(o);

    _content_right_new_element.css("top", "-100%");
    
    _transition();
}


var _error_element;

function _load_right_content_error() {
    _content_right_ajax = 0;

    if (!_error_element) {
        _error_element = $('<span class="content_right_wrapper"><span class="h1">error</span><span class="content">There was an error processing your request</span></span>');
        $('.content_right').append(_error_element);
    }

    _content_right_new_element = _error_element;
    _content_right_new_element.css("top", "-100%");

    _transition();
}

function _transition_complete() {
    $('#bottom_nav_links').show();
    $('.content').css("left", "0%");

    if (_content_right != _content_right_new) {
        _content_right = _content_right_new;

        if (_content_right_element) {
            _content_right_element.css("left", "0");
            _content_right_element.css("top", "0");
            _content_right_element.hide();
        }

        _content_right_element = _content_right_new_element;
        _content_right_element.css("left", "0");
        _content_right_element.css("top", "0");
        
        $('.content_right').append(_content_right_element);
        
        _content_right_new_element = 0;
    }
    
    if (_content_left != _content_left_new) {
        _content_left = _content_left_new;

        if (_content_left_element) {
            _content_right_element.css("left", "0");
            _content_right_element.css("top", "0");
            _content_left_element.hide();
        }

        _content_left_element = _content_left_new_element;
        _content_left_element.css("left", "0");
        _content_left_element.css("top", "0");
        
        $('.content_left').append(_content_left_element);
        
        _content_left_new_element = 0;
    }

    _preload_left_images();
}

function _transition_header_complete() {
    _header_visible = true;
    _transition();
}

function _transition_header() {
    $('.acclaro_canvas').show();
    $('#bottom_nav_links').hide();
    
    if (!_header_visible) {
        var top_nav = $('.top_nav');

        top_nav.show();
        //top_nav.css("margin-left", "-100%");
        //top_nav.animate({ marginLeft: '0%' }, 500, _transition_header_complete);
        top_nav.css("margin-left", "100%");
        top_nav.animate({ marginLeft: '0%' }, 500, _transition_header_complete);
        
        _transition_header_complete();      
    }    
}

function _transition() {
    if (_is_loaded && _header_visible) {
        
        $('.acclaro_canvas').show();
        //$('#bottom_nav_links').hide();

        $('.content').show();
        $('.content').stop(false, true);
        $('.content').css("left", "0%");
        
        if ((_content_right != _content_right_new) && (_content_left != _content_left_new)) {
            if (_content_right_new_element) {
                _content_right_new_element.stop(false, true);
                _content_right_new_element.show();
                _content_right_new_element.css("top", "0%");
                $('.content_right_new').append(_content_right_new_element);                
            }

            if (_content_right_element) {
                _content_right_element.stop(false, false);
                _content_right_element.show();
                _content_right_element.css("top", "0");                
            }

            if (_content_left_new_element) {
                _content_left_new_element.stop(false, true);
                _content_left_new_element.show();
                _content_left_new_element.css("top", "0%");
                $('.content_left_new').append(_content_left_new_element);                
            }

            if (_content_left_element) {
                _content_left_element.stop(false, false);
                _content_left_element.show();
                _content_left_element.css("top", "0");
            }

            $('.content').css("left", "0");
            $('.content').animate({ left: -1044 }, 500, _transition_complete);
            
        } else {
            if (_content_right != _content_right_new) {
                if (_content_right_new_element) {
                    _content_right_new_element.stop(false, true);
                    _content_right_new_element.show();
                    //_content_right_new_element.css("top", "-100%");
                    //_content_right_new_element.animate({ top: '0%' }, 500, _transition_complete);

                    _content_right_new_element.css("top", "0%");
                    _content_right_new_element.css("left", "100%");
                    _content_right_new_element.animate({ left: '0%' }, 500, _transition_complete);
                }

                if (_content_right_element) {
                    _content_right_element.stop(false, false);
                    _content_right_element.show();
                    //_content_right_element.css("top", "0");
                    //_content_right_element.animate({ top: '100%' }, 500);

                    _content_right_element.css("top", "0");
                    _content_right_element.css("left", "0");
                    _content_right_element.animate({ left: '-100%' }, 500);
                }
            }

            if (_content_left != _content_left_new) {
                if (_content_left_new_element) {
                    _content_left_new_element.stop(false, true);
                    _content_left_new_element.show();
                    //_content_left_new_element.css("top", "-100%");
                    //_content_left_new_element.animate({ top: '0%' }, 500);

                    _content_left_new_element.css("top", "0%");
                    _content_left_new_element.css("left", "100%");
                    _content_left_new_element.animate({ left: '0%' }, 500);
                }

                if (_content_left_element) {
                    _content_left_element.stop(false, false);
                    _content_left_element.show();
                    //_content_left_element.css("top", "0");
                    //_content_left_element.animate({ top: '100%' }, 500);

                    _content_left_element.css("top", "0");
                    _content_left_element.css("left", "0");
                    _content_left_element.animate({ left: '-100%' }, 500);
                }
            }
        }
    }
}

function _get_querystring_values(path) {
    var vars = [];

    if (path) {
        var hash;
        var hashes = path.slice(window.location.href.indexOf('?') + 1).split('&');

        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
    }

    return vars;
}

function _parse_location(l, bottom) {
    
    var o = { uri:'home', name: 'home', qs: null, bottom: false };
    var i;
    
    if (l) {
        if (l.indexOf('#')>=0) {
            l = l.replace("#", '');
            
            o.qs = _get_querystring_values(l);

            i = l.indexOf("?");

            if (i > 0) {
                l = l.substring(0, i);
            } else if (i == 0) {
                l = '';
            }            
        } else {
            o.qs = _get_querystring_values(l);
            
            l = l.toString();
            l = l.toLowerCase();

            while (l.indexOf("https://") == 0) {
                l = l.replace("https://", "");
            }

            while (l.indexOf("http://") == 0) {
                l = l.replace("http://", "");
            }

            i = l.indexOf(_acclaro_root);

            if (i >= 0 && l.length > i + _acclaro_root.length) {
                l = l.substr(i + _acclaro_root.length);
            }

            i = l.indexOf("?");

            if (i > 0) {
                l = l.substring(0, i);
            }

            l = clean_string(l);
            
            /*

            while (l.indexOf("/") == 0) {
                l = l.replace("/", "");
            }

            while (l.length > 0 && l.lastIndexOf("/") == l.length - 1) {
                l = l.substring(0, l.length - 1);
            }
            */
        }
    }
    if (l) {
        o.name = l;               
    }
    
    if(( o.qs && o.qs.length>0)){ 
        if(o.qs['b']=='1'){
            o.bottom = true;               
        }
    }

    if (bottom) o.bottom = true;               

    if (o.bottom) {
        o.uri = o.name + '?' + (bottom ? 'b=1' : '');
    } else {
        o.uri = o.name;
    }
    
    return o;
}


$(document).bind('ready', _ready);
$(window).bind('load', _load);
$(window).bind('popstate', _popstate);

