
if(window.Effect)
{
	Effect.BlindRight = function(element) {
		element = $(element);
		var elementDimensions = element.getDimensions();
		return new Effect.Scale(element, 100, Object.extend({
			scaleContent: false,
			scaleY: false,
			scaleFrom: 0,
			scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
			restoreAfterFinish: true,
			afterSetup: function(effect) {
				effect.element.makeClipping().setStyle({
					width: '0px',
					height: effect.dims[0] + 'px'
				}).show();
			},
			afterFinishInternal: function(effect) {
				effect.element.undoClipping();
			}
		}, arguments[1] || { }));
	};

	Effect.BlindLeft = function(element) {
		element = $(element);
		element.makeClipping();
		return new Effect.Scale(element, 0,
			Object.extend({ scaleContent: false,
				scaleY: false,
				scaleMode: 'box',
				scaleContent: false,
				restoreAfterFinish: true,
				afterSetup: function(effect) {
					effect.element.makeClipping().setStyle({
						height: effect.dims[0] + 'px'
					}).show();
				},
				afterFinishInternal: function(effect) {
					effect.element.hide().undoClipping();
				}
			}, arguments[1] || { })
		);
	};
}

var maxZ=1;

var MaskGeneric = Class.create({
	
	initialize: function (obj, color, opacity, z) {
		this.obj=$(obj);
		this.objOverlay=null;
		if(color)
			this.color=color;
		else
			this.color='#666';
		if(opacity)
			this.opacity=opacity;
		else
			this.opacity='0.9';
		if(!z)
			this.z=++maxZ;
		else
			this.z=maxZ=z;
	},
	
	start: function() {

		this.arrayObjSize = Element.getDimensions(this.obj);
		this.arrayObjPosition = Element.cumulativeOffset(this.obj);
		
		this.objOverlay = new Element("div");
		this.objOverlay.setStyle({
			position: 'absolute',
			opacity: this.opacity,
			backgroundColor: this.color,
			zIndex: this.z,
			textAlign: 'center'
		});
		Element.clonePosition(this.objOverlay, this.obj, {
			offsetTop : 0,
			offsetLeft : 0
		});
		
		$$('body')[0].appendChild(this.objOverlay);
	},
	
	end: function() {
		this.objOverlay.remove();
	}
});

var LightboxFullWindow = Class.create({
	
	initialize: function (color, opacity, z) {
		this.objOverlay=null;
		if(color)
			this.color=color;
		else
			this.color='#666';
		if(opacity)
			this.opacity=opacity;
		else
			this.opacity='0.9';
		if(!z)
			this.z=++maxZ;
		else
			this.z=maxZ=z;
		this.objLightbox=null;
	},
	
	start: function(width, height, classname) {
		
		var obj=$$('body')[0];
		var arrayViewSize = document.viewport.getDimensions();
		var arrayObjSize = Element.getDimensions(obj);
		
		var w=Math.max(arrayObjSize['width'], arrayViewSize['width']);
		var h=Math.max(arrayObjSize['height'], arrayViewSize['height']);
		
		this.objOverlay = new Element("div",{'id':"objOverlayDiv"});
		this.objOverlay.setStyle({
			position: 'absolute',
			opacity: this.opacity,
			backgroundColor: this.color,
			zIndex: this.z,
			textAlign: 'center',
			top: "0px",
			left: "0px",
			width: w+"px",
			height: h+"px"
		});
		
		obj.appendChild(this.objOverlay);
		
		this.objOverlay.observe("click",this.end.bind(this));
		
		var arrayPageScroll = document.viewport.getScrollOffsets()
		
		/*
		this.objLightbox = new Element("div", {
			"id" : "lightbox",
			display: 'none'
		});
		if(classname)
			this.objLightbox.addClassName(classname);
		$$("body")[0].appendChild(this.objLightbox)
		;*/
		this.buildLightbox(classname);
		this.display(width, height, arrayViewSize['height']/2-height/2+arrayPageScroll[1], arrayViewSize['width']/2-width/2+arrayPageScroll[0]);
	},
	
	buildLightbox: function(classname)
	{
		this.objLightbox = new Element("div", {
			"id" : "lightbox",
			display: 'none'
		});
		if(classname)
			this.objLightbox.addClassName(classname);
		$$("body")[0].appendChild(this.objLightbox)
	},
	
	display: function(width, height, top, left)
	{
		this.objLightbox.setStyle({
			display: 'block',
			position: 'absolute',
			'width': width+"px",
			'height': height+"px",
			'left': left+"px",
			'top': top+"px",
			zIndex: (++maxZ)
		});
	},
	
	end: function($super) {
		this.objOverlay.remove();
		this.objLightbox.remove();
	}
	
});

