var loading = false;

var old_hash = null;

Cufon.replace('.cufonTitle');
Cufon.replace('.filter', {ignore: {'form':true}, hover: true});
Cufon.replace('a.link', {hover: true});
Cufon.replace('a.hitMe', {hover: true});
Cufon.replace('div.newsletter h3', {hover: true});

function getAnchor() {
        var loc = document.location.toString();
        var anchor;
        if (loc.lastIndexOf('#'))
                anchor = loc.substr(loc.lastIndexOf('#') + 1,loc.length);
        if (anchor == loc)
                return "";
        else
            return anchor;
}

$(document).ready(function(){
	
	MCPost.toggleForm();
	FormFields();
	MCPost.init(250,2000,-1,-1); 
	Scroll.init();
	
	/* move to xquery */
    $('.item').eq(0).addClass('first');
	$('.item').eq($('.item').size()-1).addClass('last');

	$(".flickr li").mouseover(function(){
		$(this).children('.overlayContainer').show();
	});
	
	$(".flickr li").mouseout(function(){
		$(this).children('.overlayContainer').hide();
	});			
	
	if ($('#email_check').attr('checked')) {
		$('#email').show();
	}
	
	if ($('#post_check').attr('checked')) {
		$('#post').show();
	}
	
	$('#terms').keyup(function (event){		
	    $(this).doTimeout('terms', 450, function(){	
		terms = $(this).val();
		if (terms != ''){		
			old_hash = getAnchor();
			$.ajax({
				url: "index.xql?ajax=true&id=/mc/mixin/search/"+ terms,
				dataType: "html",
				success: function(html){
					
					var content = $(html);
					
					$(content).find('.item:first').addClass('first');
					$(content).find('.item:last').addClass('last');
					$(content).addClass('search')
					
					$("#main_content").empty().append($(content).find('.item'))
					$('div.rightColumnBottom').show();
					$("a[rel='history']").unbind('click');
					$("a[rel='history']").click(filter_click);
					Cufon.refresh();
					window.settings.page = 1;
					loading = false;
					
				}
			})
		} else {
			loadList(old_hash)	
		}
	   })
	})
	$.historyInit(pageload, "index.html");
	$("a[rel='history']").live('click', filter_click);

});



function filter_change(hash){
    // let the change of the hash be reflected in the state of the interface
    // is the / a good field seperator? maybe the operators are better
    
    // make a general function for splitting the hash into terms

	// reset the value of the search box
	$('#terms').val('Filter op term...')
	
    var filters = hash.split('/');
    $("a[rel='history']").each(function(){
        filter =  $(this).attr('href');
        if ($.inArray(filter, filters) >= 0){
        	
//        $(this).children('img.filter_img').attr('src', '/mixin/images/checked.jpg');
        	
          $(this).children('img.filter_img').attr('src', './images/checked.jpg');
          $(this).removeClass('unchecked').addClass('checked');
        
        } else {
          
          $(this).children('img.filter_img').attr('src', './images/unchecked.jpg');
          $(this).addClass('unchecked').removeClass('checked');
        
        }
  });
}

function delete_filter(hash, filter){
        regexp = new RegExp('/' + filter + '$|' + filter + '/?');
        return hash.replace(regexp , "");
}

function add_filter(hash, filter){
        if(hash.substring(0,1) == "@" || hash == "" || filter.substring(0,1) == "@" || filter  == ""){
          hash = filter;        
        } else {
          hash += "/" + filter ;
        }
        return hash;
}

function filter_click(){
      if (loading == false){
      
        var hash = getAnchor();
        var filter =  $(this).attr('href');
        
        if ($(this).hasClass('checked')){
          hash = delete_filter(hash, filter);
        } else {
          hash = add_filter(hash, filter);
        }
        loading = true;
        $.historyLoad(hash);
      }
      
      return false;
}

function pageload(hash) {
        filter_change(hash);
        var pre = hash.substring(0,1);
        if (pre == '@') {
                loadItem(hash.substring(1, hash.length));
        } else {
                loadList(hash);
        }
}

