 
Element.extend({
	formToJson: function(){		
		
		 var obj = {};
		 this.getFormElements().each(function(el){
			 var name 	= el.name;
			 var value 	= el.getValue();
			 if (value === false || !name || el.disabled) return;
			 
			 var qs = function(val){
			 	obj[name] = val;
		 	 };
		 	 
		 if ($type(value) == 'array') value.each(qs);
		 else qs(value);
		 });
		return obj;
		
	}
});

 
var getDays = new Class({
	options: {
		url		: '/register/getDaysInMonthJSON',
		day	: null,
		month	: null,
		year	: null
	},
	initialize: function (options) {
		var me = this;
		this.setOptions(options);
		$(this.options.month).addEvent('change', function (event) {
			me.getDaysInMonth();
		});
		$(this.options.year).addEvent('change', function (event) {
			me.getDaysInMonth();
		});
	},
	getDaysInMonth: function () {
		var me = this;
		if ($(this.options.year).value!= '' && $(this.options.month).value != '') {
			new Json.Remote(this.options.url, {
				onComplete: function(days) {
					var cmb = $(me.options.day);
					cmb.getElements('option').each(function (opt) {
						if (opt.value > 0) {
							opt.remove();
						}
					});
					for(i = 1; i<= days; i++) {
						var myNewOption = new Option(i, i, false, false);
						cmb.options[cmb.options.length] = myNewOption;
					}
					cmb.removeProperty('disabled');
				}
			}).send({'y':$(this.options.year).value, 'm': $(this.options.month).value});
		}
	}	
});
getDays.implement(new Options, new Events);

function DoBench(x){
    var startTime,endTime,gORl='local';
    if(x==1){
        startTime=new Date().getTime();
        Bench1();
        endTime=new Date().getTime();
    }else{
        gORl='global';
        startTime=new Date().getTime();
        Bench2();
        endTime=new Date().getTime();
    }
	alert('Elapsed time using '+gORl+' variable: '+((endTime-startTime)/1000)+' seconds.');
}

var SpeedyG = new Class({
	options: {
		list: null,
		onIteration: Class.empty,
		onComplete: Class.empty
	},
	initialize: function (options) {
		this.aux = [];
		this.setOptions(options);
		this.options.length = this.options.list.length
		this.i = 0;
		this.j = 0;
		this.i5 = this.i+4;
		this.i20 = this.i+19;
		this.item = null;
	},
	doIteration: function () {
		var i = 0;
		var i20 = i+19;
		var item = null;
		while(item = this.options.list[i20]) {
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			i20 = i+19;
		}
		var i5 = i+4;
		while(item = this.options.list[i5]) {
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			this.fireEvent('onIteration', i++);
			i5 = i+4;
		}
		while(item = this.options.list[i]) {
			this.fireEvent('onIteration', i);
			i++;
		}
		this.fireEvent('onComplete');
		return this.options.list;
	},
	doDelayIter: function () {
		var me = this;
		var item = null;
		while(item = this.options.list[this.i20]) {
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.i20 = this.i+19;
			if ((this.i20+1)%140 == 0) {
				if (this.options.length > this.i+70) {
					setTimeout(function() {
							me.doDelayIter();
					},1);
					return true;
				}
			}
		}
		this.i5 = this.i+4;
		while(item = this.options.list[this.i5]) {
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.fireEvent('onIteration', this.i++);
			this.i5 = this.i+4;
		}
		while(item = this.options.list[this.i]) {
			this.fireEvent('onIteration', this.i);
			this.i++;
		}
		this.fireEvent('onComplete');
	}
});
SpeedyG.implement(new Options, new Events);  
if (String.prototype.sprintf == null) {
	String.prototype.sprintf = function(array){
      	  value = this.toString();
      	  for (var i=0; i < array.length; i++) {
        	   var item = array[i];
         	  value 	= value.replace(/\%s/, item);
        	}
       		return value;
	}
}function setLanguage(lang) {
	var jSonRequest = new Json.Remote("/login/setLangJSON", {onComplete: function(langResponse){
		if(langResponse.success) {
			window.location.reload();
		}
	}}).send({'lang': lang});
}

function logout() {
	var jSonRequest = new Json.Remote("/login/logoutJSON", {onComplete: function(langResponse){
		if(langResponse.success) {
		 
			window.top.location.href = "/home";
		}
	}}).send();
}

window.addEvent('domready', function () {
	var flags = $$('#langFlags a');
	flags.each(function (flag) {
		flag.addEvent('click', function (event) {
			new Event(event).stop();
			setLanguage(flag.lang)
		});
	});
	var lnkLogout = $('lnkHeaderLogout');
	if(lnkLogout) {
		lnkLogout.addEvent('click', function (event) {
			new Event(event).stop();
			logout();
		});
	}
}); 
 
var Waiter = new Class({
	options: {
		baseHref: 'http://www.cnet.com/html/rb/assets/global/waiter/',
		img: {
			src: 'waiter.gif',
			id: 'waitingImg',
			styles: {
				position: 'absolute',
				width: 24,
				height: 24,
				display: 'none',
				opacity: 0,
				zIndex: 999
			}
		},
		imgPosition: {},
		layer:{
			id: 'waitingDiv',
			background: '#fff',
			opacity: 0.9
		},
		fxOptions: {}
	},
	initialize: function(target, options){
		this.target = $(target||document.body);
		this.setOptions(options);
		this.waiterImg = $(this.options.img.id) || new Element('img', $merge(this.options.img, {
			src: this.options.baseHref + this.options.img.src
		})).injectInside(document.body);
		this.waiterDiv = $(this.options.layer.id) || new Element('div', {
			id: this.options.layer.id,
			styles: {
				width: 0,
				height: 0,
				position: 'absolute',
				zIndex: 998,
				display: 'none',
				opacity: 0,
				backgroundColor: this.options.layer.background
			}
		}).injectInside(document.body);
		this.waiterFx = this.waiterFx || new Fx.Elements($$(this.waiterImg, this.waiterDiv), this.options.fxOptions);
	},
 
	toggle: function(element, show) {
		if (this.inTransit) {
			this.chain(this.toggle.bind(this, [element, show]));
			return this;
		}
	 
		element = $(element) || $(this.active) || $(this.target);
		if (!$(element)) return this;
		if (this.active && element != this.active) return this.stop().chain(this.start.bind(this, element));
	 
	 
	 
		if((!this.active || show) && show !== false) this.start(element);
	 
	 
		else if(this.active && !show) this.stop();
		return this;
	},
	start: function(element){
		if (this.inTransit) {
			this.chain(this.start.bind(this, element));
			return this;
		}
		this.inTransit = true;
		element = $(element) || $(this.target);
		var start = function() {
		 
			var dim = element.getComputedSize();
		 
			this.active = element;
			this.waiterImg.setPosition($merge(this.options.imgPosition, {
				relativeTo: element
			})).show();
			this.waiterDiv.setStyles({
				width: dim.totalWidth,
				height: dim.totalHeight,
				display: 'block'
			}).setPosition({
				relativeTo: element,
				position: 'upperLeft'
			});
			this.waiterFx.start({
				0: { opacity:[1] },
				1: { opacity:[this.options.layer.opacity]}
			}).chain(function(){
				this.inTransit = false;
				this.fireEvent('onShow', element);
				this.callChain();
			}.bind(this));
		}.bind(this);

		if (this.active && this.active != element) this.stop(start);
		else start();
		
		return this;
	},
	stop: function(callback){
		if (this.inTransit) {
			this.chain(this.stop.bind(this, callback));
			return this;
		}
		if (!this.active) return this;
		this.inTransit = true;
	 
		this.waiterFx.start({
			0: { opacity:[0]},
			1: { opacity:[0]}
		}).chain(function(){
			this.inTransit = false;
			this.active = null;
			this.waiterDiv.hide();
			this.waiterImg.hide();	
			this.fireEvent('onHide', this.active);
			this.callChain();
			if ($type(callback) == "function") callback.attempt();
		}.bind(this));
		return this;
	}
});
Waiter.implement(new Options, new Events, new Chain);

 
if (typeof Ajax != "undefined") {
	var Ajax = Ajax.extend({
		options: {
			useWaiter: false,
			waiterOptions: {}
		},
		initialize: function(url, options){
			this.parent(url, options);
			if (this.options.useWaiter && this.options.update) {
				this.waiter = new Waiter(this.options.update, this.options.waiterOptions);
				this.addEvent('onComplete', this.waiter.stop.bind(this.waiter));
				this.addEvent('onFailure', this.waiter.stop.bind(this.waiter));
			}
		},
		request: function(data) {
			if (this.waiter) this.waiter.start().chain(this.parent.bind(this, data));
			else this.parent(data);
			return this;
		}
	});
}


    
 

 
Element.extend({

 
	isVisible: function() {
		return this.getStyle('display') != 'none';
	},
 
	toggle: function() {
		return this[this.isVisible() ? 'hide' : 'show']();
	},
 
	hide: function() {
		this.originalDisplay = this.getStyle('display'); 
		this.setStyle('display','none');
		return this;
	},
 
	show: function(display) {
		this.originalDisplay = (this.originalDisplay=="none")?'block':this.originalDisplay;
		this.setStyle('display',(display || this.originalDisplay || 'block'));
		return this;
	},
 
	tidy: function(){
		try {	
			if(this.getValue().tidy())this.value = this.getValue().tidy();
		}catch(e){dbug.log('element.tidy error: %o', e);}
	},
 
	findParent: function(collection){
		return $$(collection).filter(function(el){
			return el.hasChild(this);
		}, this)[0];
	},
 
 
	fxOpacityOk: function(){
		if (!window.ie6)return true;
		var isColor = false;
		try {
			if (new Color(this.getStyle('backgroundColor'))) isColor = true;
		}catch(e){}
		return isColor;
	}
}); 
Element.visible = Element.isVisible;


