// JScript source code

function do_debug(text) {
	var deb = $('_debug');
	if(!deb) {
		deb = new Element('div');
		deb.setStyles({position:'absolute', left:'0px', top:'0px', overflow:'auto', width:'360px', height:'800px', backgroundColor:'#FFFFFF'});
		deb.id = '_debug'
		deb.inject(document.body);
	}
	if(!deb)
		return;
	if(typeof(text) != 'string') {
		text = Json.toString(text);
	}
	deb.innerHTML += text + '<br />';
}

function centerobject(root, obj) {
	var cr		= root.getCoordinates();
	var co		= obj.getCoordinates();
		
	var delta	= {	x:(cr.width - co.width ) / 2,
					y:(cr.height - co.height) / 2 };
		
	obj.setStyles({left:delta.x + 'px', top:delta.y + 'px'});
};

var AnimatedEntryTextexpand = new Class({
	initialize: function(options) {
		
		this.the = $E(options.selector);
		if(!this.the)
			return;
			
		this.button = $(options.button);
		if(!this.button)
			return;
			
		this.theParent = this.the.getParent();
		if(!this.theParent)
			return;
			
		this.theParent.setStyle('position', 'relative');
		
		this.loopcount = $pick(options.loopcount, -1);
		this.scalemax = 0.5;
		this.timing = {loop1: 500, loop2: 500, delay: 4000, restart: 2000};
		this.found = this.the.clone();
		this.found.setStyle('position', 'absolute');
		this.found.setStyles({'top':'0px', 'left':'0px'});
		this.found.addEvent('mouseover', this.run3_in.bindWithEvent(this));
		this.found.addEvent('mouseleave', this.run3_out.bindWithEvent(this));
		this.button.inject(this.theParent);
		this.found.inject(this.theParent);
		this.the.setOpacity(0.0);
		this.found.setOpacity(1.0);
		this.button.setOpacity(1.0);
		this.centerOb(this.found, this.button);
		
		
		this.scale			= this.calcScale(this.found, this.button);
		this.lowest			= this.calcScaleObject(this.button, this.calcCenterObject(this.found), this.scale.x);
		this.highest		= this.calcScaleObject(this.button, this.calcCenterObject(this.found), this.scalemax);
		this.setObj(this.button, this.calcScaleObject(this.button, this.calcCenterObject(this.found), this.scale.x));
		this.found.innerHTML = '';
		this.button.inject(this.found);
		this.eff_in		= new Fx.Styles(this.button, {duration:this.timing.loop1, transition:Fx.Transitions.Sine.easeInOut});
		this.eff_out	= new Fx.Styles(this.button, {duration:this.timing.loop2, transition:Fx.Transitions.Sine.easeInOut});
	
		this.run2_in.bind(this).delay(this.timing.delay);
	},
	calcScale: function(dst, src) {
		var cd = dst.getCoordinates();
		var cs = src.getCoordinates();
		if(cs.width == 0 || cs.height == 0 || cd.width == 0 || cd.height == 0)
			return {x:1.0, y:1.0};
		return {x:(cd.width / cs.width), y:(cd.height / cs.height)};
	},
	centerOb: function(root, obj) {
		var cr		= root.getCoordinates();
		var co		= obj.getCoordinates();
		
		var delta	= {	x:(cr.width - co.width ) / 2,
						y:(cr.height - co.height) / 2 };
		
		obj.setStyles({left:delta.x + 'px', top:delta.y + 'px'});
	},
	setObj: function(obj, params) {
		
		obj.setStyles({left : params.x + 'px', top : params.y + 'px', width : params.w + 'px', height : params.h + 'px'});
	},
	calcCenterObject: function(obj) {
		var size	= obj.getSize();
		var l = parseFloat(obj.getStyle('left'));
		var t = parseFloat(obj.getStyle('top'));
		return {x: l + size.size.x / 2, y: t + size.size.y / 2};
		
	},
	calcScaleObject: function(obj, org, scale) {
		if(!obj.initialSize) {
			var size	= obj.getSize();
			var l = parseFloat(obj.getStyle('left'));
			var t = parseFloat(obj.getStyle('top'));
			obj.initialSize = size.size;
			obj.initialOffset = {x:l, y:t};
		}
		
		var lp = {x:(obj.initialOffset.x - org.x) * scale + org.x, y:(obj.initialOffset.y - org.y) * scale + org.y};
		var wh = {w:(obj.initialSize.x * scale), h:(obj.initialSize.y * scale)};
		return $extend(lp, wh);
	},
	getDimens: function(ob) {
		var coos = ob.getCoordinates();
		coos.middle = {x:(coos.left + coos.width / 2), y: (coos.top + coos.height / 2)};
		return coos;
	},
	run3_in: function(ev) {
		new Event(ev).stop();
		this.eff_in.stop();
		this.eff_out.stop();
		this.eff_in.start({left:[this.highest.x], top:[this.highest.y], width:[this.highest.w], height:[this.highest.h]});
	},
	run3_out: function(ev) {
		new Event(ev).stop();
		this.eff_in.stop();
		this.eff_out.stop();
		this.eff_out.start({left:[this.lowest.x], top:[this.lowest.y], width:[this.lowest.w], height:[this.lowest.h]});	
	},
	run2_in:function() {
		this.eff_in.stop();
		this.eff_out.stop();
		this.eff_in.start({left:[this.highest.x], top:[this.highest.y], width:[this.highest.w], height:[this.highest.h]}).chain(this.run2_out.bind(this));
	},
	run2_out:function() {
		this.eff_in.stop();
		this.eff_out.stop();
		this.eff_out.start({left:[this.lowest.x], top:[this.lowest.y], width:[this.lowest.w], height:[this.lowest.h]});
		if(this.loopcount == -1 || this.loopcount-- > 0)
			this.run2_in.bind(this).delay(this.timing.restart);
	},
	run1: function() {
		var change = new Fx.Styles(this.found, {duration:600} );
		change.start({'left':[-200], 'opacity':[0.3], 'padding-left':[40], 'padding-right':[40], 'background-color':['#ff9610', '#FFFFFF'], 'font-size':[20], 'color':['#ff9610']}).chain(function(){change.start({'left':[0], 'opacity':[1.0], 'padding-left':[0], 'padding-right':[0], 'background-color':['#FFFFFF', '#ff9610'],'font-size':[13], 'color':['#FFFFFF']})});
		this.run.bind(this).delay(5000);
	}
});

