/***********************************************
 ***** GENERAL CONTROL PANEL FUNCTIONALITY ***** 
 **********************************************/

/*
 * Set control panel menus hide/disclose state (also sets cookie)
 */
function setMenuToggles() {
	$$('.cp-group').each(function(elm) {
		elm.firstDescendant().observe('click', function(event) {
			event.stop();
			toggleMenu(elm.firstDescendant());
		});
		if(elm.firstDescendant().hasClassName('cp-head-hide')) {
			elm.firstDescendant().next().hide();
		}
	});
}

function toggleMenu(elm) {
	elm.next().toggle();
	if(elm.hasClassName('cp-head-show')) {
		new Ajax.Request(elm.href, {parameters: 'section=' + elm.up().id + '&status=hide'});
		elm.removeClassName('cp-head-show');
		elm.addClassName('cp-head-hide');
	} else {
		new Ajax.Request(elm.href, {parameters: 'section=' + elm.up().id + '&status=show'});
		elm.removeClassName('cp-head-hide');
		elm.addClassName('cp-head-show');
	}
}

document.observe('dom:loaded', setMenuToggles);

/*
 * Functions for building setting and removing form hints
 */
function setFormHints() {
	// loop through all form input elements where class="form-hint"
	$$('input.form-hint').each(function(elm) {
		elm.stopObserving();
		// watch for any focus events on the form input
		elm.observe('focus', function() {
			removeFormHint(elm);
		});
		// watch for any blur events on the form input
		elm.observe('blur', function() {
			displayFormHint(elm);
		});
		// watch for any blur events on the form input
		elm.up('form').observe('submit', function() {
			if(elm.value == elm.title) {
				elm.value = '';
			}
		});
		displayFormHint(elm);
	});
}
function removeFormHint(elm) {
	// quick check to see if we are setting the form from a datepicker object (if so, our elm value is an object).
	if(typeof elm == 'object') {
		elm = $(elm.id);
	}
	// if the value of the field is equal to the title, then we need to clear it and set the styling.
	if(elm.value == elm.title) {
		elm.value = "";
		elm.style.color = "#000";
		//elm.style.fontStyle = "normal";
	}
}
function displayFormHint(elm) {
	// if the value of the filed is empty then set it to the form hint (the title).
	if(elm.value == "" || elm.value == elm.title) {
		elm.value = elm.title;
		elm.style.color = "#999";
		//elm.style.fontStyle = "italic";
	}
}

// when the dom has loaded, apply all form hint observers
document.observe('dom:loaded', setFormHints);

/*
 * Allows toggling of additional "meta" page information on the new/edit Page pages
 */
function disclosePageInfo() {
	$$('div.section a').each(function(elm) {
		elm.observe('click', function(event) {
			event.stop();
			if(elm.hasClassName('disclose')) {
				elm.removeClassName('disclose');
				$('page_info').blindUp({duration:0.3});
			} else {
				elm.addClassName('disclose');
				$('page_info').blindDown({duration:0.3});
			}
		});
		// set off by default when page loads
		elm.removeClassName('disclose');
		$('page_info').hide();
	});
}

document.observe('dom:loaded', disclosePageInfo);

/*
 * Set functionality to auto close/manually close flash messages
 * Good flash messages should auto close after a few seconds, bad flash messages should remain until dismissed
 */

// check for any flash message, if good, then setTimeout to auto-dismiss. If bad, then disregard.
function watchFlashMessage() {
	if($('flash_msg')) {
		if(!($('flash_msg').hasClassName('bad'))) {
			setTimeout('dismissFlashMessage()', 3000);
		}
	}
}

// dismisses the actual flash message
function dismissFlashMessage() {
	new Effect.SlideUp('flash_msg', {duration: 0.3});
}

document.observe('dom:loaded', watchFlashMessage);


/***********************************************
 ** MODAL BOX DELETES PAGES & NAV & FRONT-END ** 
 **********************************************/
/*
 * Functionality opening pending events litebox on admin login
 */
function confirmModuleDelete() {
	// deleting tip from the tips module
	$$('.delete-module').each(function(elm) {
		elm.stopObserving('click');
		elm.observe('click', function(event) {
			event.stop();
			var content = new Element('a', {'href':elm.href, 'id':'rp_remove_option_1', 'class':'modal-choice'}).update(new Element('span').update('Delete'));
			var modal_box = createModalBox('Are you sure you want to delete this record?', elm.title, content);

			$('rp_modal_functions').update(modal_box);
			$('rp_modal_confirm').appear({duration:0.1});

			closeModal();
		});
	});
}

function closeModal() {
	// setup method handle close click on modalbox
	$$('.rp-close-modal').each(function(elm) {
		elm.stopObserving();
		elm.observe('click', function(event) {
			event.stop();
			$('rp_modal_confirm').fade({duration:0.3});
		});
	});
}


/*
 * Create general modal box wrapper for deletes/warnings
 */
