var mod_premium_videos = {
	ajax_del_category: new Class({
		category_id: '',
		
		initialize: function(category_id, options) {
			var obj = this;

			obj.category_id = category_id;

			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}
			
			obj.submit.bind(obj)();
		},
		
		events: {
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},		
		
		submit: function() {
			var obj = this;
			var url = '/apps/premium_videos/ajax_del_category';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
				'data[app_premium_videos_category][id]=' + obj.category_id
			));
			
			obj.events.get('before_submit')();
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);

							alert(results.status.message);
							
							obj.events.get('after_submit')();
						}
					} catch(e) {
						console.log(e);
					}
				})
				.send(qry);
		}
	}),



    ajax_deactivate_premium_subscriber: new Class({
		subscriber_id: '',

		initialize: function(subscriber_id, options) {
			var obj = this;

			obj.subscriber_id = subscriber_id;

			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}

			obj.submit.bind(obj)();
		},

		events: {
			after_submit: function() {
			},

			before_submit: function() {
			}
		},

		submit: function() {
			var obj = this;
			var url = '/apps/premium_videos/ajax_deactivate_premium_subscriber';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
				'data[app_premium_videos_subscriber][id]=' + obj.subscriber_id
			));

			obj.events.get('before_submit')();

			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);

							alert(results.status.message);

							obj.events.get('after_submit')();
						}
					} catch(e) {
						console.log(e);
					}
				})
				.send(qry);
		}
	}),


    ajax_activate_premium_subscriber: new Class({
		subscriber_id: '',

		initialize: function(subscriber_id, options) {
			var obj = this;

			obj.subscriber_id = subscriber_id;

			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}

			obj.submit.bind(obj)();
		},

		events: {
			after_submit: function() {
			},

			before_submit: function() {
			}
		},

		submit: function() {
			var obj = this;
			var url = '/apps/premium_videos/ajax_activate_premium_subscriber';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
				'data[app_premium_videos_subscriber][id]=' + obj.subscriber_id
			));

			obj.events.get('before_submit')();

			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);

							alert(results.status.message);

							obj.events.get('after_submit')();
						}
					} catch(e) {
						console.log(e);
					}
				})
				.send(qry);
		}
	}),

    
	
	ajax_edit_category: new Class(),
	
	ajax_new_category: new Class({		
		ajax_windows: [],
		
		initialize: function(options) {
			var obj = this;
			
			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}
			
			obj.load.bind(obj)();
		},
		
		events: {
			after_load: function() {				
			},
			
			before_load: function() {				
			},
			
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},
		
		load: function() {
			var obj = this;
			var url = '/apps/premium_videos/ajax_new_category'
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);
							
							if(results.status.key == 'LOAD_FORM') {
								var html = results.status.data.html;																
								
								obj.ajax_windows['ajax_new_category'] = new leafm.plugins.ajax_window(null, html, {'class':'ajax_new_category'});
								obj.update.bind(obj)();
							}
						}
					} catch(e) {
						console.log(e);
					}										
				})
				.send();
		},
		
		submit: function() {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_category']._el;
			var errors = obj.validate.bind(obj)();
			var url = '/apps/premium_videos/ajax_new_category';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(parent_el.getElement('form').toQueryString()));

			obj.events.get('before_submit')();
			
			if(errors.length == 0) {
				new Request({url: url})
					.addEvent('complete', function(resp) {
						try {
							if($type(JSON.decode(resp)) == 'object') {
								var results = JSON.decode(resp);
								
								if(results.status.key == 'SUCCESS') {
									obj.ajax_windows['ajax_new_category'].close.bind(obj.ajax_windows['ajax_new_category'])();
								}
								
								alert(results.status.message);
								
								obj.events.get('after_submit')();
							}
						} catch(e) {
							console.log(e);
						}
					})
					.send(qry);
			}
			
			leafm.helpers.form.display_errors(parent_el, errors);
		},
		
		update: function(name) {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_category']._el;

			switch(name) {
				case undefined:
					parent_el.getElements('.ctrl_submit').each(function(ctrl) {
						ctrl.addEvent('click', function() {
							obj.submit.bind(obj)();
						});
					});
					break;
			}
		},
		
		validate: function() {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_category']._el;
			var errors = [];
			
			if(parent_el.getElement('input[name="data[app_premium_videos_category][name]"]').value == '') {
				errors.push({
					name: 'data[app_premium_videos_category][name]',
					message: 'Name of Category cannot be empty.'
				});
			}
			
			return errors;
		}
	}),
	
	ajax_del_speaker: new Class({
		speaker_id: '',
		
		initialize: function(speaker_id, options) {
			var obj = this;

			obj.speaker_id = speaker_id;

			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}
			
			obj.submit.bind(obj)();
		},
		
		events: {
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},
		
		submit: function() {
			var obj = this;

			var url = '/apps/premium_videos/ajax_del_premium_speaker';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
				'data[app_premium_videos_speaker][id]=' + obj.speaker_id
			));
			
			obj.events.get('before_submit')();
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);

							alert(results.status.message);
							
							obj.events.get('after_submit')();
						}
					} catch(e) {
						console.log(e);
					}
				})
				.send(qry);
		}
	}),
	
	ajax_del_subcategory: new Class({
		subcategory_id: '',
		
		initialize: function(subcategory_id, options) {
			var obj = this;

			obj.subcategory_id = subcategory_id;

			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}
			
			obj.submit.bind(obj)();
		},
		
		events: {
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},		
		
		submit: function() {
			var obj = this;
			var url = '/apps/premium_videos/ajax_del_subcategory';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
				'data[app_premium_videos_subcategory][id]=' + obj.subcategory_id
			));
			
			obj.events.get('before_submit')();
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);

							alert(results.status.message);
							
							obj.events.get('after_submit')();
						}
					} catch(e) {
						console.log(e);
					}
				})
				.send(qry);
		}		
	}),
	
	ajax_edit_subcategory: new Class(),

	ajax_new_subcategory: new Class({
		ajax_windows: [],
		
		initialize: function(options) {
			var obj = this;
			
			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}
			
			obj.load.bind(obj)();
		},
		
		events: {
			after_load: function() {				
			},
			
			before_load: function() {				
			},
			
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},
		
		load: function() {
			var obj = this;
			var url = '/apps/premium_videos/ajax_new_subcategory'
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);
							
							if(results.status.key == 'LOAD_FORM') {
								var html = results.status.data.html;																
								
								obj.ajax_windows['ajax_new_subcategory'] = new leafm.plugins.ajax_window(null, html, {'class':'ajax_new_subcategory'});
								obj.update.bind(obj)();
							}
						}
					} catch(e) {
						console.log(e);
					}										
				})
				.send();
		},
		
		submit: function() {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_subcategory']._el;
			var errors = obj.validate.bind(obj)();
			var url = '/apps/premium_videos/ajax_new_subcategory';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(parent_el.getElement('form').toQueryString()));

			obj.events.get('before_submit')();
			
			if(errors.length == 0) {
				new Request({url: url})
					.addEvent('complete', function(resp) {
						try {
							if($type(JSON.decode(resp)) == 'object') {
								var results = JSON.decode(resp);
								
								if(results.status.key == 'SUCCESS') {
									obj.ajax_windows['ajax_new_subcategory'].close.bind(obj.ajax_windows['ajax_new_subcategory'])();
								}
								
								alert(results.status.message);
								
								obj.events.get('after_submit')();
							}
						} catch(e) {
							console.log(e);
						}
					})
					.send(qry);
			}
			
			leafm.helpers.form.display_errors(parent_el, errors);
		},
		
		update: function(name) {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_subcategory']._el;

			switch(name) {
				case undefined:
					parent_el.getElements('.ctrl_submit').each(function(ctrl) {
						ctrl.addEvent('click', function() {
							obj.submit.bind(obj)();
						});
					});
					break;
			}
		},
		
		validate: function() {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_subcategory']._el;
			var errors = [];
			
			if(parent_el.getElement('input[name="data[app_premium_videos_subcategory][name]"]').value == '') {
				errors.push({
					name: 'data[app_premium_videos_subcategory][name]',
					message: 'Name of Subcategory cannot be empty.'
				});
			}
			
			return errors;
		}
	}),		
	
	ajax_del_premium_video: new Class({
		video_id: '',
		
		initialize: function(video_id, options) {
			var obj = this;
			
			obj.video_id = video_id;
			
			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}
			
			obj.submit.bind(obj)();
		},

		events: {
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},
		
		submit: function() {
			var obj = this;
			var url = '/apps/premium_videos/ajax_del_premium_video';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode('data[app_premium_video][id]=' + obj.video_id));

			obj.events.get('before_submit')();
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					alert(resp);

					obj.events.get('after_submit')();
				})
				.send(qry);
		}
	}),
	
	ajax_edit_premium_video: new Class({
		ajax_windows: [],
		video_id: '',
		
		initialize: function(video_id, options) {			
			var obj = this;
			
			obj.video_id = video_id;
			
			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}
			
			obj.load.bind(obj)();
		},

		events: {
			after_load: function() {				
			},
			
			before_load: function() {				
			},
			
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},
		
		load: function() {
			var obj = this;
			var url = '/apps/premium_videos/ajax_edit_premium_video'
			var qry = 'video_id=' + obj.video_id;
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);
							
							if(results.status.key == 'LOAD_FORM') {
								var html = results.status.data.html;																
								
								obj.ajax_windows['ajax_edit_premium_video'] = new leafm.plugins.ajax_window(null, html, {
									'class':'ajax_edit_premium_video',
									events: obj.events.getClean()
								});
								obj.update.bind(obj)();
							}
						}
					} catch(e) {
						alert(e);
					}										
				})
				.send(qry);			
		},

		load_panel: function(panel) {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_edit_premium_video']._el;
			
			parent_el.getElement('div.edit_premium_video_details div.viewer div.panel.selected').removeClass('selected');
			parent_el.getElement('div.edit_premium_video_details div.viewer div.panel.' + panel).addClass('selected');
		},
		
		submit: {			
			edit_form: function() {
				var obj = this;
				var parent_el = obj.ajax_windows['ajax_edit_premium_video']._el;
				var form_el = parent_el.getElement('form');				
				var errors = obj.validate.edit_form.bind(obj)();
				var url = '/apps/premium_videos/ajax_edit_premium_video';
				var qry = 
					'data=' + escape(leafm.helpers.encrypt.base64_encode(form_el.toQueryString())) +
					'&video_id=' + obj.video_id;
				
				if(errors.length == 0) {
					new Request({url:url})
						.addEvent('complete', function(resp) {
							try {
								if($type(JSON.decode(resp)) == 'object') {
									var results = JSON.decode(resp);
									
									if(results.status.key == 'SUCCESS') {
										obj.ajax_windows['ajax_edit_premium_video'].close.bind(obj.ajax_windows['ajax_edit_premium_video'])();
									}
									
									alert(results.status.message);
								}
							} catch(e) {
								console.log(e);
							}
						})
						.send(qry);
				}
				
				leafm.helpers.form.display_errors(form_el, errors);
			}
		},
		
		update: function(name) {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_edit_premium_video']._el;
			
			switch(name) {
				case undefined:
					parent_el.getElement('.ctrl_submit').addEvent('click', function() {
						obj.submit.edit_form.bind(obj)();
					});
					
					parent_el.getElements('div.edit_premium_video_details div.nav a[class^="ctrl_load_panel_"]').each(function(ctrl) {
						ctrl.addEvent('click', function() {
							var panel = ctrl.get('class').match(/ctrl_load_panel_([a-z0-9_]+)/)[1];
							
							obj.load_panel.bind(obj, panel)();
						});
					});
					
					parent_el.getElements('div.panel.category .ctrl_del').each(function(ctrl_del) {
						ctrl_del.addEvent('click', function() {
							ctrl_del.getParent('li').destroy();
						});
					});
					
					var ctrl_attach_category = parent_el.getElement('input.ctrl_attach_category');
					ctrl_attach_category.addEvent('click', function() {
						var section_el = ctrl_attach_category.getParent('div.attach_category');
						var selected_el = section_el.getElement('select.attach_category_name').getSelected();
						var category_id = selected_el.get('value');
						var category_name = selected_el.get('text');
						
						var errors = [];
						if(category_name == '') {
							errors.push({
								name: 'attach_category_error',
								message: 'Category Name cannot be empty.'
							});
						} else {
							if(section_el.getElements('ul.list_category_ids input[value="' + category_name + '"]').length == 0) {
								var new_cat = section_el.getElement('li.template').clone();
								
								new_cat
									.setStyle('display', 'block')
									.removeClass('template');
								new_cat.getElement('span.name').set('text', category_name);
								new_cat.getElement('input[name="data[app_premium_video][category_ids][]"]')
									.set('value', category_id)
									.removeProperty('disabled');
								
								new_cat.getElement('.ctrl_del').addEvent('click', function() {
									new_cat.destroy();
								});
								
								new_cat.inject(section_el.getElement('ul.list_categories'));								
							}
							section_el.getElement('select.attach_category_name').selectedIndex = 0;
						}

						leafm.helpers.form.display_errors(section_el, errors);
					});	

					var ctrl_attach_subcategory = parent_el.getElement('input.ctrl_attach_subcategory');
					ctrl_attach_subcategory.addEvent('click', function() {
						var section_el = ctrl_attach_subcategory.getParent('div.attach_subcategory');
						var selected_el = section_el.getElement('select.attach_subcategory_name').getSelected();
						var subcategory_id = selected_el.get('value');
						var subcategory_name = selected_el.get('text');
						
						var errors = [];
						if(subcategory_name == '') {
							errors.push({
								name: 'attach_subcategory_error',
								message: 'Subcategory Name cannot be empty.'
							});
						} else {
							if(section_el.getElements('ul.list_subcategory_ids input[value="' + subcategory_name + '"]').length == 0) {
								var new_cat = section_el.getElement('li.template').clone();
								
								new_cat
									.setStyle('display', 'block')
									.removeClass('template');
								new_cat.getElement('span.name').set('text', subcategory_name);
								new_cat.getElement('input[name="data[app_premium_video][subcategory_ids][]"]')
									.set('value', subcategory_id)
									.removeProperty('disabled');
								
								new_cat.getElement('.ctrl_del').addEvent('click', function() {
									new_cat.destroy();
								});
								
								new_cat.inject(section_el.getElement('ul.list_subcategories'));								
							}
							section_el.getElement('select.attach_subcategory_name').selectedIndex = 0;
						}

						leafm.helpers.form.display_errors(section_el, errors);
					});	
					
					var ctrl_attach_speaker = parent_el.getElement('input.ctrl_attach_speaker');
					ctrl_attach_speaker.addEvent('click', function() {
						var section_el = ctrl_attach_speaker.getParent('div.attach_speaker');
						var selected_el = section_el.getElement('select.attach_speaker_name').getSelected();
						var speaker_id = selected_el.get('value');
						var speaker_name = selected_el.get('text');
						
						var errors = [];
						if(speaker_name == '') {
							errors.push({
								name: 'attach_speaker_error',
								message: 'Speaker Name cannot be empty.'
							});
						} else {
							if(section_el.getElements('ul.list_speaker_ids input[value="' + speaker_name + '"]').length == 0) {
								var new_cat = section_el.getElement('li.template').clone();
								
								new_cat
									.setStyle('display', 'block')
									.removeClass('template');
								new_cat.getElement('span.name').set('text', speaker_name);
								new_cat.getElement('input[name="data[app_premium_video][speaker_ids][]"]')
									.set('value', speaker_id)
									.removeProperty('disabled');
								
								new_cat.getElement('.ctrl_del').addEvent('click', function() {
									new_cat.destroy();
								});
								
								new_cat.inject(section_el.getElement('ul.list_speakers'));								
							}
							section_el.getElement('select.attach_speaker_name').selectedIndex = 0;
						}

						leafm.helpers.form.display_errors(section_el, errors);
					});																			
					break;
			}
		},
		
		validate: {
			edit_form: function() {
				var obj = this;
				var parent_el = obj.ajax_windows['ajax_edit_premium_video']._el;
				var form_el = parent_el.getElement('form');
				var errors = [];
				
				if(form_el.getElement('input[name="data[video][title]"]').value == '') {
					errors.push({
						name: 'data[video][title]',
						message: 'Title cannot be empty.'
					});
				}

				if(!leafm.helpers.form.validate.strtotime(form_el.getElement('input[name="data[app_premium_video][publish_date]"]').value)) {
					errors.push({
						name: 'data[app_premium_video][publish_date]',
						message: 'Publish Date is not valid.'
					});
				}
				
				return errors;
			}
		}
	}),
	
	ajax_new_premium_video: new Class({
		ajax_windows: [],
		
		initialize: function(options) {			
			var obj = this;
			
			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}
			
			obj.load.bind(obj)();
		},
		
		events: {
			after_load: function() {				
			},
			
			before_load: function() {				
			},
			
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},
		
		load: function() {		
			var obj = this;
			var url = '/apps/premium_videos/ajax_new_premium_video'
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);
							
							if(results.status.key == 'LOAD_FORM') {
								var html = results.status.data.html;																
								
								obj.ajax_windows['ajax_new_premium_video'] = new leafm.plugins.ajax_window(null, html, {
									'class':'ajax_new_premium_video',
									events: obj.events.getClean()
								});
								obj.update();
							}
						}
					} catch(e) {
						console.log(e);
					}										
				})
				.send();			
		},
		
		submit: function() {			
		},
		
		update: function(name) {			
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_premium_video']._el;
			
			switch(name) {
				case undefined:
					break;
			}
		},
		
		validate: function() {			
		}
	}),
	
	ajax_del_promo_code: new Class({
		promo_code_id: $empty,
		
		initialize: function(promo_code_id, options) {
			var obj = this;
			
			obj.promo_code_id = promo_code_id;
			
			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}			
			
			obj.submit();
		},
		
		events: {
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},
		
		submit: function() {
			var obj = this;
			
			var url = '/apps/premium_videos/ajax_del_promo_code';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
				'data[app_premium_videos_promo_code][id]=' + obj.promo_code_id
			));
			
			obj.events.get('before_submit')();
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);

							alert(results.status.message);
							
							obj.events.get('after_submit')();
						}
					} catch(e) {
						console.log(e);
					}
				})
				.send(qry);			
		}		
	}),
	
	ajax_edit_promo_code: new Class({
		ajax_windows: [],
		
		promo_code_id: $empty,
		
		initialize: function(promo_code_id, options) {			
			var obj = this;
			
			obj.promo_code_id = promo_code_id;
			
			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}

			obj.load();			
		},
		
		events: {
			after_load: function() {				
			},
			
			before_load: function() {				
			},
			
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}			
		},
		
		load: function() {
			var obj = this;
			
			var url = '/apps/premium_videos/ajax_edit_promo_code';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
				'data[action]=LOAD_FORM' +
				'&data[app_premium_videos_promo_code][id]=' + obj.promo_code_id
			));
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);
							
							if(results.status.key == 'LOAD_FORM') {
								var html = results.status.data.html;																
								
								obj.ajax_windows['ajax_edit_promo_video'] = new leafm.plugins.ajax_window(null, html, {
									'class':'ajax_edit_promo_video',
									events: obj.events.getClean()
								});
								obj.update.bind(obj)();
							} else {
								alert(results.status.message);
							}
						}
					} catch(e) {
						alert(e);
					}
				})
				.send(qry);
		},
		
		submit: function() {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_edit_promo_video']._el;
			var form_el = parent_el.getElement('form');
			var errors = obj.validate();
			var url = '/apps/premium_videos/ajax_edit_promo_code';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(form_el.toQueryString()));
			
			if(errors.length == 0) {
				parent_el.getElements('img.ajax_load').setStyle('display', 'inline-block');
				parent_el.getElements('.ctrl_submit').setProperty('disabled', 'disabled');

				obj.events.get('before_submit')();
				
				new Request({url:url})
					.addEvent('complete', function(resp) {
						try {
							if($type(JSON.decode(resp)) == 'object') {
								var results = JSON.decode(resp);
								
								if(results.status.key == 'SUCCESS') {
									obj.ajax_windows['ajax_new_promo_code'].close.bind(obj.ajax_windows['ajax_new_promo_code'])();
								} else if(results.status.key == 'VALIDATION_ERROR') {
									var errors = results.status.data.errors;
									
									leafm.helpers.form.display_errors(form_el, errors);
								} else {
									alert(results.status.message);									
								}

								obj.events.get('after_submit')();								
							}
						} catch(e) {
							alert(e.toSource());
						}

						parent_el.getElements('img.ajax_load').setStyle('display', 'none');
						parent_el.getElements('.ctrl_submit').removeProperty('disabled');
					})
					.send(qry);				
			}
			
			leafm.helpers.form.display_errors(form_el, errors);
		},
		
		update: function(name) {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_edit_promo_video']._el;
			
			switch(name) {
				case undefined:
					parent_el.getElement('.ctrl_submit').addEvent('click', function() {
						obj.submit();
					});
					break;
			}
		},
		
		validate: function() {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_edit_promo_video']._el;
			var form_el = parent_el.getElement('form');
			var errors = [];

			var code = parent_el.getElement('input[name="data[app_premium_videos_promo_code][code]"]').value.trim();
			if(code == '') {
				errors.push({
					name: 'data[app_premium_videos_promo_code][code]',
					message: 'Code cannot be empty.'
				});
			} else if(code.match(/[^a-z0-9_]/i)) {
				errors.push({
					name: 'data[app_premium_videos_promo_code][code]',
					message: 'Code can only be numbers, letters, or underscores.'
				});
			}
			
			if(parent_el.getElement('select[name="data[app_premium_videos_promo_code][promo_id]"]').value == '') {
				errors.push({
					name: 'data[app_premium_videos_promo_code][promo_id]',
					message: 'Select a promotion.'
				});
			}
			
			var emails = parent_el.getElement('input[name="data[app_premium_videos_promo_code][data][update_emails]"]').value.trim();
			if(emails != '' && !leafm.helpers.form.validate.emails(emails)) {
				errors.push({
					name: 'data[app_premium_videos_promo_code][data][update_emails]',
					message: 'Invalid email addresses.'
				});
			}
			
			var url = parent_el.getElement('input[name="data[app_premium_videos_promo_code][data][referring_url]"]').value;
			if(url != '' && !leafm.helpers.form.validate.url(url)) {
				errors.push({
					name: 'data[app_premium_videos_promo_code][data][referring_url]',
					message: 'Invalid URL. Don\'t forget the http:// at the beginning.'
				});
			}
						
			return errors;
		}
	}),
	
	ajax_new_promo_code: new Class({
		ajax_windows: [],
		
		initialize: function(default_values, options) {
			var obj = this;	
			
			obj.events = $H(obj.events);
			if(options && options.events) {
				options.events = $H(options.events);
				options.events.each(function(event_func, event_name) {
					obj.events.set(event_name, event_func);
				});
			}
			
			obj.load();									
		},
		
		events: {
			after_load: function() {				
			},
			
			before_load: function() {				
			},
			
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},
		
		load: function() {
			var obj = this;
			
			var url = '/apps/premium_videos/ajax_new_promo_code';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
				'action=LOAD_FORM'
			));
			
			obj.events.get('before_load')();
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);
							
							if(results.status.key == 'LOAD_FORM') {
								var html = results.status.data.html;																
								
								obj.ajax_windows['ajax_new_promo_code'] = new leafm.plugins.ajax_window(null, html, {'class':'ajax_new_promo_code'});
								obj.update();
							}
						}

						obj.events.get('after_load')();
					} catch(e) {
						alert(e.toSource());
					}										
				})
				.send(qry);
		},
		
		submit: function() {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_promo_code']._el;
			var form_el = parent_el.getElement('form');				
			var errors = obj.validate();
			var url = '/apps/premium_videos/ajax_new_promo_code';
			var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(form_el.toQueryString()));
						
			if(errors.length == 0) {
				parent_el.getElements('img.ajax_load').setStyle('display', 'inline-block');
				parent_el.getElements('.ctrl_submit').setProperty('disabled', 'disabled');

				obj.events.get('before_submit')();
				
				new Request({url:url})
					.addEvent('complete', function(resp) {
						try {
							if($type(JSON.decode(resp)) == 'object') {
								var results = JSON.decode(resp);
								
								if(results.status.key == 'SUCCESS') {
									obj.ajax_windows['ajax_new_promo_code'].close.bind(obj.ajax_windows['ajax_new_promo_code'])();
								} else if(results.status.key == 'VALIDATION_ERROR') {
									var errors = results.status.data.errors;
									
									leafm.helpers.form.display_errors(form_el, errors);
								} else {
									alert(results.status.message);									
								}

								parent_el.getElements('img.ajax_load').setStyle('display', 'none');
								parent_el.getElements('.ctrl_submit').removeProperty('disabled');

								obj.events.get('after_submit')();								
							}
						} catch(e) {
							alert(e.toSource());
						}
					})
					.send(qry);
			}
			
			leafm.helpers.form.display_errors(form_el, errors);			
		},		
		
		update: function(name) {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_promo_code']._el;
			
			switch(name) {
				case undefined:
					parent_el.getElements('.ctrl_submit').addEvent('click', function() {
						obj.submit();
					});
					break;
			}
		},
		
		validate: function() {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_new_promo_code']._el;			
			var form_el = parent_el.getElement('form');			
			var errors = [];
			
			var code = parent_el.getElement('input[name="data[app_premium_videos_promo_code][code]"]').value.trim();
			if(code == '') {
				errors.push({
					name: 'data[app_premium_videos_promo_code][code]',
					message: 'Code cannot be empty.'
				});
			} else if(code.match(/[^a-z0-9_]/i)) {
				errors.push({
					name: 'data[app_premium_videos_promo_code][code]',
					message: 'Code can only be numbers, letters, or underscores.'
				});
			}
			
			if(parent_el.getElement('select[name="data[app_premium_videos_promo_code][promo_id]"]').value == '') {
				errors.push({
					name: 'data[app_premium_videos_promo_code][promo_id]',
					message: 'Select a promotion.'
				});
			}
			
			var emails = parent_el.getElement('input[name="data[app_premium_videos_promo_code][data][update_emails]"]').value.trim();
			if(emails != '' && !leafm.helpers.form.validate.emails(emails)) {
				errors.push({
					name: 'data[app_premium_videos_promo_code][data][update_emails]',
					message: 'Invalid email addresses.'
				});
			}
			
			var url = parent_el.getElement('input[name="data[app_premium_videos_promo_code][data][referring_url]"]').value;
			if(url != '' && !leafm.helpers.form.validate.url(url)) {
				errors.push({
					name: 'data[app_premium_videos_promo_code][data][referring_url]',
					message: 'Invalid URL. Don\'t forget the http:// at the beginning.'
				});
			}
			
			return errors;
		}
	}),
	
	ajax_signup: new Class({
		ajax_windows: [],
		curr_page: 1,
		
		initialize: function() {
			var obj = this;
			
			this.load.bind(obj)();
		},
		
		events: {
			after_load: function() {				
			},
			
			before_load: function() {				
			},
			
			after_submit: function() {				
			},
			
			before_submit: function() {				
			}
		},
		
		goto_panel: function(panel_name) {
			var obj = this;
			var parent_el = obj.ajax_windows['ajax_signup']._el;				
			parent_el.getElements('div.viewer div.panel.selected').removeClass('selected');
			parent_el.getElements('div.viewer div.panel.' + panel_name).addClass('selected');
		},
		
		load: function() {
			var obj = this;
			var url = '/apps/premium_videos/ajax_signup';
			
			new Request({url: url})
				.addEvent('complete', function(resp) {
					try {
						if($type(JSON.decode(resp)) == 'object') {
							var results = JSON.decode(resp);
							
							if(results.status.key == 'LOAD_FORM') {
								var html = results.status.data.html;
								
								obj.ajax_windows['ajax_signup'] = new leafm.plugins.ajax_window('ajax_premium_videos_signup', html, {'class':'ajax_premium_videos_signup'});								
								obj.update.bind(obj)();
							}
						}
					} catch(e) {
						if(console) console.log(e);
					}
				})
				.send();
		},
		
		submit: {			
			payment: function() {
				var obj = this; 
				var parent_el = obj.ajax_windows['ajax_signup']._el;				
				var form_el = parent_el.getElement('div.panel.payment').getElement('form');
				var errors = obj.validate.payment.bind(obj)();
				var url = '/apps/premium_videos/ajax_signup';
				var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
					form_el.toQueryString() + 
					'&' + parent_el.getElement('div.panel.signup').getElement('form').toQueryString() + 
					'&action=payment'
				));
				
				if(errors.length == 0) {
					parent_el.getElement('img.ajax_load').setStyle('display', 'block');

					new Request({url: url})
						.addEvent('complete', function(resp) {
							try {
								if($type(JSON.decode(resp)) == 'object') {
									var results = JSON.decode(resp);
									
									if(results.status.key == 'SUCCESS_PAYMENT') {
										alert('Welcome to Technique Wave. An email has been sent to you.');
									}									
								}
							} catch(e) {
								if(console) {
									console.log(e);
								}
							}

							parent_el.getElement('img.ajax_load').setStyle('display', 'none');
						})
						.send(qry);
				}
				
				leafm.helpers.form.display_errors(form_el, errors);		
				if(errors.length > 0) {
					var first_error = form_el.getElement('[name="' + errors[0].name + '"]');
					new Fx.Scroll(first_error.getParent('div.panel')).toElement(first_error.getNext());
				}
			},
			
			/*
				Function: signup
					Two state - new_signup and registered_signup. new_signup is 
					where the user needs a completely new signup and registered
					is where the user is already a registered user and only needs
					to confirm email.
			 */
			signup: function() {
				var obj = this;
				var parent_el = obj.ajax_windows['ajax_signup']._el;				
				var form_el = parent_el.getElement('div.panel.signup').getElement('form');
				var errors = obj.validate.signup.bind(obj)();
				var url = '/apps/premium_videos/ajax_signup';
				var qry = 'data=' + escape(leafm.helpers.encrypt.base64_encode(
					form_el.toQueryString() + 
					'&action=new_signup'
				));
							
				if(errors.length == 0) {										
					parent_el.getElement('img.ajax_load').setStyle('display', 'block');
					
					new Request({url: url})
						.addEvent('complete', function(resp) {
							try {
								if($type(JSON.decode(resp)) == 'object') {
									var results = JSON.decode(resp);	
									
									if(results.status.key == 'SUCCESS_NEW_SIGNUP') {
										obj.goto_panel.bind(obj, 'payment')();	
										
										var ctrl_next = parent_el.getElement('.ctrl_next');
										ctrl_next.removeEvents();
										ctrl_next.addEvent('click', function() {
											obj.submit.payment.bind(obj)();
										});
									} else if(results.status.key == 'VALIDATION_ERROR') {
										leafm.helpers.form.display_errors(form_el, results.status.data.errors);
									}
								}
							} catch(e) {
								if(console) {
									console.log(e);
								}
							}

							parent_el.getElement('img.ajax_load').setStyle('display', 'none');					
						})
						.send(qry);
				}
				
				leafm.helpers.form.display_errors(form_el, errors);		
				if(errors.length > 0) {
					var first_error = form_el.getElement('[name="' + errors[0].name + '"]');
					new Fx.Scroll(first_error.getParent('div.panel')).toElement(first_error.getNext('.error'));
				}
			}
		},
		
		update: function() {
			var obj = this;			
			var parent_el = obj.ajax_windows['ajax_signup']._el;
			
			parent_el.getElement('.ctrl_next').addEvent('click', function() {
				if(obj.curr_page == 1) {
					obj.submit.signup.bind(obj)();
				}
			});
		},
		
		validate: {
			payment: function() {
				var obj = this;
				var parent_el = obj.ajax_windows['ajax_signup']._el;
				var form_el = parent_el.getElement('div.panel.payment').getElement('form');
				var errors = [];
				
				var checked = false;
				form_el.getElements('input[name="data[trans][payment_method]"]').each(function(radio) {
					if(radio.checked) {
						checked = true;
					}
				});
				if(!checked) {
					errors.push({
						name: 'payment_method_error',
						message: 'Select a Credit Card.'
					});
				}
				
				if(form_el.getElement('input[name="data[trans][name]"]').value.trim() == '') {
					errors.push({
						name: 'data[trans][name]',
						message: 'Name on Card cannot be empty.'
					});
				}

				if(form_el.getElement('input[name="data[trans][credit_card_no]"]').value.trim() == '') {
					errors.push({
						name: 'data[trans][credit_card_no]',
						message: 'Credit Card Number cannot be empty.'
					});
				}
				
				if(form_el.getElement('select[name="data[trans][expiration_month]"]').value == '' || 
				form_el.getElement('select[name="data[trans][expiration_year]"]').value == '') {
					errors.push({
						name: 'data[trans][expiration_year]',
						message: 'Expiration Date needs to be selected.'
					});
				}				
				
				if(form_el.getElement('input[name="data[trans][street]"]').value == '' || 
				form_el.getElement('input[name="data[trans][city]"]').value == '' || 
				form_el.getElement('select[name="data[trans][state]"]').value == '' ||
				form_el.getElement('input[name="data[trans][zip]"]').value == '') {
					errors.push({
						name: 'data[trans][zip]',
						message: 'Billing Address cannot be empty.'
					});
				}
								
				return errors;
			},
			
			signup: function() {
				var obj = this;
				var parent_el = obj.ajax_windows['ajax_signup']._el;
				var form_el = parent_el.getElement('div.panel.signup').getElement('form');
				var logged_in = parent_el.getElement('div.panel.signup div.data span.is_logged_in').get('text');
				var errors = [];

				if(logged_in == 'true') {
					var email = form_el.getElement('input[name="data[user][email]"]').value.trim();
					if(email == '') {
						errors.push({
							name: 'data[user][email]',
							message: 'Email cannot be empty'
						});
					} else if(!leafm.helpers.form.validate.email(email)) {
						errors.push({
							name: 'data[user][email]',
							message: 'Email is not valid.'
						});
					}
					
					if(!form_el.getElement('input[name="data[user][tos]"]').checked) {
						errors.push({
							name: 'tos_error',
							message: 'Check Agree to Terms of Service.'
						});
					}					
				} else {				
					if(form_el.getElement('input[name="data[user][name]"]').value.trim() == '') {
						errors.push({
							name: 'data[user][name]',
							message: 'Name cannot be empty.'
						});
					}
	
					var username = form_el.getElement('input[name="data[user][username]"]').value.trim();
					if(username == '') {
						errors.push({
							name: 'data[user][username]',
							message: 'Username cannot be empty.'
						});
					} else if(username.match(/[^a-z0-9_]/)) {
						errors.push({
							name: 'data[user][username]',
							message: 'Username can only contain letters or number.'
						});					
					} else if(username.length < 8) {
						errors.push({
							name: 'data[user][username]',
							message: 'Username must be at least 8 letters or numbers.'
						});					
					}
					
					var pass = form_el.getElement('input[name="data[user][password]"]').value.trim();
					var pass_confirm = form_el.getElement('input[name="data[user][password_confirm]"]').value.trim();
					if(pass == '') {
						errors.push({
							name: 'data[user][password]',
							message: 'Password cannot be empty.'
						});
					}
					
					if(pass_confirm == '') {
						errors.push({
							name: 'data[user][password_confirm]',
							message: 'Confirm Password cannot be empty.'
						});					
					} else if(pass != pass_confirm) {
						errors.push({
							name: 'data[user][password]',
							message: 'Password and Confirm Password do not match.'
						});					
					}
					
					var email = form_el.getElement('input[name="data[user][email]"]').value.trim();
					if(email == '') {
						errors.push({
							name: 'data[user][email]',
							message: 'Email cannot be empty'
						});
					} else if(!leafm.helpers.form.validate.email(email)) {
						errors.push({
							name: 'data[user][email]',
							message: 'Email is not valid.'
						});
					}
					
					if(!form_el.getElement('input[name="data[user][tos]"]').checked) {
						errors.push({
							name: 'tos_error',
							message: 'Check Agree to Terms of Service.'
						});
					}
				}
				
				return errors;
			}
		}
	})
}