﻿Ext.ns('R');

R.pre = [];
R.rv = 0;

R.preloadImgs = function(imgs){
	for(var i = 0; i < imgs.length; i++) {
		R.pre.push(new Image());
		R.pre[R.pre.length - 1].src = imgs[i];
	}
}

/*
 * Центрирует блок
 * k — коэффициент центрирования по высоте (по умолчанию = 2, т.е. посреди экрана)
 * align — куда прижимать [ t(op) | b(ottom) ]
 */
R.center = function(el, k, align) {
	k = (Ext.isEmpty(k)?2:k);
	align = (Ext.isEmpty(align)?'t':align);
	var b = Ext.getBody();
	var x, y;
	
	x = b.getWidth() / 2 - el.getWidth() / 2;
	y = b.getHeight() / k - el.getHeight() / 2;
	
	if(align == 'b')
		y = b.getHeight() - y;
	
	
	el.setXY([x, y]);
}

R.resetStarsRate = function(stars) {
	if(!Ext.isEmpty(stars) && stars.length) {
		Ext.each(stars, function(item) {
			Ext.get(item).removeClass('rate');
		});
	}
}

R.removeAllListeners = function(stars) {
	if(!Ext.isEmpty(stars) && stars.length) {
		Ext.each(stars, function(item) {
			Ext.get(item).removeAllListeners();
		});
	}
}

R.calcBarWidth = function() {
}

Ext.onReady(function() {
	
	Ext.Direct.on('exception', function(e){
		var msg = Ext.Msg;
		msg.setIcon(Ext.MessageBox.ERROR);
		msg.alert('Exception', '<b>'+e.message+'</b><hr />'+Ext.util.Format.nl2br(e.where));
	});
	
	R.c = Ext.get('container');
	R.star = R.c.child('.star');
	R.b = Ext.get('bar');
	R.cnt = Ext.get('counter');
	
	R.preloadImgs([
		// '../i/star-hover.png'
		'../i/star-disabled.png'
	]);


	if(!Ext.isEmpty(S.rv)) {
		R.b.setWidth(S.rv * R.star.getWidth());
	}


	
	// begin positioning & apply mousemove
	if(!Ext.isEmpty(R.c) && !Ext.isEmpty(R.b)) {
		R.c.setWidth(R.star.getWidth() * 5);
		R.center(R.c);
		R.center(R.cnt, 4, 'b');
		
		window.onresize = function() {
			R.center(R.c);
			R.center(R.cnt, 4, 'b');
		}
		
		if(R.c.hasClass('click')) {
			R.c.on('mouseover', function(e, t) {
				R.b.removeClass('default');
			}, this);

			R.c.on('mouseout', function(e, t) {
				R.b.addClass('default');
				R.b.setWidth(S.rv * R.star.getWidth());
			}, this, {
				delegate: '.star'
			});
			
			R.c.on('mousemove', function(e, t) {
				var xy = e.getXY();
				var w = (xy[0] - R.b.getX()) / R.star.getWidth();
				var w2 = Math.floor(w) + 1;
				//w2 = (w < .5?0:w2);
				R.rv = w2;
				w2 = w2 * R.star.getWidth();
				R.b.setWidth(w2);
				//R.b.scale(w2, R.b.getHeight());
			}, this);
		}
	}
	// end positioning & apply mousemove
	
	Ext.getBody().parent().show(true);
	
	// begin apply rate click
	var stars = Ext.query('.star');
	if(!Ext.isEmpty(stars) && stars.length && R.c.hasClass('click')) {
		Ext.each(stars, function(item) {
			Ext.get(item).on('click', function() {
				R.b.setWidth(S.rv * R.star.getWidth());
				R.resetStarsRate(stars);
				Ext.get(item).addClass('rate');
				R.removeAllListeners(stars);
				R.removeAllListeners([R.c]);
				R.c.addClass('xhr');
				
				Ext.php.Rate.rate(
					 R.rv
					,function(result) {
						//console.log(result);
						if(result && result.success == true) {
							S.rv = result.data.sum / result.data.cnt;
							R.b.highlight('ffff5f', {
								endColor: 'ff0000'
								,duration: (S.rv < .5?0:(S.rv > 4?1:.5))
							}).scale(S.rv * R.star.getWidth(), R.b.getHeight());
							//R.b.setWidth(S.rv * R.star.getWidth());
						}
						R.c.removeClass('xhr').removeClass('click');
						R.cnt.pause(2).fadeOut({
							callback: function() {
								R.cnt.update(result.data.msg);
								R.cnt.fadeIn();
							}
							,scope: this
						})
					}
					,this
				)
			}, this);
		});
	}
	// end apply rate click
	
});

