Novusoft.registerNamespace("Novusoft.UI");

/* Novusoft.MaintainScroll 
	requires: Novusoft, Novusoft.Utils, jQuery

	Maintains the scroll position for divs with an 'id'. The argument 'el' defines the id of the element
	that holds the data (hidden field).

	Usage: new Novusoft.UI.MaintainScroll('#scrollpos');
*/
Novusoft.UI.MaintainScroll = Novusoft.Type({
    constructor: function(el) {
	    this.storage = el;
	    this._setup();    
    },
    
	_setup: function() {
		var that = this;	
		$(window).load(function() {
			that._restoreScrollPositions();

			$('form').submit(function() {
				that._saveScrollPosition();
			});
		});	
	},

	_saveScrollPosition: function(storage) {
		var divs = $('div');	

		var scrollpos = [];			
		divs.each(function(i, el) {
			if($(el).attr('id') && ($(el).scrollTop() != 0 || $(el).scrollLeft() != 0)) {
				scrollpos.push({id: $(el).attr('id'), scrollTop: $(el).scrollTop(), scrollLeft: $(el).scrollLeft()});
			}		
		});	
		
		if (typeof scrollpos === 'undefined') return;

		$(this.storage).attr('value', escape(JSON.stringify(scrollpos)));
	},

	_restoreScrollPositions: function() {
		if ($(this.storage).length != 0 && $(this.storage).attr('value') != '' ) {		
			var scrollpos = $(this.storage).attr('value');
			if(typeof scrollpos == 'string') {
				var scrollposc = JSON.parse(unescape(scrollpos));
			}
			
			if(scrollposc) {
			    $(scrollposc).each(function(i, o) {
			        var el = $('#' + o.id);
			        if (el.size() == 1) {
				        el.scrollTop(o.scrollTop).scrollLeft(o.scrollLeft);		
				    }
			    });		
			}
		}
	}
});

//new Novusoft.UI.MaintainScroll('#scrollpos');

Novusoft.UI.PopoutContent = Novusoft.Type({
	constructor: function(el) {
		this.popup = $(el);
		this._setup();
		this.clickees = [];	
	},
	
	_setup: function() {
		this.par = $('body');					
		this.popup.css({'position': 'absolute'});		
		this.popup.prependTo(this.par);
		this._installRemoveEvent();
	},

	show: function(el) {	
		var offset = el.offset();
		this.popup.css({'display': 'block',
			'left': offset.left + $(el).outerWidth() + 3 + 'px', 
			'top': offset.top + $(el).outerHeight() + 3 + 'px',
			'z-index': 32000
		});
	},

	hide: function() {
		this.popup.css('display', 'none');
	},

	toggle: function(el) {
		this.visible() ? this.hide() : this.show(el);
	},

	visible: function() {
		return this.popup.css('display') != "none";
	},

	setClickee: function(el) {
		if($(el).count > 0) return;

		var that = this;
		$(el).click(function() {
			that.toggle($(el));		
		});
		
		this.clickees.push($(el).get()[0]);
	},

	_installRemoveEvent: function() {
		var that = this;
		this.par.click(function(e) {
			if (that.visible()) {
				var targ = (e.target) ? $(e.target) : $(e.srcElement);
   
   				while($(targ).length > 0) {
					if($(targ).get()[0] == $(that.popup).get()[0] || $.inArray($(targ).get()[0], that.clickees) > -1 ) {						
						return;
					}					
					targ = $(targ).parent()
				}					
				that.hide();
			}
		});
	}
});


Novusoft.UI.PopoutContent.install = function(idel, idclickee) {
    $(window).ready(function() {
	    var POC = new Novusoft.UI.PopoutContent(idel);
	    POC.setClickee(idclickee);
    });
};

/*
$(window).ready(function() {
	var POC = new Novusoft.UI.PopoutContent("#menu");
	POC.setClickee("#clickee");
});
*/


Novusoft.registerNamespace("Novusoft.UI.GraphicRadioButtonList");

/* function */
Novusoft.UI.GraphicRadioButtonList.Select = function(el, SelectedCSSClass, StandardCssClass) {
	$('input', $(el)).attr('checked', true);

	$('div', $(el).parent()).each(function(i, e) {
		$(e).removeClass(SelectedCSSClass).addClass(StandardCssClass);
	});

	$(el).removeClass(StandardCssClass).addClass(SelectedCSSClass);
};

//Novusoft.UI.GraphicRadioButtonList.select();

Novusoft.registerNamespace("Novusoft.UI.GridView");

Novusoft.UI.GridView.passClick = function(el,before,after) {
	$.each(before, function(i, cb) {
		document.getElementById(cb).checked = true;
	});

	$.each(after, function(i, cb) {
		document.getElementById(cb).checked = false;
	});
};

//Novusoft.UI.GridView.passClick();