function createModalBox(title, subtitle, content) {
	var modal_div = new Element('div', {'id':'rp_modal_confirm', 'style':'display:none;'});
	var modal_wrap = new Element('div', {'id':'rp_modal_wrapper'});
	var modal_head = new Element('div', {'id':'rp_modal_head'});
	var modal_head_title = new Element('span').update(title);
	var modal_x = new Element('a', {'class':'rp-close-modal'});
	modal_head = modal_head.update(modal_head_title).insert(modal_x);
	var modal_content = new Element('div', {'id':'rp_modal_text'});
	var modal_text_title = new Element('h2', {'id':'rp_modal_text_title'}).update(subtitle);
	var modal_close = new Element('a', {'class':'modal-choice rp-close-modal'}).update(new Element('span', {'class':'red'}).update('Cancel'));
	modal_content = modal_content.update(modal_text_title).insert(content).insert(modal_close);
	var modal_foot = new Element('div', {'id':'rp_modal_foot'});
	
	var modal_box = modal_div.update(modal_wrap.update(modal_head).insert(modal_content).insert(modal_foot));
	
	return modal_box;
}

document.observe('dom:loaded', confirmModuleDelete);

/***********************************************
 ****** APPLICATION SPECIFIC FUNCTIONALITY ***** 
 **********************************************/
/*
 * Function that allow selecting sub-categories for a blogger (dynamic dependants)
 */
function dynamicDependantChange() {
	$$('select.main-cat').each(function(elm) {
		// remove previous observers
		// elm.stopObserving();/*This doesn't seem necessary here (even though we call it again. Having it screws UP the other onchange handlers in IE7)*/
		// add new event observer

        //Place this here too, so that on load, we take away the '*' for editing
        if ($('BloggerBlogUrl')) {
            // hide/show blog url required indicator depending on selected value
                if ($(elm).getValue() == 3 ||	// Church Leader
                        $(elm).getValue() == 4 ||	// Ministry Leader
                        $(elm).getValue() == 5 ||	// Librarian
                        $(elm).getValue() == 6 ||	// Retailer
                        $(elm).getValue() == 9) {	// Media

                        $('BloggerBlogUrl').previous().down('span.rc-required').hide();
                        $('BloggerBlogName').previous().down('span.rc-required').hide();
                }
                else {
                        $('BloggerBlogUrl').previous().down('span.rc-required').show();
                        $('BloggerBlogName').previous().down('span.rc-required').show();
                }
        }

		
		elm.observe('change', function(event) {
			if ($('BloggerBlogUrl')) {
				// hide/show blog url required indicator depending on selected value
				if ($(this).getValue() == 3 ||	// Church Leader
					$(this).getValue() == 4 ||	// Ministry Leader
					$(this).getValue() == 5 ||	// Librarian
					$(this).getValue() == 6 ||	// Retailer
					$(this).getValue() == 9) {	// Media
				
					$('BloggerBlogUrl').previous().down('span.rc-required').hide();
					$('BloggerBlogName').previous().down('span.rc-required').hide();
				}
				else {
					$('BloggerBlogUrl').previous().down('span.rc-required').show();
					$('BloggerBlogName').previous().down('span.rc-required').show();
				}
			}
			
			// perform AJAX call to update dependant select box
			new Ajax.Request('/bloggingforbooks/cp/bloggers/get_categories/'+elm.value, {onSuccess: function(transport) {
		     	var json = transport.responseText.evalJSON();
				// get the subcat select based on the id of the parent
				var underscore = elm.id.lastIndexOf('_');
				var id = elm.id.substring(underscore + 1);
				// empty out previous options
				var e = $('sub_cat_'+id);
				var empty = e.down();
				e.update();
				// loop through returned data and append as options
				var has_elements = false;
                
				e.insert(empty);
				for (var key in json) {
					if (json.hasOwnProperty(key)) {
						var option = new Element('option', {'value':key}).update(json[key]);
						e.insert(option);
						has_elements = true;
					}
				}
				// enable dependant select box if elements came back
				if(has_elements == true) {
					e.enable();
				} else {
					e.disable();
				}
			}});
		});
	});
}


