// Creating Global Namespace for mindcollision
// requires jQuery 1.4.1

// Creating namespaces
var mc = {
	debug: false,
	IE6: !$.support.opacity && !window.XMLHttpRequest
}
// Starting point
mc.init = function() {
	$(document).ready( function() {
		mc.contact();
		mc.faceBook();
		mc.initTwitter();
		mc.audioplayer();
		mc.bgImage.init();
		mc.vidNav();
		mc.gallery.binder();
		mc.showMore.binder();
		mc.commentForm.binder();
	});
}();

mc.contact = function() {
	$('.mailme').mailme();
}
mc.bgImage = {
	props : {
		qty : 8,
		path : 'img/bg-imgs/mindcollision-',
		int : 10000,
		currImg : 1,
		imgArray : [],
		bgTagSelect : '#bgImgFader',
		isHome : false
	},
	
	init : function() {
		this.props.isHome = $(this.props.bgTagSelect).is('.home');
		
		var that = this;
		var props = that.props;
		var rand = parseInt(Math.random() * props.qty)+1;
		
		if(!props.isHome) {
			props.currImg = rand;
			that.preload(props.currImg);
			mc.bgImage.changeBg(false);
		} else {
			that.preload(props.currImg);
			setTimeout("mc.bgImage.changeBg()",props.int);

		}	
	},
	
	changeBg : function(fade) {
		var tempImg = new Image();
		var props = mc.bgImage.props;
		var nextImgNr = props.currImg==props.qty?1:props.currImg+1;
		var useFade = fade==false?false:true;
		
		$(tempImg).load(function() {
			var newBg = 'url('+$(this).attr('src')+')';
			mc.bgImage.props.currImg = nextImgNr;
			
			if(useFade) {
				$(mc.bgImage.props.bgTagSelect).fadeOut(300,function() {
					$(this).css('background-image',newBg).fadeIn(300);
					setTimeout("mc.bgImage.changeBg()",props.int);
				});
			} else {	
				$(mc.bgImage.props.bgTagSelect).css('background-image',newBg);
				setTimeout("mc.bgImage.changeBg()",props.int);
			}
		});
		tempImg.src = props.path + '0' + nextImgNr + '.jpg';
	},
	
	preload : function(currImg) {
		var that = this;
		var nextImgNr = currImg==that.props.qty?1:currImg+1;
		var preloadImg = new Image();
		preloadImg.onload = function() {
			if(nextImgNr == that.props.currImg) return false;
			that.preload(nextImgNr);
		}
		preloadImg.src = that.props.path + '0' + nextImgNr + '.jpg';
	}
}

mc.vidNav = function() {
	var props = {
		width: 584,
		height: 353,
		params : {
			wmode: "transparent",
			menu: "false",
			allowFullScreen: "true",
			allowscriptaccess: "always",
			FlashVars: "movieid=vidBox",
			pluginspage : "http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
		}
	}
	
	$('#vidNav a').bind('click', function() {
		$(this).attr('href', $(this).attr('href').replace('watch?v=','v/') + '&amp;autoplay=1')
		.addClass("active").parent().siblings().find('a').removeClass('active');
		
		var href = $(this).attr('href');
		var str = '<object  width="' + props.width + '" height="' + props.height + '"><param name="movie" value="' + href + '"></param>';
		var emb = '';
		
		$.each(props.params, function(name, val) {
			str += '<param name="' + name + '" value="' + val + '"></param>';
			emb += ' ' + name + '="' + val + '"';
		});

		str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + props.width + '" height="' + props.height + '"' + emb + '></embed></object>';

		$('#vidObj').empty().append(str);
		return false;
	});
}

