SqueezeBox.extend({
	fromParams: function(options) {
		this.initialize();
		//if (this.element) this.trash();
		//this.element = $(from);
		this.setOptions($merge(this.presets, options || {}));
		this.assignOptions();
		var handler = this.options.handler;
		this.url = (this.options.url)?this.options.url:this.url;
		//alert(handler);
		if (handler) return this.setContent(handler, this.parsers[handler].call(this, true));
		var ret = false;
		this.parsers.some(function(parser, key) {
			var content = parser.call(this);
			if (content) {
				ret = this.setContent(key, content);
				return true;
			}
			//alert(parser + ' ' + key);
			return true;
		}, this);
		return ret;
	}
});

SqueezeBox.extend({
	toggleOverlay: function(state) {
		var full = this.doc.getSize().x;
		this.overlay.setStyle('display', (state) ? '' : 'none');
		//this.doc.body[(state) ? 'addClass' : 'removeClass']('body-overlayed');
		if (state) {
			this.scrollOffset = this.doc.getWindow().getSize().x - full;
			this.doc.body.setStyle('margin-right', this.scrollOffset);
		} else {
			this.doc.body.setStyle('margin-right', '');
		}
	}}
);
/* DIV handler */
SqueezeBox.parsers.extend({
	div: function(preset) {
		return preset;
	}
});

SqueezeBox.handlers.extend({
	div: function(id) {
		this.asset = new Element('div', $merge({
			styles: {
				width: this.options.size.x,
				height: this.options.size.y
			}
		}, this.options.divOptions));
		this.options.div_cont.inject(this.asset);
        this.fx['asset'] = new Fx.Morph(this.asset, $merge({
            onStart: Events.prototype.clearChain,
            unit: 'px',
            duration: 750,
            transition: Fx.Transitions.Quint.easeOut,
            link: 'cancel',
            unit: 'px'
        }, this.options.resizeFx));
		//this.asset.setStyle('overflow-x', 'hidden');
		//this.asset.setStyle('overflow-y', 'auto');
		return this.asset;
	}
});