var AnimatedEntryTextjump = new Class({
	initialize: function(options) {
		var the = $E(options.selector);
		if(!the)
			return;
		var theParent = the.getParent();
		if(!theParent)
			return;
		theParent.setStyle('position', 'relative');
		
		this.loopcount = $pick(options.loopcount, -1);
		this.found = the.clone();
		this.found.setStyle('position', 'absolute');
		this.found.setStyle('top', '0px');
		this.found.inject(theParent);
		
		this.run.bind(this).delay(2000);
		
	},
	run: function() {
		var change = new Fx.Styles(this.found, {duration:600} );
		change.start({'left':[-200], 'opacity':[0.3], 'padding-left':[40], 'padding-right':[40], 'background-color':['#ff9610', '#FFFFFF'], 'font-size':[20], 'color':['#ff9610']}).chain(function(){change.start({'left':[0], 'opacity':[1.0], 'padding-left':[0], 'padding-right':[0], 'background-color':['#FFFFFF', '#ff9610'],'font-size':[13], 'color':['#FFFFFF']})});
		if(this.loopcount <= -1 || this.loopcount-- > 0) 
			this.run.bind(this).delay(5000);
	}
});

var AnimatedEntryStar = new Class({
	initialize: function(options) {
		
		this.the = $E(options.selector);
		if(!this.the)
			return;
			
		this.button = $(options.button);
		if(!this.button)
			return;
			
		this.theParent = this.the.getParent();
		if(!this.theParent)
			return;
			
		this.theParent.setStyle('position', 'relative');
		
		this.loopcount = $pick(options.loopcount, -1);
		
		this.found = this.the.clone();
		this.found.setStyle('position', 'absolute');
		this.found.setStyles({'top':'0px', 'left':'0px'});
		this.found.addEvent('mouseover', this.run3_in.bindWithEvent(this));
		this.found.addEvent('mouseleave', this.run3_out.bindWithEvent(this));
		this.button.inject(this.theParent);
		this.found.inject(this.theParent);
		
		this.button.setOpacity(0.0);
		this.centerOb(this.found, this.button);
		this.lowest = this.calcScaleObject(this.button, this.calcCenterObject(this.found), 0.0);
		this.highest = this.calcScaleObject(this.button, this.calcCenterObject(this.found), 1.0);
		this.setObj(this.button, this.calcScaleObject(this.button, this.calcCenterObject(this.found), 0.0));
		
		this.eff_in		= new Fx.Styles(this.button, {duration:1500, transition:Fx.Transitions.Sine.easeIn});
		this.eff_out	= new Fx.Styles(this.button, {duration:1000, transition:Fx.Transitions.Sine.easeIn});
	
		this.run2_in.bind(this).delay(4000);
	},
	
	centerOb: function(root, obj) {
		var cr		= root.getCoordinates();
		var co		= obj.getCoordinates();
		
		var delta	= {	x:(cr.width - co.width ) / 2,
						y:(cr.height - co.height) / 2 };
		
		obj.setStyles({left:delta.x + 'px', top:delta.y + 'px'});
	},
	setObj: function(obj, params) {
		
		obj.setStyles({left : params.x + 'px', top : params.y + 'px', width : params.w + 'px', height : params.h + 'px'});
	},
	calcCenterObject: function(obj) {
		var size	= obj.getSize();
		var l = parseFloat(obj.getStyle('left'));
		var t = parseFloat(obj.getStyle('top'));
		return {x: l + size.size.x / 2, y: t + size.size.y / 2};
		
	},
	calcScaleObject: function(obj, org, scale) {
		if(!obj.initialSize) {
			var size	= obj.getSize();
			var l = parseFloat(obj.getStyle('left'));
			var t = parseFloat(obj.getStyle('top'));
			obj.initialSize = size.size;
			obj.initialOffset = {x:l, y:t};
		}
		
		var lp = {x:(obj.initialOffset.x - org.x) * scale + org.x, y:(obj.initialOffset.y - org.y) * scale + org.y};
		var wh = {w:(obj.initialSize.x * scale), h:(obj.initialSize.y * scale)};
		return $extend(lp, wh);
	},
	getDimens: function(ob) {
		var coos = ob.getCoordinates();
		coos.middle = {x:(coos.left + coos.width / 2), y: (coos.top + coos.height / 2)};
		return coos;
	},
	run3_in: function(ev) {
		new Event(ev).stop();
		this.eff_in.stop();
		this.eff_out.stop();
		this.eff_in.start({left:[this.highest.x], top:[this.highest.y], width:[this.highest.w], height:[this.highest.h]});
	},
	run3_out: function(ev) {
		new Event(ev).stop();
		this.eff_in.stop();
		this.eff_out.stop();
		this.eff_out.start({left:[this.lowest.x], top:[this.lowest.y], width:[this.lowest.w], height:[this.lowest.h]});	
	},
	run2_in:function() {
		this.eff_in.stop();
		this.eff_out.stop();
		this.eff_in.start({left:[this.highest.x], top:[this.highest.y], width:[this.highest.w], height:[this.highest.h]}).chain(this.run2_out.bind(this));
	},
	run2_out:function() {
		this.eff_in.stop();
		this.eff_out.stop();
		this.eff_out.start({left:[this.lowest.x], top:[this.lowest.y], width:[this.lowest.w], height:[this.lowest.h]});
		if(this.loopcount == -1 || this.loopcount-- > 0)
			this.run2_in.bind(this).delay($random(6000, 13000));
	},
	run1: function() {
		var change = new Fx.Styles(this.found, {duration:600} );
		change.start({'left':[-200], 'opacity':[0.3], 'padding-left':[40], 'padding-right':[40], 'background-color':['#ff9610', '#FFFFFF'], 'font-size':[20], 'color':['#ff9610']}).chain(function(){change.start({'left':[0], 'opacity':[1.0], 'padding-left':[0], 'padding-right':[0], 'background-color':['#FFFFFF', '#ff9610'],'font-size':[13], 'color':['#FFFFFF']})});
		this.run.bind(this).delay(5000);
	}
});

