(function() {
	
	String.implement({
		isEmail: function() {
				return this.trim().search(/^[a-z0-9]+([-._+][a-z0-9]+)*@[a-z0-9]+([-._][a-z0-9]+)*[.][a-z]{2,6}$/i) != -1;
			}
		, isEmails: function() {
				return this.trim().search(/^[a-z0-9]+([-._+][a-z0-9]+)*@[a-z0-9]+([-._][a-z0-9]+)*[.][a-z]{2,6}(\s*[;,]\s*[a-z0-9]+([-._+][a-z0-9]+)*@[a-z0-9]+([-._][a-z0-9]+)*[.][a-z]{2,6})*$/i) != -1;
			}
		, isNum: function() {
				return this.trim().search(/^[0-9]+$/i) != -1;
			}
		, isBlank: function() {
				return this.trim() == '';
			}
		, isCreditCard: function(cardname) {
				var cardnumber = this.trim();
				
				// Define the cards we support. You may add addtional card types.
				// Name:     	As in the selection box of the form - must be same as user's
				// Lengths:    	List of possible valid lengths of the card number for the card
				// Prefixes:  	List of possible prefixes for the card
				// Checkdigit:	Boolean to say whether there is a check digit
				var cards = new Array(
					{
						name: 'Visa'
						, lengths: '13, 16'
						, prefixes: '4'
						, checkdigit: true
					}
					, {
						name: 'Master' 
						, lengths: '16'
						, prefixes: '51, 52, 53, 54, 55'
						, checkdigit: true
					}
					, {
						name: 'DinersClub'
						, lengths: '14,16'
						, prefixes: '305, 36, 38, 54, 55'
						, checkdigit: true
					}
					, {
						name: 'CarteBlanche'
						, lengths: '14'
						, prefixes: '300, 301, 302, 303, 304, 305'
						, checkdigit: true
					}
					, {
						name: 'Amex'
						, lengths: '15'
						, prefixes: '34, 37'
						, checkdigit: true
					}
					, {
						name: 'Discover'
						, lengths: '16'
						, prefixes: '6011,622,64,65'
						, checkdigit: true
					}
					, {
						name: 'JCB'
						, lengths: '16'
						, prefixes: '35'
						, checkdigit: true
					}
					, {
						name: 'enRoute'
						, lengths: '15'
						, prefixes: '2014, 2149'
						, checkdigit: true
					}
					, {
						name: 'Solo'
						, lengths: '16, 18, 19'
						, prefixes: '6334, 6767'
						, checkdigit: true
					}
					, {
						name: 'Switch'
						, lengths: '16, 18, 19'
						, prefixes: '4903, 4905, 4911, 4936, 564182, 633110, 6333, 6759'
						, checkdigit: true
					}
					, {
						name: 'Maestro'
						, lengths: '12, 13, 14, 15, 16, 18, 19'
						, prefixes: '5018, 5020, 5038, 6304, 6759, 6761'
						, checkdigit: true
					}
					, {
						name: 'VisaElectron'
						, lengths: '16'
						, prefixes: '417500, 4917, 4913, 4508, 4844'
						, checkdigit: true
					}
					, {
						name: 'LaserCard'
						, lengths: '16, 17, 18, 19'
						, prefixes: '6304, 6706, 6771, 6709'
						, checkdigit: true
					}
				);
						   
				// Establish card type
				var cardType = -1;
				for (var i = 0; i < cards.length; i++) {
					if (cardname.trim().toLowerCase() == cards[i].name.toLowerCase()) {
					  cardType = i;
					  break;
					}
				}
			  
				// If card type not found, report an error
				if (cardType == -1) {
					return false; 
				}
			   
				// Ensure that the user has provided a credit card number
				if (cardnumber.length == 0)  {
					return false; 
				}
				
				// Now remove any spaces from the credit card number
				cardnumber = cardnumber.replace(/\s/g, '');
			  
				// Check that the number is numeric
				var cardNo = cardnumber
				var cardexp = /^[0-9]{13,19}$/;
				if (!cardexp.exec(cardNo))  {
					return false; 
				}
				   
				// Now check the modulus 10 check digit - if required
				if (cards[cardType].checkdigit) {
					var checksum = 0;	// running checksum total
					var mychar = '';	// next char to process
					var j = 1;			// takes value of 1 or 2

					// Process each digit one by one starting at the right
					var calc;
					for (i = cardNo.length - 1; i >= 0; i--) {

						// Extract the next digit and multiply by 1 or 2 on alternative digits.
						calc = Number(cardNo.charAt(i)) * j;

						// If the result is in two digits add 1 to the checksum total
						if (calc > 9) {
							checksum = checksum + 1;
							calc = calc - 10;
						}

						// Add the units element to the checksum total
						checksum = checksum + calc;

						// Switch the value of j
						if (j == 1) {
							j = 2
						} else {
							j = 1
						}
					} 

					// All done - if checksum is divisible by 10, it is a valid modulus 10.
					// If not, report an error.
					if (checksum % 10 != 0)  {
						return false; 
					}
				}  

				// The following are the card-specific checks we undertake.
				var LengthValid = false;
				var PrefixValid = false; 
				var undefined; 

				// We use these for holding the valid lengths and prefixes of a card type
				var prefix = new Array ();
				var lengths = new Array ();

				// Load an array with the valid prefixes for this card
				prefix = cards[cardType].prefixes.replace (/\s/g, '').split(',');

				// Now see if any of them match what we have in the card number
				for (i = 0; i < prefix.length; i++) {
					var exp = new RegExp ('^' + prefix[i]);
					if (exp.test(cardNo)) {
						PrefixValid = true;
					}
				}

				// If it isn't a valid prefix there's no point at looking at the length
				if (!PrefixValid) {
					return false; 
				}

				// See if the length is valid for this card
				lengths = cards[cardType].lengths.replace (/\s/g, '').split(',');
				for (j = 0; j < lengths.length; j++) {
					if (cardNo.length == lengths[j]) {
						LengthValid = true;
					}
				}

				// See if all is OK by seeing if the length was valid. We only check the 
				// length if all else was hunky dory.
				if (!LengthValid) {
					return false; 
				};   

				// The credit card is in the required format.
				return true;
			}
	});
	
	function initSideBarVideo(id) {
		var videoTarget = $(id);
		if (!videoTarget) {
			return;
		}
		new Swiff('/videos/main.swf', {
			id: videoTarget.id + 'Video'
			, width: 300
			, height: 255
			, params: {quality: 'best', allowFullScreen: 'true', menu: 'false', bgcolor: '#EFEFEF', wmode: 'window'}
			, vars: {flashBase: '/videos/', fileTitle: 'ClickReport', fileCover: '../images/screen.jpg', filePath: 'doogle_19.flv', fileType: 'video'}
			, callBacks: {}
		}).inject(videoTarget);
	}
	
	function initLogin() {
		var passInput = $(document.body).getElement('#header input[name=password]');
		if (!passInput) {
			return;
		}
		var fakeInput = new Element('input', {
			'type': 'text'
			, 'value': 'password'
			, 'title': passInput.get('title')
			, 'tabindex': passInput.get('tabindex')
			, 'events': {
				'focus': function(e) {
					passInput.setStyle('display', 'block').focus();
					this.setStyle('display', 'none');
				}
			}
		}).inject(passInput, 'before');
		
		// hide real input
		passInput.set('value', '').setStyle('display', 'none');
		passInput.addEvent('blur', function(e){
			if (this.get('value').trim() == '') {
				fakeInput.setStyle('display', 'block');
				this.setStyle('display', 'none');
			}
		});
		
		// username input
		var userInput = $(document.body).getElement('#header input[name=username]');
		if (!userInput) {
			return;
		}
		userInput.addEvents({
			'focus': function(e){
				if (this.get('value').trim() == 'username') {
					this.set('value', '');
				}
			}
			, 'blur': function(e) {
				if (this.get('value').isBlank()) {
					this.set('value', 'username');
				}
			}
		});
		
		// form submit
		var form = $(document.body).getElement('#header form');
		if (!form) {
			return;
		}
		form.addEvent('submit', function(e){
			if (userInput.get('value').isBlank() || userInput.get('value').trim() == 'username') {
				alert('Please input your username!');
				userInput.focus();
				e.stop();
				return;
			}
			if (passInput.get('value').isBlank() || userInput.get('value').trim() == 'password') {
				alert('Please input your password!');
				passInput.setStyle('display', 'block').focus();
				fakeInput.setStyle('display', 'none');
				e.stop();
				return;
			}
		});
	}
	
	function initLoginForm() {
		var form = $('signinForm');
		if (!form) {
			return;
		}
		
		var userInput = form.getElement('input[name=username]');
		var passInput = form.getElement('input[name=password]');
		
		if (!userInput || !passInput) {
			return;
		}
		
		form.addEvent('submit', function(e){
			if (userInput.get('value').isBlank()) {
				alert('Please input your username!');
				userInput.focus();
				e.stop();
				return;
			}
			if (passInput.get('value').isBlank()) {
				alert('Please input your password!');
				passInput.focus();
				e.stop();
				return;
			}
		});
	}
	
	function initOneEmailForm(formName, emailField) {
		var form = $(formName);
		if (!form) {
			return;
		}
		
		var emailInput = form.getElement('input[name='+emailField+']');
		
		if (!emailInput) {
			return;
		}
		
		form.addEvent('submit', function(e){
			if (!emailInput.get('value').isEmail()) {
				alert('Please input your valid email address!');
				emailInput.focus();
				e.stop();
				return;
			}
		});
	}
	
	function initUnsubscribeForm() {
		var form = $('unsubscribeForm');
		if (!form) {
			return;
		}
		
		var username = form.getElement('input[name=username]');
		var emailadd = form.getElement('input[name=emailadd]');
		var reason = form.getElement('textarea[name=reason]');
		
		if (!username || !emailadd || !reason) {
			return;
		}
		
		form.addEvent('submit', function(e){
			if (username.get('value').isBlank()) {
				alert('Please input your user name!');
				username.focus();
				e.stop();
				return;
			}
			if (!emailadd.get('value').isEmail()) {
				alert('Please input your valid email address!');
				emailadd.focus();
				e.stop();
				return;
			}
			if (reason.get('value').isBlank()) {
				if (confirm('We would like to hear from you the reason of leaving. \nYour idea will help us to improve our service in the future. \nDo you want to write your comment now?')){
					reason.focus();
					e.stop();
					return;
				}
			}
		});
	}
	
	function initContactForm() {
		var form = $('contactForm') || $('affiliatesForm');
		if (!form) {
			return;
		}
		
		var nameInput = form.getElement('input[name=name]');
		var emailInput = form.getElement('input[name=email]');
		var subjectInput = form.getElement('select[name=subject]');
		var messageInput = form.getElement('textarea[name=message]');
		
		if (!nameInput || !emailInput || !messageInput) {
			return;
		}
		
		form.addEvent('submit', function(e){
			if (nameInput.get('value').isBlank()) {
				alert('Please input your name!');
				nameInput.focus();
				e.stop();
				return;
			}
			if (!emailInput.get('value').isEmail()) {
				alert('Please input your valid email address!');
				emailInput.focus();
				e.stop();
				return;
			}
			if (subjectInput && subjectInput.get('value').isBlank()) {
				alert('Please select your subject!');
				subjectInput.focus();
				e.stop();
				return;
			}
			if (messageInput.get('value').isBlank()) {
				alert('Please input your message!');
				messageInput.focus();
				e.stop();
				return;
			}
		});
	}
	
	function iniInfoForm() {
		var form = $('signupForm') || $('accountForm');
		if (!form) {
			return;
		}
		
		var firstnameInput = form.getElement('input[name=firstname]');
		var lastnameInput = form.getElement('input[name=lastname]');
		var emailInput = form.getElement('input[name=email]');
		var emailconfirmInput = form.getElement('input[name=emailconfirm]');
		var phoneInput = form.getElement('input[name=phone]');
		var address1Input = form.getElement('input[name=address1]');
		var address2Input = form.getElement('input[name=address2]');
		var cityInput = form.getElement('input[name=city]');
		var cardtype = form.getElement('select[name=cardtype]');
		var cardnum = form.getElement('input[name=cardnum]');
		var cardccv = form.getElement('input[name=cardccv]');
		var cardexpiremonth = form.getElement('select[name=cardexpiremonth]');
		var cardexpireyear = form.getElement('select[name=cardexpireyear]');
		
		form.addEvent('submit', function(e){
			if (firstnameInput && firstnameInput.get('value').isBlank()) {
				alert('Please input your first name!');
				firstnameInput.focus();
				e.stop();
				return;
			}
			if (lastnameInput && lastnameInput.get('value').isBlank()) {
				alert('Please input your last name!');
				lastnameInput.focus();
				e.stop();
				return;
			}
			if (emailInput && !emailInput.get('value').isEmail()) {
				alert('Please input your valid email address!');
				emailInput.focus();
				e.stop();
				return;
			}
			if (emailInput && emailconfirmInput && emailInput.get('value').trim() != emailconfirmInput.get('value').trim()) {
				alert('Confirm email does not match!');
				emailconfirmInput.focus();
				e.stop();
				return;
			}
			if (phoneInput && phoneInput.get('value').isBlank()) {
				alert('Please input your phone number!');
				phoneInput.focus();
				e.stop();
				return;
			}
			if (address1Input && address2Input && address1Input.get('value').isBlank() && address2Input.get('value').isBlank()) {
				alert('Please input your address!');
				address1Input.focus();
				e.stop();
				return;
			}
            /*
			if (cityInput && cityInput.get('value').isBlank()) {
				alert('Please input your city!');
				cityInput.focus();
				e.stop();
				return;
			}
			//*/
			/* for upgrade account form */
			if (cardtype && cardtype.get('value').isBlank()) {
				alert('Please select your card!');
				cardtype.focus();
				e.stop();
				return;
			}
			if (cardnum && !cardnum.get('value').isCreditCard(cardtype.get('value'))) {
				alert('Please enter your valid card number!');
				cardnum.focus();
				e.stop();
				return;
			}
			if (cardccv && cardccv.get('value').trim().length < 3) {
				alert('Please enter your card ccv number!');
				cardccv.focus();
				e.stop();
				return;
			}
			/*if (cardexpiremonth && cardexpiremonth.get('value').isBlank()) {
				alert('Please select your card expired month!');
				cardexpiremonth.focus();
				e.stop();
				return;
			}
			if (cardexpireyear && cardexpireyear.get('value').isBlank()) {
				alert('Please select your card expired year!');
				cardexpireyear.focus();
				e.stop();
				return;
			}*/
		});
		
		
		// call ajax data
		var country = form.getElement('select[name=country]');
		var stateDefault = form.getElement('select[name=state]');
		var stateHolder = form.getElement('span[id=dynamicState]');
		if (!country || !stateHolder) {
			return;
		}
		// add loading
		var countryLoading = new Element('span', {
			'class': 'ajaxLoading'
			, 'html': '<img src="/images/ajax-loader.gif" width="16" height="16" alt="loading ..." />'
		}).inject(country, 'after');
		var stateLoading = countryLoading.clone().inject(stateHolder, 'after');
		
		var h_country = form.getElement('input[name=h_country]'); 
		if (h_country && !h_country.get('value').isBlank()) {
			country.set('value', h_country.get('value'));
		}
		country.addEvent('change', function(e) {
			new Request.JSON({
				url: '/get-state'
				, method: 'post'
				, data: 'country=' + this.get('value')
				, onSuccess: function(data){
					stateHolder.empty();
				
					// rebuild
					if (data && data.states && data.states.length > 0) {
                        // change label
                        if(data.label.lbl_state!=null){
                            stateHolder.getPrevious().set('text', data.label.lbl_state.replace(/\//g, ' / '));
                        }else{
                            stateHolder.getPrevious().set('text', 'City / Region');    
                        }
                        // create select box
						var state = new Element('select', {
							'id': 'state'
							, 'name': 'state'
							, 'tabindex': 12
							, 'events': {
								'change': function(evt) {
									new Request.JSON({
										url: '/get-state'
										, method: 'post'
										, data: 'country=' + country.get('value') + '&state=' + this.get('value')
										, onSuccess: function(data){
											if (data && data.timezones) {
												updateTimezone(data.timezones);
											}
											
											// hide loading
											stateLoading.setStyle('display', 'none');
											
											// enable
											state.disabled = '';
										}
									}).send();
									
									// show loading
									stateLoading.setStyle('display', 'block');
									
									// disable
									state.disabled = 'disabled';
								}
							}
						}).inject(stateHolder);
						
						data.states.each(function(el) {
							new Element('option', {
								'value': el.value
								, 'text': el.text
							}).inject(state);
						});
						
					} else {
						stateHolder.getPrevious().set('text', 'City / Region');
						
						var state = new Element('input', {
							'id': 'state'
							, 'type': 'text'
							, 'name': 'state'
							, 'tabindex': 12
						}).inject(stateHolder);
					}
					
					// update timezone
					if (data && data.timezones) {
						updateTimezone(data.timezones);
					}
					
					// hide loading
					countryLoading.setStyle('display', 'none');
					
					// enable
					country.disabled = '';
					if (stateDefault) {
						stateDefault.disabled = '';
					}
				}
			}).send();
			
			// show loading
			countryLoading.setStyle('display', 'block');
			
			// disable
			country.disabled = 'disabled';
			if (stateDefault) {
				stateDefault.disabled = 'disabled';
			}
		});
		
		if (stateDefault) {
			var h_state = form.getElement('input[name=h_state]'); 
			if (h_state && !h_state.get('value').isBlank()) {
				stateDefault.set('value', h_state.get('value'));
			}
			stateDefault.addEvent('change', function(e) {
				new Request.JSON({
					url: '/get-state'
					, method: 'post'
					, data: 'country=' + country.get('value') + '&state=' + this.get('value')
					, onSuccess: function(data){
						if (data && data.timezones) {
							updateTimezone(data.timezones);
						}
						
						// enable
						stateDefault.disabled = '';
						
						// hide loading
						stateLoading.setStyle('display', 'none');
					}
				}).send();
				
				// show loading
				stateLoading.setStyle('display', 'block');
				
				// disable
				stateDefault.disabled = 'disabled';
			});
		}
		
		function updateTimezone(zone) {
			var timezone = $('timezone');
			if (!timezone) {
				return;
			}
			timezone.empty();
			zone.each(function(el) {
				new Element('option', {
					'value': el.value
					, 'text': el.text
				}).inject(timezone);
			});
		}
	}
	
	function initSupportVideos() {
		var togglers = $$('ul.videoInstructionList h4');
		var elements = $$('ul.videoInstructionList div.videoBox');
		var videoList = [
			'doogle_15.flv'
			, 'doogle_14.flv'
			, 'doogle_8.flv'
			, 'doogle_7.flv'
		];
		new Fx.Accordion(togglers, elements, {
			display: -1
			, opacity: false
			, alwaysHide: true
			, onActive: function(toggler, element) {
				var index = elements.indexOf(element);
				var target = element.getFirst();
				new Swiff('/videos/main.swf', {
					id: target.id + 'Video'
					, width: 400
					, height: 319
					, params: {quality: 'best', allowFullScreen: 'true', menu: 'false', bgcolor: '#EFEFEF', wmode: 'window'}
					, vars: {flashBase: '/videos/', fileTitle: 'ClickReport', fileCover: '../images/screen.jpg', filePath: videoList[index], fileType: 'video'}
				}).inject(target);
			}
			, onBackground: function(toggler, element) {                
				var target = element.getFirst().getLast();
                try{
				    if (target && target.get('tag').toLowerCase() != 'noscript') {
					    target.destroy();
				    }
                }catch(err){
                    var target = element.getFirst(); 
                    element.empty();
                    element.adopt(target);
                }
			}
		});
	}
	
	function initSetupSteps() {
		var togglers = $$('#setupSteps dt');
		var elements = $$('#setupSteps dd');
		new Fx.Accordion(togglers, elements, {
			display: -1
			, opacity: false
			, alwaysHide: true
		});
	}
	
	function initLandingPage() {
		// toggle function layer
		var togglers = $$('#landingPages a.toggler');
		togglers.each(function(el) {
			el.addEvent('click', function(e) {
				e.stop();
				var trigger = this;
				trigger.getParent().toggleClass('opened');
				trigger.getParent().getNext().toggleClass('show');
				togglers.each(function(elm) {
					if (elm != trigger) {
						elm.getParent().removeClass('opened');
						elm.getParent().getNext().removeClass('show');
					}
				});
			});
		});
		
		// init form
		var panel = $('landingPages');
		if (!panel) {
			return;
		}
        var globalCheck = panel.getElement('input[name=checkAll]');
		var buttonEdit = panel.getElement('input[name=btnEditLanding]');
		var checkBoxes = panel.getElements('input[type=checkbox]');
		if (globalCheck) { 
			globalCheck.addEvent('click', function(e) {
				checkBoxes.each(function(el) {
					el.checked = globalCheck.checked;
				});
			});
			
			checkBoxes.each(function(el) {
				el.addEvent('click', function(e) {
					var allChecked = true;
					checkBoxes.each(function(chk) {
						if (chk != globalCheck && !chk.checked) {
							allChecked = false;
						}
					});
					globalCheck.checked = (allChecked == true) ? 'checked' : '';
				});
			});
			buttonEdit.addEvent('click', function(e) {
                e.stop();
                var hasChecked = false;
                var arrIds = new Array();
                checkBoxes.each(function(chk) {
                    if (chk != globalCheck && chk.checked) {
                        hasChecked = true;
                        arrIds.push(chk.get('value'));
                    }
                });
                var ids = arrIds.join(',');
                if (hasChecked == false) {
                    alert('You must select at least one page to edit!');
                }else{
                    location.href='/index/add-domain/domain-id/' + ids;
                }
            });
			panel.addEvent('submit', function(e) {
				var hasChecked = false;
				checkBoxes.each(function(chk) {
					if (chk != globalCheck && chk.checked) {
						hasChecked = true;
					}
				});
				
				if (hasChecked == false) {
					alert('You must select at least one page to remove!');
					e.stop();
					return;
				}
				
				if (!confirm('Are you sure to remove the selected page(s)? \nThis action cannot be cancelled and your data will be erased!')) {
					e.stop();
					return;
				}
			});
            
		}
	}
	
	function initAddLandingStep1() {
		var form = $('addLandingStep1');
		if (!form) {
			return;
		}
		var addmulti_domain = $('addmulti_domain');
		if(addmulti_domain == null)
		{
			form.addEvent('submit', function(e) {
				var firstInvalid = null;
				this.getElements('input[type=text]').each(function(el){
					if (el.get('value').isBlank()) {
						isValid = false;
						if (firstInvalid == null){
							firstInvalid = el;
						}
					}
				});
				
				if (firstInvalid != null) {
					alert('Please enter your landing page address!');
					firstInvalid.focus();
					e.stop();
					return;
				}
			});
		}
		
		var cancelBtn = $('cancelChange');
		if (cancelBtn) {
			cancelBtn.addEvent('click', function(e) {
				window.history.back();
			});
		}
	}
	
	function initAddLandingStep2() {
		var form = $('addLandingStep2');
		if (!form) {
			return;
		}
		
		var emailInput = form.getElement('input[name=email]');
		var sendEmail = form.getElement('input[id=sendEmail]');
		var sendcopy = form.getElement('input[name=sendcopy]');
		if (!emailInput || !sendEmail) {
			return;
		}
		
		var emailLoading = new Element('span', {
			'class': 'ajaxLoading'
			, 'html': '<img src="/images/ajax-loader.gif" width="16" height="16" alt="loading ..." />'
		}).inject(emailInput, 'after');
		
		sendEmail.addEvent('click', function(e) {
			if (!emailInput.get('value').isEmail()) {
				alert('Please input valid email address!');
				emailInput.focus();
				e.stop();
				return;
			}
			
			// prepare ajax data
			var emailTarget = form.getElement('input[name=emailTarget]');
			var domainId = form.getElement('input[name=domainId]');
			if (!emailTarget || !domainId) {
				return;
			}
			var alertHolder = $('alertHolder') || new Element('p', {'id': 'alertHolder'}).inject(this.getParent(), 'after');
			alertHolder.set('text', '').setStyle('display', 'none');
			
			// post data
			var addmulti_domain = $('addmulti_domain');
			if(addmulti_domain == null)
			{
				new Request.JSON({
					url: emailTarget.get('value')
					, method: 'post'
					, data: 'email=' + emailInput.get('value') + '&sendcopy=' + (sendcopy.checked ? sendcopy.get('value') : '0') + '&domain-id=' + domainId.get('value')
					, onSuccess: function(data){
						alertHolder.set('text', data.sendCodeInfo).setStyles({
							'color': '#f00'
							, 'display': 'block'
						});
						
						// hide loading
						emailLoading.setStyle('display', 'none');
						
						// disable
						sendEmail.disabled = '';
						sendcopy.disabled = '';
						emailInput.disabled = '';
					}
				}).send();
			}else
			{
				new Request.JSON({
					url: emailTarget.get('value')
					, method: 'post'
					, data: 'email=' + emailInput.get('value') + '&sendcopy=' + (sendcopy.checked ? sendcopy.get('value') : '0') + '&domain-ids=' + domainId.get('value')
					, onSuccess: function(data){
						alertHolder.set('text', data.sendCodeInfo).setStyles({
							'color': '#f00'
							, 'display': 'block'
						});
						
						// hide loading
						emailLoading.setStyle('display', 'none');
						
						// disable
						sendEmail.disabled = '';
						sendcopy.disabled = '';
						emailInput.disabled = '';
					}
				}).send();
			}
			
			// show loading
			emailLoading.setStyle('display', 'block');
			
			// disable
			sendEmail.disabled = 'disabled';
			sendcopy.disabled = 'disabled';
			emailInput.disabled = 'disabled';
		});
	}
	
	function initAddLandingStep4() {
		var form = $('addLandingStep4');
		if (!form) {
			return;
		}
		
		var domainUrl = form.getElement('input[name=domainUrl]');
		var domainId = form.getElement('input[name=domainId]');
		var protocolMethod = form.getElement('input[name=protocolMethod]');
		var verifyLink = form.getElement('input[name=verifyLink]');
		var verifyResult = $('verifyResult');
		var loadingMsg = $('verifyLoading');
		if (!domainUrl || !protocolMethod || !verifyResult || !domainId) {
			return;
		}

		var domains = domainUrl.get('value').split('#$%^&');
		var protocols = protocolMethod.get('value').split('#$%^&');
		var ids = domainId.get('value').split('#$%^&');
		var total = domains.length;
		if (total != protocols.length || total != ids.length) {
			alert('Invalid request parameters!');
			return;
		}
		
		domains.each(function(dm, i){
			new Element('h4', {
				'text': 'Landing page: ' + protocols[i].trim() + dm.trim()
			}).inject(verifyResult);
			var loadingMsg = new Element('p', {
				'class': 'verifyLoading'
				, 'text': 'ClickReport is attempting to verify your landing page URL ...'
			}).inject(verifyResult);
			var resultHolder = new Element('div', {
				'html': '<p>&nbsp;</p>'
			}).inject(verifyResult);
			sendVerifying(dm.trim(), protocols[i].trim(), ids[i].trim(), resultHolder, loadingMsg);
		});
		
		function sendVerifying(domain, protocol, id, resultHolder, loadingMsg) {
			new Request.HTML({
				url: verifyLink.get('value')
				, method: 'post'
				, data: 'domainUrl=' + domain + '&protocol=' + protocol + '&domainId=' + id
				, onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
					resultHolder.set('html', responseHTML);
					if (loadingMsg) {
						loadingMsg.setStyle('display', 'none');
					}
					
					var reVerify = resultHolder.getElement('input[id=reVerify]');
					if (reVerify) {
						reVerify.addEvent('click', function(e) {
							e.stop();
							resultHolder.set('html', '<p>&nbsp;</p>');
							if (loadingMsg) {
								loadingMsg.setStyle('display', 'block');
							}
							sendVerifying(domain, protocol, id, resultHolder, loadingMsg);
						});
					}
				}
			}).send();
		}
	}
	
	function initHelperPopup() {
		var links = $$('a.openPopup');
		var contents = $$('div.popupContent');
		var content2s = $$('div.popupContent2');
		if (links.length == 0 || (contents.length == 0 && content2s.length ==0)) {
			return;
		}
		
		// build overlay
		var overlay = $('lbOverlay') || new Element('div', {id: 'lbOverlay'}).inject(document.body);
		var scroll = window.getScroll(), size = window.getSize();
		overlay.setStyles({left: scroll.x, top: scroll.y, width: size.x, height: size.y, opacity:0.8, display:'none'});
		overlay.addEvent('click', function(e) {
			overlay.setStyle('display', 'none');
			$$('div.popupLayer').setStyle('display', 'none');
		});
		
		links.each(function(el, i) {
			var currentId = el.id || 'popupTrigger' + i;
			var content = $(el.get('rel'));
			if (!content && $$('div.popupContent').length > 0) {
				content = contents[0];
				el.layer = $(currentId + 'Lyr') || new Element('div', {
					'id': currentId + 'Lyr'
					, 'class': 'popupLayer'
					, 'html': content.get('html') + '<p class="closeLink"><a href="javascript:;" title="Click here to close the video"><img src="/images/closelabel.gif" width="66" height="22" alt="" /></a></p>'
				}).inject(document.body);
			}
			else if(!content && $$('div.popupContent2').length > 0)
			{
				content = content2s[0];
				el.layer = $(currentId + 'Lyr') || new Element('div', {
					'id': currentId + 'Lyr'
					, 'class': 'popupLayer2'
					, 'html': content.get('html') + '<p class="closeLink"><a href="javascript:;" title="Click here to close"><img src="/images/closelabel.gif" width="66" height="22" alt="" /></a></p>'
				}).inject(document.body);
			}
			
			content.destroy();
				
			// set close button
			if (typeof(el.layer) != 'undefined') {
				el.layer.getElement('p.closeLink a').addEvent('click', function(e) {
					e.stop();
					overlay.setStyle('display', 'none');
					el.layer.setStyle('display', 'none');
				});
			}
			
			el.addEvent('click', function(e){
				e.stop();
				// show content
				if (typeof(this.layer) != 'undefined') {
					overlay.setStyle('display', 'block');
					this.layer.setStyle('display', 'block');
				}
			});
		});
	}
	
	function initFaq() {
		var togglers = $$('#faq h4');
		var elements = $$('#faq div');
		togglers.each(function(el) {
			new Element('img', {
				'src': '/images/dummy.png'
				, 'width': 16
				, 'height': 16
				, 'alt': ''
				, 'class': 'icon help'
			}).inject(el, 'top');
		});
		new Fx.Accordion(togglers, elements, {
			display: -1
			, opacity: false
			, alwaysHide: true
			, onActive: function(toggler, element) {
				toggler.addClass('opened');
			}
			, onBackground: function(toggler, element) {
				toggler.removeClass('opened');
			}
		});
	}
	
	/*##############################################################################################################################*/
	function initReportForm() {
		var form = $('reportForm');
		if (!form) {
			return;
		}
		var submitButton = form.getElement('input[type=submit]');
		var domainInput = form.getElement('input[name=idomain_id]');
		var dateFromInput = form.getElement('input[name=datefrom]');
		var dateToInput = form.getElement('input[name=dateto]');
		var tagsInput = form.getElement('input[name=tags]');
		var referersInput = form.getElement('input[name=referers]');
		var ipExcludeInput = form.getElement('input[name=ip_exclude]');
		var domainLandingId = form.getElement('select[name=domainLandingId]');
		var colSortInput = form.getElement('input[name=col_sort]');
		var typeSortInput = form.getElement('input[name=type_sort]');
		var pageInput = form.getElement('input[name=page]');
		var keywordInput = form.getElement('input[name=keyword]');
		var ipsInput = form.getElement('input[name=ips]');
		var reportAction = form.getElement('input[name=reportAction]');
		
		var __updateHead = true;
		// var __updateTags = true;
		var __oldParams = '';
		
		// date picker
		$$('input.dateInput').each(function(el){
			el.readonly = 'readonly';
		});
		new DatePicker('input.dateInput', {
			pickerClass: 'datepicker'
			, inputOutputFormat: 'm/d/Y'
			, format: 'm/d/Y'
			, minDate: {
				date: '01/01/2008'
				, format: 'm/d/Y'
			}
			, maxDate: {
				date: new Date().format('m/d/Y')
				, format: 'm/d/Y'
			}
			, onSelect: function(e) {
				__updateHead = true;
				// __updateTags = true;
			}
		});
		
		//
		form.addEvent('submit', function(e){
			e.stop();
			loadReport();
		});
		
		// load report using ajax
		if (!reportAction) {
			return;
		}
		var action = reportAction.get('value');
		if (tagsInput) {
			tagsInput.addEvent('keyup', function(e) {
				__updateHead = true;
			});
		}
		if (referersInput) {
			referersInput.addEvent('keyup', function(e) {
				__updateHead = true;
			});
		}
		if (ipExcludeInput) {
			ipExcludeInput.addEvent('keyup', function(e) {
				__updateHead = true;
			});
		}
		if (domainLandingId) {
			domainLandingId.addEvent('change', function(e) {
				__updateHead = true;
			});
		}
		
		// load on start
		loadReport();
		function loadReport() {
			if (__oldParams == getParams()) {
				alert('This report has already been generated!');
				return;
			}
			new Request({
				url: action
				, method: 'post'
				, data: getParams() + '&format=data'
				, onSuccess: function(responseText){
					var resultPanel = new Element('div', {
						'id': 'reportDataPanel'
						, 'html': responseText
					}).inject('main');
					
					// init sort
					resultPanel.getElements('thead a').each(function(el) {
						el.addEvent('click', function(e) {
							e.stop();
							var params = this.rel.split('|');
							if (params.length != 2 || !colSortInput || !typeSortInput) {
								return;
							}
							colSortInput.set('value', params[0]);
							typeSortInput.set('value', params[1]);
							loadReport();
						});
					});
					
					// init paging
					resultPanel.getElements('.paging a').each(function(el) {
						el.addEvent('click', function(e) {
							e.stop();
							if (!this.rel || !pageInput) {
								return;
							}
							pageInput.set('value', this.rel);
							loadReport();
						});
					});
					
					if(__updateHead){                
						loadReportHead();                
					} else {
						hideLoading();
					}
					//
					updateLoading('rg2010', 'DONE');
					initGrids();
				}
			}).send();
			removeOldData(true);
			showLoading('rg2010', 'Loading report data grid');
			__oldParams = getParams();
		}
		
		function loadReportHead() {
			new Request({
				url: action
				, method: 'post'
				, data: getParams() + '&format=head'
				, onSuccess: function(responseText){            
					if (!responseText.isBlank()) {    
						new Element('fieldset', {
							html: responseText
						}).inject(form);
						
						var exportButton = form.getElement('.sep input[type=button]');
						if (exportButton) {
							exportButton.addEvent('click', function(e) {
								new Request({
									url: action
									, method: 'post' 
									, data: getParams() + '&format=csv'
									, onSuccess: function(responseText){
										var rs = responseText.split(':');
										if (rs[0] == 1) {
											var downloadFrame = $('TB_HideSelect') || new Element('iframe', {
												'id': 'TB_HideSelect'
												, 'opacity': 0
												, 'styles': {
													'width': 0
													, 'height': 0
												}
											}).inject(document.body);
											downloadFrame.setProperty('src','/report/'+ rs[1]);    
										} else {
											alert('Cannot download report in csv format.');
										}            
									}
								}).send();
							});
						}
					} else {
						alert('Cannot load hits head report. We have an error: ' + responseText);
					}
					updateLoading('ri2010', 'DONE');
					hideLoading();
					//loadTags();
				}
			}).send();
			showLoading('ri2010', 'Loading report information');
			removeOldData();
			__updateHead = false;
		}
		
		/*
		function loadTags() {
			if (__updateTags && tagsInput!=null) {
				new Request.JSON({
					url: '/report/tags'
					, method: 'post'
					, data: getParams()
					, onSuccess: function(jsonObj){
						updateSeletors('tags', 'Tags', jsonObj.tags);
						updateSeletors('referers', 'Referers', jsonObj.refers);
						updateLoading('tg2010', 'DONE');
						hideLoading();
					}
				}).send();
				showLoading('tg2010', 'Loading tags / referers');
				__updateTags = false;
			} else {
				hideLoading();
			}
		}
		*/
		
		function updateSeletors(name, title, data) {
			var seletorInput = form.getElement('select[name=' + name + ']');
			if (!seletorInput) {
				return;
			}
			seletorInput.empty();
			new Element('option', {
				'value': '%'
				, 'text': '-- All ' + title + ' --'
			}).inject(seletorInput);
			data.each(function(el) {
				new Element('option', {
					'value': el.tag || el.refer || ''
					, 'text': el.tag || el.refer
				}).inject(seletorInput);
			});
		}
		
		function removeOldData(all) {
			var fieldset = form.getElements('fieldset');
			if (fieldset.length > 1 && __updateHead == true){
				fieldset.getLast().destroy();
			}
			if (all != null && $('reportDataPanel')) {
				$('reportDataPanel').destroy();
			}
		}
		
		function showLoading(id, msg) {
			var loadingPanel = $('loadingPanel') || new Element('div', {
				'id': 'loadingPanel'
				, 'html': '<img src="/images/ajax-loader.gif" width="16" height="16" alt="" /><div></div>'
				, 'styles': {
					'display': 'none'
					, 'opacity': 0.9
				}
			}).inject('main');
			if (id && msg) {
				new Element('p', {
					'id': id
					, 'html': '<span class="loadingText">' + msg + '</span>'
				}).inject(loadingPanel.getElement('div'));
			}
			loadingPanel.setStyle('display', 'block');
			
			// disable buttons
			if (submitButton) {
				submitButton.disabled = 'disabled';
			}
			$$('input.dateInput').each(function(el){
				el.disabled = 'disabled';
			});
			if (tagsInput) {
				tagsInput.disabled = 'disabled';
			}
			if (referersInput) {
				referersInput.disabled = 'disabled';
			}
			if (ipExcludeInput) {
				ipExcludeInput.disabled = 'disabled';
			}
			if (domainLandingId) {
				domainLandingId.disabled = 'disabled';
			}
			var exportButton = form.getElement('.sep input[type=button]');
			if (exportButton) {
				exportButton.disabled = 'disabled';
			}
		}
		
		function updateLoading(id, msg) {
			var loadingPanel = $('loadingPanel');
			if (loadingPanel && id && msg) {
				new Element('span', {
					'text': msg
					, 'class': 'loadingStatus'
				}).inject(id);
				loadingPanel.setStyle('display', 'block');
			}
		}
		
		function hideLoading() {
			var loadingPanel = $('loadingPanel');
			if (loadingPanel) {
				loadingPanel.getElement('div').empty();
				loadingPanel.setStyle('display', 'none');
			}
			
			// enable buttons
			if (submitButton) {
				submitButton.disabled = '';
			}
			$$('input.dateInput').each(function(el){
				el.disabled = '';
			});
			if (tagsInput) {
				tagsInput.disabled = '';
			}
			if (referersInput) {
				referersInput.disabled = '';
			}
			if (ipExcludeInput) {
				ipExcludeInput.disabled = '';
			}
			if (domainLandingId) {
				domainLandingId.disabled = '';
			}
			var exportButton = form.getElement('.sep input[type=button]');
			if (exportButton) {
				exportButton.disabled = '';
			}
		}
		
		// hits report
		function getParams() {
			var dataPost = '';
			if (domainInput) {
				dataPost += 'domain=' + domainInput.get('value');
			}
			if (dateFromInput && !dateFromInput.get('value').isBlank()) {
				dataPost += '&date_from=' + dateFromInput.get('value');
			}
			if (dateToInput && !dateToInput.get('value').isBlank()) {
				dataPost += '&date_to=' + dateToInput.get('value');
			}
			if (tagsInput && !tagsInput.get('value').isBlank()) {
				dataPost += '&tags=' + tagsInput.get('value');
			}
			if (referersInput && !referersInput.get('value').isBlank()) {
				dataPost += '&referer=' + referersInput.get('value');
			}
			if (ipExcludeInput && !ipExcludeInput.get('value').isBlank()) {
				dataPost += '&ip_exclude=' + ipExcludeInput.get('value');
			}
			if (domainLandingId && !domainLandingId.get('value').isBlank()) {
				dataPost += '&domainLandingId=' + domainLandingId.get('value');
			}
			if (colSortInput && !colSortInput.get('value').isBlank()) {
				dataPost += '&col_sort=' + colSortInput.get('value');
			}
			if (typeSortInput && !typeSortInput.get('value').isBlank()) {
				dataPost += '&type_sort=' + typeSortInput.get('value');
			}
			if (pageInput && !pageInput.get('value').isBlank()) {
				dataPost += '&cpage=' + pageInput.get('value');
			}
			if (keywordInput && !keywordInput.get('value').isBlank()) {
				dataPost += '&keyword=' + keywordInput.get('value');
			}
			if (ipsInput && !ipsInput.get('value').isBlank()) {
				dataPost += '&ipaddr=' + ipsInput.get('value');
			}
			return dataPost;
		}
	}
	/*##############################################################################################################################*/
	
	function initGrids() {
		$$('.reportGrid tr', '.campainGrid tr').each(function(el){
			el.addEvents({
				'mouseenter': function(e) {
					this.setStyle('background-color', '#feeba1');
				}
				, 'mouseleave': function(e) {
					this.setStyle('background-color', '');
				}
			});
		});
	}
	
	function initConfigWarnings() {
		var form = $('configWarnings');
		if (!form) {
			return;
		}
        //add bulk editing
		var applyBtn = form.getElement('input[name=applyBtn]');
        var configWarnings = $('configWarningsFormContent');
        var filterLanding = form.getElement('select[name=selFilterLanding]');
        if(filterLanding){
            filterLanding.addEvent('change',function(e){
                e.stop();
                window.location=filterLanding.get('value');
            });
            
        }
        if(applyBtn){
            applyBtn.addEvent('click',function(e){
                e.stop();
                var ajaxAction = form.getElement('input[name=ajaxAction]');
                var action =  ajaxAction.get('value');
                var divDomain = $('configWarningsDomains');
                configWarnings.set('styles',{'height':'0px','visibility': 'hidden'});
                divDomain.set('styles',{'visibility':'visible'});
                divDomain.set('html','<img src="/images/ajax-loader.gif" width="16" height="16" alt="" />');
                new Request({
                    url: action
                    , method: 'get' 
                    , onSuccess: function(responseText){
                        divDomain.set('html',responseText);
                        var cancelBulkBtn = form.getElement('input[name=bulkCacelBtn]');
                        if(cancelBulkBtn){
                            cancelBulkBtn.addEvent('click',function(e){
                                divDomain.set('html','');
                                divDomain.set('styles',{'visibility':'hidden'});
                                configWarnings.set('styles',{'height':'916px','visibility': 'visible'});
                            });
                        }
                    }
                }).send();
            });
        }
        //end bulk editing
		var filterref = $('filterref');
		if (filterref) {
			addRefTag(filterref, 'refHolder', 'referer', 'refLinks', 'specifiedrefs');
			initRefTag('referer', 'refLinks', 'specifiedrefs');
			filterref.addEvent('change', function(e) {
				addRefTag(this, 'refHolder', 'referer', 'refLinks', 'specifiedrefs');
			});
		}
		
		var filtertag = $('filtertag');
		if (filtertag) {
			addRefTag(filtertag, 'tagHolder', 'CR Tag', 'tagLinks', 'specifiedtags');
			initRefTag('CR Tag', 'tagLinks', 'specifiedtags');
			filtertag.addEvent('change', function(e) {
				addRefTag(this, 'tagHolder', 'CR Tag', 'tagLinks', 'specifiedtags');
			});
		}
		
		var messageStart = {
			'customsoft': 		'<img src="/images/dooglesmiley1.gif" width="163" height="148" alt="ClickReport" />'
			, 'custommedium':  	'<img src="/images/dooglesmiley2.gif" width="163" height="148" alt="ClickReport" />'
			, 'customhard':		'<img src="/images/dooglesmiley3.gif" width="163" height="148" alt="ClickReport" />'
			, 'customveryhard': '<img src="/images/dooglesmiley4.gif" width="163" height="148" alt="ClickReport" />'
		};
		var message = {
			'customsoft': 		'<h4>Thank you for visiting our website again!</h4>'
								+ '<p>Visiting our site via a pay per click advert costs money which we would prefer to pass on to our customers by keeping prices down.</p>'
			, 'custommedium':  	'<h4>Hello again!</h4>'
								+ '<p>We do enjoy you visiting our site but please add us to your favourites, consistently clicking on our pay per click ads is a waste of our advertising budget.</p>'
			, 'customhard':		'<h4>Don\'t get us wrong, but ...</h4>'
								+ '<p>We want you to keep visiting our site and we are glad you do but we would appreciate if you stopped using our advertising links to get here.</p>'
			, 'customveryhard': '<h4>We\'ve tried the polite way, now we\'re getting angry!</h4>'
								+ '<p>We have logged your IP address and this has been passed to our internal fraud department. We are concerned you are intentionally trying to drive up the cost of our advertsing.</p>'
		}
		var messageEnd = 	'<p><a href="javascript:;">Please click here to add this site to your favourites</a></p>'
							+ '<p class="powerDoolge"><a href="http://www.clickreport.com/">Powered by <span>ClickReport.com</span></a></p>';
		
		$$('select.customMes').each(function(el) {
			var textarea = $(el.name + 'HTML');
			if (!textarea) {
				alert('Missing form element! Please check.');
				return;
			}
			var preview = $(el.name + 'Preview') || new Element('div', {
				'id': el.name + 'Preview'
				, 'class': 'badge'
				, 'html': '<div></div>'
				, 'styles': {
					'display': 'none'
				}
			}).inject(el.getParent());
			
			var html = textarea.get('value');
			if (html.isBlank()) {
				html = messageStart[el.name] + message[el.name] + messageEnd;
				textarea.set('value', message[el.name]);
			} else {
				html = messageStart[el.name] + html + messageEnd;
			}
			preview.getFirst().set('html', html);
			textarea.addEvents({
				'keyup': function(e) {
					preview.getFirst().set('html', messageStart[el.name] + this.get('value') + messageEnd);
				}
				, 'blur': function(e) {
					preview.getFirst().set('html', messageStart[el.name] + this.get('value') + messageEnd);
				}
			});
			el.addEvent('change', function(e) {
				if (this.selectedIndex != 0) {
					textarea.setStyle('display', 'block');
					preview.setStyle('display', 'block');
				} else {
					textarea.setStyle('display', 'none');
					preview.setStyle('display', 'none');
				}
			});
		});
		
		// show input & add specified refs, tags when selected special refs, tags filter
		function addRefTag(ref, holderId, title, linkList, input) {
			var refTagHolder = $(holderId) || new Element('span', {
				'id': holderId
				, 'class': 'refTagHolder'
			}).inject(ref, 'after');
			refTagHolder.setStyle('display', 'none');
			if (ref.selectedIndex != 0) {
				refTagHolder.setStyle('display', 'block');
				if (refTagHolder.innerHTML.isBlank()) {
					new Element('h5', {
						'text': 'Specified ' + title + '(s)'
					}).inject(refTagHolder);
					var refTagLinks = new Element('ul', {
						'id': linkList
						, 'styles': {
							'display' : 'none'
						}
					}).inject(refTagHolder);
					var refTag = new Element('input', {
						'type': 'text'
						, 'name': 'refTag'
						, 'id': 'refTag'
					}).inject(refTagHolder);
					new Element('input', {
						'type': 'button'
						, 'value': 'Add'
						, 'events': {
							'click': function(evt) {
								evt.stop();
								
								if (refTag.get('value').isBlank()) {
									alert('Please input ' + title + '!');
									return;
								}
								
								var item = new Element('li', {
									'html': '<span>' + refTag.get('value').trim() + '</span> '
								}).inject(refTagLinks.setStyle('display', 'block'));
								
								new Element('a', {
									'href': 'javascript:;'
									, 'class': 'icon remove'
									, 'text': 'remove'
									, 'title': 'Click here to remove this ' + title
									, 'events': {
										'click': function (event) {
											this.getParent().destroy();
											if (refTagLinks.innerHTML.isBlank()) {
												refTagLinks.setStyle('display', 'none');
											}
											updateRefTag(input, refTagLinks);
										}
									}
								}).inject(item);
								refTag.set('value', '');
								updateRefTag(input, refTagLinks);
							}
						}
					}).inject(refTagHolder);
				}
			}
		}
		
		function initRefTag(title, linkList, input) {
			var target = form.getElement('input[name=' + input + ']');
			var refTagLinks = $(linkList);
			if (!target || !refTagLinks) {
				return;
			}
			var values = target.get('value').split(';;;');
			values.each(function(el) {
				if (!el.isBlank()) {
					var item = new Element('li', {
						'html': '<span>' + el.trim() + '</span> '
					}).inject(refTagLinks.setStyle('display', 'block'));
					
					new Element('a', {
						'href': 'javascript:;'
						, 'class': 'icon remove'
						, 'text': 'remove'
						, 'title': 'Click here to remove this ' + title
						, 'events': {
							'click': function (event) {
								this.getParent().destroy();
								if (refTagLinks.innerHTML.isBlank()) {
									refTagLinks.setStyle('display', 'none');
								}
								updateRefTag(input, refTagLinks);
							}
						}
					}).inject(item);
				}
			});
		}
		
		function updateRefTag(input, linkList) {
			var target = form.getElement('input[name=' + input + ']');
			var value = '';
			linkList.getElements('span').each(function(el) {
				value += el.get('text') + ';;;';
			});
			target.set('value', value.replace(/[;]{3}$/,''));
		}
	}
	function initConfigEmailAlerts(){
        var form = $('configEmail');
        if (!form) {
            return;
        }
        //add bulk editing
        var applyBtn = form.getElement('input[name=applyBtn]');
        var configWarnings = $('configWarningsFormContent');
        var filterLanding = form.getElement('select[name=selFilterLanding]');
        if(filterLanding){
            filterLanding.addEvent('change',function(e){
                e.stop();
                window.location=filterLanding.get('value');
            });
            
        }
        if(applyBtn){
            applyBtn.addEvent('click',function(e){
                e.stop();
                var ajaxAction = form.getElement('input[name=ajaxAction]');
                var action =  ajaxAction.get('value');
                var divDomain = $('configWarningsDomains');
                configWarnings.set('styles',{'height':'0px','visibility': 'hidden'});
                divDomain.set('styles',{'visibility':'visible'});
                divDomain.set('html','<img src="/images/ajax-loader.gif" width="16" height="16" alt="" />');
                new Request({
                    url: action
                    , method: 'get' 
                    , onSuccess: function(responseText){
                        divDomain.set('html',responseText);
                        var cancelBulkBtn = form.getElement('input[name=bulkCacelBtn]');
                        if(cancelBulkBtn){
                            cancelBulkBtn.addEvent('click',function(e){
                                divDomain.set('html','');
                                divDomain.set('styles',{'visibility':'hidden'});
                                configWarnings.set('styles',{'height':'420px','visibility': 'visible'});
                            });
                        }
                    }
                }).send();
            });
        }
        //end bulk editing
    }
    function initConfigLandingPageMonitor(){
        var form = $('configLanding');
        if (!form) {
            return;
        }
        //add bulk editing
        var applyBtn = form.getElement('input[name=applyBtn]');
        var configWarnings = $('configWarningsFormContent');
        var filterLanding = form.getElement('select[name=selFilterLanding]');
        if(filterLanding){
            filterLanding.addEvent('change',function(e){
                e.stop();
                window.location=filterLanding.get('value');
            });
            
        }
        if(applyBtn){
            applyBtn.addEvent('click',function(e){
                e.stop();
                var ajaxAction = form.getElement('input[name=ajaxAction]');
                var action =  ajaxAction.get('value');
                var divDomain = $('configWarningsDomains');
                configWarnings.set('styles',{'height':'0px','visibility': 'hidden'});
                divDomain.set('styles',{'visibility':'visible'});
                divDomain.set('html','<img src="/images/ajax-loader.gif" width="16" height="16" alt="" />');
                new Request({
                    url: action
                    , method: 'get' 
                    , onSuccess: function(responseText){
                        divDomain.set('html',responseText);
                        var cancelBulkBtn = form.getElement('input[name=bulkCacelBtn]');
                        if(cancelBulkBtn){
                            cancelBulkBtn.addEvent('click',function(e){
                                divDomain.set('html','');
                                divDomain.set('styles',{'visibility':'hidden'});
                                configWarnings.set('styles',{'height':'166px','visibility': 'visible'});
                            });
                        }
                    }
                }).send();
            });
        }
        //end bulk editing
    }
	function initConfigKeywords() {
		var form = $('configKeywords');
		if (!form) {
			return;
		}
		
		var engine = form.getElement('select[id=engine]');
		var url = form.getElement('select[id=url]');
		var terms = form.getElement('select[id=terms]');
		var domainId = form.getElement('input[name=domainId]');
		var configKeywordsUrl = form.getElement('input[name=configKeywordsUrl]');
		
		if (!engine || !url || !terms || !domainId) {
			return;
		}
		
		var engineLoading = new Element('span', {
			'class': 'ajaxLoading'
			, 'html': '<img src="/images/ajax-loader.gif" width="16" height="16" alt="loading ..." />'
		}).inject(engine, 'after');
		
		var urlLoading = new Element('span', {
			'class': 'ajaxLoading'
			, 'html': '<img src="/images/ajax-loader.gif" width="16" height="16" alt="loading ..." />'
		}).inject(url, 'after');
		
		engine.addEvent('change', function(e) {
            if(engine.get('value')!=''){
			    new Request.JSON({
				    url: configKeywordsUrl.get('value')
				    , method: 'post' 
				    , data: 'domain-id=' + domainId.get('value')+'&dod_tag=engine&dod_engine='+engine.get('value')
				    , onSuccess: function(jsonObj){
					    updateSeletors('dod_refering_url', jsonObj.refering,'');
					    updateSeletors('dod_terms', jsonObj.keywords,'Found '+jsonObj.keywords.length+' possible keyword(s)');
					    engineLoading.setStyle('display', 'none');
				    }
			    }).send();
			    engineLoading.setStyle('display', 'block');
                $('updateHits').setStyle('display', 'none');
            }
		});
		url.addEvent('change', function(e) {
            if(url.get('value')!=''){
			    new Request.JSON({
				    url: configKeywordsUrl.get('value')
				    , method: 'post' 
				    , data: 'domain-id=' + domainId.get('value')+'&dod_tag=referring&dod_refering_url='+url.get('value')
				    , onSuccess: function(jsonObj){
					    updateSeletors('dod_terms', jsonObj.keywords,'Found '+jsonObj.keywords.length+' possible keyword(s)');
					    urlLoading.setStyle('display', 'none');
				    }
			    }).send();
			    urlLoading.setStyle('display', 'block');
                $('updateHits').setStyle('display', 'none');
            }
		});
        terms.addEvent('change', function(e) {            
            $('updateHits').setStyle('display', 'block');
        });
		
		function updateSeletors(name, data,def) {
			var seletorInput = form.getElement('select[name=' + name + ']');
			if (!seletorInput) {
				return;
			}
			seletorInput.empty();
            if(def!=''){
                new Element('option', {
                    'value': ''
                    , 'text': def
                }).inject(seletorInput);    
            }            
			data.each(function(el) {
				var value = '';
				var text = '';
				if (el.id) {
					value += el.id;
				}
				value += '|||';
				if (el.url) {
					value += el.url;
					text += el.url;
				} else if (el.keyword) {
					value += el.keyword;
					text += el.keyword;
				}
				new Element('option', {
					'value': value
					, 'text': text
				}).inject(seletorInput);
			});            
		}
	}
	
	function initConfigRecipients() {
		var form = $('configRecipients');
		if (!form) {
			return;
		}
		//add bulk editing
        var applyBtn = form.getElement('input[name=applyBtn]');
        var configWarnings = $('configWarningsFormContent');
        var filterLanding = form.getElement('select[name=selFilterLanding]');
        if(filterLanding){
            filterLanding.addEvent('change',function(e){
                e.stop();
                window.location=filterLanding.get('value');
            });
            
        }
        if(applyBtn){
            applyBtn.addEvent('click',function(e){
                e.stop();
                var ajaxAction = form.getElement('input[name=ajaxAction]');
                var action =  ajaxAction.get('value');
                var divDomain = $('configWarningsDomains');
                configWarnings.set('styles',{'height':'0px','visibility': 'hidden'});
                divDomain.set('styles',{'visibility':'visible'});
                divDomain.set('html','<img src="/images/ajax-loader.gif" width="16" height="16" alt="" />');
                new Request({
                    url: action
                    , method: 'get' 
                    , onSuccess: function(responseText){
                        divDomain.set('html',responseText);
                        var cancelBulkBtn = form.getElement('input[name=bulkCacelBtn]');
                        if(cancelBulkBtn){
                            cancelBulkBtn.addEvent('click',function(e){
                                divDomain.set('html','');
                                divDomain.set('styles',{'visibility':'hidden'});
                                configWarnings.set('styles',{'height':'333px','visibility': 'visible'});
                            });
                        }
                    }
                }).send();
            });
        }
        //end bulk editing
		form.addEvent('submit', function(e) {
			var inputs = form.getElements('input[type=text]');
			var hasValue = false;
			var firstInput = null;
			inputs.each(function(el) {
				if (el.name.indexOf('recipient') != -1) {
					if (!el.get('value').isBlank()) {
						hasValue = true;
					}
					if (firstInput == null) {
						firstInput = el;
					}
					if (!el.get('value').isBlank() && !el.get('value').isEmail()) {
						alert('Please input valid email address');
						el.focus();
						e.stop();
						return;
					}
				}
			});
			
			if (!hasValue && firstInput != null) {
				alert('Please input at least one email address');
				firstInput.focus();
				e.stop();
				return;
			}
		});
	}
	
	function initChangePassword() {
		var form = $('accountPassForm');
		if (!form) {
			return;
		}
		
		var oldpassword = form.getElement('input[name=oldpassword]');
		var newpassword = form.getElement('input[name=newpassword]');
		var conpassword = form.getElement('input[name=conpassword]');
		if (!oldpassword || !newpassword || !conpassword) {
			return;
		}
		new PasswordMeter('newpassword');
		form.addEvent('submit', function(e) {
			if (oldpassword.get('value').isBlank()) {
				alert('Please enter your OLD password!');
				oldpassword.focus();
				e.stop();
				return;
			}
			if (newpassword.get('value').isBlank()) {
				alert('Please enter your NEW password!');
				newpassword.focus();
				e.stop();
				return;
			}
			if (conpassword.get('value') != newpassword.get('value')) {
				alert('Your confirmed password does not match!');
				conpassword.focus();
				e.stop();
				return;
			}
		});
	}
	
	function initSlimBox() {
		$$("a").filter(function(el) {
			return el.rel && el.rel.test(/^lightbox/i);
		}).slimbox({}, null, function(el) {
			return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
		});
	}
	
	function initCancelButtons() {
		$$('input.cancelButton').each(function(el) {
			el.addEvent('click', function(e) {
				e.stop();
				window.history.back();
			});
		});
	}
	
	function initHomeSignUpForm() {
		var form = $('homeSignUp');
		if (!form) {
			return;
		}
		
		var firstnameInput = form.getElement('input[name=firstname]');
		var lastnameInput = form.getElement('input[name=lastname]');
		var emailInput = form.getElement('input[name=email]');
		var emailconfirmInput = form.getElement('input[name=emailconfirm]');
		
		form.addEvent('submit', function(e){
			if (firstnameInput && firstnameInput.get('value').isBlank()) {
				alert('Please input your first name!');
				firstnameInput.focus();
				e.stop();
				return;
			}
			if (lastnameInput && lastnameInput.get('value').isBlank()) {
				alert('Please input your last name!');
				lastnameInput.focus();
				e.stop();
				return;
			}
			if (emailInput && !emailInput.get('value').isEmail()) {
				alert('Please input your valid email address!');
				emailInput.focus();
				e.stop();
				return;
			}
			if (emailInput && emailconfirmInput && emailInput.get('value').trim() != emailconfirmInput.get('value').trim()) {
				alert('Confirm email does not match!');
				emailconfirmInput.focus();
				e.stop();
				return;
			}
		});
	}
	
	function initReferForm() {
		var form = $('referForm');
		if (!form) {
			return;
		}
		
		var usernameInput = form.getElement('input[name=username]');
		if (!usernameInput) {
			return;
		}
		
		form.addEvent('submit', function(e){
			if (usernameInput.get('value').isBlank()) {
				alert('Please input your username!');
				usernameInput.focus();
				e.stop();
				return;
			}
		});
	}

	function initDomDeady() {
		initLogin();
		initLoginForm();
		initContactForm();
		initOneEmailForm('getpassForm', 'email');
		initOneEmailForm('quickSignUpForm', 'signupemail');
		initOneEmailForm('accountEmailForm', 'email');
		iniInfoForm();
		initSlimBox();
		initSupportVideos();
		initSetupSteps();
		initLandingPage();
		initAddLandingStep1();
		initAddLandingStep2();
		initHelperPopup();
		initFaq();
		initReportForm();
		initGrids();
        initConfigWarnings();
		initConfigEmailAlerts();
        initConfigLandingPageMonitor();
		initConfigKeywords();
		initConfigRecipients();
		initChangePassword();
		initUnsubscribeForm();
		initCancelButtons();
		initHomeSignUpForm();
		initReferForm();
	}
	
	function initDomLoad() {
		initSideBarVideo('flashVideo');
		initSideBarVideo('doogleWarning');
		initAddLandingStep4();
	}

	if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) {
		window.addEvent('domready', initDomDeady);
		window.addEvent('load', initDomLoad);
	}
})();