if(!Element.empty) {
	Element.extend({
		 
		empty: function(){
		 
			return this.setHTML('');
		}
	});
}
 
var $S = $$;
    
  

function sendMessageModal() {
	startModalWindow({
		cssClass : 'ok',
		body : '<p>'+jsLang.LBL_SUBJECT+'</p><input type="text" id="subjectField" class="subjectFldClass"><p>'+jsLang.LBL_MESSAGE+'</p><textarea id="bodyField" class="bodyFldClass"></textarea>',
		title : jsLang.LBL_NEW_MESSAGE,
		footer :'<button type="button" id="btnSendMessage" class="disabled" disabled="disabled">'+jsLang.LBL_SEND+'</button>&nbsp;<button type="button" onclick="guiObj.myModalWindow.hide()">'+jsLang.LBL_CANCEL+'</button>',
		hideOnClick :false,
		onDisplay: function () {

				$('btnSendMessage').addEvent('click', function(event){
					new Event(event).stop();
					var list = [];
					list.push(guiObj.mailObject.receiver);
						var jSonRequest = new Json.Remote('/messages/sendNewMessageJSON', {
							onComplete: function(request){
								guiObj.myModalWindow.hide();
								alert(request.request);
							}
						}).send({
							'l': list,
							's': $('subjectField').value,
							'b': $('bodyField').value
						});

				});
				$('subjectField').addEvent('change', function(){
							getDisabledButton();
				});
				
				$('bodyField').addEvent('change', function(){
							getDisabledButton();
				});
				
				 
				function getDisabledButton(){
					if ( ( $('subjectField').value !='' ) ){
						$('btnSendMessage').disabled =	false;
						$('btnSendMessage').className = '';
					}else{
						$('btnSendMessage').disabled	=	true;
						$('btnSendMessage').className = 'disabled';
					}
				}
		}, 
		onClose : function () {
			this.destroy();
			delete guiObj.myModalWindow;
		}
	})
}

window.addEvent('domready', function(){
	if($('btnMessage')){
		$('btnMessage').addEvent('click', function(e){
			sendMessageModal();
		});
				
				
	}
}) 

function sendAbuseMail(abuseURL) {
	startModalWindow({
		cssClass : 'ok',
		body : '<textarea id="bodyField" class="bodyFldClass"></textarea>',
		title : jsLang.LBL_REPORT_ABUSE,
		footer :'<button type="button" id="btnSendMessage">'+jsLang.LBL_SEND+'</button>&nbsp;<button type="button" onclick="guiObj.myModalWindow.hide()">'+jsLang.LBL_CANCEL+'</button>',
		hideOnClick :false,
		onDisplay: function () {
				$('btnSendMessage').addEvent('click', function(event){
					new Event(event).stop();
						var jSonRequest = new Json.Remote('/abuse/sendAbuseMailJSON', {
							onComplete: function(request){
								guiObj.myModalWindow.hide();
								alert(request.request);
							}
						}).send({
							'u': abuseURL,
							'b': $('bodyField').value
						});
				});
		}, 
		onClose : function () {
			this.destroy();
			delete guiObj.myModalWindow;
		}
	})
}

window.addEvent('domready', function(){
	if($('reportAbuse')){
		$('reportAbuse').addEvent('click', function(e){
			if(window.location.href.indexOf('/detail/')==-1){
				var abuseURL = window.location.href;
				sendAbuseMail(abuseURL);
			}else{
				var abuseURL = URLLink+'#'+HistoryManager.state;
				sendAbuseMail(abuseURL);
			}
		});
				
				
	}
}); 
Element.extend({
 
	getDimensions: function(options) {
		options = $merge({computeSize: false},options);
		var dim = {};
		function getSize(el, options){
			if(options.computeSize) dim = el.getComputedSize(options);
			else {
				dim.width = el.getSize().size.x;
				dim.height = el.getSize().size.y;
			}
			return dim;
		}
		try { 
			dim = getSize(this, options);
		}catch(e){}
		if(this.getStyle('display') == 'none'){
			var before = {};
		 
			['visibility', 'display', 'position'].each(function(style){
				before[style] = this.style[style]||'';
			}, this);
		 
			this.setStyles({
				visibility: 'hidden',
				display: 'block',
				position:'absolute'
			});
			dim = getSize(this, options); 
			this.setStyles(before); 
		}
		return $merge(dim, {x: dim.width, y: dim.height});
	},
 
	getComputedSize: function(options){
		options = $merge({
			styles: ['padding','border'],
			plains: {height: ['top','bottom'], width: ['left','right']},
			mode: 'both'
		}, options);
		var size = {width: 0,height: 0};
		switch (options.mode){
			case 'vertical':
				delete size.width;
				delete options.plains.width;
				break;
			case 'horizontal':
				delete size.height;
				delete options.plains.height;
				break;
		}
		var getStyles = [];
	 
		$each(options.plains, function(plain, key){
			plain.each(function(edge){
				options.styles.each(function(style){
					getStyles.push((style=="border")?style+'-'+edge+'-'+'width':style+'-'+edge);
				});
			});
		});
		var styles = this.getStyles.apply(this, getStyles);
		var subtracted = [];
		$each(options.plains, function(plain, key){ 
			size['total'+key.capitalize()] = 0;
			size['computed'+key.capitalize()] = 0;
			plain.each(function(edge){ 
				size['computed'+edge.capitalize()] = 0;
				getStyles.each(function(style,i){ 
				 
					if(style.test(edge)) {
						styles[style] = styles[style].toInt(); 
						if(isNaN(styles[style]))styles[style]=0;
						size['total'+key.capitalize()] = size['total'+key.capitalize()]+styles[style];
						size['computed'+edge.capitalize()] = size['computed'+edge.capitalize()]+styles[style];
					}
				 
					if(style.test(edge) && key!=style && 
						(style.test('border') || style.test('padding')) && !subtracted.test(style)) {
						subtracted.push(style);
						size['computed'+key.capitalize()] = size['computed'+key.capitalize()]-styles[style];
					}
				});
			});
		});
		if($chk(size.width)) {
			size.width = size.width+this.offsetWidth+size.computedWidth;
			size.totalWidth = size.width + size.totalWidth;
			delete size.computedWidth;
		}
		if($chk(size.height)) {
			size.height = size.height+this.offsetHeight+size.computedHeight;
			size.totalHeight = size.height + size.totalHeight;
			delete size.computedHeight;
		}
		return $merge(styles, size);
	}
});
 	 
 
 