Novusoft.UI.CollapsibleEditorZone = Novusoft.Type({
    SCROLLBAR_SIZE_INCREMENT: 17,
    DEFAULT_WIDTH: 300,

    constructor: function() {        
        this._setup(); 
        this.maxWidth = this.DEFAULT_WIDTH;
          
    }, 
    
    _setup: function() {
        var that = this;
        $(window).ready(function() {
            //$('#EditorZone').css('visibility', 'hidden');
            that._scaleEditor();
            that._scaleContent();
            that._addEditSliders();
            //$('#EditorZone').hide();
            //$('#EditorZone').show(500);
            //$('#EditorZone').css('visibility', 'visible');    
        }); 
        
        $(window).resize(function() {
            that._scaleContent();
        });
    },
    
    _scaleEditor: function() {
        var maxWidth = $('#EditorZone').outerWidth(); //should be scrollWidth
        var confirmationEl = $('div.Confirmation', $('#EditorZone')); //should be scrollWidth
        maxWidth = Math.max(confirmationEl.outerWidth(), maxWidth);
        
        confirmationEl.css('width', '100%');
        var that = this;
        $('div.Body .Page', $('#EditorZone')).each(function(index, el) {
            //var pageDiv = $('div', $(el));
            var pageDiv = $(el).children('div');
            pageDiv.css('visibility', 'visible').css('display', 'block');
            
            maxWidth = Math.max($(el).outerWidth(), maxWidth); //should be scrollWidth
            var pr = $(el).css('paddingRight');
            $(el).css('paddingRight', parseInt(pr,10)+that.SCROLLBAR_SIZE_INCREMENT);
            $(el).css('float', 'none');             
        });
        
        this.maxWidth = maxWidth+this.SCROLLBAR_SIZE_INCREMENT+28;
    },
    
    _scaleContent: function() {
	    $('#EditorZone div.Body').css('height', $('#ContentContainer').height() - ( $('#EditorZone div.Confirmation').height() + $('#EditorZone div.Title').height()) );	    
	    $('#EditorZone').animate({'width': this.maxWidth}, 0);
	    $('#ContentContainer').animate({'width': $('body').width() - this.maxWidth}, 0);
	    
    },
    
    _addEditSliders: function() {
        var that = this;
        var expandedPages = $('#EditorZoneExpandedPages').val().split(',');
        $('div.Body .Page', $('#EditorZone')).each(function(i, el) {         
            
		    //var header = $('h2', el);
		    //var page = $('div', el);
		    var header = $(el).children('h2');
		    var page = $(el).children('div');
		    
		    header.bind('mousedown', function() { return false });
		    
		    if ($.inArray(i + '', expandedPages) > -1) {
		        page.css('height', page.outerHeight()); 	
		        page.show();
		        header.addClass('expanded');
		        //page.css('overflow', 'hidden'); 
		    } else {
			    //header.page.css('height', 0);
			    page.css('height', page.outerHeight()); 
			    page.hide();
			    header.addClass('collapsed');
			    //page.css('height', page.outerHeight()); 
			    //page.css('overflow', 'hidden');	      
		    }	    
		    
		    header.click(function(e) {
		        //console.log($.data(header.page, 'collapsed'));
		        if (header.hasClass('collapsed')) {		            
				    header.addClass('expanded');
				    header.removeClass('collapsed');
				    page.show(500);		            
		        } else {
		            page.hide(500);
				    header.addClass('collapsed');
				    header.removeClass('expanded');			        
		        }
		        that._setExpandedPages();  
		    });	    
        });   
    },
    
    _setExpandedPages: function() {
        var expandedPages = $('#EditorZoneExpandedPages');
        expandedPages.val('');
        
        $('div.Body .Page', $('#EditorZone')).each(function(i, el) {
            if (!($('h2', el).hasClass('collapsed'))) {
                expandedPages.val( expandedPages.val() + (i + ',') );
            }    
        });
    }
});

Novusoft.registerNamespace("Novusoft.UI.NovuWindow");

Novusoft.UI.NovuWindow.OpenWindow = function(vsUrl, vsName, viWidth, viHeight, roWindowManager) {
    var oManager = roWindowManager ? roWindowManager : Novusoft.UI.NovuWindow.GetRadWindowManager();    

    var oWindow = oManager.open(vsUrl, vsName);  
    
    oWindow.set_width(viWidth);
    oWindow.set_height(viHeight);
    
    oWindow.set_behaviors(
        Telerik.Web.UI.WindowBehaviors.Move +
        Telerik.Web.UI.WindowBehaviors.Close + 
        Telerik.Web.UI.WindowBehaviors.Resize +
        Telerik.Web.UI.WindowBehaviors.Maximize);
    oWindow.set_modal(true);
    return oWindow;
}

Novusoft.UI.NovuWindow.OpenDialog = function(vsUrl, vsName, viWidth, viHeight, roWindowManager) {    
    var oWindow = Novusoft.UI.NovuWindow.OpenWindow(vsUrl, vsName, viWidth, viHeight, roWindowManager);
    oWindow.set_behaviors(
        Telerik.Web.UI.WindowBehaviors.Move +
        Telerik.Web.UI.WindowBehaviors.Close);
    return oWindow;
}

Novusoft.UI.NovuWindow.OpenAlert = function(vsTitle, vsMessage, vsDescription) {
    Novusoft.UI.NovuWindow.GetBrowserWindow().radalert("<p><strong>" + vsMessage + "</strong></p><p>" + vsDescription + "</p>", 600, null, vsTitle);
}


Novusoft.UI.NovuWindow.GetRadWindow = function() {
    var oWindow = null;
    try
    {
        if (window.radWindow)
            oWindow = window.radWindow;
        else if (window.frameElement.radWindow)
            oWindow = window.frameElement.radWindow;
    }
    catch(oException)
    {
    }
    return oWindow;
} 

Novusoft.UI.NovuWindow.GetRadWindowManager = function() {
    var oWindow = Novusoft.UI.NovuWindow.GetRadWindow();   
    if(oWindow == null)
    {
        return Telerik.Web.UI.WindowManager.Manager;
    }
    else
    {
        return oWindow.get_windowManager();
    }
    return null;
}
        
Novusoft.UI.NovuWindow.GetBrowserWindow = function() {
    var oWindow = Novusoft.UI.NovuWindow.GetRadWindow();
    if(oWindow == null)
    {
        return window;
    }
    else
    {
        return oWindow.BrowserWindow;
    }
}