var LightboxGeneric = Class.create(MaskGeneric,{
	
	initialize: function ($super, color, opacity, z) {
		//$super($$("body")[0], color, opacity, z);
		$super(document.body, color, opacity, z);
		this.objLightbox=null;
	},
	
	start: function($super, width, height, classname) {
	
		$super();
		
		this.objOverlay.observe("click",this.end.bind(this));
		
		var arrayViewSize = document.viewport.getDimensions();
		var arrayPageScroll = document.viewport.getScrollOffsets()
		
		this.objLightbox = new Element("div", {
			"id" : "lightbox",
			display: 'none'
		});
		if(classname)
			this.objLightbox.addClassName(classname);
		$$("body")[0].appendChild(this.objLightbox);
		this.display(width, height, arrayViewSize['height']/2-height/2+arrayPageScroll[1], arrayViewSize['width']/2-width/2+arrayPageScroll[0]);
	},
	
	display: function(width, height, top, left)
	{
		this.objLightbox.setStyle({
			display: 'block',
			position: 'absolute',
			'width': width+"px",
			'height': height+"px",
			'left': left+"px",
			'top': top+"px",
			zIndex: (++maxZ)
		});
	},
	
	end: function($super) {
		$super();
		this.objLightbox.remove();
	}
	
});

var LightboxInvisible = Class.create(LightboxFullWindow,{
	
	display: function(width, height, top, left)
	{
		this.objLightbox.setStyle({
			display: 'none',
			position: 'absolute',
			'width': width+"px",
			'height': height+"px",
			'top': (top ? top : 0)+"px",
			'left': (left ? left : 0)+"px",
			zIndex: (++maxZ)
		});
	}
	
});

var LoadingGeneric = Class.create(MaskGeneric, {
	
	start: function($super, style) {
		$super();
		
		if(this.arrayObjSize['height'] > 50)
		{
			var src;
			if(style)
				src='ajax-loader_'+style;
			else
					src='ajax-loader_clock';
			img = new Element("img", {
				src : QBS_base_url+'/graphics/'+src+'.gif',
				alt : 'Loading',
				title : 'Loading'
			});
			img.setStyle({
				position: 'relative',
				top: this.arrayObjSize['height']/2+"px"
			});
			this.objOverlay.appendChild(img);
		}
		
	}
	
});

var ImageMaskGeneric = Class.create(MaskGeneric, {
	
	start: function($super, style) {
		$super();
		
		var src;
		if(style)
			src='ajax-loader_'+style;
		else
				src='ajax-loader_clock';
		img = new Element("img", {
			src : QBS_base_url+'/graphics/'+src+'.gif',
			alt : 'Loading',
			title : 'Loading'
		});
		img.setStyle({
			//position: 'relative',
			//top: this.arrayObjSize['height']/2+"px"
			height: this.arrayObjSize['height']+"px",
			width: this.arrayObjSize['width']+"px"
		});
		this.objOverlay.appendChild(img);
	}
	
});

var XML = Class.create({
	
	initialize: function () {
	},

	getValue : function (xml,name)
	{
		var items=this.getItems(xml,name);
		if(items && items.length > 0)
		{
			var node=items.item(0);
			if(node.childNodes.length > 0)
				return node.childNodes[0].nodeValue;
			else
				return null;
		}
		else
		{
			return null;
		}
	},
	
	getString : function (xml,name)
	{
		var value=this.getValue(xml,name);
		if(value==null)
		{
			return "";
		}
		else
		{
			return value.toString();
		}
	},
	
	getInt : function (xml,name)
	{
		var value=this.getValue(xml,name);
		if(value==null)
		{
			return 0;
		}
		else
		{
			return parseInt(value);
		}
	},
	
	getBool : function (xml,name)
	{
		var value=this.getValue(xml,name);
		if(value==null)
		{
			return 0;
		}
		else
		{
			return (parseInt(value) != 0);
		}
	},
	
	getFloat : function (xml,name)
	{
		var value=this.getValue(xml,name);
		if(value==null)
		{
			return 0;
		}
		else
		{
			return parseFloat(value);
		}
	},
	
	getItems : function (xml,tag)
	{
		return xml.getElementsByTagName(tag);
	}
});

var qXML=new XML();

Form.Unserialize=function(formElement,xmldoc)
{
	var tbs=$(formElement).select("input");
	var tas=$(formElement).select("textarea");
	var sels=$(formElement).select("select");
	var inputs=tbs.concat(tas,sels);
	
	var input;
	
	for(var j=0;j<inputs.length;j++)
	{
		input=inputs[j];
		switch(input.nodeName)
		{
			case "INPUT":
				switch(input.type)
				{
					case "text":
					case "textarea":
					case "hidden":
						input.value=qXML.getString(xmldoc,input.name);
						break;
					case "checkbox":
						input.checked=qXML.getInt(xmldoc,input.name) > 0;
						break;
					case "password":
						input.value="";
						break;
					default:
						break;
				}
				break;
			case "SELECT":
			case "TEXTAREA":
				input.value=qXML.getString(xmldoc,input.name);
				break;
			default:
		}
	}
}