Element.extend({
 
	setPosition: function(options){
		options = $merge({
			relativeTo: document.body,
			position: {
				x: 'center', 
				y: 'center' 
			},
			edge: false,
			offset: {x:0,y:0},
			returnPos: false,
			relFixedPosition: false,
			ignoreMargins: false,
			overflown: [] 
		}, options);
	 
		var parentOffset = {x: 0, y: 0};
		var parentPositioned = false;
		if(this.getParent() != document.body) {
			var parent = this.getParent();
			while(parent != document.body && parent.getStyle('position') == "static") {
				parent = parent.getParent();
			}
			if(parent != document.body) {
				parentOffset = parent.getPosition();
				parentPositioned = true;
			}
			options.offset.x = options.offset.x - parentOffset.x;
			options.offset.y = options.offset.y - parentOffset.y;
		}
	 
	 
		function fixValue(option) {
			if($type(option) != "string") return option;
			option = option.toLowerCase();
			var val = {};
			if(option.test('left')) val.x = 'left';
			else if(option.test('right')) val.x = 'right';
			else val.x = 'center';

			if(option.test('upper')||option.test('top')) val.y = 'top';
			else if (option.test('bottom')) val.y = 'bottom';
			else val.y = 'center';
			return val;
		};
		options.edge = fixValue(options.edge);
		options.position = fixValue(options.position);
		if(!options.edge) {
			if(options.position.x == 'center' && options.position.y == 'center') options.edge = {x:'center',y:'center'};
			else options.edge = {x:'left',y:'top'};
		}
		
		this.setStyle('position', 'absolute');
		var rel = $(options.relativeTo) || document.body;
		if (window.opera) {
      var top = (rel == document.body)?window.getScrollTop():rel.getTop();
      var left = (rel == document.body)?window.getScrollLeft():rel.getLeft();
    } else {
      var top = (rel == document.body)?window.getScrollTop():rel.getTop(options.overflown);
      var left = (rel == document.body)?window.getScrollLeft():rel.getLeft(options.overflown);
    }
		
		if (top < 0) top = 0;
    if (left < 0) left = 0;
		var dim = this.getDimensions({computeSize: true, styles:['padding', 'border','margin']});
		if (options.ignoreMargins) {
			options.offset.x += ((options.edge && options.edge.x == "right")?dim['margin-right']:-dim['margin-left']);
			options.offset.y += ((options.edge && options.edge.y == "bottom")?dim['margin-bottom']:-dim['margin-top']);
		}
		var pos = {};
		var prefY = options.offset.y.toInt();
		var prefX = options.offset.x.toInt();
		switch(options.position.x) {
			case 'left':
				pos.x = left + prefX;
				break;
			case 'right':
				pos.x = left + prefX + rel.offsetWidth;
				break;
			default: 
				pos.x = left + (((rel == document.body)?window.getWidth():rel.offsetWidth)/2) + prefX;
				break;
		};		
		switch(options.position.y) {
			case 'top':
				pos.y = top + prefY;
				break;
			case 'bottom':
				pos.y = top + prefY + rel.offsetHeight;
				break;
			default: 
				pos.y = top + (((rel == document.body)?window.getHeight():rel.offsetHeight)/2) + prefY;
				break;
		};
		
		if(options.edge){
			var edgeOffset = {};
			
			switch(options.edge.x) {
				case 'left':
					edgeOffset.x = 0;
					break;
				case 'right':
					edgeOffset.x = -dim.x-dim.computedRight-dim.computedLeft;
					break;
				default: 
					edgeOffset.x = -(dim.x/2);
					break;
			};
			switch(options.edge.y) {
				case 'top':
					edgeOffset.y = 0;
					break;
				case 'bottom':
					edgeOffset.y = -dim.y-dim.computedTop-dim.computedBottom;
					break;
				default: 
					edgeOffset.y = -(dim.y/2);
					break;
			};
			pos.x = pos.x+edgeOffset.x;
			pos.y = pos.y+edgeOffset.y;
		}
		pos = {
			left: ((pos.x >= 0 || parentPositioned)?pos.x:0).toInt()+'px',
			top: ((pos.y >= 0 || parentPositioned)?pos.y:0).toInt()+'px'
		};
		if(rel.getStyle('position') == "fixed"||options.relFixedPosition) {
			pos.top = pos.top.toInt() + window.getScrollTop()+'px';
			pos.left = pos.left.toInt() + window.getScrollLeft()+'px';
		}

		if(options.returnPos) return pos;
		if(options.smoothMove) new Fx.SmoothMove(this, options).start(); 
		else this.setStyles(pos);
		return this;
	}
});
    
  
window.extend({
 
	supportsPositionFixed: function(){
		if(!window.loaded) return null;
		var test = new Element('div').setStyles({
			position: 'fixed',
			top: '0px',
			right: '0px'
		}).injectInside(document.body);
		var supported = (test.offsetTop === 0);
		test.remove();
		return supported;
	}
});

 
Element.extend({
 
	pin: function(enable){
		var p = this.getPosition();
		if(enable!==false) {
			if(!this.pinned) {
				var pos = {
					top: (p.y - window.getScrollTop())+'px',
					left: (p.x - window.getScrollLeft())+'px'
				};
				if(window.supportsPositionFixed()) {
					this.setStyle('position','fixed').setStyles(pos);
				} else {
					this.setStyles({
						position: 'absolute',
						top: p.y+'px',
						left: p.x+'px'
					});
					window.addEvent('scroll', function(){
						if(this.pinned) {
							var to = {
								top: (pos.top.toInt() + window.getScrollTop())+'px',
								left: (pos.left.toInt() + window.getScrollLeft())+'px'
							};
							this.setStyles(to);
						}
					}.bind(this));
				}
				this.pinned = true;
			}
		} else {
			this.pinned = false;
			var reposition = (window.supportsPositionFixed())?
				{
					top: (p.y + window.getScrollTop())+'px',
					left: (p.x + window.getScrollLeft())+'px'
				}:
				{
					top: (p.y)+'px',
					left: (p.x)+'px'
				};
			this.setStyles($merge(reposition, {position: 'absolute'}));
		}
		return this;
	},
 
	unpin: function(){
		return this.pin(false);
	},
 
	togglepin: function(){
		this.pin(!this.pinned);
	}
});

    
 
 
var Modalizer = new Class({
	defaultModalStyle: {
		'display':'block',
		'position':'fixed',
		'top':'0px',
		'left':'0px',
		'z-index':5000,
		'background-color':'#333',
		'opacity':.8
	},
 
	setModalOptions: function(options){
		this.modalOptions = $merge({
			'width':(window.getScrollWidth()+300)+'px',
			'height':(window.getScrollHeight()+300)+'px',
			elementsToHide: 'select',
			onModalHide: Class.empty,
			onModalShow: Class.empty,
			hideOnClick: false,
			modalStyle: {}
		}, this.modalOptions, options || {});
	},
 
	setModalStyle: function (styleObject){
		this.modalOptions.modalStyle = styleObject;
		this.modalStyle = $merge(this.defaultModalStyle, {
			'width':this.modalOptions.width,
			'height':this.modalOptions.height
		}, styleObject);
		if($('modalOverlay'))$('modalOverlay').setStyles(this.modalStyle);
		return(this.modalStyle);
	},
 
	modalShow: function(options){
		this.setModalOptions(options||{});
		var overlay = null;
		if($('modalOverlay')) overlay = $('modalOverlay');
		if(!overlay) overlay = new Element('div').setProperty('id','modalOverlay').injectInside(document.body);
		overlay.setStyles(this.setModalStyle(this.modalOptions.modalStyle));
		if(window.ie6) overlay.setStyle('position','absolute');
		$('modalOverlay').removeEvents('click').addEvent('click', function(){
			this.modalHide(this.modalOptions.hideOnClick);
		}.bind(this));
		this.modalOptions.onModalShow();
		this.togglePopThroughElements(0);
		overlay.setStyle('display','block');
		return this;
	},
 
	modalHide: function(override){
		if(override === false) return; 
		this.togglePopThroughElements(1);
		this.modalOptions.onModalHide();
		if($('modalOverlay'))$('modalOverlay').setStyle('display','none');
		return this;
	},
	togglePopThroughElements: function(opacity){
		if((window.ie6 || (window.gecko && navigator.userAgent.test('mac', 'i')))) {
			$$(this.modalOptions.elementsToHide).each(function(sel){
				sel.setStyle('opacity', opacity);
			});
		}
	}
}); 
var modalizer = Modalizer; 
var StickyWin = new Class({
	options: {
		onDisplay: Class.empty,
		onClose: Class.empty,
		closeClassName: 'closeSticky',
		pinClassName: 'pinSticky',
		content: '',
		zIndex: 10000,
		className: '',
	 
		edge: false, 
		position: 'center', 
		offset: {x:0,y:0},
		relativeTo: document.body, 
		width: false,
		height: false,
		timeout: -1,
		allowMultipleByClass: false,
		allowMultiple: true,
		showNow: true,
		useIframeShim: true,
		iframeShimSelector: ''
	},
	css: '.SWclearfix:after {content: "."; display: block; height: 0; clear: both; visibility: hidden;}'+
			 '.SWclearfix {display: inline-table;}'+
			 '* html .SWclearfix {height: 1%;}'+
			 '.SWclearfix {display: block;}',
	initialize: function(options){
		this.setOptions(options);
		this.id = this.options.id || 'StickyWin_'+new Date().getTime();
		this.makeWindow();
		if(this.options.content) this.setContent(this.options.content);
		if(this.options.showNow) this.show();
	 
		window.addEvent('domready', function(){
			try {
				if(!$('StickyWinClearfix')) {
					var style = new Element('style').setProperty('id','StickyWinClearfix').injectInside($$('head')[0]);
					if (!style.setText.attempt(this.css, style)) style.appendText(this.css);
				}
			}catch(e){dbug.log('error: %s',e);}
		}.bind(this));
	},
	makeWindow: function(){
	 
		if(!$(this.id)) {
			this.win = new Element('div').setProperty('id',			this.id).addClass(this.options.className).addClass('StickyWinInstance').addClass('SWclearfix').setStyles({
				 	'display':'none',
					'position':'absolute',
					'zIndex':this.options.zIndex
				}).injectInside(document.body);
		} else this.win = $(this.id);
		if(this.options.width && $type(this.options.width.toInt())=="number") this.win.setStyle('width', this.options.width.toInt() + 'px');
		if(this.options.height && $type(this.options.height.toInt())=="number") this.win.setStyle('height', this.options.height.toInt() + 'px');
		return this;
	},
 
	show: function(){
		this.fireEvent('onDisplay');
		if(!this.positioned) this.position();
		this.showWin();
		if(this.options.useIframeShim) this.showIframeShim();
		this.visible = true;
		return this;
	},
	showWin: function(){
		this.win.setStyle('display','block');
	},
 
	hide: function(){
		this.fireEvent('onClose');
		this.hideWin();
		if(this.options.useIframeShim) this.hideIframeShim();
		this.visible = false;
		return this;
	},
	hideWin: function(){
		this.win.setStyle('display','none');
	},
	destroyOthers: function() {
		if(!this.options.allowMultipleByClass || !this.options.allowMultiple) {
			$$('div.StickyWinInstance').each(function(sw) {
				if(!this.options.allowMultiple || (!this.options.allowMultipleByClass && sw.hasClass(this.options.className))) 
					sw.remove();
			}, this);
		}
	},
 
	setContent: function(html) {
		if(this.win.getChildren().length>0) this.win.empty();
		if($type(html) == "string") this.win.setHTML(html);
		else if ($(html)) this.win.adopt(html);
		this.win.getElements('.'+this.options.closeClassName).each(function(el){
			el.addEvent('click', this.hide.bind(this));
		}, this);
		this.win.getElements('.'+this.options.pinClassName).each(function(el){
			el.addEvent('click', this.togglepin.bind(this));
		}, this);
		return this;
	},
	
	position: function(){
		this.positioned = true;
		this.win.setPosition({
			relativeTo: this.options.relativeTo,
			position: this.options.position,
			offset: this.options.offset,
			edge: this.options.edge
		});
		if(this.shim) this.shim.position();
		return this;
	},
 
	pin: function(pin) {
		if(!this.win.pin) {
			dbug.log('you must include element.pin.js!');
			return false;
		}
		this.pinned = $pick(pin, true);
		return this.win.pin(pin);
	},
 
	unpin: function(){
		this.pin(false);
	},
 
	togglepin: function(){
		this.pin(!this.pinned);
	},
	makeIframeShim: function(){
		if(!this.shim){
			this.shim = new IframeShim({
				element: (this.options.iframeShimSelector)?this.win.getElement(this.options.iframeShimSelector) : $('StickyWinOverlay') || this.win,
				display: false,
				name: 'StickyWinShim'
			});
		}
	},
	showIframeShim: function(){
		if(this.options.useIframeShim) {
			this.makeIframeShim();
			this.shim.show();
		}
	},
	hideIframeShim: function(){
		if(this.options.useIframeShim)
			this.shim.hide();
	},
 
	destroy: function(){
		this.win.remove();
		if(this.options.useIframeShim) this.shim.remove();
		if($('StickyWinOverlay'))$('StickyWinOverlay').remove();
	}
});
StickyWin.implement(new Options);
StickyWin.implement(new Events);