var SelectBox = new Class({
	initialize: function(options) {
	}
});
var ProductFinder = new Class({
	initialize: function(options) {
		this.elements = options.elements;
		this.preparenode(this.elements);
		this.levelcontainers = [];
		for(var i=0; i<options.levelcount;i++) {
			this.levelcontainers[i] = $(options.containers[i]);
		}
		this.fillin(this.levelcontainers[0], this.elements.children, 0);
		if(options.preset) {
			var prenode = this.findnode(options.preset, null);
			if(prenode) {
				var level = this.getlevel(prenode);
			}
			if(prenode) {
				prenode.active = true;
				parent = prenode.parent;
				while(parent) {
					parent.active	= true;
					if(parent.element)
						parent.element.addClass('active');
					parent			= parent.parent;
				}
				
				var box			= this.levelcontainers[level];
				var nodelist	= this.getSiblings(prenode);
				this.fillin(box, nodelist, level); 
			}
		}
	},
	getlevel: function(node) {
		var level	= -1;
		var parent	= node;
		while(parent) {
			level += 1;
			parent = parent.parent;
		}
		return level - 1;
	},
	handle: function(node, handler, params, level) {
		if(!node)
			return false;
		if(!level)
			var level = 0;
		if(handler(node, params, level)) {
			if(node.children && node.children.length) {
				level += 1;
				for(var index = 0; index < node.children.length; index++) {
					var item = node.children[index];
					if(!this.handle(item, handler, params, level))
						return false;
				}
				level -= 1;
			}
			return true;
		}
		return false;
	},
	findnode: function(id, root) {
		if(!root) {
			root = this.elements;
		}
		var params = {lookup:id, result:null, level:0};
		this.handle(root, function(item, params, level){
			if(item.id == params.lookup) {
				params.result	= item;
				params.level	= level;
				return false;
			}
			return true;
		}.bind(this), params);
		
		if(params.result)
			return params.result;
		return null;
	},
	preparenode: function(node) {
		if(node.children) {
			node.children.each(function(item, index) {
				item.parent = this.parent;
				this.self.preparenode(item);
			}.bind({parent:node, self:this}));
		}
	},
	getSiblings: function(root) {
		if(root && root.parent && root.parent.children) {
			return root.parent.children;
		}
		return null;
	},
	fillin: function(box, nodelist, level) {
		if(nodelist && nodelist.length) {
			box.innerHTML = '';
			for(var i=0; i<nodelist.length; i++) {
				var inject			= new Element('div');
				inject.data			= nodelist[i];
				nodelist[i].element = inject;
				inject.level		= level;
				inject.addEvent('click', this.handleSelect.bindWithEvent(this));
				inject.innerHTML	= nodelist[i].name;
				inject.inject(box);
				if(inject.data.active) {
					inject.addClass('active');
					this.setSelect(inject);
				}
			}
		}
	},
	clearSiblings: function(startlevel) {
		for(var i=startlevel; i< this.levelcontainers.length; i++) {
			this.levelcontainers[i].innerHTML = '';
		}
	},
	setSelect: function(root) {
		if(root.data) {
			var box =  this.levelcontainers[root.level];
			if(box)
				box.getChildren().each(function(item, index){item.removeClass('active')});
			var siblings = this.getSiblings(root.data);
			if(siblings)
				siblings.each(function(item, index){item.active = false});
				
			if(root.data.children) {
				box =  this.levelcontainers[root.level + 1];
				this.fillin(box, root.data.children, root.level + 1);
			} else {
				this.clearSiblings(root.level + 1);
			}
			root.addClass('active');
			root.active = true;
		}
	},
	handleSelect: function(ev) {
		var seldiv = new Element(ev.target);
		if(seldiv.data) {
			this.setSelect(seldiv);
			if(seldiv.data.link) {
				document.location = seldiv.data.link;
			}
		}
		
	}
});
var ExpandableImage = new Class({
	initialize:function(options) {
		
		this.source = $(options.id);
		this.expand = this.source.clone();
		this.coos = {};
		this.coos.shrinked = this.source.getCoordinates();
		this.coos.expanded = options.expandto;
		var dw = this.coos.expanded.width - this.coos.shrinked.width;
		var dh = this.coos.expanded.height - this.coos.shrinked.height;
		this.coos.expanded.left		= this.coos.shrinked.left - dw / 2;
		this.coos.expanded.top		= this.coos.shrinked.top - dh / 2;
		this.coos.expanded.right	= this.coos.expanded.left + dw;
		this.coos.expanded.bottom	= this.coos.expanded.top + dh; 
		
		if(options.limitto) {
			var coos  = $(options.limitto).getCoordinates();
			if(coos.left > this.coos.expanded.left) {
				if(coos.right > this.coos.expanded.right) {
					this.coos.expanded.left = coos.left;
					this.coos.expanded.right = this.coos.expanded.left + dw;
				}
			}
			if(coos.bottom < this.coos.expanded.bottom) {
				if(coos.top < this.coos.expanded.top) {
					this.coos.expanded.bottom = coos.bottom;
					this.coos.expanded.top = this.coos.expanded.bottom - dh;
				}
			}
		}
		
		this.expand.inject(document.body);
		this.expand.setStyles({'position':'absolute', 'left':this.coos.shrinked.left+'px', 'top':this.coos.shrinked.top+'px'});
		this.expand.addEvent('click', this.expandit.bindWithEvent(this));
	},
	expandit: function(ev) {
		ev.stop();
		this.expand.removeEvents('click');
		var effects = new Fx.Styles(this.expand, {onComplete:function()
										{
											this.expand.addEvent('click', this.shrinkit.bindWithEvent(this));
										}.bind(this)
						});
		effects.start({	'left': this.coos.expanded.left,
						'top': this.coos.expanded.top,
						'width': this.coos.expanded.width,
						'height': this.coos.expanded.height});
	
	},
	shrinkit:function(ev) {
		ev.stop();
		this.expand.removeEvents('click');
		var effects = new Fx.Styles(this.expand, {onComplete:function()
										{
											this.expand.addEvent('click', this.expandit.bindWithEvent(this));
										}.bind(this)
						});
		effects.start({	'left': this.coos.shrinked.left,
						'top': this.coos.shrinked.top,
						'width': this.coos.shrinked.width,
						'height': this.coos.shrinked.height});
	}
});