function getQuery(hash){
      if (hash == null){
        hash = getAnchor();
      } 
      // vervang de / voor een | of een andere operator
      var query = hash.replace(/\//g, '|');
      query = query.replace(/\|$/g, '');
      return query;
}

function loadList(hash) {
        var query = getQuery(hash);
        var params = "?";
        if (query != ""){
	  params += 'query=' + query + "&";
        }
	params += 'page=1&ajax=true';
	var url = 'index.xql'+params;
	$.ajax({
		type: "GET",
		url: url,
		dataType: "html",
		success: function(html) {
            var content = $(html).children('.item');
			$(content[0]).addClass('first');
			$(content[content.length-1]).addClass('last');
			$("#main_content div.item").remove();
			$("#main_content").prepend(content);
			var newHref = $(html).children('div.more-results a.more-results').attr('href');
			$("#main_content div.more-results a.more-results").attr('href',newHref);
			$('div.more-results').show();
			$('div.rightColumnBottom').hide();
			$("a[rel='history']").unbind('click');
			$("a[rel='history']").click(filter_click);
			Cufon.refresh();
			window.settings.maxReached=false;
			window.settings.page=1;
            loading = false;
        }
	});
}

// not needed anymore

function loadItem(hash) {
	var url = 'index.xql?ajax=true&id='+hash;
	$.ajax({
		type: "GET",
		url: url,
		dataType: "html",
		success: function(html) {
            // move this to xquery
			var date = $(html).find('#date').html();
			var day = parseInt(date.substring(0,2), 10);
			var month = months[parseInt(date.substring(3, 5)-1, 10)];
			var year = date.substring(6, 10);
			html = html.replace(date, day+' '+month+' '+year);
			// end this
            document.title = 'Mixin - ' + $(html).find('.itemTitle').text();
			$('#main_content').html($(html).children('.mainContent'));
            Cufon.refresh();
			window.settings.maxReached=false;
            window.settings.page=1;
            scroll(0,0);
            loading = false;
       }
	});
}

var months = new Array();
months[0] = 'januari';
months[1] = 'februari';
months[2] = 'maart';
months[3] = 'april';
months[4] = 'mei';
months[5] = 'juni';
months[6] = 'juli';
months[7] = 'augustus';
months[8] = 'september';
months[9] = 'oktober';
months[10] = 'november';
months[11] = 'december';

function FormFields (){

		$('input:text').each(function()
		{
			$(this).addClass("no-focus");
			
			if ($(this).hasClass('label-value')) {
				var labelElem = $(this).parent().find('label');
				$(labelElem).addClass('text-only');
				var labelValue = $(labelElem).html();
				$(this).val(labelValue);
			}
			
			if (!$(this).hasClass('hold-value')) { // exceptions
				var initValue = $(this).val();
				$(this).focus(function(){
					$(this).removeClass("no-focus");
					if($(this).val() == initValue) $(this).val('');
				})
				$(this).blur(function(){
					if ($(this).val() == "") $(this).addClass("no-focus");	// set class no-focus only if value is cleared
					if($(this).val() == '') $(this).val(initValue);
				})
			}
		});
		
		$('textarea').each(function()
		{
			$(this).addClass("no-focus");
			if (!$(this).hasClass('hold-value')) { // exceptions
				var initValue = $(this).val();
				$(this).focus(function(){
					$(this).removeClass("no-focus");
					if($(this).val() == initValue) $(this).val('');
				})
				$(this).blur(function(){
					if ($(this).val() == "") $(this).addClass("no-focus");	// set class no-focus only if value is cleared
					if($(this).val() == '') $(this).val(initValue);
				})
			}			
		});
		
		$('select').each(function()
		{
			$(this).addClass("no-focus");
			$(this).focus(function(){
				$(this).removeClass("no-focus");
			});
			$(this).blur(function(){
				$(this).addClass("no-focus");
			});
		});
}

function toggleForm()
{
	$('.bh-toggle-form').each(function()
	{
		$(this).find('h2, h3').css({cursor: 'pointer'});
		$(this).addClass('minimized');
		$(this).find('form').toggle();
						
		$(this).find('h2, h3').click(function()
		{
			if ( $(this).parent().hasClass('minimized') ) {
				$(this).parent().find('form').slideDown({
					easing: "easeInOutExpo",
					time: 600
				});
			} else 
			{
				$(this).parent().find('form').slideUp({
					easing: "easeInOutExpo",
					time: 600
				})
			}
			
			$(this).parent().toggleClass('minimized');	
		});
	});			
}
MCPost = {
	init: function(fadeSpeed,successTimeout, errorTimeout, validationTimeout){
		var MCPost = this;
		this.fadeSpeed = fadeSpeed;
		this.$newsLetterForm = $('div.article.teaser.newsletter form');
		this.currentMessageSelector = null;
		this.messageWidth=null;
		
		$('input[type=submit]',this.$newsLetterForm).click(function(event){
			event.preventDefault();
			if((checkResult=MCPost.check())==null){
				$.ajax({
					url: MCPost.$newsLetterForm.attr('action')+'?'+MCPost.serialize(MCPost.getValueMap()),
					dataType: 'json',
					async: false,
					success: function(json) {
						MCPost.showMessage('h3#success',fadeSpeed,successTimeout,function(){
							$('h3:first',MCPost.$newsLetterForm.parent()).trigger('click');
						});
					},
					error:function() {
						MCPost.showMessage('h3#failure',fadeSpeed,errorTimeout,null);
					}
				});
			}else{
				MCPost.showMessage('h3#'+checkResult,fadeSpeed,validationTimeout,null);
			}
		});
	},
	check: function(){
		status=null;
		var fields = this.getValueMap();
		
		var noName = fields.receiverName==null;
		var noEmail = fields.receiverEmail==null;
		var noAddress = fields.receiverAddress==null && fields.receiverPostalCode==null && fields.receiverCity==null;
		var partialAddress = !noAddress && (fields.receiverAddress==null || fields.receiverPostalCode==null || fields.receiverCity==null);
		
		if(noName){
			status='noName'; 
		}else if(noEmail && noAddress){
			status='noAddress'; 
		}else if(partialAddress){
			status='partialAddress'; 
		}
		
		return status;
	},
	getValueMap:function(includeEmpty, emptyValue){
		var all = (includeEmpty!=null && includeEmpty==true ? true : false);
		var nill = (emptyValue!=null ? emptyValue : null);
		
		var $newsLetterForm = $('div.article.teaser.newsletter form');
		var defaultsMap = {};
		$('label',$newsLetterForm).each(function(index,labelElem){
			$labelElem = $(labelElem);
			defaultsMap[$labelElem.attr('for')]=$labelElem.text();
		});
		var fields = $newsLetterForm.serializeArray();
		var fieldMap = {};
		for(i=0;i<fields.length;i++){
			var isNotEmpty = fields[i].value!=defaultsMap[fields[i].name];
			if(all || isNotEmpty ){
				fieldMap[fields[i].name]=(isNotEmpty ? fields[i].value : nill);
			}
		}
		return fieldMap;
	},
	serialize:function(fieldMap){
		var serializedMap = '';
		for(key in fieldMap){
			serializedMap+=(serializedMap.length>0 ? '&' : '')+escape(key)+'='+escape(fieldMap[key]);
		}
		return serializedMap;
	},
	showMessage:function(messageSelector, fadeSpeed, timeout, callBack){
		var MCPost = this;
		if(this.currentMessageSelector != messageSelector){
			if(this.currentMessageSelector==null){
				$('div.newsletter.message',this.$newsLetterForm).slideDown(fadeSpeed,function(){
						MCPost.messageWidth = $('h3.message.hidden',MCPost.$newsLetterForm).width();
						$('h3.message',MCPost.$newsLetterForm).width(MCPost.messageWidth+'px');//width:159px;
						MCPost.setMessage(messageSelector, fadeSpeed, timeout, callBack);
					
				});
				if(this.messageWidth!=null){
					this.currentMessageSelector = messageSelector;
					if(this.currentMessageSelector != null) $(this.currentMessageSelector,this.$newsLetterForm).fadeIn(fadeSpeed);
				}

			}else if(messageSelector==null){
				if(this.currentMessageSelector != null) $(this.currentMessageSelector,this.$newsLetterForm).fadeOut(fadeSpeed);
				this.currentMessageSelector = messageSelector;
				$('div.newsletter.message',this.$newsLetterForm).slideUp(fadeSpeed);
				this.setMessage(messageSelector, fadeSpeed, timeout, callBack);
			}else{
				this.setMessage(messageSelector, fadeSpeed, timeout, callBack);
			}
		}else{
			this.setMessage(messageSelector, fadeSpeed, timeout, callBack);
		}
	},
	setMessage: function(messageSelector, fadeSpeed, timeout, callBack){
		var MCPost = this;
		if(this.currentMessageSelector != messageSelector){
			if(this.currentMessageSelector != null) $(this.currentMessageSelector,this.$newsLetterForm).fadeOut(fadeSpeed);
			this.currentMessageSelector = messageSelector;
			if(this.currentMessageSelector != null) $(this.currentMessageSelector,this.$newsLetterForm).fadeIn(fadeSpeed);
		}
		if(timeout>0){
			setTimeout(function(){
				MCPost.showMessage(null,fadeSpeed,-1,null);
				if(callBack!=null){w
					callBack.call(this);
				}
			},timeout);
		}
	},
	
	toggleForm: function()
	{
		var MCPost = this;
		$('.bh-toggle-form').each(function()
		{
			$(this).find('h2, h3').css({cursor: 'pointer'});
			$(this).addClass('minimized');
			$(this).find('form').toggle();
							
			$(this).find('h2, h3').click(function()
			{
				if ( $(this).parent().hasClass('minimized') ) {
					$(this).parent().find('form').slideDown({
						easing: "easeInOutExpo",
						time: 600
					});
				} else 
				{
					MCPost.showMessage(null,MCPost.fadeSpeed,-1,null);
					$(this).parent().find('form').slideUp({
						easing: "easeInOutExpo",
						time: 600
					})
				}
				
				$(this).parent().toggleClass('minimized');	
			});
		});			
	}
};

Scroll={
	
	init: function(){
		Scroll = this;
		$(window).infinitescroll({
		    url: '?##PAGE##&ajax=true',					
		    page: 1,
		    getNextPage: function(curPage){ return curPage+1;},
		    pageToString: function(page){ return Scroll.getQuery()+'page='+page; },
		    processData: this.processData,
		    insertAfter: 'div#main_content div.item:last',
		    noAutoScroll: false,
		    fadeInSpeed: 500,
		    container: $(document),
		    triggerAt: 250,					// n px measured from bottom
			delay: 400						// time (delay) before triggering load
		});
		
		$('div.content').bind('infinitescroll.beforesend', function(){
			$('div.rightColumnBottom').hide();
			$('div.more-results a.link.more-results').addClass('loading');
		});
		
		$('div.content').bind('infinitescroll.finish', function(){
			$('div.rightColumnBottom').hide();
			$('div.more-results a.link.more-results').removeClass('loading');
			$('.item').eq($('.item').size()-1).addClass('last');
			Cufon.refresh();
		});
		$('div.content').bind('infinitescroll.maxreached', function(){
			$('div.more-results').hide();
			$('div.more-results a.link.more-results').removeClass('loading');
			$('div.rightColumnBottom').show();
			$('.item').eq($('.item').size()-1).addClass('last');
			Cufon.refresh();
		});
		
		$('div.more-results a.link.more-results').bind('click', function(event){
			event.preventDefault();
			$(window).trigger('infinitescroll.scrollpage');
//			return false;
		});
	},
	
	processData: function(data){
		$html=$(data.html);
		$content = $('div.item',$html);
		return $content;
	},
	getQuery: function(){
		var terms = $('#terms').val();
		
		if (terms != "Filter op term..." | terms == "") {
			return "id=/mc/mixin/search/" + terms + '&'
			
		} else {	
			$filterLinks = $('div.filter ul.filterList li a');
			
			var query = "";
			for(var i=0; i<$filterLinks.length; i++){
				if($filterLinks.eq(i).hasClass('checked')) query+=(query.length>0?'|':'')+$filterLinks.eq(i).attr('href');
			}
			$('.item').eq($('.item').size()-1).removeClass('last');
			return query.length>0 ? "query=" + query+'&' : '';
		}
	}
};