function addCategory() {
	$$('a#add_category').each(function(elm) {
		// remove previous observers
		elm.stopObserving();
		// set variable for # of selects
		var num_sel = $$('select.main-cat').length + 1;
		
		// add new event observer
		elm.observe('click', function(event) {
			// we do this here so that we can 
			$$('select.main-cat').each(function(elm) {
				// remove previous observers
				elm.stopObserving('change');
			});
			event.stop();
			// Copy elements and add to DOM
			var prev_elm = $$('select.main-cat').toArray().shift().up();
			var master_cat = prev_elm.cloneNode(true);
			if(master_cat.down('label')) {
				master_cat.down('label').remove();
			}
			master_cat.down('select').selectedIndex = 0;
			master_cat.down('select').id = 'master_cat_'+num_sel;
			$('add_category').previous().insert({'before':master_cat});
			
			master_cat.insert({'after':new Element('br', {'class':'clear'})});
			master_cat.insert({'after':new Element('a', {'href':elm.href+'categories/delete', 'class':'cat-delete', 'id':'del_cat_'+num_sel}).update(new Element('img', {'src':elm.href+'img/btn_trash.png', 'alt':'Delete'}))})
			var sub_cat = prev_elm.next().cloneNode(true);
			if(sub_cat.down()) {
				sub_cat.down().remove();
			}
			sub_cat.down().id = 'sub_cat_'+num_sel;
			if(master_cat.down('select').hasClassName('collapse')) {
				var option = new Element('option', {'value':''}).update('All Subcategories');
			} else {
				var option = new Element('option', {'value':''}).update('Choose One...');
			}
			sub_cat.down().update(option).disable();
			master_cat.insert({'after':sub_cat});
			
			// structure has changed. call all functions again
			num_sel++;
			dynamicDependantChange();
			removeCategory();
			
		});
	});
}

function dynamicDependantChange2(main_id) {
	$$('div#level_cats_'+main_id+' select.main-cat').each(function(elm) {
		elm.observe('change', function(event) {
			// perform AJAX call to update dependant select box
			new Ajax.Request('/bloggingforbooks/cp/bloggers/get_categories/'+elm.value, {onSuccess: function(transport) {
		     	var json = transport.responseText.evalJSON();
				// get the subcat select based on the id of the parent
				var underscore = elm.id.lastIndexOf('_');
				var id = elm.id.substring(underscore + 1);
				// empty out previous options
				var e = $('level_'+main_id+'_sub_cat_'+id);
				var empty = e.down();
				e.update();
				// loop through returned data and append as options
				var has_elements = false;
                
				e.insert(empty);
				for (var key in json) {
					if (json.hasOwnProperty(key)) {
						var option = new Element('option', {'value':key}).update(json[key]);
						e.insert(option);
						has_elements = true;
					}
				}
				// enable dependant select box if elements came back
				if(has_elements == true) {
					e.enable();
				} else {
					e.disable();
				}
			}});
		});
	});
}
function addLevelCategory(id) {
	dynamicDependantChange2(id);
	$$('div#level_cats_'+id+' a.level-cat-add').each(function(elm) {
		// remove previous observers
		elm.stopObserving();
		// set variable for # of selects
		var num_sel = $$('div#level_cats_'+id+' select.main-cat').length + 1;
		
		// add new event observer
		elm.observe('click', function(event) {
			// we do this here so that we can 
			$$('div#level_cats_'+id+' select.main-cat').each(function(elm) {
				// remove previous observers
				elm.stopObserving('change');
			});
			event.stop();
			// Copy elements and add to DOM
			var prev_elm = $$('div#level_cats_'+id+' select.main-cat').toArray().shift().up();
			var master_cat = prev_elm.cloneNode(true);
			if(master_cat.down('label')) {
				master_cat.down('label').remove();
			}
			master_cat.down('select').selectedIndex = 0;
			master_cat.down('select').id = 'level_'+id+'_master_cat_'+num_sel;
			$('add_category'+id).previous().insert({'before':master_cat});
			
			master_cat.insert({'after':new Element('br', {'class':'clear'})});
			master_cat.insert({'after':new Element('a', {'href':elm.href+'categories/delete', 'class':'cat-delete', 'id':'level_'+id+'_del_cat_'+num_sel}).update(new Element('img', {'src':elm.href+'img/btn_trash.png', 'alt':'Delete'}))})
			var sub_cat = prev_elm.next().cloneNode(true);
			if(sub_cat.down()) {
				sub_cat.down().remove();
			}
			sub_cat.down().id = 'level_'+id+'_sub_cat_'+num_sel;
			if(master_cat.down('select').hasClassName('collapse')) {
				var option = new Element('option', {'value':''}).update('All Subcategories');
			} else {
				var option = new Element('option', {'value':''}).update('Choose One...');
			}
			sub_cat.down().update(option).disable();
			master_cat.insert({'after':sub_cat});
			
			// structure has changed. call all functions again
			num_sel++;
			dynamicDependantChange2(id);
			removeCategory();
		});
	});
}

function removeCategory() {
	$$('a.cat-delete').each(function(elm) {
		// remove previous observers
		elm.stopObserving();
		
		// add new event observer
		elm.observe('click', function(event) {
			event.stop();
			// remove elements from DOM
			elm.previous().remove();
			elm.previous().remove();
			elm.previous().remove();
			elm.remove();
		});
	});
}

document.observe('dom:loaded', addCategory);
document.observe('dom:loaded', removeCategory);
document.observe('dom:loaded', dynamicDependantChange);