var ExpandableDetails = new Class({
	initialize: function(options) {
		this.trigger = $(options.triggerid);
		this.pane = $(options.paneid);
		this.trigger.addEvent('click', this.toggle.bindWithEvent(this));
		this.slide = new Fx.Slide(this.pane);
		if(options.closeonstart) 
			this.slide.hide();
		if(options.tclose) 
			$(options.tclose).addEvent('click', this.toggle.bindWithEvent(this));	
		this.closeothers = $pick(options.closeothers, false);
		ExpandableDetails.expandablesAll[ExpandableDetails.expandablesAll.length] = this;
		
	},
	is_open:function() {
		return this.slide.open;
	},
	resize:function() {
		this.slide.hide();
		this.slide.show();
	},
	open: function(){
		if(this.closeothers) {
			ExpandableDetails.expandablesAll.each(function(item){
					if(item.is_open()) {
						item.close();
					}
				}.bind(this));
		}
		this.trigger.removeClass('closed');
		this.trigger.addClass('opened');
		this.slide.slideIn();
	},
	close: function() {
		this.trigger.removeClass('opened');
		this.trigger.addClass('closed');
		this.slide.slideOut();
	},
	toggle: function(ev) {
		ev.stop();
		if(this.is_open()) {
			this.close();
		} else {
			this.open();
		}
		//this.trigger.toggleClass('opened');
		//this.trigger.toggleClass('closed')
		//this.slide.toggle();
	}
	
});

ExpandableDetails.expandablesAll = new Array();


