var shroud=null,
    getBody=function(){
        return document.body || document.getElementsByTagName('body')[0];
        
    }
//    addShroud=function(body){
//        if (body ){
//            shroud=document.createElement('div');
//            body.appendChild(shroud);
//            shroud.style.zIndex='3000';
//            //shroud.style.border='1px solid #fff';
//            $dom.floatElement(shroud,'absolute');
//            $dom.x(shroud,0);
//            $dom.y(shroud,0);
//            $dom.width(shroud,$dom.scrollWidth());
//            $dom.height(shroud,$dom.scrollHeight());
//
//            shroud.style.background='#000';
//            setOpacity(shroud,50);
//            var disableMouse=function(e){
//                e.cancelBubble=true;
//                //-- cancel event
//                try{
//                    e.preventDefault();
//                } catch(e){
//                    e.returnValue=false;
//                }
//                return false;
//            }.bindEventListener(this);
//
//            shroud.onmousedown=disableMouse;
//            shroud.onclick=disableMouse;
//            shroud.onmouseup=disableMouse;
//            shroud.ondblclick=disableMouse;
//            shroud.oncontextmenu=disableMouse;
//
//
//            var message=document.createElement('div');
//            shroud.appendChild(message);
//            message.innerHTML='loading....';
//            message.className='popup-message';
//            $dom.floatElement(message,'absolute');
//            $dom.screenCenterElement(message);
//
//        }
//    },
//    setOpacity=function(element,opacity){
//            //-- ie
//            if (typeof element.style.filter!='undefined'){
//                element.style.filter='alpha(opacity='+opacity+')';
//            //-- opera
//            } else if (typeof element.style.opacity!='undefined'){
//                element.style.opacity=opacity/100;
//            //-- firefox, netscape
//            } else if (typeof element.style.MozOpacity!='undefined'){
//                element.style.MozOpacity=opacity/100;
//            //-- safari
//            } else if (typeof element.style.KhtmlOpacity!='undefined'){
//                element.styleKhtmlOpacity=opacity/100;
//            }
//    },
//    initializeShroud=function(){
//        var body=getBody();
//        if (!body){
//            Object.alarm(1,initializeShroud);
//        } else {
//            if (!shroud){
//                addShroud(body);
//                //-- add onload
//                $dom.addOnloadEvent(
//                    function(){
//                        Object.alarm(500,
//                            function(){
//                                this.style.display='none';
//                            }.bindListener(this)
//                        );
//                    }.bindListener(shroud)
//                );
//            }
//        }
//    };

//initializeShroud();

//-- disable document click
/*
if (window.attachEvent){
    window.onmouseup=function(e){
        if (!window.loaded){
            e.cancelBubble=true;
            //-- cancel event
            try{
                e.preventDefault();
            } catch(e){
                e.returnValue=false;
            }
            return false;
        }
    }.bindEventListener(shroud)
  
}
  /**/



Class.create('Popuppage');

