/*
Script: SipgateModal.class.js
	Modal view like lightboxes
*/

/*
Class: SipgateModal
	Display a modal lightbox on the screen

Options:
	width - Breite 524 ist optimal; default is 524
	theme - 'lightbox' or 'yellow'; default is lightbox
	moveable - true,
	icon - 'warning' or 'info'; default is 'warning'
	allowClose - show close box; default is false
	fillScreen - fit height to window height; default is false
	uploadTypes - types for modalUploader
	textHeigt - Height of the textArea ; default is 200
	
Author:
	Stefan Lange-Hegermann (lange-hegermann@sipgate.de)
*/
var SipgateModal = new Class({
	options: {
		width: 548,
		theme: 'newbox',
		moveable: true,
		icon:'',
		allowClose:false,
		backgroundClose:true,
		fillScreen:false,
		uploadTypes:['.laz'],
		onOpened:Class.empty,
		onClose:Class.empty,
		textHeight:200,
		autoSize:null,
		internalScroll : false
	},

	initialize: function initialize(options) {
		this.setOptions(options);

		if (!this.bgHider) {
			this.bgHider= new Element('div').addClass('sg_background_hider');
			
			// bgShim looks useless, but it circumvents a bug in IE, that lets
			// elements like popups "shine through" the div
			if (window.ie6) {
				this.bgShim = new Element('iframe');
				this.bgShim.setStyle('border','none');
				this.bgShim.setAttribute('src','javascript:""');
				this.bgShim.setStyle('filter','progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)');
			} else {
				this.bgShim=null;
			}
		}
		
		this.bgHider.setStyles({
			position:'absolute',
			overflow:'hidden',
			opacity:0.5,
			zIndex:1000
		});
		
		if (this.bgShim) this.bgShim.setStyles({
			position:'absolute',
			zIndex:900
		});
		if (!this.contentWindow) {
			this.contentWindow=new Element('div').addClass('sg_modal_window transpng sg_modal_window_'+this.options.theme+(this.options.allowClose ? '_closer':''));
			
			this.windowTop=new Element('div').addClass('sg_modal_windowtop transpng sg_modal_windowtop_'+this.options.theme);
			this.contentWindow.adopt(this.windowTop);
			
			this.middleRight=new Element('div').addClass('sg_modal_middleright transpng sg_modal_middleright_'+this.options.theme);
			this.contentWindow.adopt(this.middleRight);
			
			this.contentMiddle=new Element('div').addClass('sg_modal_content transpng sg_modal_content_'+this.options.theme).injectInside(this.middleRight);
			//this.contentMiddle.setStyle('backgroundImage', "url('"+getImagePath("lightbox/"+this.options.theme+"/lightbox_top_close.png")+"')");
			
			this.bottomRight=new Element('div').addClass('sg_modal_bottomright transpng sg_modal_bottomright_'+this.options.theme);
			this.contentWindow.adopt(this.bottomRight);
			
			this.contentBottom=new Element('div').addClass('sg_modal_bottom transpng sg_modal_bottom_'+this.options.theme).injectInside(this.bottomRight);
		}

		if (this.options.moveable) this.contentWindow.makeDraggable({container:this.bgHider});
		
		if (!this.options.autoSize) {
			this.contentWindow.setStyles({
				top:window.getScrollTop()+80,
				left:(window.getWidth()/2)-(this.options.width/2),
				width:this.options.width,
				position:'absolute',
				zIndex:1001
			});
		} else {
			this.autoSize();
			this.resizeEvent=this.autoSize.bind(this);
			window.addEvent('resize', this.resizeEvent);
		}

		this.visible=false;

		return this;
	},
	
	
	autoSize: function() {
		var winWidth=window.getWidth();
		var targetWidth=winWidth-this.options.autoSize*2;
		
		this.contentWindow.setStyles({
			top:window.getScrollTop()+80,
			left:(window.getWidth()/2)-(targetWidth/2),
			width:targetWidth,
			position:'absolute',
			overflow:'hidden',
			zIndex:1001
		});
	},
	
	/*
	Property: showUploader
		shows an uploader window

	Arguments:
		title - the window title
		description - the description to show inside the window
		callback - the callback function to which the filenames are passed

	Example:
		>var box=new SipgateModal().showAjax('http://www.heise.de');
	*/
	showUploader: function(title, description, callback) {
		if (!$('template_file_uploader')) alert ('showUploader benötigt ein view template');
		var uploader = $('template_file_uploader').clone(true).removeClass('view_template');
		uploader.getElement('h1').setText(title);
		uploader.getElement('p.content_area').setText(description);
		uploader.getElement('.done_button').setStyle('opacity',0.5);
		
		var myUploader=new UploaderFactory({
			'trigger':uploader.getElement('.browse_button'),
			'fileList':uploader.getElement('.file_list'),
			'fileTypes':this.options.uploadTypes,
			
				'onAllComplete':function() {
					uploader.getElement('.transfer_headline').setText(lang.get('JS_TRANSFER_DONE')+':');
					uploader.getElement('.done_button').removeEvents('click');
					uploader.getElement('.done_button').addEvent('click', function(evnt) {
						evnt.preventDefault();
						var tmplist=[];
						
						if (typeof callback=="function") callback(myUploader.fileList);
						this.close();
					}.bindWithEvent(this)).setStyle('opacity',1);
				}.bind(this),
				
				'onAllRemoved':function() {
					uploader.getElement('.transfer_headline').setText('');
					uploader.getElement('.done_button').setStyle('opacity',0.5);
					uploader.getElement('.done_button').removeEvents('click');
					uploader.getElement('.done_button').addEvent('click', function(evnt) {
							evnt.stop();
					}.bindWithEvent(this));
				}.bind(this),
				
				'onFileStart':function() {
					uploader.getElement('.transfer_headline').setText(lang.get('JS_TRANSFER_RUNNING')+':');
					uploader.getElement('.done_button').removeEvents('click').setStyle('opacity',0.5);
				}.bind(this)
			
		});
		
		this.showBox(uploader);
		
		uploader.getElement('.cancel_button').addEvent('click', function(evnt) {
			evnt.preventDefault();
			this.close();
		}.bindWithEvent(this));
	},
	
	/*
	Property: showAjax
		Shows the contents of an URL in the Lightbox.

	Arguments:
		url - the URL to load

	Example:
		>var box=new SipgateModal().showAjax('http://www.heise.de');
	*/
	showAjax: function(title, url, params) {
		if (typeof params==='undefined') params='';
		var contentRequest=new Ajax(url, {
			data: params,
			onComplete: function(result) {
				this.show(title, result);
				this.fireEvent('onComplete');
			}.bind(this)
		}).request();

	},
	
	showInput: function(title, message, buttons, defval, callback) {
		var wrap=new Element('div');
		var inp=new Element('input',{
			'type':'text',
			'value':$pick(defval,""),
			'class':'inputborder sg_modal_input'
		});
		var text=new Element('div',{'class':'sg_modal_inputdescription'}).setText(message);
		
		wrap.adopt(text).adopt(inp);
		this.showDialog(title, wrap, buttons, function(res) {
			if (res==0 & $type(callback)==='function') {
				callback(inp.value);
			}
		});
		
		inp.addEvent('keypress', function(e) {
			if (e.key=="enter") {
				this.close();
				callback(inp.value);
			} else if (e.key=="esc") {
				this.close();
			}
		}.bindWithEvent(this));
		(function(){inp.select()}).delay(400);
	},
	
	/*
	Property: showFAQBox
		Shows the FAQ-contents by Tag in the Lightbox.

	Arguments:
		tags - FAQ-Tags
		title - Title for lightbox

	Example:
		>var box=new SipgateModal({moveable:false, allowClose:true, theme:'lightbox',textHeight:500 ,icon:''}).showFAQBox('21_1','FAQ');
	*/	
	
	showFAQBox: function(tags, title) {

		var contentRequest=new Ajax('/ajax/faq/faqbytag/tag/'+tags, {
			onComplete: function(result) {
				this.show(title, ' ',[lang.get('JS_HELP_CLOSE'),lang.get('JS_FAQ_NO_ANSWER')],function(res){
					if (res==1) document.location.href = ZendFramework.loggedout+'faq/';
				});				
				
				var contentArea = this.contentMiddle.firstChild.childNodes[1];	
				contentArea.setStyles({'height':'400px', 'overflow-y':'auto'});
				data = Json.evaluate(result);
				
				new Element('p').setHTML(lang.get('JS_FAQ_CATEGORIES_TITLE')).injectTop(contentArea);

				if (data.categories.length != 0) {
					//Categories
					var categoryUL = new Element('ul').addClass('faq_list').addClass('faq_listBox_categories').injectTop(contentArea);
					data.categories.each(function(trgt){
						var tmpLi = new Element('li').injectTop(categoryUL);
						new Element('a', { href : '/faq/show/category/id/'+(trgt.parent_id)+'_'+(trgt.category_id)+'' }).inject(tmpLi).setHTML(trgt.categoryname);
					});
				}
				
				//Articles
				var articleUL = new Element('ul').addClass('faq_list').addClass('faq_listBox_articles').injectTop(contentArea);
				data.articles.each(function(trgt){
					var tmpLi = new Element('li',{id:trgt.article_id}).addClass('faq_listBox_articles').injectTop(articleUL);
					var tmpa = new Element('a').setHTML(trgt.title).injectTop(tmpLi);
					tmpa.addEvent('click', function(evnt,target) {
						
						if ( target.nextSibling.hasClass('view_template')) {
							
							
							target.nextSibling.removeClass("view_template");
							target.addClass('active');
						} else {
							target.nextSibling.addClass("view_template");
							target.removeClass('active');
						}	
					}.bindWithEvent(tmpa,tmpa));
					
					var pclass = '';
					if(data.articles.length > 1) pclass = 'view_template'
					new Element('p').addClass(pclass).inject(tmpLi).setHTML(trgt.content.content).setStyle('margin-top','10px');
				});
				if(articleUL.lastChild) articleUL.lastChild.setStyle('border-bottom','1px solid #dddddd');
				
				if (data.articles.length > 0) 
					new Element('p').setHTML(lang.get('JS_FAQ_ARTICLES_TITLE')).injectTop(contentArea);
				
				if ( data.categories.length <= 0 && data.articles.length <= 0) {

					new Element('h4').setHTML(lang.get('JS_FAQ_NOTAG_TITLE')).injectTop(contentArea);
					if(ZendFramework.domain=='sipgate.com') {
							contentArea.setStyles({'height':'240px'});
							(this.contentMiddle.getElement('.sg_modal_buttons').lastChild.remove());
							contentArea.setHTML(null);

							var sendbutton = new Element('a',{href:"#"}).addClass('fresh_button').injectTop(contentArea);
							var spantext = new Element('span').setHTML('send question').injectTop(sendbutton);
							var textarea = new Element('textarea',{name:'question', rows:10, cols:62}).addClass('inputborder').setStyles({'margin':'15px 0px'}).injectTop(contentArea);
							new Element('div').setHTML(lang.get('JS_FAQ_PLEASE_INSERT_QUESTION')).injectTop(contentArea);

							sendbutton.addEvent('click', function(evnt){
								var evnt=new Event(evnt); evnt.stop();

								if(textarea.getValue()!="") {
										var url = "/ajax/faq/newquestion/";
											new Ajax(url,
											{
												method: 'post',
												sgjson:true,
												data: { text : textarea.getValue() },
												timeout: 6000,
												sgjson: true,
												onComplete: function(data) {
													contentArea.setHTML(lang.get('JS_FAQ_QUESTION_SAVED'));
												}.bind(this)
											}).request();
								}
								else  sgUserError(lang.get('JS_FAQ_WARN_INSERT'), lang.get('JS_ERROR_MESSAGE_HEADER')) ;
							}.bindWithEvent());
					}
				}
			}.bind(this)

		}).request();

	},	
	
	/*
	Property: showLightbox
		Shows an image slideshow Lightbox

	Arguments:
		images - image urls as array
		headline - Headline for the lightbox
		description - description for the lightbox
		page - start page
	*/
	showLightbox: function(images, headline, description, page, event) {
		if (typeof page==='undefined') page=0;
		var lbContainer= new Element('div');

		var naviBar=new Element('div').addClass('sg_modal_navi_bar');

		/*makeFreshJS('Fax drehen', function(){}).injectInside(naviBar);*/
		
		var linkContainer=new Element('div').addClass('sg_modal_link_container');

		if (page>0) {
			// first page
			var pageLink=new Element('a');
			new Asset.image(getImagePath('default/table_left.gif')).injectInside(pageLink);
			pageLink.setStyles({'cursor':'pointer', 'textDecoration':'underline'});
			pageLink.injectInside(linkContainer);

			pageLink.addEvent('click', function(page) {
				this.showLightbox(images, headline, description, 0);
			}.pass(page,this));
			linkContainer.appendText(" ");

			// previous page
			pageLink=new Element('a');
			new Asset.image(getImagePath('default/table_prev.gif')).injectInside(pageLink);
			pageLink.setStyles({'cursor':'pointer', 'textDecoration':'underline'});
			pageLink.injectInside(linkContainer);

			pageLink.addEvent('click', function(page) {
				this.showLightbox(images, headline, description, page-1);
			}.pass(page,this));
			linkContainer.appendText(" ");
		}

		linkContainer.appendText("Seite ");

		// direct pagelinks
		for (a=0; a<images.length; a++) {
			var pageLink=new Element('a').setText(a+1);
			if (a==page) pageLink.addClass('open_page');

			pageLink.setStyles({'cursor':'pointer', 'textDecoration':'underline'});
			pageLink.injectInside(linkContainer);

			pageLink.addEvent('click', function(page) {
				this.showLightbox(images, headline, description, page);
			}.pass(a,this));
			linkContainer.appendText(" ");
		}

		if (page<images.length-1) {
			// next page
			pageLink=new Element('a');
			new Asset.image(getImagePath('default/table_next.gif')).injectInside(pageLink);
			pageLink.setStyles({'cursor':'pointer', 'textDecoration':'underline'});
			pageLink.injectInside(linkContainer);

			pageLink.addEvent('click', function(page) {
				this.showLightbox(images, headline, description, page+1);
			}.pass(page,this));
			linkContainer.appendText(" ");

			// last page
			pageLink=new Element('a');
			new Asset.image(getImagePath('default/table_right.gif')).injectInside(pageLink);
			pageLink.setStyles({'cursor':'pointer', 'textDecoration':'underline'});
			pageLink.injectInside(linkContainer);

			pageLink.addEvent('click', function(page) {
				this.showLightbox(images, headline, description, images.length-1);
			}.pass(page,this));
			linkContainer.appendText(" ");
		}

		linkContainer.injectInside(naviBar);
		var faxScroller=new Element('div').addClass('sg_modal_fax_scroller');
		/*var faxHeadline=new Element('div').addClass('sg_modal_fax_headline');

		faxHeadline.setText(headline);

		faxHeadline.injectInside(lbContainer);*/
		/*
		if (page<images.length-1) {
			var rightArrow=new Element('div').setText('->').setStyle('float', 'right');
			rightArrow.addEvent('mousedown', function() {
				this.showLightbox(images, headlines, descriptions, page+1);
			}.bind(this));
			rightArrow.injectInside(lbContainer);
		}

		if (page>0) {
			var leftArrow=new Element('div').setText('<-').setStyle('float', 'left');
			leftArrow.addEvent('mousedown', function() {
				this.showLightbox(images, headlines, descriptions, page-1);
			}.bind(this));
			leftArrow.injectInside(lbContainer);
		}
		*/
		faxScroller.injectInside(lbContainer);

		
		
		lbContainer.setStyle('textAlign', 'center');
		var pause=new Asset.image(getImagePath('spinner/loading_trans_40.gif'));
		
		pause.injectInside(faxScroller);
		var image=new Asset.image(images[page], {onload:function() {
			image.setStyle('margin', 'auto')
			image.setStyle('width', 450);
			try {
				pause.remove();
			} catch(e){}

			image.injectInside(faxScroller);
		}});
		var allowMagnifier=true;
		
		image.addEvent('mouseover', function(evnt) {
			if (!allowMagnifier) return;
			var borderDistance=120;
			var fullWidth=window.getWidth()-borderDistance;
				
			var imageAspect=fullWidth/450;
			
			if (!this.magnifier) {
				this.magnifier=new Element('div');
				
				this.contentImage=new Element('img').injectInside(this.magnifier);
				
				this.magnifier.addEvent('mousewheel', function (evnt) {
					faxScroller.scrollTop=(faxScroller.scrollTop+(evnt.wheel*-10));
				}.bindWithEvent(this));
			}
			
			this.magnifier.setStyles({
				width:fullWidth+10,
				height:128,
				backgroundColor:'#555555',
				position:'absolute',
				top:evnt.client.y-64,
				left:borderDistance/2-6,
				border:"1px solid #cccccc",
				zIndex:1100,
				overflow:'hidden',
				border:'1px solid #444444',
				backgroundImage:'url('+getImagePath('fax/preview_bg.gif')+')'
			});
			
			this.contentImage.setStyles({
				top:0,
				left:4,
				position:'absolute',
				width:fullWidth,
				border:'1px solid #999999'
			}).setProperty('src',evnt.target.src);
			
			window.removeEvents('mousemove');
			
			
			var scrollpos=window.getScrollTop();
			var cx,cy,newx,newy;
			
			window.addEvent('mousemove', function(evnt) {
				
				var img=image.getCoordinates();
				var cont=faxScroller.getCoordinates();
				var preoffset=faxScroller.scrollTop;
				var lpa=img.left*imageAspect+fullWidth/2;
				var tpa=(img.top-preoffset)*imageAspect+64;
			
				cx=evnt.client.x;
				cy=evnt.client.y+scrollpos;
				
				if (cx<cont.left || cy<cont.top || cx>cont.right || cy>cont.bottom) {
					window.removeEvents('mousemove');
					if (this.magnifier)
					this.magnifier.remove();
					return;
				}
				
				newx=(lpa-(cx*imageAspect));
				newy=(tpa-(cy*imageAspect));
				
				this.magnifier.setStyles({
					top:cy-64,
					left:borderDistance/2-6,
					backgroundPosition:0+"px "+newy+'px'
				});
				
				this.contentImage.setStyle('top',newy);
			}.bindWithEvent(this));
			
			this.magnifier.injectInside(document.body);
			
		}.bindWithEvent(this));
		
		var functionWindow=new Element('div',{'class':'fax_preview_toolbox'});
		fax_toolbox=$('template_fax_toolbox').cloneTemplate();
		fax_toolbox.injectInside(functionWindow);
		functionWindow.injectInside(lbContainer);
		
		fax_toolbox.getElement('.fax_infotext').setText(description);
		fax_toolbox.getElement('.fax_datetime').setText(headline);
		
		fax_toolbox.getElement('.close_button').addEvent('click', function(e) {
			e.stop();
			this.close();
			functionWindow.remove();
		}.bindWithEvent(this));
		
		fax_toolbox.getElement('.toggle_magnifier').addEvent('click', function(e) {
			e.stop();
			
			allowMagnifier=!allowMagnifier;
			
			fax_toolbox.getElement('.toggle_magnifier').setText((allowMagnifier ? lang.get('JS_DEACTIVATE_MAGNIFIER') : lang.get('JS_ACTIVATE_MAGNIFIER')));
		}.bindWithEvent(this));
		
		fax_toolbox.getElement('.print_fax').addEvent('click', function(e) {
			e.stop();
			if (event['eventType']=='fax' && $type(event['URLs'])) {
				var newwin=window.open('/fax/index/print?id='+event['dataId']+'&showimg=true','print','width=300,height=400,scrollbars=yes,resizable=no');
			}
		}.bindWithEvent(this));
		
		//fax_toolbox.getElement('.rotate_fax').getParent().setStyle('display','none');
		fax_toolbox.getElement('.rotate_fax').addEvent('click', function(e) {
			e.stop();
			
			new Ajax('/ajax/files/rotatepage', {
					data: {
						page:page,
						dataId:event['dataId']
					}
			}).request();
			//images[page]=image+'.rot';
			//this.showLightbox(images, headline, description, page);
			
		}.bindWithEvent(this));
		
		naviBar.injectInside(lbContainer);
		this.showBox(lbContainer);
	},
	
	/*
	Property: show
		Alias for *showDialog*
	*/
	show: function(title, message, buttons, callback, pass) {
		this.showDialog(title, message, buttons, callback, pass);
		return this;
	},

	updatePositions: function(evnt) {
		// the actual code takes 11 milliseconds - fast enough.
		// displaying it on the screen seems to be the Bottleneck
		
		var winTop=window.getScrollTop();
		var winWidth=window.getWidth();
		var winHeight=window.getHeight();
		var winLeft=window.getScrollLeft();
		this.bgHider.setStyles({
			top:winTop,
			left:winLeft,
			width:winWidth,
			height:winHeight});
		
		if (this.bgShim) this.bgShim.setStyles({
			top:winTop,
			left:winLeft,
			width:winWidth,
			height:winHeight});

		if (!this.options.moveable && !this.options.fillScreen && !this.options.autoSize) {
			this.contentWindow.setStyles({
				top:winTop+80,
				left:(winWidth/2)-(this.options.width/2),
				width:this.options.width});
		}
		
		if (this.options.fillScreen) {
			this.contentWindow.setStyles({
				top:winTop+10,
				left:(winWidth/2)-(this.options.width/2),
				width:this.options.width,
				height:winWidth-20});
			
			var scroller=this.contentWindow.getElement('.sg_modal_fax_scroller');
			
			if (scroller) scroller.setStyle('height', winHeight-120);
			
			this.contentMiddle.setStyle('height',winHeight-80);
			
			this.fireEvent('onResize',winHeight);
		}
	},
	
	/*
	Property: showBox
		Shows a modal box

	Arguments:
		content - content of the box (HTML or DOM element)
	*/
	showBox: function(content) {
		this.content=content;
		content.injectInside(this.contentMiddle.empty());

		this.updatePositions();

		if (this.options.allowClose) {
			var closeBox=new Element('div')
			closeBox.addClass('sg_modal_closebox');
			closeBox.addClass('sg_modal_closebox_'+this.options.theme);
			closeBox.addEvent('click', function() {
				this.close();
			}.bind(this));
			
			this.bgHider.removeEvents('click');
			
			if (this.options.backgroundClose) {
				this.bgHider.addEvent('click', function() {
					this.close();
				}.bind(this));
			}
			
			closeBox.injectTop(this.windowTop);
		}


		if (!this.visible) {
			if ( !window.scrollingDisabled ) {
				window.addEvent('resize', this.updatePositions.bind(this));
				window.addEvent('scroll', this.updatePositions.bind(this));
				if(!this.options.internalScroll) {
					window.addEvent('mousewheel', function(evnt) {
						evnt.preventDefault();
					}.bindWithEvent(this));
					window.scrollingDisabled=true;
				}
			}

			var hiderFade=new Fx.Style(this.bgHider, 'opacity', {
				duration:100,
				onComplete: function(cw) {
					cw.setStyle('opacity','1')
					this.fireEvent('onOpened');
				}.bind(this, this.contentWindow)
			});
			hiderFade.set(0);
			
			this.contentWindow.setStyle('opacity','0').injectInside(document.body);
			if (this.bgShim) this.bgShim.injectTop(document.body);
			this.bgHider.injectTop(document.body);
			
			if (this.bgShim) this.bgShim.setStyle('display', 'inline');
			
			hiderFade.start(0, 0.2);
		}
		this.visible=true;
		var windowPop=new Fx.Styles(this.contentWindow);
		this.fireEvent('onOpen');
		return this;
	},

	/*
	Property: showDialog
		Shows a modal Dialog

	Arguments:
		title - Message Title
		message - Message text
		buttons - Buttons as Array of strings
		callback - callback function (number of the clicked button gets passed as first argument)
		pass - second argument to the callback function
	*/
	showDialog: function(title, message, buttons, callback, pass) {
		// generate content
		var content=new Element('div');
		
		/**
		 * IE verhaelt sich standardkonform und erlaubt keine DIVs in Ps ueber innerHTML,
		 * deshalb gab es bei der folgenden Zeile stets einen "Unbekannten Laufzeitfehler"
		 * eine Aenderung zu DIV brachte Linderung.
		 * Bei Fragen bitte an M. Rotmanov wenden.
		 * ~ rotmanov 15.04.2009
		 */
		// var textArea=new Element('p').addClass('sg_modal_text');
		var textArea=new Element('div').addClass('sg_modal_text');
		
		//this.textArea = textArea;
		var titleArea=textArea.clone(false).addClass('sg_modal_title');
		if (this.options.icon != '' ) { 
			//titleArea.setStyle('background-image', "url('"+getImagePath("lightbox/icons/"+this.options.icon+".png")+"')");
			var sgIcon=new Asset.image(getImagePath("lightbox/icons/"+this.options.icon+".png"),{
				"class":"sg_modal_icon"
			}).injectTop(content);
		} else {
			//titleArea.setStyle('padding-left','0px');
			//textArea.setStyle('padding-left','0px');
		}
		titleArea.setText(title);
		titleArea.injectInside(content);

		if ($type(message)==='string')
		{
			textArea.setHTML(message);
		}
		else
		{
			textArea.adopt(message);
		}

		textArea.injectInside(content);

		if ($type(message)==='string' && message.length>1000) { 
			textArea.setStyles({'overflow':'auto', 'height' : this.options.textHeight+'px'});
		}

		if (!buttons) buttons=[];
		if (!callback) callback=function(){};
		
		if (buttons.length>0) {
			butArea=textArea.clone(false).addClass('sg_modal_buttons');;
			butArea.injectInside(content);
		}
		buttons.each(function(button, id) {
			var fresh=makeFresh(button, "#"); //new Element('div').addClass('fresh_button').setStyle('float','right');
			//var but=new Element('a');
			//but.setText(button);
			//but.injectInside(fresh);
			fresh.injectInside(butArea);
			fresh.addEvent('click', function (evnt, button) {
				try {
					evnt.preventDefault();
				} catch(e) {
					//
				}
				this.close();
				callback(button, pass);
			}.bindAsEventListener(this, id));
		}.bind(this));

		this.showBox(content);
	},
	
	hide: function() {
		this.visible=false;
		this.contentWindow.addClass('view_template');
		this.bgHider.addClass('view_template');
	},

	unhide: function() {
		this.visible=true;
		this.contentWindow.removeClass('view_template');
		this.bgHider.removeClass('view_template');
	},

	close: function () {
		if (this.resizeEvent) window.removeEvent(this.resizeEvent);
		window.removeEvents('resize');
		window.removeEvents('scroll');
		window.removeEvents('mousewheel');
		window.scrollingDisabled=false;
		this.visible=false;
		this.contentWindow.remove();
		this.bgHider.remove();
		if (this.bgShim) this.bgShim.remove();
		this.fireEvent('onClose');
	}
});
SipgateModal.implement(new Options, new Events);