function genreFilter() {
	if ($('add-genre-filter')) {
		removeGenreFilters();
		
		$('add-genre-filter').observe('click', function(e) {
			e.stop();
			
			var genreList = '<ul id="genre-item-list">';
			
			// retrieve genre list items
			new Ajax.Request('/bloggingforbooks/cp/bloggers/get_genres', {onSuccess: function(transport) {
		     	var json = transport.responseText.evalJSON();
		
				for (var key in json) {
					if (json.hasOwnProperty(key)) {
						genreList += '<li><a class="modal-choice" href="#"><span class="title" style="text-decoration:none;">' + json[key] + '</span></a><span class="key-value" style="display:none;">' + key + '</span></li>';
					}
				}
				
				genreList += '</ul>';

				// pop up modal window
				var modal_box = createModalBox('Add Genre Filter', 'Select genre filter from list below:', genreList);
				
				$('rp_modal_functions').update(modal_box);
				$('rp_modal_confirm').appear({duration:0.1});
				
				// observe genre list item clicks
				$$('#genre-item-list a').each(function(elm) {
					elm.stopObserving();
					
					elm.observe('click', function(ev) {
						ev.stop();
						
						$('add-genre-filter').insert({before: '<span class="genre-filter"><a class="remove-genre-filter" href="#"><img src="/bloggingforbooks/img/tags-close-btn.gif" alt="X" title="Remove ' + $(this).down('span').innerHTML + ' Filter" /></a> ' + $(this).down('span').innerHTML + '<input type="hidden" name="data[Blogger][genre][]" value="' + $(this).next('span.key-value').innerHTML + '" /></span>'});

						removeGenreFilters();

						$('rp_modal_confirm').fade({duration:0.3});
					});
				});

				closeModal();
			}});
		});
	}
}

function removeGenreFilters() {
	$$('a.remove-genre-filter').each(function(el) {
		el.stopObserving();
		
		el.observe('click', function(ev) {
			ev.stop();
			$(this).up('span').remove();
		});
	});
}

document.observe('dom:loaded', genreFilter);

/*
 * Add/Remove age ranges in the books edit page
 */
function addAge() {
	$$('a#add_age').each(function(elm) {
		// remove previous observers
		elm.stopObserving();
		// set variable for # of selects
		var num_inp = $$('input.low-age').length;

		// add new event observer
		elm.observe('click', function(event) {
			event.stop();
			// Copy elements and add to DOM
			var prev_elm = $$('input.low-age').toArray().shift().up();
			var ages = prev_elm.cloneNode(true);
			if(ages.down('label')) {
				ages.down('label').remove();
			}
			ages.down('input').id = 'Age'+num_inp+'Id';
			ages.down('input').name = 'data[Age]['+num_inp+'][Id]';
			ages.down('input').value = ''; 
			ages.down('.low-age').id = 'Age'+num_inp+'Low';
			ages.down('.low-age').name = 'data[Age]['+num_inp+'][low]';
			ages.down('.low-age').value = '';
			ages.down('.high-age').id = 'Age'+num_inp+'High';
			ages.down('.high-age').name = 'data[Age]['+num_inp+'][high]';
			ages.down('.high-age').value = '';
			$('add_age').previous().insert({'before':ages});
			
			ages.insert({'bottom':new Element('a', {'href':elm.href+'cp/books/age_delete', 'class':'age-delete', 'id':'del_age_'+(num_inp+1)}).update(new Element('img', {'src':elm.href+'img/btn_trash.png', 'alt':'Delete'}))})
			ages.insert({'after':new Element('div', {'class':'clear'})});

			num_inp++;
			removeAge();

		});
	});
}

function removeAge() {
	$$('a.age-delete').each(function(elm) {
		// remove previous observers
		elm.stopObserving();

		// add new event observer
		elm.observe('click', function(event) {
			event.stop();
			// remove elements from DOM
			elm.previous().up().remove();
			elm.remove();
		});
	});
}

document.observe('dom:loaded', addAge);
document.observe('dom:loaded', removeAge);

/*
 * Used to change the organization information tied to a blogger main category
 */
function setOrgInfo() {
	if($$('.blogger_org_info')) {
		$$('select.main-cat').each(function(elm) {
			elm.observe('change', function() {
				// we multiple the value by 1 below to cast to an integer
				switch(elm.value * 1) {
					case 3: // church
						hideAllOrgInfo();
						replaceOrgLabels('Church');
						//$('denominations').show();
						$('chulrch_size').show();
						$$('.blogger_org_info').each(function(elm) {
							elm.show();
						});
						break;
					case 4: // ministry
						hideAllOrgInfo();
						replaceOrgLabels('Ministry');
						$$('.blogger_org_info').each(function(elm) {
							elm.show();
						});
						break;
					case 5: // librarian
						hideAllOrgInfo();
						replaceOrgLabels('Library');
						$$('.blogger_org_info').each(function(elm) {
							elm.show();
						});
						break;
					case 6: // retailer
						hideAllOrgInfo();
						replaceOrgLabels('Store');
						$('store_number').show();
						$$('.blogger_org_info').each(function(elm) {
							elm.show();
						});
						break;
					case 8: // teacher
						hideAllOrgInfo();						
						replaceOrgLabels('School');
						$$('.blogger_org_info').each(function(elm) {
							elm.show();
						});
						displayTeacherInfo();
						break;
					case 9: // media
						hideAllOrgInfo();
						replaceOrgLabels('Media Company');
						$$('.blogger_org_info').each(function(elm) {
							elm.show();
						});
						break;
					default:
						replaceOrgLabels('Company');
						hideAllOrgInfo();
				}
			});
		});
	}
}

