var IE = /MSIE/.test(navigator.userAgent);
var secureUrl;

window.addEvent('domready',function() {
    pageResized();
    window.onresize = function() {
        pageResized();
    }
});

function enterPressed (e, button) {   
    var key = window.event ? window.event.keyCode : e.which;
    if (key == 13) {       
        button.click();
    }
} 

function  fixTableInputWidth(element) {
    window.addEvent('domready',function(){
        var tables = $$('#'+element.id+' table');
        tables.forEach(function(table){
            var id = table.id;
            if (id) {
                var width = 0;
                var i = 0;
                var fields = new Array;
                var inputs = $$('#'+id+' input');
                inputs.forEach(function(input){
                    if (input.type == "text" || input.type == "password") {
                        fields[i++] = input;
                        var w = input.parentNode.getStyle('width');
                        if (w) {
                            width = Math.max(width,w.toInt());
                        }
                    }
                })
                inputs = $$('#'+id+' textarea');
                inputs.forEach(function(input){
                    fields[i++] = input;
                    var w = input.parentNode.getStyle('width');
                    if (w) {
                        width = Math.max(width,w.toInt());
                    }
                })
                for (;i>0;) {
                    fields[--i].setStyle('width',width+'px');
                }
            }})
    })
}

function getUrl(url,contentElement) {
    var req = new Request.HTML({method:'GET',url:url, 
        onSuccess: function(html) {
            if (contentElement) {
                //Clear the text currently inside the results div.
                contentElement.set('text', '');
                //Inject the new DOM elements into the results div.
                contentElement.adopt(html);
            }
        }
    });
    req.send(null);
}

function invalidate() {
    pageResized();
}

function loadContent(url) {
    loadContent(url, false);
}

function loadContent(url,secure) {
    secureUrl = secure ? url : null;
    var myurl = 'Page?value=' + url;
    loadPage(myurl,$('content'),true);
}

function loadPage(url,contentElement,inv){
    var req = new Request.HTML({method:'GET',url:url, 
        onSuccess: function(html) {
            //Clear the text currently inside the results div.
            contentElement.set('text', '');
            //Inject the new DOM elements into the results div.
            contentElement.adopt(html);
            if (inv) {
                invalidate();
            }
            fixTableInputWidth(contentElement);
            registerAccordion(contentElement);
            if (IE) {
                registerOnclick(contentElement);
                registerOnkeydown(contentElement);
            }
            registerCalendar(contentElement);
            registerEmail(contentElement);
            contentElement.fireEvent('pageLoaded');
        }
    });
    req.send(null);
}

function login() {
    var url = 'Login?usr=' + encodeURIComponent($('username').value) +
        '&pwd=' + encodeURIComponent($('password').value);
    loadPage(url,$('login'));
    $('login').addEvent('pageLoaded',function(){
        reloadSecureContent();
        $('login').removeEvents('pageLoaded');
    })
}

function logout() {
    loadPage('Login?logout=true',$('login'));
    $('login').addEvent('pageLoaded',function(){
        reloadSecureContent();
        $('login').removeEvents('pageLoaded');
    })

}

function registerAccordion(element) {
    window.addEvent('domready', function(){
        var accordions = $$('#'+element.id+' div.accordion');
        accordions.forEach(function(each){
            accordionSetup(each);
        })
    })
}

function registerCalendar(element) {
    window.addEvent('domready',function(){
        var cals = $$('#'+element.id+' .yui-skin-sam');
        cals.forEach(function(each){
            var node = $$('#'+each.id+' #calendar')[0];
            var cal = new YAHOO.widget.Calendar(node.id);
            cal.render();
        })
    })
}

function registerEmail(element) {
    var emails = $$('#'+element.id+' span.email');
    emails.forEach(function(each){
        var url = 'Mailto?value=' +  each.getAttribute('name');
        getUrl(url,each);
    })
}

function registerOnclick(element) {
    window.addEvent('domready',function(){
        var links = $$('#'+element.id+' span.link1');
        registerOnclickEvent(links);
        links = $$('#'+element.id+' .accordionMenu');
        registerOnclickEvent(links);
        links = $$('#'+element.id+' button');
        registerOnclickEvent(links);
        links = $$('#'+element.id+' .imgscaled');
        registerOnclickEvent(links);
    })
}

function registerOnclickEvent (links) {
    links.forEach(function(each){
        var attrib = each.getAttribute('onclick');
        if (attrib) {
            each.addEvent('click',function(){
                eval(attrib);
            })
        }
    })
}

function registerOnkeydown (element) {
    window.addEvent('domready',function(){
        var links = $$('#'+element.id+' input');
        registerOnkeydownEvent(links);
    })
}

function registerOnkeydownEvent (links) {
    links.forEach(function(each){
        var attrib = each.getAttribute('onkeydown');
        if (attrib) {
            each.addEvent('keydown',function(){
                eval(attrib);
            })
        }
    })
}

function reloadSecureContent() {
    if (secureUrl != null) {
        loadContent(secureUrl,true);
    }
}

function scaleImage(element,initialWidth,initialHeight) {
    var mywidth = element.getStyle('width');
    var myheight = element.getStyle('height');
    if (mywidth == initialWidth || myheight == initialHeight) {
        element.setStyle('width',null);
        element.setStyle('height',null);
    } else {
        element.setStyle('width',initialWidth);
        element.setStyle('height',initialHeight);
    }
}

function styleTotals(element, styles) {
    var total = 0;
    styles.forEach(function(property){
        var prop = element.getStyle(property);
        if (prop) {
            total += prop.toInt();
        }
    })
    return total;
}

function windowHeight() {
    var height;
    if (typeof(window.innerHeight) == 'number' ) {
        //Non-IE
        height = window.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        //IE 6+ in 'standards compliant mode'
        height = document.documentElement.clientHeight;
    } else if (document.body && document.body.clientHeight) {
        //IE 4 compatible
        height = document.body.clientHeight;
    }
    return height;
}

function windowWidth() {
    var width;
    if (typeof(window.innerWidth) == 'number' ) {
        //Non-IE
        width = window.innerWidth;
    } else if (document.documentElement && document.documentElement.clientWidth) {
        //IE 6+ in 'standards compliant mode'
        width = document.documentElement.clientWidth;
    } else if (document.body && document.body.clientWidth) {
        //IE 4 compatible
        width = document.body.clientWidth;
    }
    return width;
}
