﻿
if (typeof Pagen == "undefined" || !Pagen) {
    var Pagen = {};
}
var popup;

var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;

FutureLab.addNamespace(Pagen,'Pagen.Web.UI');

Pagen.Web.UI.Popup = Class.create({
        
    initialize: function() {    

        this.overlayOpacity =  0.3;
        this.overlayDuration = 0.4;
        this.popIsActive = false;
        this.pageUri='';
        this.popTop = 0;
        this.scrollTopOffset = 0;
        this.keyboardAction = this.keyboardAction.bindAsEventListener(this);
        
        this.overlay = $('pop-overlay');
        this.popcontainer = $('pop-container');
        
        this.overlay.hide().observe('click', (function() { this.close(); }).bind(this));
        this.popcontainer.hide().observe('click', (function(event) { if (event.element().id == 'pop-container') this.close(); }).bind(this));
		
		this.resizeOverlay(); 
		
        var th = this;
        (function(){
            var ids = 
                'pop-overlay pop-container';   
            $w(ids).each(function(id){ th[id] = $(id); });
        }).defer();
        
        this.updateLinks();
        
    },
  
    displayRel: function(target) {        

        if (this.popIsActive) {
            // Handles clicks from a popup
            if (target.rel == 'poplink anchor') {
                var anchorID;
                var parts = target.href.split('#');
                anchorID = parts[parts.length-1];
                
                var pos = $(anchorID).cumulativeOffset();
                
                if (!IE6) {
                    window.scrollTo(pos[0], pos[1]);
                } else {
                    window.scrollTo(pos[0], pos[1]-120);
                }
                
               // $(anchorID).scrollTo();
                
                return false;
            } else {
                this.display(target.href);
            }
        
        } else {
            // Handles click from a non-popped page
            if (target.rel == 'poplink x' || target.rel == 'poplink anchor') {
                document.location.href = target.href;
            } else {
                this.display(target.href);
            }
        }
       
    },
    
    display: function(pageUri) {    

        //$$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'hidden' });
        $$('select').each(function(node){ node.style.visibility = 'hidden' });
        $$('object', 'embed').each(function(node){ node.style.display = 'none' });        
        $$('.flash_alternate').each(function(node) { node.style.display='block'});
        
        this.pageUri = pageUri;
        this.overlay = $('pop-overlay');
        this.popcontainer = $('pop-container');
        this.popcontainer.style.display='block';
        
        if (!this.popIsActive) {            
            this.scrollTopOffset = document.viewport.getScrollOffsets().top;
            this.popTop = this.scrollTopOffset + 75;
            this.popcontainer.style.top = this.popTop + 'px';
            
            $('body').addClassName('popped');
            
            this.resizeOverlay();        
            
            new Effect.Appear(this.overlay, { duration: this.overlayDuration, from: 0.0, to: this.overlayOpacity });
        }
        
        var succeeded = (function(content) {
			try	{
				pageTracker._trackPageview('/' + pageUri);
			}
			catch(e){}
        
            this.popcontainer.innerHTML=content;          
                        
            this.updateLinks();
            this.updateFileUploads();
            
            var overlayResize = (function() { this.resizeOverlay(); }).bind(this);
            setTimeout(overlayResize, 700);
                         
            if (this.popIsActive) {
                new Effect.PageScroll( null, { scrollTo: this.scrollTopOffset, duration: 0.5 } );  
            }           
                        
        }).bind(this);
            
        var failure = function(result) { alert('Poploader.getPopContent : Failure : ?'); }
        
        API.Web.UI.Client.Service.Poploader.GetPopContent(pageUri, succeeded, failure);

        this.enableKeyboardNav();        
       
        this.popIsActive = true;
    },
    
    updateLinks: function() {   
        var me = this;
        
        var clickHandler = function(e,item) {
            me.displayRel(item);
            return false;
        };
        
        $$('a[rel^=poplink]').each( function(item) {
            item.onclick = function(e) { 
                if (!e) { e = window.event; };
                if (e.ctrlKey) {
                    return true;
                }
                me.displayRel(this);
                return false; 
            }; 
        });       
        
    },

    updateFileUploads: function() {   
        var me = this;
        
    	Element.addMethods({
			setStatus: function(element, status) {     
				element = $(element); 
				var _div = element.select('#' + element.id + '_div');
				var _input = element.select('#' + element.id + '_input');
				var _progress = element.select('#' + element.id + '_progress');
				var _el;
				
				if(status == 'initialized') {
					_div[0].style.display = 'none';
					_input[0].style.display = '';
					_progress[0].style.display = 'none';
				};
				
				if(status == 'error') {
					_div[0].style.display = 'none';
					_input[0].style.display = '';
					_progress[0].style.display = 'none';
				};
				
				if(status == 'uploading') {
					if(element.getFilename().length > 0){
						_div[0].style.display = 'none';
						_input[0].style.display = 'none';
						_progress[0].style.display = '';
						
						_el = element.select('#' + element.id + '_input');
						
						for(i=0;i<window.frames.length;i++) {
							if(window.frames[i].name==_el[0].name) {
								window.frames[i].document.form1.submit();
								break;
							}
						}
					}
					else{
						//keep old status
						status = element._status
					}
				};

				if(status == 'done') {
					_div[0].style.display = 'none';
					_input[0].style.display = '';
					_progress[0].style.display = 'none';
				};
				    
				element._status = status;
			}, 
			getStatus: function(element) {     
				element = $(element);     
				return element._status
			}, 
			getFilename: function(element) {     
				element = $(element); 
				    
				var _el = element.select('#' + element.id + '_input');
				var _val;
				var i;
					
				for(i=0;i<window.frames.length;i++) {
					if(window.frames[i].name==_el[0].name) {_val =  window.frames[i].document.getElementById('fileUpload').value;break;}
				}
				
				return _val
			},
			getValue: function(element) {     
				element = $(element);     
				var _el = element.select('#' + element.id + '_div');
				return _el[0].innerHTML;
			},
			setValue: function(element,filename) {     
				element = $(element);    

				var _el = element.select('#' + element.id + '_div');
				_el[0].innerHTML = filename;

			} 
		}); 
        
		$$('input.filereplace').each( function(item){
			var el;
			$(item).replace('<div id="' + item.id +'"><iframe name="' + item.id +'_input" height="26" width="258" id="' + item.id +'_input" src="Controls/Fileupload/fileupload.aspx?id='+ item.id +'" frameborder="0" marginwidth="0" marginheight="0" style="display:block;" allowtransparency="true"></iframe><div id="' + item.id +'_progress" style="height:23px;display:none;"><img src="repository/css/img/uploadLoader.gif"/></div><div id="' + item.id +'_div" style="height:23px;display:none;"></div></div>')
			
			el = $(item.id);
			el.setStatus('initialized');
		});
    },

    resizeOverlay: function() {
        
        // stretch overlay to fill page and fade in
        var arrayPageSize = this.getPageSize();
        var contentHeight = this.popTop + this.popcontainer.getHeight() + 75;
        if (contentHeight < arrayPageSize[1]) {
            contentHeight = arrayPageSize[1];
        }
        
        try {
            $('pop-overlay').setStyle({ width: arrayPageSize[0] + 'px', height: contentHeight + 'px' });
            if($('pop-content-container-ie')) {
                var padding = parseInt($('content').getStyle('padding-top').replace('px',''));
                padding += parseInt($('content').getStyle('padding-bottom').replace('px',''));
                $('pop-content-container-ie').style.height = $('content').getHeight() + parseInt(padding) + 'px'; //+18
            }
        } catch(e) {
           //alert(e);
        }
    },

    enableKeyboardNav: function() {
        document.observe('keydown', this.keyboardAction); 
    },

    disableKeyboardNav: function() {
        document.stopObserving('keydown', this.keyboardAction); 
    },
    keyboardAction: function(event) {
        var keycode = event.keyCode;

        var escapeKey;
        if (event.DOM_VK_ESCAPE) {  // mozilla
            escapeKey = event.DOM_VK_ESCAPE;
        } else { // ie
            escapeKey = 27;
        }

        var key = String.fromCharCode(keycode).toLowerCase();
        
        if (keycode == escapeKey){ // close lightbox
            this.close();
        } 
    },

    close: function() {
        this.popIsActive = false;
        this.pageUri = '';
        this.disableKeyboardNav();
        this.popcontainer.hide();
        this.popcontainer.style.display='none';
        this.popcontainer.innerHTML='';
        new Effect.Fade(this.overlay, { duration: this.overlayDuration });
        
        //$$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'visible' });
        $$('select').each(function(node){ node.style.visibility = 'visible' });
        $$('object', 'embed').each(function(node){ node.style.display = '' });        
        $$('.flash_alternate').each(function(node) { node.style.display='none'});
               
        $('body').removeClassName('popped');
    },

    getPageSize: function() {
	        
	     var xScroll, yScroll;
		
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		
		var windowWidth, windowHeight;
		
		if (self.innerHeight) {	// all except Explorer
			if(document.documentElement.clientWidth){
				windowWidth = document.documentElement.clientWidth; 
			} else {
				windowWidth = self.innerWidth;
			}
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
	
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = xScroll;		
		} else {
			pageWidth = windowWidth;
		}
        return [pageWidth,pageHeight];
	},
	
	getPageScroll: function() {
	    var xScroll, yScroll;
	    
	    if (self.pageYOffset) {
		    yScroll = self.pageYOffset;
		    xScroll = self.pageXOffset;
	    } else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		    yScroll = document.documentElement.scrollTop;
		    xScroll = document.documentElement.scrollLeft;
	    } else if (document.body) {// all other Explorers
		    yScroll = document.body.scrollTop;
		    xScroll = document.body.scrollLeft;	
	    }
	    arrayPageScroll = new Array(xScroll,yScroll) 
	    return arrayPageScroll;
    }
});