function displayTeacherInfo() {
	$$('select.sub-cat').each(function(elm) {
		elm.stopObserving();
		elm.observe('change', function() {
			if(elm.value == 58) {
				hideAllOrgInfo();
			} else if ($(this).previous('select.main-cat').getValue() == 8) {
				$$('.blogger_org_info').each(function(elm) {
					elm.show();
				});
			}
		});
	});
}

function hideAllOrgInfo() {
	//$('denominations').hide();
	if($('chulrch_size')) {
		$('chulrch_size').hide();
	}
	if($('store_number')) {
		$('store_number').hide();
	}
	$$('.blogger_org_info').each(function(elm) {
		elm.hide();
	});
}

function replaceOrgLabels(new_label) {
	// replace labels accordingly
	$$('.blogger_org_info label').each(function(elm) {
		elm.update(elm.innerHTML.replace(/(Church|Ministry|Library|Store|School|Media Company)/g, new_label));
		
		if (elm.innerHTML.indexOf(new_label) < 0) {
			elm.innerHTML = new_label + ' ' + elm.innerHTML;
		}
	});
	$$('.org-name label').each(function(elm) {
		elm.update(elm.innerHTML.replace('<span class="rc-required"> *</span>', ''));
		if(new_label != 'Company') {
			elm.update(elm.innerHTML.replace(/(Church|Ministry|Library|Store|School|Media Company|Company)/g, new_label) + '<span class="rc-required"> *</span>');
		} else {
			elm.update(elm.innerHTML.replace(/(Church|Ministry|Library|Store|School|Media Company|Company)/g, new_label));
		}
		
		if (elm.innerHTML.indexOf(new_label) < 0) {
			elm.innerHTML = new_label + ' ' + elm.innerHTML;
		}
	});
	// replace legends accordingly
	$$('.blogger_org_info legend').each(function(elm) {
		elm.update(elm.innerHTML.replace(/(Church|Ministry|Library|Store|School|Media Company)/g, new_label));
		
		if (elm.innerHTML.indexOf(new_label) < 0) {
			elm.innerHTML = new_label + ' ' + elm.innerHTML;
		}
	});
	
	//$$('#denominations label').each(function(elm) {
	//	elm.update(elm.innerHTML.replace(/(Church|Ministry|Library|Store|School|Media Company)/g, ''));
	//});
	
	$$('#chulrch_size label').each(function(elm) {
		elm.update(elm.innerHTML.replace(/(Church|Ministry|Library|Store|School|Media Company)/g, ''));
	});
}
document.observe('dom:loaded', setOrgInfo);

/*
 * Lookup book information from ISBN (on new/edit page)
 */
function lookupBook() {
	if($('BookIsbn') && $('book_details')) {
		$('BookIsbn').observe('blur', function(e) {
			if($F('BookIsbn').length == 13) {
				new Ajax.Updater('book_details', '/bloggingforbooks/books/get_details/'+$F('BookIsbn'));
			}
		});
	}
}
document.observe('dom:loaded', lookupBook);

/*
 * Display link url field if link name is filled out
 */
function displayLinkField() {
	$$('input.link-name').each(function(elm) {
		elm.observe('keyup', function(e) {
			if(elm.value != '') {
				elm.up().next().down().show();
			} else {
				elm.up().next().down().hide();
			}
		});
	});
}
document.observe('dom:loaded', displayLinkField);

function setDiscontinueDate() {
	if($('ReviewUseDiscontinueDate')) {
		$('ReviewUseDiscontinueDate').observe('click', function(e) {
			if($('ReviewUseDiscontinueDate').checked == true) {
				$('ReviewUseDiscontinueDate').next(1).show();
			} else {
				$('ReviewUseDiscontinueDate').next(1).hide();
			}
		});
	}
}
document.observe('dom:loaded', setDiscontinueDate);

function setAllCheckboxes() {
	$$('.select-all').each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			elm.up('form').select('input[type=checkbox]').each(function(el) {
				el.checked = true;
			});
		});
	});
	
	$$('.deselect-all').each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			elm.up('form').select('input[type=checkbox]').each(function(el) {
				el.checked = false;
			});
		});
	});
}
document.observe('dom:loaded', setAllCheckboxes);