var stickyWin = StickyWin;
    
 
 
var StickyWinFx = StickyWin.extend({
	initialize: function(options){
		this.parent($merge({
			fade: true,
			fadeDuration: 150,
			fadeTransition: Fx.Transitions.sineInOut,
			draggable: false,
			dragOptions: {},
			dragHandleSelector: 'h1.caption',
			resizable: false,
			resizeOptions: {},
			resizeHandleSelector: ''
		}, options));
	},
	setContent: function(html){
		this.parent(html);
		if(this.options.draggable) this.makeDraggable();
		if(this.options.resizable) this.makeResizable();
		return this;
	},
	hideWin: function(){
		if(this.options.fade) this.fade(1,0);
		else this.win.hide();
	},
	showWin: function(){
		if(this.options.fade) {
			this.fade(0,1);
		} else this.win.show();
	},
	fade: function(from,to){
		if(!this.fadeFx) {
			this.win.setStyles({
				'opacity':'0',
				'display':'block'
			});
			this.fadeFx = this.win.effect('opacity', {
				duration: this.options.fadeDuration,
				transition: this.options.fadeTransition
			});
		}
		if (to > 0) this.win.setStyle('display','block');
		this.fadeFx.custom(from,to).chain(function(){
			if(to == 0) this.win.setStyle('display', 'none');
		}.bind(this));

		return this;
	},
	makeDraggable: function(){
		dbug.log('you must include Drag.js, cannot make draggable');
	},
	makeResizable: function(){
		dbug.log('you must include Drag.js, cannot make resizable');
	}
}); 
var modalWinBase = {
	initialize: function(options){
		options = options||{};
		this.setModalOptions($merge(options.modalOptions||{}, {
			onModalHide: function(){
					this.hide(false);
				}.bind(this)
			}));
		this.parent(options);
	},
	show: function(showModal){
		if($pick(showModal, true))this.modalShow();
		this.parent();
	},
	hide: function(hideModal){
		if($pick(hideModal, true))this.modalHide();
		this.parent();
	}
};

 
var StickyWinModal = StickyWin.extend(modalWinBase);
StickyWinModal.implement(new Modalizer);

 
var StickyWinFxModal = (typeof StickyWinFx != "undefined")?StickyWinFx.extend(modalWinBase):Class.empty;
try { StickyWinFxModal.implement(new Modalizer()); }catch(e){}		if (!window.guiObj) {
			window.guiObj = {};
		}
		
		 
		var hideFlashForIE = function hideFlashForIE() {
			if (window.ie) {
				var flashObjects = $$('object');
				flashObjects.each(function (swf, index) {
				 
				 
				 
					$(swf).style.visibility = "hidden";
				});
			}
		}
		
		 
		var showFlashForIE = function showFlashForIE() {
			if (window.ie) {
				var flashObjects = $$('object');
				flashObjects.each(function (swf, index) {
				 
				 
				 
					$(swf).style.visibility = "visible";
				});
			}
		}
				
		  
		function startWaiter(target, height, waiterOpacity){
	 
			var waiterOpacity = waiterOpacity || 0.7;
			if (!height) {
				height = $(target).getCoordinates().height;
			}
			window.guiObj.myWaiter = new Waiter($(target), {
				baseHref: '/images/',
				img: {
					src: 'wait_2.gif'
				},
				layer:{
					opacity	: waiterOpacity,
					height	: height
				}					
			}).start();
		}
		
		  
		function stopWaiter (waiter) {
			if (waiter) {
				waiter.stop();
			} else {
				try {
					window.guiObj.myWaiter.stop();
					delete window.guiObj.myWaiter;
				} catch (e){}
			}
		}
		
		  
		function startModalWindow(winObj) {
		 
			 
			
			if ($type(winObj) != false) {
				
				var cssClass 	= $type(winObj.cssClass)!= false ? winObj.cssClass 	: '';
				var title		= $type(winObj.title) 	!= false ? winObj.title 	: '';
				var body		= $type(winObj.body) 	!= false ? winObj.body 		: 'WAMBA 3.0';
				var footer		= $type(winObj.footer) 	!= false ? winObj.footer 	: '';
				
				var onDisplay	= winObj.onDisplay		|| Class.empty;
				var onClose		= winObj.onClose		|| Class.empty;
				
			 
				
				if ($type(winObj.hideOnClick) != false) {
					if (winObj.hideOnClick == true) {
						var hideBinding = 'onclick="guiObj.myModalWindow.modalHide()"';
					}
					else {
						var hideBinding = '';
					}
				} else {
					winObj.hideOnClick = true;
					var hideBinding = 'onclick="guiObj.myModalWindow.modalHide()"';
				}
			} else {
				var cssClass 	= 'ok';
				var title		= '';
				var body		= 'WAMBA 3.0';
				var footer		= '';
			}
			
			 
			
			guiObj.myModalWindow = new StickyWinFxModal({
				content			: '<div class="window ' + cssClass + '" ' + hideBinding + '><div class="header"><h3>' + title + '<\/h3><\/div><div class="body"><p>' + body + '<\/p><\/div><div class="footer"><p class="explanation">' + footer + '<\/p><\/div><\/div>',
				position		: 'center', 
				edge			: 'center', 
				fade			: true, 
				hideOnClick		: winObj.hideOnClick, 
				fadeDuration	: 500,
				className		: 'modalWindow',
				elementsToHide	: 'embed, object',
				useIframeShim	: false,
				zIndex			: 5001,
				
				onDisplay		: onDisplay,
				onClose			: onClose
			});
			
			guiObj.myModalWindow.pin();
			hideFlashForIE();
			guiObj.keyDownObserver = document.addEvent('keydown', function(event){
			    event = new Event(event);
			    if (event.key == 'esc') {
			    	stopModalWindow ();
			    }
			});
		}
		

		  
		function stopModalWindow (modalWindow) {
			showFlashForIE();
			if (modalWindow) {
				if($('modalOverlay')){
					$('modalOverlay').remove();
				}
				guiObj.myModalWindow.destroy();
				delete guiObj.myModalWindow;
			 
			} else {
				try {
					if($('modalOverlay')){
						$('modalOverlay').remove();
					}
					guiObj.myModalWindow.destroy();
					delete guiObj.myModalWindow;
				 
				 
				} catch (e) {
					
				}
			}
			
			document.removeEvent(guiObj.keyDownObserver);
			delete guiObj.keyDownObserver;
		}
		
		 
		function alert(txt, cssClass) {
			var cssClass 	= $type(cssClass)!= false ? cssClass 	: 'warning';
			var title 		= "" 
			
		 
			
			try{
				if (txt && txt.test("<br />")) {
					txt  = txt.replace(/\r\n/g, "<br />");
				}
			} catch (e) {}
			
			startModalWindow({
				cssClass	: cssClass,
				body  		: txt,
			 
				title 		: window.jsLang[title],
				footer		: '<button id="btnAlertClose" style="float:right" type="button" >Aceptar</button><br style="clear:right" />',
				hideOnClick	: true,
				onClose		: function(){
					if($('modalOverlay')){
						$('modalOverlay').remove();
					}
					guiObj.myModalWindow.destroy();
					delete guiObj.myModalWindow;
				}
			})
		}
		
		 
	 var RateStars = new Class({
	options: {
			i: '1',
			rate: '2',
			rated: '0',
			starsWidht: 25,
			layerWidth: 125,
			container: null,
			selection: null,
			onRate: Class.empty
	},
	initialize: function(options){
		this.options	= options;
		this.setOptions(options);
		this.setRate(this.options.rate);
	},
	rateTotal: function (rate) {
		$$('.ratingTotal').each(function(obj){
			$(obj).setHTML(""+rate+"");
		})
	},
	setTotalRate: function (totalRate){
		$$('.ratingTotalCount').setHTML(""+totalRate+"");
	},
	setRated: function (rated){
		this.options.rated = rated;
	},
	setRate: function(rate){
		this.rateTotal(rate);
		$$('.stars').each(function(obj){
			$(obj).remove();
		})
		var me = this;
		newPos = 0;
		for(i = 1; i<=rate; i++){
			newPos = newPos + this.options.starsWidht;
		}
		newPos = newPos - this.options.layerWidth;
		var container = new Element('div');
		$(container).addClass('stars');
		$(container).setStyle('background-position',newPos+'px');
		$(this.options.container).adopt(container);
	
		if(this.options.rated>0){
			newPos = 0;
			for(i = 1; i<=this.options.rated; i++){
				newPos = newPos + this.options.starsWidht;
			}
			newPos = newPos - this.options.layerWidth;
		 
			if ($(this.options.selection) != null){
				this.selectionStars = new Element('div');
				$(this.selectionStars).addClass('stars');
				$(this.selectionStars).setStyle('background-position',newPos+'px');
				$(this.options.selection).adopt(this.selectionStars);
				$(this.options.selection).getPrevious().setStyle('display','block');
				$(this.options.selection).setStyle('display','none');
			}
		}else{
			this.selectionStars = new Element('ul').addClass('stars');
			for(i=1;i<=5;i++){
				oneStar = new Element('li').addEvent('mouseenter',function(){
					me.overRate(this.value);
				}).addEvent('mouseleave',function(){
					me.overRate(me.options.rate);
				}).addEvent('click',function(){
					me.rate(this.value);
				});
				oneStar.setHTML('&nbsp;');
				oneStar.addClass('oneStar');
				oneStar.value = i;
				$(this.selectionStars).adopt(oneStar);
			}
		 
			if ($(this.options.selection) != null){
				$(this.options.selection).adopt(this.selectionStars);
				$(this.options.selection).getPrevious().setStyle('display','none');
				$(this.options.selection).setStyle('display','block');		
				this.options.rate = rate;
				this.overRate(me.options.rate);
			}
		}		
	},
	disable: function () {
		$$('.oneStar').each(function (li) {
			$(li).removeEvents('click');
			$(li).removeEvents('mouseenter');
		});
		 
	},
	overRate: function(rate){
		newPos = 0;
		for(i = 1; i<=rate; i++){
			newPos = newPos + this.options.starsWidht;
		}
		newPos = newPos - this.options.layerWidth;
		this.selectionStars.setStyle('background-position',newPos+'px');
	},
	rate: function(rate){
		this.fireEvent('onRate',rate);
	}
});
RateStars.implement(new Options);
RateStars.implement(new Events); 
var CheckboxesHandler = new Class({
	options: {
		container: 'content'		
	},
	initialize: function (options) {
		this.setOptions(options);
	},
	checkAll: function () {
		$(this.options.container).getElements('input[type=checkbox]').each(function (input, i){
			input.checked = true;
		});
	},
	uncheckAll: function () {
		$(this.options.container).getElements('input[type=checkbox]').each(function (input, i){
			input.checked = false;
		});
	},
	getChecked: function() {
		var list = [];
		$(this.options.container).getElements('input[type=checkbox]').each(function (input, i){
			if (input.checked){
				list.push(input);
			}
		});
		return list;
	},
	getNotChecked: function () {
		var list = [];
		$(this.options.container).getElements('input[type=checkbox]').each(function (input, i){
			if (!input.checked){
				list.push(input);
			}
		});
		return list;
	},
	toggleChecked: function() {
		$(this.options.container).getElements('input[type=checkbox]').each(function (input, i){
			if (input.checked){
				input.checked = false;
			} else {
				input.checked = true;
			}
		});
	},
	getIds: function() {
		var list = [];
		$(this.options.container).getElements('tbody input[type=checkbox]').each(function (input, i){
			if (input.checked){
				var obj = input;
				while ($(obj).parentNode && !$(obj).getProperty('id')) {
					obj = $(obj).parentNode;
				}
				if ($(obj).getProperty('id')) {
					list.push($(obj).getProperty('id'));
				}				
			}
		});
		return list;
	}
});
CheckboxesHandler.implement(new Options, new Events);var TreeView = new Class({ 
	options: {
		id					: this.id,
		collapsable			: false,
		autoexpand			: true,
		onExpand			: Class.empty
	},	 
	initialize: function(options) {
		this.setOptions(options);
		this.addEvents();
	},
	addEvents: function() {
		var me = this;
		if (this.options.autoexpand) {
			$(this.options.id).getChildren().each(function(li){
				li.getFirst().addEvent('click', function(event) {
						me.expand(li);			
				});
			});
		}
	},
	expand: function (folder) {
		if (!folder.hasClass('open')){
			this.fireEvent('onExpand', folder);
			if (this.options.collapsable) {
				this.collapseAll();
			}
			folder.addClass('open');
		} else {
			folder.removeClass('open');
		}					
			
	},
	collapseAll: function() {
		$(this.options.id).getChildren().each(function(li){
			li.removeClass('open');
		});
	}
});
TreeView.implement(new Events, new Options);var PREVIOUS = "&lt;" + jsLang.LBL_BEFORE_PAGE;
var NEXT = jsLang.LBL_NEXT_PAGE + "&gt;";