mc.gallery = {
	binder : function() {
		this.fancyBox();
		this.showMore();
	},
	fancyBox : function() {
	  var showMoreClicked = false;
	  
	  
		$('a[href$=.jpg],a[href$=.png],a[href$=.gif]', '#content .post').fancybox({
			'titlePosition' : 	'inside'
		});
	  
		$('#content .galleryList a').fancybox( {
			'titlePosition' : 	'inside',
			'onComplete' : function(currentArray, currentIndex) {
				if(currentIndex+2 >= currentArray.length && showMoreClicked != true) {
				  showMoreClicked = true;
			    $('#content .galleryBox .showMore a').trigger('click');
			    $('#fancybox-right').click(function() {
			      $('#content .galleryList a:eq('+(currentIndex+1)+')').css('border', '1px solide lime').trigger('click.fb');
			    });
			    
    			$(document).unbind('keydown.fb').bind('keydown.fb', function(e) {
    				if (e.keyCode == 27) {
    					e.preventDefault();
    					$.fancybox.close();

    				} else if (e.keyCode == 37) {
    					e.preventDefault();
    					$.fancybox.prev();

    				} else if (e.keyCode == 39) {
    					e.preventDefault();
    					$('#content .galleryList a:eq('+(currentIndex+1)+')').css('border', '1px solide lime').trigger('click.fb');
    				}
    			});
		    } else {
		      
    			$('#fancybox-right').click(function(e) {
    				e.preventDefault();
    				$.fancybox.next();
    			});
    			
    			$(document).unbind('keydown.fb').bind('keydown.fb', function(e) {
    				if (e.keyCode == 27) {
    					e.preventDefault();
    					$.fancybox.close();

    				} else if (e.keyCode == 37) {
    					e.preventDefault();
    					$.fancybox.prev();

    				} else if (e.keyCode == 39) {
    					e.preventDefault();
    					$.fancybox.next();
    				}
    			});
		      showMoreClicked = false;
		    }
			}
		});
	},
	showMore : function() {
		var that = this;
		$('#content .galleryBox .showMore a').live('click', function() {
				// Prepare AjaxUrl
				var ajaxUrl = mc.Ajax.getAjaxUrl($(this).attr('href'));
				ajaxUrl += '&gallery=true&galStartAt='+($('.galleryBox .galleryList li').length+1);
				// Do ajax-call
				mc.Ajax.ajaxCall({
					url: ajaxUrl,
					success: that.showMoreSuccess,
					context: $(this)
				});
				$(this).addClass('loading');
				return false;
		});
	},
	showMoreSuccess : function(response) {
		$(response).find('li').appendTo($('.galleryBox .galleryList')).hide();
		$(this).parent().replaceWith($(response).find('li').parent().siblings('h4'));
		mc.gallery.fancyBox();
		$('.galleryBox .galleryList li:hidden').each(function(i) {
			var delay = i*70;
			$(this).delay(delay).fadeIn(350);
		});
	}
}

mc.commentForm = {
	binder : function() {
		this.ajaxCall();
	},
	
	ajaxCall : function() {
		var that = this;
		
		$('#commentform').live('submit', function() {
			// Prepare AjaxUrl
			var ajaxUrl = mc.Ajax.getAjaxUrl($(this).attr('action'));
			// Do ajax-call
			mc.Ajax.ajaxCall({
				type: "POST",
				url: ajaxUrl,
				data: $(this).serialize(),
				success: that.ajaxSuccess,
				error: that.ajaxError,
				context: $(this)
			});
			$('p.error', this).slideUp(300);
			$('button', this).after($('<img class="loading" src="/img/loading.gif" />').css("opacity", 0.5));
			return false;
		});
	},
	
	ajaxSuccess : function(response) {
		if($('.commentlist').length) {
			$('.commentlist li:last', response).hide().appendTo($('.commentlist'))
			.slideDown(300);
		} else {
			$('div.comment', response).hide().insertBefore($('#respond'))
			.slideDown(300);
		}
		
		$('<p class="success">Mindcollision thanks you for posting a comment</p>').hide().prependTo(this).slideDown(300);
		$('button', this).next('img').remove();
	},
	
	ajaxError : function(xhr) {
		var response = xhr.responseText;
		$('<html>').html(response).find('p').addClass('error').hide().prependTo(this).slideDown(300);
		$('button', this).next('img').remove();
	}
}