/*
* Blogger country selection listener
* Hides/shows address fields depending on country selection
*/
function countryListener() {
	if($('BloggerCountry')) {
		$('BloggerCountry').observe('change', function() {
			if ($('blogger-address-info')) {
				if ($(this).getValue() == 1) {
					$(this).previous('legend').update('Street Address');
					$(this).previous('label').show();
					$('blogger-address-info').blindDown({duration:0.25});
				} else {
					$(this).previous('legend').update('Country<span class="rc-required">*</span>');
					$(this).previous('label').hide();
					$('blogger-address-info').blindUp({duration:0.25});
				}
			}
			else if ($('sign-up-address-info')) {
				if (($(this).getValue() == '') || ($(this).getValue() == 1)) {
					$('sign-up-address-info').show();
					$('sign-up-formats').show();
				}
				else {
					$('sign-up-address-info').hide();
					$('SelectFormatSelectFormat2').checked = true;
					$('sign-up-formats').hide();
					$('sign-up-readers').show();
				}
			}
		});
	}

	if($('BloggerOrgCountry')) {
		$('BloggerOrgCountry').observe('change', function() {
			if ($(this).getValue() !== '1') {		// not USA
				$('BloggerOrgState').up('div').hide();
			}
			else {
				$('BloggerOrgState').up('div').show();
			}

			if (($(this).getValue() !== '1') &&		// not USA
				($(this).getValue() !== '41') &&		// not Canada
				($(this).getValue() !== '228') &&		// not UK
				($(this).getValue() !== '108') &&		// not Italy	
				($(this).getValue() !== '83') &&		// not Germany
				($(this).getValue() !== '24')) {		// not Belgium
				$('BloggerOrgZip').up('div').hide();
			}
			else {
				$('BloggerOrgZip').up('div').show();
			}
		});
	}
}
document.observe('dom:loaded', countryListener);

function bookFormatListener() {
	if ($('sign-up-address-info') && $('SelectFormatSelectFormat2')) {
		$('SelectFormatSelectFormat2').observe('click', function() {
			if ($(this).checked) {
				$('sign-up-readers').show();
			}
			else {
				$('sign-up-readers').hide();
			}
		});
	}
}
document.observe('dom:loaded', bookFormatListener);

/*
 * Functions for performing user rankings on Reviews
 * Updates content areas, sets cookie, and writes to DB
 */
function rateReview() {
	$$('select.user-rating').each(function(elm) {
		elm.observe('change', function(e) {
			// update the database & set cookies
			var reply = new Ajax.Request('/bloggingforbooks/reviews/rate/'+$F(elm.previous('input'))+'/'+$F(elm));
			// remove drop-downs
			$$('.rank-this').invoke('remove');
			// change page text accordingly
			$$('.total-ranks').each(function(el) {
				el.previous().update('You and ');
                                Cufon.replace('#you-and', { fontFamily: 'Knockout28' });
			});
		});
	});
}
document.observe('dom:loaded', rateReview);

/*
 * Functions for performing user rankings on Reviews
' * Updates content areas, sets cookie, and writes to DB
 */
function flagReview() {
	if($('flag_unfl')) {
                $('flag_unfl').stopObserving('click');
		$('flag_unfl').observe('click', function(e) {
			e.stop();
			// update the database & set cookies
			new Ajax.Request('/bloggingforbooks/reviews/flag/'+ $('flag_unfl').readAttribute('href'), {onSuccess:function() {
				// change button accordingly
				$('flag_unfl').up().removeClassName('unflagged').addClassName('flagged');
				flagReview();
			}});
		});
	}
	if($('flag_flgd')) {
                $('flag_flgd').stopObserving('click');
		$('flag_flgd').observe('click', function(e) {
			e.stop();
			// update the database & set cookies
			new Ajax.Request('/bloggingforbooks/reviews/unflag/'+ $('flag_flgd').readAttribute('href'), {onSuccess:function() {
				// change button accordingly
				$('flag_flgd').up().removeClassName('flagged').addClassName('unflagged');
				flagReview();
			}});
		});
	}
}

document.observe('dom:loaded', flagReview);

/*
 * Functions for displaying lightbox and user book selection process.
 */

function displayBookDetails() {
	var review_links = $$('.review-this-book').concat($$('.read-more-review-book'));
	review_links.each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			new Ajax.Request('/bloggingforbooks/blogger/books/view/'+elm.readAttribute('href'), {onSuccess: function(transport) {
				$('litebox_detail').update(transport.responseText);
				$('litebox_bg').show();
				closeLightbox();
				requestBook(elm.readAttribute('href'));
			}});
		});
	});
}