var PaggingModule = new Class({
	options: {
			count		: 0,
			pagesize	: 20,
			page		: 1,
			owner 		: null,
			onPagging	: Class.empty,
			maxShowPages: 12,
			offset		: 3
	},
	initialize: function(options){
		this.options	= options;
		this.setOptions(options);
		this.options.maxShowPages = 12;
		this.options.offset = 3;
		this.ul = new Element('ul').addClass('paggingList clearfix');
		this.loadPagging();
	},
	loadPagging: function() {
		var me = this;
		var ul = $(this.ul);
		$(ul).getChildren().each(function(child){
			child.remove();
		});
		if (this.options.page > 1) {
			var previousButton = new Element('a').setHTML(PREVIOUS);
			var previous = new Element('li').adopt(previousButton).addClass('previous');
			ul.adopt(previous);
			previous.addEvent('click', function(event) {
				var e = new Event(event);
				e.stop();
				var newPage = me.options.page.toInt()-1;
				if (me.options.owner) {
					me.options.owner.paggingNotify(newPage);
					me.reloadCount();
				} else {
					me.fireEvent('onPagging',newPage);
				}
				me.switchPage(newPage);
			});
		}
		if (this.lastPage()>1) {
			var minorValue 	= this.options.page-this.options.offset;
			var mayorValue 	= this.options.page + this.options.offset;
			var lastPages 	= this.lastPage() - this.options.offset;
			var leftPoints 	= false;
			var rightPoints = false;
			for (i = 1; i<=this.lastPage(); i++) {
				if (i!=this.options.page) {
					if (this.lastPage() <= this.options.maxShowPages) {
						var page = this.newPage(i);					
						ul.adopt(page);
					} else {
						if (i <= this.options.offset 
								|| (i < mayorValue 
								&& i > minorValue) 
								|| i > lastPages) {
							var page = this.newPage(i);
							ul.adopt(page);
						} else {
							if (!leftPoints) {
								if (i > this.options.offset && i < minorValue) {
									var page = new Element('li').setText('.....');
									ul.adopt(page);
									leftPoints = true;
								}
							}
							if (!rightPoints) {
								if (i < lastPages && i > mayorValue) {
									var page = new Element('li').setText('.....');
									ul.adopt(page);
									rightPoints = true;
								}
							}
						}
					}
				}
				else {
				 
					var page = new Element('li').setText(i).addClass('activePage');
					ul.adopt(page);
				}
			}	
		}
		if (this.options.page<this.lastPage()) {
			var nextButton = new Element('a').setHTML(NEXT);
			var next = new Element('li').adopt(nextButton).addClass('next');
			ul.adopt(next);
			next.addEvent('click', function(event) {
				var e = new Event(event);
				e.stop();
				var newPage = me.options.page.toInt()+1;
				if (me.options.owner) {
					me.options.owner.paggingNotify(newPage);
					me.reloadCount();
				} else {
					me.fireEvent('onPagging',newPage);
				}				
				me.switchPage(newPage);				
			});
		}
	},
	newPage: function (i) {
		var me = this;
		var page = new Element('li').setHTML(i).addEvent('click', function(event) {
						var e = new Event(event);
						e.stop();
						var newPage = this.number.toInt();
						if (me.options.owner) {
							me.options.owner.paggingNotify(newPage);
							me.reloadCount();
						} else {
							me.fireEvent('onPagging',newPage);
						}						
						me.switchPage(newPage);
					});
		page.number = i;
		return page;
	},
	lastPage: function() {
		record_for_paging = (this.options.count / this.options.pagesize);
		if (record_for_paging > Math.floor(record_for_paging)) {
			last = (Math.floor(record_for_paging)) + 1;
		}
		else {
			last = record_for_paging;
		}
		return last;
	},
	doInjectAfter: function(object) {
		$(this.ul).injectAfter($(object));
	},
	doInjectBefore: function(object) {
		$(this.ul).injectBefore($(object));
	},
	doInjectInside: function(object) {
		$(this.ul).injectInside($(object));
	},
	switchPage: function(page) {
		this.options.page = page;
		this.loadPagging();
	},
	switchCount: function(count) {
		this.options.count = count;
		this.loadPagging();
	},
	reloadCount: function () {
		if (this.options.owner) {
			this.options.count = this.options.owner.options.count;
		}
	},
	switchPageSize: function(pagesize) {
		this.options.pagesize = pagesize;
		this.loadPagging();
	},
	setOwner: function(owner) {
		this.options.owner = $(owner);
		this.loadPagging();
	}
});
PaggingModule.implement(new Options);
PaggingModule.implement(new Events);
var CommentsModule = new Class({
	initialize: function (options) {
		this.options	= options;
		this.setOptions({
			item		: options.item,
			type		: options.type,
			count		: options.count,
			page		: options.page,
			list		: options.list,
			pagesize	: options.pagesize,
			userimg		: options.userimage,
			usernick	: options.usernick,
			userurl		: options.userurl,
			post		: options.post,
			reply		: options.reply | false
		}, options);
		this.list = [];
		var objArray = options.list;
		var me = this;
		this.paggingModule = new PaggingModule({"count"	: this.options.count,
													"pagesize": this.options.pagesize,
													"page"	: this.options.page,
													"owner": me}); 
		this.paggingModule.doInjectAfter($('commentsContent'));
		this.load(objArray);
	},
	load: function (jsonArray) {
		var me = this;
		this.emptyComments();
		this.addComment 	= new Element('div').addClass('commentNode');
		this.addCommentText = new Element('textarea');
		buttonAddComment 	= new Element('button').addClass('bttnCancel').appendText(SEND_COMMENT);
		$(this.addComment).adopt(this.addCommentText);
		$(this.addComment).adopt(buttonAddComment);
		buttonAddComment.addEvent('click', function (event) {
			var e = new Event(event);
			e.stop();
			me.sendComment();
		});
		$('commentBox').adopt(this.addComment);
		
	 
		if (this.options.post && $('postAComment')) {
			$('postAComment').setStyle('visibility','visible');
		}
		else {
			if ($('postAComment')) {
				$('postAComment').setStyle('visibility','hidden');
			}
		}
		if (jsonArray!='') {
			jsonArray = Json.evaluate(jsonArray);			
			if ($type(jsonArray) == 'array') {
				$('commentsContent').adopt(new Element('ul').setProperty('id','commentsList'));
				jsonArray.each(function (obj) {
				 
					obj.target 	= me;
					obj.reply 	= me.options.reply;					
					comment 	= new Comment(obj);
					me.list.push(comment);
					$('commentsList').adopt(comment.li);
				});	
			}
			
			try{
				if (this.options.count == 0) {
					$('commentsList').adopt(
						new Element('li').addClass('commentNode').setStyle('text-align','center').setText(COMMENT_BLANK)
					);
				}	
			}catch(e) {}
		}
	},
	emptyComments: function () {
		var me = this;
		this.list.each(function (obj) {
			me.list.remove(obj);
		})
		$$('.commentNode').each(function (obj) {
			obj.remove();
		});
		if ($('commentsList')) {
			$('commentsList').remove();
		}
	},
	sendComment: function (comment) {
		var me = this;
		var jSonRequest = new Json.Remote('/comments/addJSON/'+this.options.type+'/'+this.options.item, {onComplete: function (request) {
			if (request.status == "1") {
				me.setCount(this.options.count+1);
				me.paggingNotify(1);								
			} 
			else {
				if (request.status == "2") {
					window.location = request.result;
				}
				else {
					alert(request.result);
				}
			}
		}}).send({'text': this.addCommentText.value});
	},
	deleteComment: function (commentId) {
		var me = this;
		var jSonRequest = new Json.Remote('/comments/deleteJSON/'+ me.options.type + '/' + me.options.item + '/' + commentId + '/', 
			{onComplete: function (request) {
				if(request.status == 1){
					me.paggingNotify(1);
				}else{
					alert(request.result);
				}
		}}).send();
		
	},
	setCount: function (count) {
		this.options.count = count;
		commentsModule.paggingModule.switchCount(count);
	},
	paggingNotify: function (page) {
		var me = this;
		commentsModule.paggingModule.switchPage(page);
		var jSonRequest = new Json.Remote('/comments/getJSON/'	+me.options.type
																+'/'+me.options.item+'/'
																+page+'/'
																+me.options.pagesize, 
				{onComplete: function (request) {	
			if (request.status == "1") {
				me.setCount(request.result.count);
				me.load(request.result.list);				
			}
			else {
				if (request.status == "2") {
					window.location = request.login;
				}
				else {
					alert(request.status);
				}
			}
		}}).send();
		this.options.page = page;
	}
});