mc.showMore = {
	binder : function() {
		this.ajax();
	},
	ajax : function() {
		var that = this;
		$('#content .moreNews a').live('click', function() {
			// Prepare AjaxUrl
			var ajaxUrl = mc.Ajax.getAjaxUrl($(this).attr('href'));
			// Do ajax-call
			mc.Ajax.ajaxCall({
				url: ajaxUrl,
				success: that.ajaxSuccess,
				context: $(this)
			});
			$(this).addClass('loading');
			return false;
		});
	},
	ajaxSuccess : function(response) {
		$(this).parent().remove();
		$(response).appendTo('#content');
	}
}

mc.faceBook = function() {
	$('<div><fb:fan profile_id="126389523788" stream="" connections="12" width="370"></fb:fan></div>')
	.insertAfter('#facebook');
	
	try{FB.init();} catch(e) {};
}

mc.audioplayer = function() {
	$('#serviceLinks a.player').click(function() {
		window.open('/flash/audioplayer.html','Mindcollision_AudioPlayer','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=yes,width=460,height=355');
		return false;
	});
}

// Twitter Shit

mc.initTwitter = function() {
	var JSfileName = 'http://twitter.com/statuses/user_timeline/Mindcollision.json?callback=mc.MCtwitterCallback&count=1';
	$('body').append('<script type="text/javascript" src="'+JSfileName+'"></script>');
}

mc.MCtwitterCallback = function(twitters) {
  var statusHTML = [];
  for (var i=0; i<twitters.length; i++){
    var username = twitters[i].user.screen_name;
    var status = twitters[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
      return '<a target="_blank" href="'+url+'">'+url+'</a>';
    }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
      return  reply.charAt(0)+'<a target="_blank" href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
    });
    statusHTML.push('<li><div>'+status+'</div><a class="date" target="_blank" href="http://twitter.com/'+username+'/statuses/'+twitters[i].id+'"><small>'+mc.relative_time(twitters[i].created_at)+'</small></a></li>');
  }
  $('#twitterUpdateList').html(statusHTML.join(''));
}

mc.relative_time = function(time_value) {
  var values = time_value.split(" ");
  time_value = values[2] + ". " + values[1] + " " + values[5];// + "&nbsp;&nbsp;" + values[3].split(":")[0] + ":" + values[3].split(":")[1];
  return time_value;
}