function requestBook(id) {
	$$('.review-book-lb1').each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			new Ajax.Request('/bloggingforbooks/blogger/books/request/'+id, {onSuccess: function(transport) {
				$('litebox_detail').update(transport.responseText);
				closeLightbox();
				confirmBook(id, 'ebook');
			}});
		});
	});
	
	$$('.review-book-lb2').each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			new Ajax.Request('/bloggingforbooks/blogger/books/request/'+id, {onSuccess: function(transport) {
				$('litebox_detail').update(transport.responseText);
				closeLightbox();
				confirmBook(id, 'print');
			}});
		});
	});
	
	$$('.review-book-lb3').each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			new Ajax.Request('/bloggingforbooks/blogger/books/request/'+id+'/?both=true', {onSuccess: function(transport) {
				$('litebox_detail').update(transport.responseText);
				closeLightbox();
				confirmBook(id, 'both');
			}});
		});
	});
	
	$$('.review-book-lb4').each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			new Ajax.Request('/bloggingforbooks/blogger/books/request/'+id, {onSuccess: function(transport) {
				$('litebox_detail').update(transport.responseText);
				closeLightbox();
				confirmBook(id, 'inte');
			}});
		});
	});
}

function confirmBook(id, type) {
	$('yes_please').observe('click', function(e) {
            $('no_thanks').hide();
            $('close_litebox').hide();
            $('close_box').hide();
            $('yes_please').replace('<p><img src="/bloggingforbooks/img/site_specific/loading.gif" align="left" style="margin: 5px 10px 5px 0px;" /><strong>Saving your selection...</strong><br />Please do not close this window until we confirm your order.</p>');
            e.stop();
            new Ajax.Request('/bloggingforbooks/blogger/books/confirm_'+type+'/'+id, {onSuccess: function(transport) {
	            $('litebox_detail').update(transport.responseText);
	            //reloadPage();
				closeLightbox();
            }});
	});
}

function closeLightbox() {
	$$('.close-litebox').each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			$('litebox_bg').hide();
			$('litebox_detail').update();
		});
	});
}

function reloadPage() {
	$$('.close-litebox').each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			window.location.reload(true);
		});
	});
}

document.observe('dom:loaded', displayBookDetails);

/*
 * Text replacement on mini-login box.
 */

function addLoginListener() {
	$$('input.username-hint').each(function(elm) {
                if (elm.getValue() != 'EMAIL') elm.style.color = "#000";
		elm.observe('focus', function() {
			if (elm.getValue() == 'EMAIL') {
				elm.setValue('');
				elm.style.color = "#000";
			}
		});
		
		elm.observe('blur', function() {
			if (elm.getValue() == '') {
				elm.setValue('EMAIL');
				elm.style.color = "#999";
			}
			
		});
	});
	$$('input.pw-hint').each(function(elm) {
                if (elm.getValue() == 'PASSWORD') {
                    elm.observe('focus', pwFocusListener);
                    elm.observe('blur', pwBlurListener);
                } else {
                    $(elm).stopObserving();
                    elm.replace('<input id="'+elm.id+'" type="password" name="data[User][password]" value="CHECKCOOKIE" />');
                    $(elm.id).style.color = "#000";
                }
	});
}
document.observe('dom:loaded', addLoginListener);

function pwFocusListener() {
	if ($(this).getValue() == 'PASSWORD') {
		$(this).stopObserving();
		
		$(this).replace('<input id="'+$(this).id+'" type="password" name="data[User][password]" />');
		$(this.id).observe('focus', pwFocusListener);
		$(this.id).observe('blur', pwBlurListener);
		var id = $(this.id);
		setTimeout(function(e) { $(id).focus(); }, 10);
		$(this.id).style.color = "#000";
	}
}

function pwBlurListener() {
	if ($(this).getValue() == '') {
		$(this).stopObserving();
		
		$(this).replace('<input id="'+$(this).id+'" name="data[User][password]" value="PASSWORD" />');
		$(this.id).observe('focus', pwFocusListener);
		$(this.id).observe('blur', pwBlurListener);
		$(this.id).style.color = "#999";
	}
}

/*
	setDeleteButtonState: Used in /cp/reviews/index
	to set the delete button to the right status when
	the active checkbox is used.
*/

function setDeleteButtonState(review_id) {
	new Ajax.Request('/bloggingforbooks/cp/reviews/status/'+review_id, {
		method: 'get',
		onComplete: function(transport) {
			var status = transport.responseJSON;
			if (status.status == '2') {
				$('delete_review_'+status.review_id).removeClassName('rp-delete');
				$('delete_review_'+status.review_id).addClassName('rp-delete-unavail');
			} else {
				$('delete_review_'+status.review_id).addClassName('rp-delete');
				$('delete_review_'+status.review_id).removeClassName('rp-delete-unavail');
				$('delete_review_'+status.review_id).innerHTML = '<a href="/cp/reviews/delete/'+review_id+'" class="delete-module" title="Delete"></a>'
				confirmModuleDelete();
			}
		}
	});
}

/*
 * Remove characters from ISBN
 */
function cleanISBN() {
	if ($('BookIsbn')) {
		$('BookIsbn').observe('keyup', function(e) {
			//e.stop();
			$('BookIsbn').value = $F('BookIsbn').replace(/-/g, '');
		});
	}
	if($('wmd_help_close')) {
		$('wmd_help_close').observe('click', function(e) {
			e.stop();
			$('wmd_help_wrap').removeClassName('wmd-help-on');
			$('wmd_help_wrap').addClassName('wmd-help-off');
		});
	}
}
document.observe('dom:loaded', cleanISBN);