Event.observe(window, 'load', function() {  
    popup = new Pagen.Web.UI.Popup();
}); 

/* 
    Helper Effect for scrolling the page
*/
 
Effect.PageScroll = Class.create();
Object.extend(Object.extend(Effect.PageScroll.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = element;
    var options = Object.extend({ scrollTo: 0 }, arguments[1] || {});
    var arrayPageScroll = getPageScroll();
    
    options.startPosition = arrayPageScroll[1];
    this.start(options);
  },
  setup: function() {
    // nop
  },
  update: function(position) {
    var offset = this.options.startPosition-this.options.scrollTo;
    var newScrollPos = this.options.startPosition-(offset*position);
    window.scrollTo(0,newScrollPos);
  },
  finish: function(){
    window.scrollTo(0,this.options.scrollTo);
  }
});

function getPageScroll() {
    var xScroll, yScroll;
    
    if (self.pageYOffset) {
	    yScroll = self.pageYOffset;
	    xScroll = self.pageXOffset;
    } else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
	    yScroll = document.documentElement.scrollTop;
	    xScroll = document.documentElement.scrollLeft;
    } else if (document.body) {// all other Explorers
	    yScroll = document.body.scrollTop;
	    xScroll = document.body.scrollLeft;	
    }
    arrayPageScroll = new Array(xScroll,yScroll) 
    return arrayPageScroll;

}