/* ONLY FLASH box*/
SqueezeBox.parsers.extend({
	swf_obj: function(preset) {
		return (preset || (this.url && !(/^(?:javascript|#)/i).test(this.url))) ? this.url : false;
	}
});

SqueezeBox.handlers.extend({
	swf_obj: function(id) {
		this.asset = new Element('div', $merge({
			width: this.options.size.x,
			height: this.options.size.y,
            overflow: 'scroll'
		}, this.options.assetOptions));
		var swf_obj = new Swiff(this.options.swf_src, {
			id: this.options.swf_id,
				width: this.options.swf_size.x,
				height: this.options.swf_size.y,
				container:this.asset,
				params: this.options.swf_params,
				vars: this.options.swf_vars,
				callBacks: {
					load: this.options.swf_backCalls
				},
				properties: this.options.swf_attr
			});
		//$(swf_obj).inject(this.asset);
		return this.asset;
	}
});

/* pic gallery handler */
SqueezeBox.parsers.extend({
	JSFade: function(preset) {
		return preset;
	}
});
SqueezeBox.extend({
		images			: null,
		sq_ready		: false,
		img_ready		: false,
		next_gallery_image: function(){
			var nx_img_ind = SqueezeBox.options.pic_gallery_opt.pic_ind + 1;
			if (nx_img_ind > this.images.images.length - 1) nx_img_ind = 0;
			//console.log(nx_img_ind, this.images.images.length);
			this.init_image(nx_img_ind);
			//this.fireEvent('imageChange', [nx_img_ind, this.images.images[nx_img_ind]], 300);
		},
		preview_gallery_image: function(){
			var pr_img_ind = SqueezeBox.options.pic_gallery_opt.pic_ind - 1;
			if (pr_img_ind < 0) pr_img_ind = this.images.images.length - 1;
			///console.log(pr_img_ind);
			this.init_image(pr_img_ind);

		},
		init			: function(pic_ind){
			this.dummy_img_tag.addEvent('load', this.image_loaded.bind(this));
			this.init_image(pic_ind);
			this.fx.content.addEvent('complete', this.sq_box_ready.bind(this));
			this.addEvent('close', this.closeCleanUp.bind(this));
			//this.fireEvent('imageChange', [nx_img_ind, this.images.images[0]], 300);
		},
		closeCleanUp	: function(){
			this.fx.content.removeEvents('complete');
			this.dummy_img_tag.removeEvents('load');
		},
		init_image		: function(pic_ind){
			var tmp_current_pic = this.images.images[pic_ind];
			SqueezeBox.options.pic_gallery_opt.pic_ind = pic_ind;
			//console.log(pic_ind);
			this.sq_ready = false;
			this.img_ready = false;
			var tmp_pic_cont = this.pic_cont[SqueezeBox.options.pic_gallery_opt.pic_cont_ind];
			tmp_pic_cont.setStyles({
				'opacity'			: '0',
				'width'				: 'auto',
				'height'			: 'auto',
				'background-image'	: 'none',
				'display'			: 'none'
			});
			//if (this.size != undefined) console.log(this.size.x, tmp_current_pic.width , this.size.y , tmp_current_pic.height);
			if (this.size != undefined && this.size.x == tmp_current_pic.width && this.size.y == tmp_current_pic.height) this.sq_box_ready();
			else {
				 this.resize.delay(1000 - (new Date() - this.delayTimer), this, {'x': tmp_current_pic.width, 'y': tmp_current_pic.height});
				 this.preloader_div.setStyles({'width': '0px', 'height': '0px'});
				 this.options.pic_cont.setStyles({'width': '0px', 'height': '0px'});
			}
			if (this.options.pic_gallery_opt.pr_bt_DOM != null){
				this.options.pic_gallery_opt.pr_bt_DOM.setStyles({
					'display'	: 'none'
				});
			}
			if (this.options.pic_gallery_opt.next_bt_DOM != null){
				this.options.pic_gallery_opt.next_bt_DOM.setStyles({
					'display'	: 'none'
				});
			}
			this.dummy_img_tag.setProperty('src', tmp_current_pic.img_src.CTADA);
		},
		sq_box_ready		: function(){
			var tmp_current_pic = this.images.images[SqueezeBox.options.pic_gallery_opt.pic_ind];
			if (this.size.x != tmp_current_pic.width || this.size.y != tmp_current_pic.height) return;
			this.sq_ready = true;
			this.preloader_div.setStyles({'width': tmp_current_pic.width  + 'px', 'height': tmp_current_pic.height + 'px', 'visibility': 'visible', 'opacity':'1'});
			this.options.pic_cont.setStyles({'width': tmp_current_pic.width + 'px', 'height': tmp_current_pic.height + 'px'});
			if (this.img_ready == false) return;
			this.show_image();
		},
		image_loaded			: function(){
			this.img_ready = true;
			if (this.sq_ready == false) return;
			this.show_image();
		},
		show_image				: function(){
			this.fireEvent('imageChange', [SqueezeBox.options.pic_gallery_opt.pic_ind, this.images.images[SqueezeBox.options.pic_gallery_opt.pic_ind]], 100);
			var tmp_current_pic = this.images.images[SqueezeBox.options.pic_gallery_opt.pic_ind];
			var tmp_pic_cont = this.pic_cont[SqueezeBox.options.pic_gallery_opt.pic_cont_ind];
			SqueezeBox.options.pic_gallery_opt.pic_cont_ind = 0;//((SqueezeBox.options.pic_gallery_opt.pic_cont_ind + 1) % 2);
			tmp_pic_cont.setStyles({
				'opacity'			: '0',
				'width'				: tmp_current_pic.width+'px',
				'height'			: tmp_current_pic.height+'px',
				'background-image'	: 'url('+tmp_current_pic.img_src.CTADA+')',
				'display'			: 'block',
				'z-index'			: '1010'
			});

			var tmp_old_pic_cont = this.pic_cont[SqueezeBox.options.pic_gallery_opt.pic_cont_ind];
			//tmp_old_pic_cont.setStyle('z-index', '1009');
			this.preloader_div.tween('opacity', 0);
			tmp_pic_cont.tween('opacity', 1);
			//if (SqueezeBox.options.pic_gallery_opt.pic_ind != 0 && SqueezeBox.options.pic_gallery_opt.pic_ind != 2) return;
			if (this.options.pic_gallery_opt.pr_bt_DOM != null){
				this.options.pic_gallery_opt.pr_bt_DOM.setStyles({
					'display'	: 'block',
					'top'		: parseInt((tmp_current_pic.height / 2) - 22) + 'px'
				});
			}
			if (this.options.pic_gallery_opt.next_bt_DOM != null){
				this.options.pic_gallery_opt.next_bt_DOM.setStyles({
					'display'	: 'block',
					'top'		: parseInt((tmp_current_pic.height / 2) - 22) + 'px',
					'left'		: parseInt(tmp_current_pic.width - 13 - 31) + 'px'
				});
			}
		}
	}
);
SqueezeBox.handlers.extend({
	JSFade: function(container) {
		this.asset = new Element('div', $merge({
			width	: this.options.size.x,
			height	: this.options.size.y
		}, this.options.pic_gallery_opt));
		// some default values
		SqueezeBox.options.pic_gallery_opt = $extend({
				json_xml		: 'site/JS_flash_gallery//images_json.php',
				image_click		: null,
				next_bt_DOM		: null,
				pr_bt_DOM		: null,
				preloader_class	: 'preloder',
				show_text		: false, // not implemented yet
				pic_ind			: 0,
				pic_cont_ind	: 0
			},
			SqueezeBox.options.pic_gallery_opt
		);
		// defining dinamic default values.
		this.options.pic_gallery_opt = $extend({
			page_id			: EDIT_CORE.page_id,
			extra_xml_prop  : ''
		}, this.options.pic_gallery_opt);
		// reding images from XML
		this.delayTimer = new Date();
		//console.log(this.sq_ready, this.img_ready);
		this.sq_ready = false;
		this.img_ready = false;
		this.preloader_div = new Element('div', {
			'class' : SqueezeBox.options.pic_gallery_opt.preloader_class,
			'html'	: '&nbsp;',
			'styles':{
				'width'		: this.options.size.x,
				'height'	: this.options.size.y,
				'position'	: 'relative'
		}});
		this.pic_cont = {
			'0' : new Element('div', {'class':'pic-container', 'styles': {'display': 'none', 'position':'absolute'}}),
			'1' : new Element('div', {'class':'pic-container', 'styles': {'display': 'none', 'position':'absolute'}})
		};
		var dummy_div = new Element('div', {'styles': {'position': 'relative', 'height': '0px', 'width': '0px'}});
		this.preloader_div.inject(dummy_div);
		dummy_div.inject(this.options.pic_cont);
		//this.pic_cont['0'].inject(this.options.pic_cont);
		var dummy_div = new Element('div', {'styles': {'position': 'relative', 'height': '0px', 'width': '0px'}});
		this.pic_cont['0'].inject(dummy_div);
		dummy_div.inject(this.options.pic_cont);
		var dummy_div = new Element('div', {'styles': {'position': 'relative', 'height': '0px', 'width': '0px'}});
		//this.pic_cont['1'].inject(this.options.pic_cont);
		this.pic_cont['1'].inject(dummy_div);
		dummy_div.inject(this.options.pic_cont);
		this.dummy_img_tag = new Element('img', {
			'src'	: '',
			'alt'	: '',
			'title'	: '',
			'styles' : {
				'visibility' 	: 'hidden',
				'opacity'		: '0',
				'position'		: 'absolute',
				'left'			: '-5000px'
			}
		});
		this.options.pic_cont.setStyles({'width': this.options.size.x, 'height': this.options.size.y});
		this.dummy_img_tag.inject(this.options.pic_cont);
		if (this.options.pic_gallery_opt.next_bt_DOM != null){
			//var tmp_next_bt = this.options.pic_cont.getElement('.'+this.options.pic_gallery_opt.next_bt_css)[0];
			this.options.pic_gallery_opt.next_bt_DOM.addEvent('click', this.next_gallery_image.bind(this));
			this.options.pic_gallery_opt.next_bt_DOM.inject(this.options.pic_cont);
		}
		if (this.options.pic_gallery_opt.pr_bt_DOM != null){
			//var tmp_pr_bt = this.options.pic_cont.getElement('.'+this.options.pic_gallery_opt.pr_bt_css)[0];
			this.options.pic_gallery_opt.pr_bt_DOM.addEvent('click', this.preview_gallery_image.bind(this));
			this.options.pic_gallery_opt.pr_bt_DOM.inject(this.options.pic_cont);
		}
		this.options.pic_cont.inject(this.asset);
		var jsonRequest = new Request.JSON({url: EDIT_CORE.JSSiteRoot + this.options.pic_gallery_opt.json_xml, onSuccess: function(images){
			this.images = images;
			this.fireEvent('JSON-loaded', this.images, 100);
			this.init.call(this, 0);
		}.bind(this)});
		jsonRequest.get.delay(500, jsonRequest, $extend({'page_id': this.options.pic_gallery_opt.page_id, 'pic_width' :this.options.pic_size.x, 'pic_height' :this.options.pic_size.y}, this.options.pic_gallery_opt.extra_xml_prop));
		return this.asset;
	}
});
