
	$(document).ready(function() {
		$('.tag-cloud-zoom').bind('click', TagCloud.zoom);
		if ($('.tiw-pledge-list').length > 0) {
			if (window.location.hash) {
				PledgeList.filter(window.location.hash.substr(1));
			} else {
				PledgeList.startLoading();
			}
			$('.tiw-pledge-list-filter-reset').bind('click', PledgeList.resetFilter);
		}
		if ($('#tiw-keyvisual .pledge-list-entry').length > 1) {
			$('#tiw-keyvisual .entries').scrollable();
			$('#tiw-keyvisual .paging-prev').bind('click', BannerPledges.move);
			$('#tiw-keyvisual .paging-next').bind('click', BannerPledges.move);
		}
		$('.tiw-pledge-list-paging span').live('click', PledgeList.paging);
		if ($('.tiw-pledge-form').length > 0) {
			PledgeForm.init();
		}
	});

	function validateEmail(elementValue){
   		var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
   		return emailPattern.test(elementValue);
 	}

	function setSelectionRange(input, selectionStart, selectionEnd) {
	  if (input.setSelectionRange) {
	    input.focus();
	    input.setSelectionRange(selectionStart, selectionEnd);
	  }
	  else if (input.createTextRange) {
	    var range = input.createTextRange();
	    range.collapse(true);
	    range.moveEnd('character', selectionEnd);
	    range.moveStart('character', selectionStart);
	    range.select();
	  }
	}

	function setCaretToPos (input, pos) {
	  setSelectionRange(input, pos, pos);
	}

	var PledgeForm = {
		init: function() {
			$('#pledge-form-submit').bind('click', PledgeForm.submit);
			$('input[name=pledge-form-age]').bind('click', PledgeForm.swapUnder18Elm);
			$('textarea#pledge-form-pledge').bind('click', PledgeForm.handleTextarea);
			$('textarea#pledge-form-pledge').bind('keyup', PledgeForm.setTextareaIntro);
		},
		handleTextarea: function(e) {
			if ($(e.target).val() == 'Today I will ') {
				/*
				$(e.target).val('');
				$(e.target).val('Today I will ');
				*/
				setCaretToPos(document.getElementById('pledge-form-pledge'), $('#pledge-form-pledge').val().length);
			}
		},
		setTextareaIntro: function(e) {
			if ($(e.target).val().substr(0, 13) != 'Today I will ') {
				$(e.target).val('Today I will ');
			}
		},
		swapUnder18Elm: function(e) {
			switch($(e.target).attr('id')) {
				case 'pledge-form-under-18':
					$('.pledge-form-if-eighteen').removeClass('hidden');
					break;
				default:
					$('.pledge-form-if-eighteen').addClass('hidden');
					$('#pledge-form-parent').removeClass('required');
			}
		},
		submit: function() {
			$('[id^=pledge-form]').each(function() {
                switch($(this).attr('id')) {
					case 'pledge-form-pledge':
						if ($(this).val() == '' || $(this).val() == 'Today I will ') {
                            $(this).addClass('required');
                        } else {
                            $(this).removeClass('required');
                        }
						break;
                    case 'pledge-form-image':
                    case 'pledge-form-surname':
					case 'pledge-form-email':
                    case 'pledge-form-submit':
						return true;
					/*
                    case 'pledge-form-email':
						if (!validateEmail($('#pledge-form-email').attr('value'))) {
			            	$(this).addClass('required');
			            } else {
							$(this).removeClass('required');
						}
						break;
					*/
					case 'pledge-form-terms':
						if (!$(this).is(':checked')) {
							$(this).next().addClass('required');
						} else {
							$(this).next().removeClass('required');
						}
						break;
					case 'pledge-form-parent':
						if ($('#pledge-form-under-18').is(':checked') && $(this).val() == '') {
							$(this).addClass('required');
						} else {
							$(this).removeClass('required');
						}

						break;
                    default:
                        if ($(this).val() == '' || $(this).val() == -1) {
                            $(this).addClass('required');
                        } else {
                            $(this).removeClass('required');
                        }
                }
            });

            if ($('.required').length > 0) {
            	$('.fill-out-required-fields').removeClass('hidden');
                return false;
            }
            return true;
		}
	};

	var TagCloud = {
		zoom: function(e) {
			$.fancybox({
				'padding'		: 0,
				'autoScale'		: false,
				'transitionIn'	: 'linear',
				'transitionOut'	: 'linear',
				'width'			: 700,
				'height'		: 500,
				'href'			: 'static/swf/pledge-tag-cloud.swf',
				'type'			: 'swf',
				'swf'			: {
					'wmode'				: 'opaque',
					'allowfullscreen'	: 'true',
					'flashvars'			: 'jsonWords=' + $('.pledge-tag-cloud-json').html()
				}
			});
		}
	}

	var PledgeList = {
		pledgesFrom: 0,
		pledgesToDisplay: 4,
		pledges: false,
		pledgeNr: 0,
		pledgeCount: 0,
		pagingFrom: 1,
		pagingPages: 8,
		pagingMax: -1,
		filterWord: false,
		filteringInProgress: false,
		filter: function(filter) {
			if (PledgeList.filteringInProgress) return;
			PledgeList.filteringInProgress = true;
			$.fancybox.close();
			$('.tiw-pledge-list-filter-reset').fadeIn('slow');
			window.location.hash = '#' + filter;
			PledgeList.filterWord = filter;
			PledgeList.pledgesFrom = 0;
			PledgeList.pagingFrom = 1;
			PledgeList.startLoading();
		},
		resetFilter: function() {
			PledgeList.filterWord = false;
			$('.tiw-pledge-list-filter-reset').fadeOut('slow');
			PledgeList.startLoading();
		},
		startLoading: function() {
			PledgeList.startLoadingAnimation();
			PledgeList.getPledges();
		},
		startLoadingAnimation: function() {
			$('.pledge-list-section p').css('background', 'url("static/img/backgrounds/loading.gif") no-repeat center right');
		},
		getPledges: function() {
			$.post('/_lib_local/tiw/ajax.php',
				{
	                action: 'get-pledges',
					from: PledgeList.pledgesFrom,
					count: PledgeList.pledgesToDisplay,
					branchCode: tiwBranchCode,
					filter: PledgeList.filterWord
	            },
				function(json) {
					var d = eval('(' + json + ')');
					PledgeList.pledges = d.pledges;
					PledgeList.pledgeCount = d.count;
					PledgeList.pagingMax = Math.ceil(PledgeList.pledgeCount / PledgeList.pledgesToDisplay);
					PledgeList.render();
				}
			);
		},
		render: function() {
			PledgeList.renderPaging();
			if (PledgeList.pledgeNr > 0) {
				PledgeList.deletePledges();
			} else {
				PledgeList.showPledges();
			}
		},
		showPledges: function() {
			if (!PledgeList.pledges[PledgeList.pledgeNr]) PledgeList.endLoading();
			$('.tiw-pledge-list').append(PledgeList.pledges[PledgeList.pledgeNr]);
			PledgeList.pledgeNr++;
			if (PledgeList.pledgeNr <= PledgeList.pledgesToDisplay) {
				$('.tiw-pledge-list .pledge-list-entry:last').fadeIn(200, PledgeList.showPledges);
			}
			if (PledgeList.pledgeNr == PledgeList.pledgesToDisplay) {
				PledgeList.endLoading();
			}
		},
		deletePledges: function() {
			PledgeList.pledgeNr--;
			if ($('.tiw-pledge-list .pledge-list-entry').length > 0) {
				$('.tiw-pledge-list .pledge-list-entry:hidden').remove();
				$('.tiw-pledge-list .pledge-list-entry:last').fadeOut(200, PledgeList.deletePledges);
			}
			if ($('.tiw-pledge-list .pledge-list-entry').length == 0) {
				PledgeList.pledgeNr = 0;
				PledgeList.showPledges();
			}
		},
		renderPaging: function() {
			var html = '<span class="page-links button-prev">Previous</span><div class="page-links-frame">';
			var firstPage = 0;
			var starter = 0;
			var pagingPagesHalf = Math.floor(PledgeList.pagingPages / 2);
			starter = PledgeList.pagingFrom - pagingPagesHalf;
			var renderPages = PledgeList.pagingPages;
			if (PledgeList.pagingMax < PledgeList.pagingPages) {
				renderPages = PledgeList.pagingMax;
			}
			if (starter > firstPage) {
				firstPage = starter;
				renderPages = PledgeList.pagingPages + starter;
			}
			if (renderPages > PledgeList.pagingMax) {
				firstPage = PledgeList.pagingMax - PledgeList.pagingPages;
				renderPages = PledgeList.pagingMax;
			}
			for (i = firstPage; i < renderPages; i++) {
				if (i >= PledgeList.pagingMax) break;
				if (i != firstPage) {
					html += '|';
				}
				html += '<span class="page-links' + (i == (PledgeList.pagingFrom - 1) ? ' aktiv' : '') + '">' + (i + 1) + '</span>';
			}
			html += '</div><span class="page-links button-next">Next</span>';
			$('.tiw-pledge-list-paging .paging').html(html);
		},
		paging: function(e) {
			if ($(e.target).hasClass('button-prev')) {
				if (PledgeList.pledgesFrom >= PledgeList.pledgesToDisplay) {
					PledgeList.pledgesFrom -= PledgeList.pledgesToDisplay;
					PledgeList.pagingFrom--;
				} else {
					return;
				}
			}
			if ($(e.target).hasClass('button-next')) {
				if (PledgeList.pledgesFrom < (PledgeList.pledgeCount - PledgeList.pledgesToDisplay)) {
					PledgeList.pledgesFrom += PledgeList.pledgesToDisplay;
					PledgeList.pagingFrom++;
				} else {
					return;
				}
			}
			var page = $(e.target).html().search(/[a-zA-Z]/g);
			if (page == -1) {
				PledgeList.pledgesFrom = ($(e.target).html() * PledgeList.pledgesToDisplay) - PledgeList.pledgesToDisplay;
				PledgeList.pagingFrom = $(e.target).html();
			}
			PledgeList.startLoading();
		},
		endLoading: function() {
			$('.pledge-list-section p').css('background', '');
			PledgeList.filteringInProgress = false;
		}
	};

	var BannerPledges = {
		moveCount: 0,
		seekCount: 0,
		move: function(e) {
			var api = $('#tiw-keyvisual .entries').data('scrollable');
			if ($(e.target).hasClass('paging-prev')) {
				api.prev();
				if (BannerPledges.moveCount > 0) {
					BannerPledges.moveCount--;
				}
			}
			if ($(e.target).hasClass('paging-next')) {
				api.next();
				if (BannerPledges.moveCount < $('#tiw-keyvisual .pledge-list-entry').length - 1) {
					BannerPledges.moveCount++;
				}
			}
			BannerPledges.seekCount = BannerPledges.moveCount;
			api.onSeek(function(i, e) {
				if (BannerPledges.seekCount != e) return false;
				BannerPledges.seekCount++;
				$('.header-img').css('background', 'url("' + $('#tiw-keyvisual .header-img img').attr('src') + '")');
				$('#tiw-keyvisual .header-img img').remove();
				$('#tiw-keyvisual .header-img').html('<img src="' + $('#tiw-keyvisual .pledge-list-entry:eq(' + this.getIndex() + ') img').attr('src') + '" style="display: none" />');
				$('#tiw-keyvisual .header-img img').fadeIn('slow');
			});
		}
	};