Class.Popuppage.declare(
    {
        element:{
            shroud:null,
            container:null,
            iframe:null,
            message:null
        },
        name:'popup',
        message:'loading....',
        opacity:70,
        scroll:true,
        hasMouseover:true,
/**
 *  ACCESSORS
 */
        setFromElements:function(element){
            if (!element || !element.getElementsByTagName){ return; }
            var childAnchors=element.getElementsByTagName('a'),
                all=(childAnchors.length && childAnchors) ||
                    ((element.tagName.toLowerCase()=='a') && [element]);
            //-- monitor clicks
            if (all && all.length){
                this.convertToArray(all).foreach(
                    function(i){
                        this.setEvents(i.value);
                    }.bindEventListener(this)
                );
            }
        },
        setEvents:function(element){
            if (element && element.href){
                
                var listener={
                        element:element,
                        href:element.href,
                        handle:this
                    }
                
                //-- change href
                //element.href='javascript:void(0)';
                
                //-- fetch and preload images
                var img=element.getElementsByTagName('img')[0],
                    parts=img && img.src.match(/^(.+)\.([^\.]+)$/),
                    url=parts && parts[1],
                    ext=parts && parts[2],
                    alt=new Image();;
                    
                document.preloadedImages=document.preloadedImages || [];
                    
                if (url && ext){
                    listener.originalImage=img.src;
                    listener.alternateImage=url + '-hover.'+ext;
                    alt.src=img.alternateImage;
                    document.preloadedImages[document.preloadedImages.length]=alt;
                    
                    
                }
                //-- for items with mouse over
                element.onmouseover=function(e){
                    if (this.handle.hasMouseover){
                        var img=this.element.getElementsByTagName('img')[0];
                        if (this.alternateImage &&
                            (img.src!=this.alternateImage)
                        ){
                            img.src=this.alternateImage;
                        }
                    }
                    e.cancelBubble=true;
                    return false;
                }.bindEventListener(listener);
                
                element.onmouseout=function(e){
                    if (this.handle.hasMouseover){
                        var img=this.element.getElementsByTagName('img')[0];
                        if (this.originalImage && 
                            (img.src!=this.originalImage)
                        ){
                            img.src=this.originalImage;
                        }
                    }
                    e.cancelBubble=true;
                    return false;
                }.bindEventListener(listener);
                
                //-- show page
                element.onclick=function(e){
                    e.cancelBubble=true;
                    this.handle.show(this.href);
                    return false;
                    
                }.bindEventListener(listener);
                
            }
        },
        getIframeDocument:function(){
            var element=this.element.iframe,
                name=element && element.name;
                
               
            if (name){
                try{
                    if (element.contentDocument){
                        return element.contentDocument;
                    } else if (element.Document){
                        return element.Document;
                    }
                }catch(e){}
				return false;
            }
        },
/**
 *  CONTROLS
 */
        hide:function(){
            if (this.element.shroud){
                $dom.hide(this.element.shroud);
            }
            if (this.element.container &&
                this.element.iframe
            ){
                $dom.x(this.element.container,0);
                $dom.y(this.element.container,0);
                
                
                this.element.container.style.width='0px';
                this.element.container.style.height='0px';
                this.element.container.style.visibility='hidden';
                
                
                //this.element.iframe.height=0;
                this.element.iframe.style.visibility='hidden';
                
                //-- reset iframe
                this.element.iframe.src=this.modulePath()+'_blank.html';
                
                this.element.message.innerHTML='';
                $dom.hide(this.element.message);
            }
        },
        show:function(href){
            var element=this.element.shroud,
                container=this.element.container,
                iframe=this.element.iframe,
                eStyle=element && element.style;
                
            if (element && container && iframe){
                //-- initialize shroud
                $dom.show(element);
                
                $dom.x(element,0);
                $dom.y(element,0);

                $dom.width(element,
                    $dom.scrollWidth()
                );
                
                $dom.height(element,
                    $dom.scrollHeight()
                );
                
                
                if (eStyle){
                    //-- ie
                    if (typeof eStyle.filter!='undefined'){
                        eStyle.filter='alpha(opacity='+this.opacity+')';
                        
                    //-- opera
                    } else if (typeof eStyle.opacity!='undefined'){
                        eStyle.opacity=this.opacity/100;
                    
                    //-- firefox, ne
                    } else if (typeof eStyle.MozOpacity!='undefined'){
                        eStyle.MozOpacity=this.opacity/100;
                        
                    } else if (typeof eStyle.KhtmlOpacity!='undefined'){
                        eStyle.KhtmlOpacity=this.opacity/100;
                    }
                }
                
                //-- initialize popup
                container.style.width='';
                container.style.height='';
                container.style.visibility='visible';
                
                
                
                var domContainer=document.getElementById('body');
                if (domContainer){
                    $dom.width(container,
                        $dom.width(domContainer)
                    );
                    
                }
                
                
                $dom.screenCenterElement(container);
                
                
                //-- output page
                $dom.removeChildNodes(this.element.message);
                this.element.message.innerHTML=this.message;
                $dom.show(this.element.message);
                $dom.screenCenterElement(this.element.message);
                
                //-- initialize iframe
                this.loadIframePage(href);
                
            }
        },
        loadIframePage:function(href){
            
            if (this.element.iframe){
                //-- ie monitor iframe
                if ($browser.isIE){
                    var listener={
                            handle:this,
                            doc:this.getIframeDocument()
                        },
                        IeMonitor=function(){
                            var doc=this.handle.getIframeDocument();

                            if (doc &&
                                (this.doc!=doc) &&
                                (doc.readyState=='complete')
                            ){
                                this.handle.onloadIframe();
                                
                            } else {
                                this.handle.alarm(0,IeMonitor);
                                
                            }
                        }.bindEventListener(listener);
                    
                    this.element.iframe.src=href;
                    IeMonitor();
                //-- gecko
                } else {
                    this.element.iframe.src=href;
                    if (!this.element.iframe.handled){
                        this.element.iframe.handled=true;
                        this.element.iframe.onload=this.onloadIframe.bindEventListener(this);
                    }
                }
            }
        },
        onloadIframe:function(){
            if (this.element.iframe){
                $dom.hide(this.element.message);
                
                
                
                this.element.iframe.style.visibility='visible';
                
                //$dom.width(this.element.container);
                this.element.iframe.width='100%';
                this.element.iframe.height='100%';
                    if ($browser.isIE){
                        this.element.iframe.style.styleFloat='left';
                        this.element.container.style.overflowX='hidden';
                        var doc=this.getIframeDocument(),
                            overflow=$dom.getElementStyle(this.element.container,'overflow');
                        this.element.iframe.height=$dom.scrollHeight(doc);
                        //-- adjust width from scrollbar
                        if (!overflow || !overflow.match(/visible|hidden/)){
                            if ($dom.height(this.element.container) < $dom.height(this.element.iframe)){
                                this.element.iframe.width=$dom.width(this.element.iframe)-14;
                            }
                            
                        }
                        

                    } else {
                        this.element.iframe.height='100%';
                    }
                
                
                //-- add close event to iframe
                var doc=this.getIframeDocument(),
                    body=doc && doc.getElementsByTagName('body')[0],
                    closeElement=body && $element('a#close',body);
                if (closeElement && closeElement.length){
                    this.convertToArray(closeElement).foreach(
                        function(i){
                            i.value.onclick=function(){
                                this.hide();
                                return false;
                            }.bindEventListener(this);
                            
                        }.bindEventListener(this)
                    );
                    //alert(closeElement[0].name);
                }
            }
        },
/**
 *  INITIALIZATION
 */
        initializeElements:function(){
            if (this.element){
                this.element.shroud.onclick=function(e){
                    e.cancelBubble=true;
                    this.hide();
                    return false;
                }.bindEventListener(this);
                this.element.iframe.onclick=function(){
                    return false;
                }.bindEventListener(this);
            }
        },
        initialize:function(){
            if (Class._allpopups){
                Class._allpopups++;
            } else {
                Class._allpopups=1;
            }
            
            
            
            
            var shroud=document.createElement('div'),
                container=document.createElement('div'),
                message=document.createElement('div'),
                iframe=document.createElement('iframe'),
                body=document.body || document.getElementsByTagName('body')[0];
                
            if (body){
                shroud.className='shroud';
                shroud.style.position='absolute';
                container.className='popup';
                container.style.position='absolute';
                message.className='popup-message';
                message.style.position='absolute';

                body.appendChild(shroud);
                body.appendChild(container);
                
                
                
                
                iframe.name=this.name+Class._allpopups;
                iframe.id=iframe.name;
                iframe.src=this.modulePath()+'_blank.html';
                
                
                if ($browser.isIE){
                    iframe.scrolling='no';
                } else {
                    iframe.style.overflow='auto';
                    
                }

                //-- adjust iframe
                container.appendChild(iframe);
                body.appendChild(message);
                
                
                

                iframe.frameBorder=0;
                
                $dom.floatElement(shroud);
                $dom.floatElement(container);
                $dom.floatElement(message);
                
                this.element.shroud=shroud;
                this.element.container=container;
                this.element.iframe=iframe;
                this.element.message=message;
                

                this.initializeElements();
                this.hide();
                
                
            }            
        }
    }
);

$dom.addOnloadEvent(
    function(){
        var contents=document.getElementById('body-contents'),
            listTables=contents && $element('table.list',contents);
            
        if (listTables &&
            listTables.length
        ){
            var popuppage=new Class.Popuppage();
            
            listTables.foreach(
                function(i){
                    this.setFromElements(i.value);
                }.bindEventListener(popuppage)
            );
        }
    }
);