/* utf8 marker ö */

mlvi = new Object();
mlvi.OBJECT_VI_PREFIX 				= 'mlviviVI_';
mlvi.OBJECT_BG_PREFIX 				= 'mlviviBG_';
mlvi.OBJECT_AP_PREFIX 				= 'mlviviAP_';
mlvi.OBJECT_FRM_PREFIX				= 'mlviviFRM_';
mlvi.OBJECT_CONT_PREFIX 			= 'mlviviCONT_';
mlvi.OBJECT_ICON_PREFIX 			= 'mlviviICON_';
mlvi.OBJECT_LABEL_PREFIX 			= 'mlviviLABEL_';
mlvi.OBJECT_DRAG_ICON_PREFIX 		= 'mlviDRAG_';






// DOM element creator for jQuery and Prototype by Michael Geary
// http://mg.to/topics/programming/javascript/jquery
// Inspired by MochiKit.DOM by Bob Ippolito
// Free beer and free speech. Enjoy!
$.defineTag = function( tag ) {
    $[tag.toUpperCase()] = function() {
        return $._createNode( tag, arguments );
    }
};

(function() {
    var tags = [
        'a', 'br', 'button', 'canvas', 'div', 'fieldset', 'form',
        'h1', 'h2', 'h3', 'hr', 'img', 'input', 'label', 'legend',
        'li', 'ol', 'optgroup', 'option', 'p', 'pre', 'select',
        'span', 'strong', 'table', 'tbody', 'td', 'textarea',
        'tfoot', 'th', 'thead', 'tr', 'tt', 'ul' ];
    for( var i = tags.length - 1;  i >= 0;  i-- ) {
        $.defineTag( tags[i] );
    }
})();

$.NBSP = '\u00a0';

$._createNode = function( tag, args ) {
    var fix = { 'class':'className', 'Class':'className' };
    var e;
    try {
        var attrs = args[0] || {};
        e = document.createElement( tag );
        for( var attr in attrs ) {
            var a = fix[attr] || attr;
            e[a] = attrs[attr];
        }
        for( var i = 1;  i < args.length;  i++ ) {
            var arg = args[i];
            if( arg == null ) continue;
            if( arg.constructor != Array ) append( arg );
            else for( var j = 0;  j < arg.length;  j++ )
                append( arg[j] );
        }
    }
    catch( ex ) {
        alert( 'Cannot create <' + tag + '> element:\n' +
            args.toSource() + '\n' + args );
        e = null;
    }

    function append( arg ) {
        if( arg == null ) return;
        var c = arg.constructor;
        switch( typeof arg ) {
            case 'number': arg = '' + arg;  // fall through
            case 'string': arg = document.createTextNode( arg );
        }
        e.appendChild( arg );
    }

    return e;
}; 


/*****************************************************
* Geometric classes
*****************************************************/
var Geometry = {
    Size:function(width,height){
        this.width=width;
        this.height=height;
        this.toString=function(){return this.width+"x"+this.height;}
    },

    Position:function(x,y){
        this.x=x;
        this.y=y;
        this.toString=function(){return this.x+"x"+this.y;}
    }
}

/******************************************************
* Geometric functions
******************************************************/

Object.extend(Element, {
    getPosition: function(element) {
        element=$(element);
        var left=element.offsetLeft,top=element.offsetTop;
        while (element.offsetParent.tagName != "BODY") {
            element = element.offsetParent;
            left += element.offsetLeft;
            top += element.offsetTop;
        }
        return new Geometry.Position(left,top);
    },
    setPosition:function(element,pos){
        element=$(element);
        element.style.left=pos.x;
        element.style.top=pos.y;
    },
    getSize:function(element){
        element=$(element);
        var width,height;
        if(element.style.display=="none"){
            var visibility=element.style.visibility;
            element.style.visibility="hidden";
            element.style.display="";
            width=element.offsetWidth;
            height=element.offsetHeight;
            element.style.display="none";
            element.style.visibility=visibility;
        }
        else{
            width=element.offsetWidth;
            height=element.offsetHeight;
        }
        return new Geometry.Size(width,height);
    },
    setSize:function(element,size){
        element=$(element);
        element.style.width=size.width;
        element.style.height=size.height;
    }
})



var System={
    getWindowSize:function(){
        if (window.innerWidth!=null && window.innerHeight!=null) {
            return new Geometry.Size(window.innerWidth,window.innerHeight);
        }else if (document.body.offsetWidth!=null && document.body.offsetHeight!=null) {
            return new Geometry.Size(document.body.offsetWidth,document.body.offsetHeight);
        }
    },
    getScreenSize:function(availableSpaceOnly){
        if(availableSpaceOnly)
            return new Geometry.Size(screen.availWidth,screen.availHeight);
        else
            return new Geometry.Size(screen.width,screen.height);
    },
    setWindowSize:function(size){
        if (parseInt(navigator.appVersion)>3) {
            if (navigator.appName=="Netscape") {
                top.outerWidth=size.width;
                top.outerHeight=size.height;
            }
            else top.resizeTo(size.width,size.height);
        }
    },
    setWindowPosition:function(pos){
        top.window.moveTo(pos.x,pos.y);
    },
    getWindowPosition:function(){
        if(document.all){ //IE
            return new Geometry.Position(window.screenLeft,window.screenTop);
        }
        else{
            return new Geometry.Position(window.screenX,window.screenY);
        }
    },
    centerElement:function(elemID){
    	var sizeScreen = this.getWindowSize();
    	var sizeElem = $(elemID).getDimensions();
    	var x = sizeScreen.width/2 - sizeElem.width/2;
    	var y = sizeScreen.height/2 - sizeElem.height/2;
    	//set the position of the element
    	var styles = {
    		top: y, 
    		left: x
    	}
    	$(elemID).setStyle(styles);
    }
}


