/**
 * Contents
 *
 * Make ajax json request for Data Hata
 *
 * @version        0.1
 *
 * @license      MIT-style license
 * @author       GIGA Team / vladimir.seleznev@gmail.com
 * @copyright    Author
 */

var Contents = new Class({

	Implements: [Events, Options, Chain],

	options: {
		url: 'index.php',
		action: 'content',
		postData: $empty,
		container: null,
		setHtml: true,
		loader: true,
		loaderColor: '#000000',
		opacity: 0.6,
		onSend: $empty,
		onLoad: $empty,
		onShow: $empty,
		onError: $empty
	},

	initialize: function(module, options) {
		this.setOptions(options);
		this.options.postData = new Hash();
		this.options.postData.set('module', module);
		this.options.container = $(this.options.container) || $('content');
	},

	sendForm: function(form, action) {
		if(!$(form) || $(form).get('tag') !== 'form') return;

		var postData = new Hash({'url': $(form).get('action'), 'action': (action || this.options.action)});
		var types = new Hash({'text': 0, 'select': 1, 'textarea': 2, 'checkbox': 3, 'radiobox': 4, 'hidden': 5});

		$(form).getElements("input[type!=submit], textarea, select").each(function(element) {
			var type = element.get('type') || element.get('tag');
			if(element.get('name') && types.get(type)!=null) {
				switch(types.get(type)) {
					case types.get('checkbox'):
						postData.set(element.get('name'), element.get('checked')?1:0);
						break;
					case types.get('radiobox'):
						if(!element.get('checked')) {
							break;
						}
					default:
						postData.set(element.get('name'), element.get('value'));
						break;
				}
			}
		});
		this.send(postData);
	},

	send: function(data) {
		var postData = new Hash(data);
		postData.set('action', postData.get('action') || this.options.action);

		var waiter = null;
		var jsonRequest = new Request.JSON({url: this.options.url,
			onRequest: function() {
				this.fireEvent('onSend');
				waiter = this.waiter();
			}.bind(this),
			onComplete: function(response) {
				var thisObject = this;
				this.chain(
					function() {
						if(response) {
							if(this.options.setHtml && response.content != null) {
								this.options.container.set('html', response.content).fade('hide').fade('in');
							}
							this.fireEvent('onLoad', response);
						}
						this.callChain();
					},
					function() {
						new Fx.Tween($(waiter), {property: 'opacity', duration: 'long'}).start(0).chain(
							function() {
								thisObject.callChain();
							}
						);
					},
					function() {
						$(waiter).destroy();
						this.fireEvent('onShow', response);
					}
				);
				this.callChain();
			}.bind(this),
			onFailure: function() {
				this.fireEvent('onError');
			}.bind(this)
		}).post((postData).combine(this.options.postData));
	},

	waiter: function() {
		if(!this.options.loader) return;

		var layer = $(this.options.container).getCoordinates();
		var loaderContainer = new Element("div", {
			'class': 'loaderContainer',
			'styles': {
				position: 'absolute',
				top: layer.top + $(this.options.container).getStyle("padding-top").toInt(),
				left: layer.left + $(this.options.container).getStyle("padding-left").toInt(),
				width: layer.width - $(this.options.container).getStyle("padding-left").toInt() - $(this.options.container).getStyle("padding-right").toInt(),
				height: layer.height - $(this.options.container).getStyle("padding-top").toInt() - $(this.options.container).getStyle("padding-bottom").toInt(),
				"opacity": this.options.opacity,
				"background-color": this.options.loaderColor
			}
		});
		$(this.options.container).getParent().grab(loaderContainer);
		return loaderContainer;
	}

});

var Contacts = new Class({

	Implements: [Events, Options, Chain],

	options: {
		inside: false
	},

	initialize: function(form, options) {
		this.setOptions(options);
		this.form = $(form) || null;
		this.form.addEvent('submit', function() {
			this.submit();
			return false;
		}.bind(this));
		this.render();
	},

	render: function() {
		if(!this.form) return;
		if(this.options.inside) {
			this.form.getElements('input[type!=submit],textarea').each(function(element) {
				var label = element.getPrevious('label');
				label.setStyle('display', 'none');
				element.set('value', label.get('text').clean());
				element.addEvents({
					'focus': function() {
						if(element.get('value').clean() === label.get('text').clean()) {
							element.set('value', '');
						}
					},
					'blur': function() {
						if(element.get('value').clean() === "") {
							element.set('value', label.get('text').clean());
						}
					}
				});
			});
		}
	},

	submit: function() {
		new Contents('contacts', {onShow: function(response) {
			if(response.message) {
				response.message.each(function(item) {
					$('contact' + item.id).highlight('#f00');
				});
			} else if(response.content) {
				$('content').getElement('div.contacts').set('html', response.content);
			}
			//alert(JSON.encode(response));
		}, setHtml: false, container: this.form.getParent("div.contacts")}).sendForm(this.form);
	}

});

function swiff(content) {
	if(!$(content) || !$(content).getElement('div.status') || !$(content).getElement('ul.list')) return;

	var uploader = new FancyUpload2($(content).getElement('div.status'), $(content).getElement('ul.list'), {
		url: $(content).getElement('form').action,
		path: 'templates/core-files/libs/FancyUpload2/Swiff.Uploader.swf',
		instantStart: true,
		typeFilter: {'Изображения (*.jpg, *.jpeg, *.gif, *.png)': '*.jpg; *.jpeg; *.gif; *.png'},
		container: $(content).getElement('div.swiff'),
		data: {fill: true, width: 300, height: 300},

		onLoad: function() {
			var thisObject = this;
			$(content).getElement('input[name=browse]').addEvent('click', function() {
				thisObject.browse();
			});
		},
		onSelect: function() {
			$(content).getElement('div.image').empty().addClass('loaderContainer');
			$(content).getElement('div.image').setStyles({width: this.options.data.width, height: this.options.data.height});
		},
		onComplete: function(file, response) {
			this.removeFile();
			var response = JSON.decode(response);
			if(response.result === 'success' && response.thumbnail) {
				image = Asset.image(response.thumbnail + '?' + $time(), {onLoad: "this.getParent().removeClass('loaderContainer')"});
				$(content).getElement('div.image').grab(image);
			}
		}
	});

}

function insertComment(form) {
	var formPage = $(form).getElement('[name=page]');
	var formLogin = $(form).getElement('[name=login]');
	var formMessage = $(form).getElement('[name=message]');
	var formCaptcha = $(form).getElement('[name=captcha]');

	content('pages', 'comments', {action: 'commentsInsert', page: formPage.value, login: formLogin.value, message: formMessage.value, captcha: formCaptcha.value}, messageChars);
}

function removeComment(response, element) {
	if(response && response.deleted == 1) {
		var comment = $(element).getParent('div.comment');
		comment.highlight('#600', '#f00');
		comment.set('slide', {duration: 'long', transition: 'bounce:in'});
		comment.slide('out');
		var counter = $('comments').getElement('span.counter');
		if(conter) {
			counter.set('text', parseInt(counter.get('text')) - 1);
		}
	}
}