mc.Ajax = {
	ajaxParam : '?ajax=true',
	
	getAjaxUrl : function(url) {
		// Insert AjaxParam to url
		if(url == '' || url == '#') return false;
		var params = (url.indexOf('?') > -1)?'&' + url.split('?')[1]:'';
		var ajaxUrl = url.split('?')[0].split('#')[0] + mc.Ajax.ajaxParam + params;
		return ajaxUrl;
	},
	
	modalWindow : function(error, title, text) {
		var modalHtml = (error==true)?'<div id="ajaxError">':'<div id="ajaxSuccess">';
		modalHtml += '<h3 class="base">' + title + '</h3><div class="inner">' + text + '</div></div>';
		
		var modalElm = $(modalHtml);
		$('<a href="#" title="" class="okbutton"><span>OK</span></a>').bind('click', function(){$.fancybox.close();return false;}).appendTo(modalElm);
		
		$.fancybox(modalElm,{
			'overlayOpacity'	:	0.3,
			'scrolling'			:	'no',
			'titleShow'			:	false,
			'onComplete'		:	function() {
				$(document).bind('keydown',function(e){ 
				  if(e.which != 13) return;
				  $('#fancybox-inner a.okbutton').click();
				});
				if(error == false) {
					$('body').delay(2000).queue(function() {
						$.fancybox.close();
						$(this).dequeue();
					});
				}
			},
			'onCleanup'			: function() {
				$(document).unbind('keydown');
			},
			'onClosed'			:	null
		});
	},
	
	ajaxSuccess : function(data, status, xhr) {
		$(this).find('.loading').andSelf().removeClass('loading');
		$(this).parents('.loading').andSelf().removeClass('loading');
		try {
			var responseJSON = $.parseJSON(data);
			mc.Ajax.modalWindow(false,responseJSON.messageTitle,responseJSON.messageText);
		}
		catch(ex) {
			mc.Ajax.modalWindow(false,'Success','');
		}
	},
	
	ajaxError : function(xhr, status, errorThrown) {
		$(this).find('.loading').andSelf().removeClass('loading');
		$(this).parents('.loading').andSelf().removeClass('loading');
		try {
			$.parseJSON(xhr.responseText);
			var errorObj = $.parseJSON(xhr.responseText);
			mc.Ajax.modalWindow(true,'Error',errorObj.globalerrormessage);
		}
		catch(ex) {
			mc.Ajax.modalWindow(true,'Error','Error occured');
		}
	},
/*
 * Universal AJAX handler
 * @param object options	=> Ajax options
 */
	ajaxCall : function(options) {
		//return false;
		UTILS.log('info', 'mc.Ajax.ajaxCall url:' + options.url + ' type:' + options.type);
		
		var ajaxOpts = {
			type: "GET",
			url: "",
			data: null,
			//dataType: 'html',
			async: true,
			timeout: 20000,
			error: mc.Ajax.ajaxError,
			success: mc.Ajax.ajaxSuccess
		};
		
		var ajaxEtxOpts = $.extend({}, ajaxOpts, options);
		$.ajax(ajaxEtxOpts);
	}
};


/*
 * global UTILS namespace
 */
var UTILS = {
	// jQuery Browser object
	browser: $.browser,
	timer : null
};

/*
 * show/hide default input text
 * @param string selector 	=> jQuery Selector
 */
UTILS.inputValReplace = function(selector) {
	$(selector).each(function() {
		if($(this).val() == ''){return this};
		var z = $(this).val();
		var inpsearchtext = $(this).val();
		$(this)
		.focus(function() {
			if ($(this).val() == z) {
				$(this).val('');
			}
		})
		.blur(function() {
			if(inpsearchtext == ''){
				$(this).val(z);
			} else {
				$(this).val(inpsearchtext);
			}
		})
		.bind('keyup', function() {
			inpsearchtext = $(this).attr('value');
		});
	});
}


/*
 * Logs data when debug is true (Firebug or div => depending on Browser)
 * @param string option 	=> log, error, info, dir, ...
 * @param object obj 		=> Any type of JS Objects
 */
UTILS.log = function(option, obj) { 
    if (!mc.debug) {
		return;
	}

    if (typeof console !== "undefined") {
        console[option](obj);
    }
    else {
        if ($("#PHConsole").length === 0) {
			$('body').append('<div id="PHConsole" style="position: absolute; z-index: 5000; top: 20px; right: 20px; padding: 4px 0; width: 300px; border: 4px solid #666; min-height: 350px; background: #efefef;"><h2>Loggin Window</h2></div>');
		}
		else {
			var text = '<p class="' + option + '" style="border-bottom: 1px solid #666; padding: 1px 4px;">' + option + ': ' + obj.toString() + '</p>';
			$("#PHConsole").append(text);
		}
    }
};

jQuery.fn.mailme = function() {  
     var at = / at /;  
     var dot = / dot /g;  
     this.each( function() {  
         var addr = jQuery(this).text().replace(at,"@").replace(dot,".");  
         var title = jQuery(this).attr('title')  
         $(this)  
             .after('<a href="mailto:'+addr+'" title="'+title+'">'+ addr +'</a>')  
             .remove();  
	});  
};  