/*
 * Display markdown help on front-end
 */
function displayMarkdownHelp() {
	if ($('wmd_help_link') && $('wmd_help_wrap')) {
		$('wmd_help_link').observe('click', function(e) {
			e.stop();
			if ($('wmd_help_wrap').hasClassName('wmd-help-off')) {
				$('wmd_help_wrap').removeClassName('wmd-help-off');
				$('wmd_help_wrap').addClassName('wmd-help-on');
			} else {
				$('wmd_help_wrap').removeClassName('wmd-help-on');
				$('wmd_help_wrap').addClassName('wmd-help-off');
			}
		});
	}
	if($('wmd_help_close')) {
		$('wmd_help_close').observe('click', function(e) {
			e.stop();
			$('wmd_help_wrap').removeClassName('wmd-help-on');
			$('wmd_help_wrap').addClassName('wmd-help-off');
		});
	}
}
document.observe('dom:loaded', displayMarkdownHelp);

function displayInlineHelp() {
	var links = $$('.info-btn').concat($$('.info-link'));
	links.each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			if(elm.next().hasClassName('lil-help-off')) {
				elm.next().addClassName('lil-help-on');
				elm.next().removeClassName('lil-help-off');
			} else {
				elm.next().addClassName('lil-help-off');
				elm.next().removeClassName('lil-help-on');
			}
		});
	});
	
	$$('.lil-help-close').each(function(elm) {
		elm.observe('click', function(e) {
			e.stop();
			elm.up().addClassName('lil-help-off');
			elm.up().removeClassName('lil-help-on');
			
		})
	});
}
document.observe('dom:loaded', displayInlineHelp);


/*
 * Open all external links in a new window
 */
function openExternalLinks() {
	$$('a[href!=""]').each(function(link){
	    var siteregex = /^(http:\/\/)([a-z]*\.)?(waterbrookmultnomah|bloggingforbooks)/i;
	    if(link.readAttribute('href').startsWith('http://') &&
	      !link.readAttribute('href').match(siteregex)){
	        link.writeAttribute('target','_blank');
	        link.writeAttribute('rel','external');
	    }
	});
}
document.observe('dom:loaded', openExternalLinks);

function changeUPSAddress(address1field, address1, address2field, address2, cityfield, city, statefield, state, zipfield, zip, upswrapper){
    document.getElementById('Blogger'+address1field).value = address1;
    document.getElementById('Blogger'+address2field).value = address2;
    document.getElementById('Blogger'+cityfield).value = city;
    //document.getElementById('Blogger'+statefield).value = state;
    document.getElementById('Blogger'+zipfield).value = zip;
    document.getElementById(upswrapper).style.display = 'none';
    $('Blogger'+statefield).value = state;
}

function rankingsListener() {
	if ($('ratings_whitelists')) {
		$('select_all').observe('click', function() {
			var check = $(this).checked;
			
			$$('#ratings_whitelists tr input.select').each(function(elm) { 
				$(elm).checked = check;
			});
		});
	}
	else if ($('whitelists')) {
		$('select_all').observe('click', function() {
			var check = $(this).checked;
			
			$$('#whitelists tr input.select').each(function(elm) { 
				$(elm).checked = check;
			});
		});
	}
}

document.observe('dom:loaded', rankingsListener);

function isbnListener() {
	if ($('isbn_toggle')) {
		$('isbn_toggle').observe('click', function(e) {
			e.stop();
			
			if ($('isbn_input_wrapper').getStyle('display') == 'none') {
				$('isbn_input_wrapper').setStyle({display:'block'});
				$(this).innerHTML = 'Hide ISBN';
			}
			else {
				$('isbn_input_wrapper').setStyle({display:'none'});
				$(this).innerHTML = 'Enter ISBN';
			}
		});
	}
}

document.observe('dom:loaded', isbnListener);

function setAllDenominations() {
	if ($('denomination')) {
		$$('.select-all-denomination').each(function(elm) {
			elm.observe('click', function(e) {
				e.stop();
				elm.up('form').select('div#denomination input[type=checkbox]').each(function(el) {
					el.checked = true;
				});
			});
		});
	
		$$('.deselect-all-denomination').each(function(elm) {
			elm.observe('click', function(e) {
				e.stop();
				elm.up('form').select('div#denomination input[type=checkbox]').each(function(el) {
					el.checked = false;
				});
			});
		});
	}
}
document.observe('dom:loaded', setAllDenominations);

function showHideDenominations() {
	if($('denomination')) {
		var show_denom = false;
		$$('.main-cat').each(function(elm) {
			if(elm.value == 3) show_denom = true;
		});
		if(show_denom == true) $('denomination').show();
		else $('denomination').hide();
	}
}

document.observe('dom:loaded', showHideDenominations);

