smartling_UtilFunctions = {
    setCookie : function(name, value, expiresDays, path, domain, secure) {
        if (expiresDays) {
            var today = new Date();
            var expires = new Date(today.getTime() + (expiresDays * 1000 * 3600 * 24));
        }
        var curCookie = name + "=" + escape(value) +
            ((expiresDays) ? "; expires=" + expires.toGMTString() : "") +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            ((secure) ? "; secure" : "");
        document.cookie = curCookie;
    },

    getCookie : function(name) {
        var prefix = name + "="
        var cookieStartIndex = document.cookie.indexOf(prefix);
        if (cookieStartIndex == -1) {
            return null;
        }
        var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
        if (cookieEndIndex == -1) {
            cookieEndIndex = document.cookie.length;
        }
        return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
    },

    isRedirectNeeded : function(domain, url) {
        var currentHost = window.location.host.split(':')[0];
        return ((domain == currentHost) && (url.indexOf('://' + currentHost) == -1));
    },

    getUrlWithCurrentPath : function(url) {
        var path = window.location.pathname;
        if (url.lastIndexOf('/') == url.length - 1) {
            path = path.substring(1, path.length);
        }
        return url + path;
    }
};

smartling_LanguageSelector = function(id, domain) {
    var cookieName = '_LastVisitedHost';
    var language = document.getElementById(id);

    var getFirstChild = function(element, event) {
        if (element.children) {
            return element.children[0];
        } else if (event.srcElement.childNodes) {
            if (event.srcElement.href != undefined) {
                return event.srcElement;
            } else {
                return event.srcElement.childNodes[0];
            }
        }
        return null;
    };
    
    var doRedirect = function(event) {
        var link = getFirstChild(this, event);
        if (link) {
            smartling_UtilFunctions.setCookie(cookieName, link.href, 360, '/', domain, '');
            window.location = smartling_UtilFunctions.getUrlWithCurrentPath(link.href);
        }
    };
    
    var highlightLanguage = function() {
        var currentHost = window.location.host.split(':')[0];
        var currentLanguage = '';
        
        var links = language.getElementsByTagName('a');
        for (var i = 0; i < links.length; i++) {
            if (links[i].href.indexOf('://' + currentHost) != -1) {
                currentLanguage = links[i].innerHTML;
            }
            links[i].onclick = function() {return false;};
        }
        
        if (currentLanguage != '') {
            var span = language.getElementsByTagName('span');
            if (span[0]) {
                span[0].innerHTML = currentLanguage;
            }
        }
    };
    
    var observeLinkClicks = function() {
        var li = language.getElementsByTagName('li');
        for (var i = 0; i < li.length; i++) {
            if (li[i].addEventListener) {  
                li[i].addEventListener('click', doRedirect, false);   
            } else if (li[i].attachEvent){  
                li[i].attachEvent('onclick', doRedirect);  
            }          
        }
    };
    
    var onClick = function(event) {
        var classes = language.className.split(' ');
        var hasHover = false;
        var hasUnhover = false;
        var tmp = '';
        for (var i=0; i < classes.length; i++) {
            if (classes[i] == 'hover') {
                hasHover = true;
            } else if (classes[i] == 'unhover') {
                hasUnhover = true;
            } else {
                tmp += ' ' + classes[i];
            }
        }
        if (!hasHover) {
            tmp += ' hover';
        } else if (!hasUnhover) {
            tmp += ' unhover';
        }
        language.className = tmp.substring(1, tmp.length);
    };

    var onMouseLeave = function(event) {
        var classes = language.className.split(' ');
        var tmp = '';
        for (var i=0; i < classes.length; i++) {
            if (classes[i] != 'hover' && classes[i] != 'unhover') {
                tmp += ' ' + classes[i];
            }
        }
        language.className = tmp.substring(1, tmp.length);
    };

    var _initialize = function() {
        highlightLanguage();
        observeLinkClicks();

        var span = language.getElementsByTagName('span')[0];
        if (language.addEventListener) {  
            span.addEventListener('click', onClick, false);   
            language.addEventListener('mouseout', onMouseLeave, false);   
        } else if (language.attachEvent){  
            span.attachEvent('onclick', onClick);  
            language.attachEvent('onmouseleave', onMouseLeave);  
        }
    };

    _initialize();
};
