var modalBox = new CtComponent_ModalBox('ctBuyNowModalBox');
modalBox.container.addClassName('ctComponent-modalBox-PayPal');
CtPage.addComponent(modalBox);

var CtPreBuyNow = Class.create({

	termsUrl: null,
	element: null,
	modalBox: null,
	viewer: null,

	initialize: function(htmlElement) {
		this.element = $(htmlElement);
		this.element.observe('click', function(event){
			Event.stop(event);
			this.initModalBox();
			this.modalBox.show(0.1);
		}.bindAsEventListener(this));
		this.termsUrl = this.element.readAttribute('rel');
		this.element.writeAttribute('rel', null);
	},

	initModalBox: function () {
		this.modalBox = CtPage.getComponent('ctBuyNowModalBox');
		this.modalBox.container.setStyle({position: 'fixed'});
		this.modalBox.closeButton.setStyle({top: '-16px', right: '-16px', width: '28px', height: '28px'});
		this.modalBox.closeButton.writeAttribute('href', '#');
		this.viewer = this.modalBox.container.firstDescendant();
		this.modalBox.afterShowCallBack = this.fillContent.bind(this);
	},

	fillContent: function() {
		new Ajax.Request(this.termsUrl, {
			method: 'get',
			onSuccess: function(transport){
				this.viewer.update(transport.responseText );
			}.bind(this),
			onFailure: function() {
				this.modalBox.hide();
			}.bind(this)
		});
	}
});


var CtBuyNow = Class.create({

	attr: null,
	element: null,
	autoRedirect: null,
	counterElement: null,
	count: null,

	initialize: function(htmlElement) {
		this.element = $(htmlElement);
		this.element.observe('click', this.clickHandler.bindAsEventListener(this));
		try {
			this.attr = this.element.readAttribute('rel').evalJSON(true);
			this.autoRedirect = this.element.down('.ctBuyNow-autoredirect-config');
		} catch(ex) {
			return;
		}
		this.element.writeAttribute('rel', null);

		if (this.autoRedirect) {
			try {
				var config = this.autoRedirect.readAttribute('title').evalJSON(true);
				this.autoRedirect.writeAttribute('title', null);
			} catch(ex) {
				alert('Config reading error');
				return;
			}

			this.counterElement = $(config['counter']);
			this.count = config['count'];

			if (this.counterElement) {
				var parent = this;
				function updateTimer() {

					if (parent.count <= 0 || !parent.element.up(1)) {
						return;
					}
					window.setTimeout(updateTimer, 1000);
					parent.count--;
					parent.counterElement.innerHTML = parent.count;
					if (parent.count <= 0) {
						parent.clickHandler();
					}
				}
				window.setTimeout(updateTimer, this.delay)
			}
		}
	},

	clickHandler: function(event) {
		if (event) {
			Event.stop(event);
		}
		this.count = 0;
		var form = new Element('form', {action: this.attr.action, method: this.attr.method});
		for (elementName in this.attr.inputs) {
            form.insert(new Element('input', {type: 'hidden', name: elementName }).setValue(this.attr.inputs[elementName]));
		}
		$$('body')[0].insert(form);
		form.submit();
	}
});

var CtBuyNow_Factory = new (Class.create({
	initialize: function() {
		Event.observe(document, 'dom:loaded', function() { this.refresh() }.bind(this));
	},

	refresh: function(htmlElement) {

		// Buy Now buttons
	    //
		var elements = [];
		if (htmlElement) {
			elements = $(htmlElement).select('.ctBuyNow');
		} else {
			elements = $$('.ctBuyNow');
		}
		for (var i = 0; i < elements.length; i++) {
			elements[i].removeClassName('ctBuyNow');
			new CtBuyNow(elements[i]);
		}

		// Buy Now buttons
	    //
		var elements = [];
		if (htmlElement) {
			elements = $(htmlElement).select('.ctPreBuyNow');
		} else {
			elements = $$('.ctPreBuyNow');
		}
		for (var i = 0; i < elements.length; i++) {
			elements[i].removeClassName('ctPreBuyNow');
			new CtPreBuyNow(elements[i]);
		}
	}
}));

CtPage.registerScript("CtBuyNow");