CommentsModule.implement(new Options);
CommentsModule.implement(new Events);


var Comment = new Class({
	initialize: function (options) {
		this.options	= options;
		this.setOptions({
			i 	: options.i,
			ui 	: options.ui,
			un 	: options.un,
			ul 	: options.ul,
			img : options.img,
			t 	: options.t,
			d 	: options.d,
			target	: options.target,
			reply	: options.reply | false
		}, options);
		this.create()
	},
	create: function () {
		var me = this;
		me.li = new Element('li').addClass('commentNode');
			me.div = new Element('div').addClass('comments').addClass('clearfix').setProperty('id', me.options.i);
				var aImg = new Element('a').setProperty('href', '/profile/public/'+me.options.ui) 
					var img = new Element('img').setProperty('src', me.options.img);
					$(aImg).adopt(img);
			 
				var contentDiv = new Element('div').addClass('commentHolder');
					var p = new Element('p');
						var aName = new Element('a').setProperty('href', '/profile/public/'+me.options.ui).setHTML(me.options.un) 
						$(p).adopt(aName);
						$(p).appendText(" | "+ me.options.d);
					var pText = new Element('p').addClass('comment').setHTML(me.options.t);
					$(contentDiv).adopt(p);
					$(contentDiv).adopt(pText);
					if (me.options.reply) {
						me.pButtons = new Element('p').addClass('btns');	
							var btnComment = new Element('a').addClass('sendComment').appendText(SEND_COMMENT);
							var btnMessage = new Element('a').addClass('sendMessage').appendText(SEND_MESSAGE);
							var btnDelete  = new Element('a').addClass('deleteComment').appendText(DELETE_COMMENT);
							$(me.pButtons).adopt(btnComment);
							$(me.pButtons).appendText(" - ");
							$(me.pButtons).adopt(btnMessage);
							$(me.pButtons).appendText(" - ");
							$(me.pButtons).adopt(btnDelete);
						$(contentDiv).adopt(me.pButtons);
					}					
				$(me.div).adopt(aImg);
				if (me.options.reply) {
					me.divSend = new Element('div');
						me.textArea = new Element('textarea').setProperties({'rows': '3', 'cols':'44'});
						me.sendComment = new Element('button').addClass('bttnSend').appendText(SEND);
						me.cancelComment = new Element('button').addClass('bttnCancel').appendText(CANCEL);
						$(me.divSend).adopt(new Element('span').setText(SEND_COMMENT).addClass('b'));
						$(me.divSend).adopt(me.textArea);
						$(me.divSend).adopt(me.sendComment);
						$(me.divSend).adopt(me.cancelComment);
						$(me.divSend).style.display = 'none';
					$(contentDiv).adopt(me.divSend);
					me.divSendMessage = new Element('div');
						me.textAreaMessage = new Element('textarea').setProperties({'rows': '3', 'cols':'44'});
						me.sendMessage = new Element('button').addClass('bttnSend').appendText(SEND);
						me.cancelMessage = new Element('button').addClass('bttnCancel').appendText(CANCEL);
						$(me.divSendMessage).adopt(new Element('span').setText(SEND_MESSAGE).addClass('b'));
						$(me.divSendMessage).adopt(me.textAreaMessage);
						$(me.divSendMessage).adopt(me.sendMessage);
						$(me.divSendMessage).adopt(me.cancelMessage);
						$(me.divSendMessage).style.display = 'none';
					$(contentDiv).adopt(me.divSendMessage);
					btnComment.addEvent('click', function (event) {
						var e = new Event(event);
						e.stop();
						me.hideSendMessage();
						me.showSend();
					});
					me.cancelComment.addEvent('click', function (event) {
						var e = new Event(event);
						e.stop();
						me.hideSend();
					});
					me.sendComment.addEvent('click', function (event) {
						var e = new Event(event);
						e.stop();
						me.responseComment();
						me.textArea.value = '';
						me.hideSend();
					});
					btnMessage.addEvent('click', function (event) {
						var e = new Event(event);
						e.stop();
						me.hideSend();
						me.showSendMessage();
					});
					me.cancelMessage.addEvent('click', function (event) {
						var e = new Event(event);
						e.stop();
						me.hideSendMessage();
					});
					me.sendMessage.addEvent('click', function (event) {
						var e = new Event(event);
						e.stop();
						me.responseMessage();
						me.textAreaMessage.value = '';
						me.hideSendMessage();
					});
					btnDelete.addEvent('click', function (event) {
						var e = new Event(event);
						e.stop();
						if(confirm(CONFIRM_DELETE_COMMENT)){
							commentsModule.deleteComment(me.options.i);
						}
					});
				}
				$(me.div).adopt(contentDiv);
			$(me.li).adopt(me.div);
			
	},
	showSend: function () {
		$(this.divSend).style.display = 'inline';
		$(this.pButtons).setStyle('display', 'none');
	},
	hideSend: function () {
		$(this.divSend).style.display = 'none';
		$(this.pButtons).setStyle('display', 'inline');
	},
	showSendMessage: function () {
		$(this.divSendMessage).style.display = 'inline';
		$(this.pButtons).setStyle('display', 'none');
	},
	hideSendMessage: function () {
		$(this.divSendMessage).style.display = 'none';
		$(this.pButtons).setStyle('display', 'inline');
	},
	responseComment: function () {
		var me = this;
		var jSonRequest = new Json.Remote('/comments/addJSON/profile/'+this.options.ui, {onComplete: function (request) {
			me.handleSendResponse(request);
		}}).send({'text': this.textArea.value});
	},
	responseMessage: function () {
		var me = this;
		var jSonRequest = new Json.Remote('/messages/sendNewMessageJSON/', {onComplete: function (request) {
			me.handleSendResponse(request);
		}}).send({	'l': [this.options.ui],
					's': 'RE: '+this.options.t,
					'b': this.textAreaMessage.value});
		
	},
	handleSendResponse: function (request) {
		if (request.status == "1") {
			alert(MESSAGE_SUCCESFULL, 'ok'); 
		}
		else {
			if (request.status == "2") {
				window.location = request.login;
			}
			else {
				if (request.status == "0") {
					alert(request.result);
				} else {
					alert(request.status);
				}
			}
		}
	}
});
Comment.implement(new Options);
Comment.implement(new Events);		if (!window.guiObj) {
			window.guiObj = {};
		}
		
		 
		var hideFlashForIE = function hideFlashForIE() {
			if (window.ie) {
				var flashObjects = $$('object');
				flashObjects.each(function (swf, index) {
				 
				 
				 
					$(swf).style.visibility = "hidden";
				});
			}
		}
		
		 
		var showFlashForIE = function showFlashForIE() {
			if (window.ie) {
				var flashObjects = $$('object');
				flashObjects.each(function (swf, index) {
				 
				 
				 
					$(swf).style.visibility = "visible";
				});
			}
		}
				
		  
		function startWaiter(target, height, waiterOpacity){
	 
			var waiterOpacity = waiterOpacity || 0.7;
			if (!height) {
				height = $(target).getCoordinates().height;
			}
			window.guiObj.myWaiter = new Waiter($(target), {
				baseHref: '/images/',
				img: {
					src: 'wait_2.gif'
				},
				layer:{
					opacity	: waiterOpacity,
					height	: height
				}					
			}).start();
		}
		
		  
		function stopWaiter (waiter) {
			if (waiter) {
				waiter.stop();
			} else {
				try {
					window.guiObj.myWaiter.stop();
					delete window.guiObj.myWaiter;
				} catch (e){}
			}
		}
		
		  
		function startModalWindow(winObj) {
		 
			 
			
			if ($type(winObj) != false) {
				
				var cssClass 	= $type(winObj.cssClass)!= false ? winObj.cssClass 	: '';
				var title		= $type(winObj.title) 	!= false ? winObj.title 	: '';
				var body		= $type(winObj.body) 	!= false ? winObj.body 		: 'WAMBA 3.0';
				var footer		= $type(winObj.footer) 	!= false ? winObj.footer 	: '';
				
				var onDisplay	= winObj.onDisplay		|| Class.empty;
				var onClose		= winObj.onClose		|| Class.empty;
				
			 
				
				if ($type(winObj.hideOnClick) != false) {
					if (winObj.hideOnClick == true) {
						var hideBinding = 'onclick="guiObj.myModalWindow.modalHide()"';
					}
					else {
						var hideBinding = '';
					}
				} else {
					winObj.hideOnClick = true;
					var hideBinding = 'onclick="guiObj.myModalWindow.modalHide()"';
				}
			} else {
				var cssClass 	= 'ok';
				var title		= '';
				var body		= 'WAMBA 3.0';
				var footer		= '';
			}
			
			 
			
			guiObj.myModalWindow = new StickyWinFxModal({
				content			: '<div class="window ' + cssClass + '" ' + hideBinding + '><div class="header"><h3>' + title + '<\/h3><\/div><div class="body"><p>' + body + '<\/p><\/div><div class="footer"><p class="explanation">' + footer + '<\/p><\/div><\/div>',
				position		: 'center', 
				edge			: 'center', 
				fade			: true, 
				hideOnClick		: winObj.hideOnClick, 
				fadeDuration	: 500,
				className		: 'modalWindow',
				elementsToHide	: 'embed, object',
				useIframeShim	: false,
				zIndex			: 5001,
				
				onDisplay		: onDisplay,
				onClose			: onClose
			});
			
			guiObj.myModalWindow.pin();
			hideFlashForIE();
			guiObj.keyDownObserver = document.addEvent('keydown', function(event){
			    event = new Event(event);
			    if (event.key == 'esc') {
			    	stopModalWindow ();
			    }
			});
		}
		

		  
		function stopModalWindow (modalWindow) {
			showFlashForIE();
			if (modalWindow) {
				if($('modalOverlay')){
					$('modalOverlay').remove();
				}
				guiObj.myModalWindow.destroy();
				delete guiObj.myModalWindow;
			 
			} else {
				try {
					if($('modalOverlay')){
						$('modalOverlay').remove();
					}
					guiObj.myModalWindow.destroy();
					delete guiObj.myModalWindow;
				 
				 
				} catch (e) {
					
				}
			}
			
			document.removeEvent(guiObj.keyDownObserver);
			delete guiObj.keyDownObserver;
		}
		
		 
		function alert(txt, cssClass) {
			var cssClass 	= $type(cssClass)!= false ? cssClass 	: 'warning';
			var title 		= "" 
			
		 
			
			try{
				if (txt && txt.test("<br />")) {
					txt  = txt.replace(/\r\n/g, "<br />");
				}
			} catch (e) {}
			
			startModalWindow({
				cssClass	: cssClass,
				body  		: txt,
			 
				title 		: window.jsLang[title],
				footer		: '<button id="btnAlertClose" style="float:right" type="button" >Aceptar</button><br style="clear:right" />',
				hideOnClick	: true,
				onClose		: function(){
					if($('modalOverlay')){
						$('modalOverlay').remove();
					}
					guiObj.myModalWindow.destroy();
					delete guiObj.myModalWindow;
				}
			})
		}
		
		 
	 

/* rendered in 0.0232 seconds */
/* memory usage: 0.7MB */