/**
 * Build custom controls for dm3Slider
 * 
 * @param object slider dm3Slider object
 * @return object controls
 */
function dm3SliderControls1(slider) {
	var controls = $('<ul class="scroll_controls"></ul>');
	
	slider.slides.each(function() {
		var slideIdx = this.slideIdx;
		var slide = $(this);
		var control_caption = slide.attr('data-title');
		var control_img = slide.attr('data-icon');
		if (control_img.length > 0) {
			control_img = '<img src="' + control_img + '" alt="" />';
		}
		var control = $('<li id="control_'+slideIdx+'">' + control_img + control_caption + '<span></span></li>');
		controls.append(control);
	});
	
	var controls_items = controls.children();
	
	controls_items.each(function() {
		var control = $(this);
		var slideIdx = this.getAttribute('id').replace('control_', '');
		
		if (slider.curSlideNum == slideIdx) {
			control.addClass('active');
			control.find('span:first').css('display', 'block');
		}
		
		control.click(function(e) {
			e.preventDefault();
			slider.changeSlide(slideIdx);
		});
	});
	
	return controls;
}

function dm3AfterChangeSlide1(slider) {
	var prev = slider.controls.eq(slider.prevSlideNum);
	var next = slider.controls.eq(slider.curSlideNum);
	prev.find('span:first').fadeOut();
	next.find('span:first').fadeIn();
}

/**
 * Build custom controls with thumbs for dm3Slider
 * 
 * @param object slide
 * @return object control
 */
function dm3SliderControls2(slider, slideIdx, slide) {
	var thumb_src = slide.attr('data-thumb');
	var control = $('<a id="control_'+slideIdx+'" href="#"><img src="' + thumb_src + '" alt="" /></a>');
	return control;
}

/**
 * Escape html string, so that it is not parsed as HTML
 */
function dm3_escape_html(str) {
  return str
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
}

/**
 * Load tweets into an html element
 * version 1.0.1
 */
function dm3_load_tweets(el, num) {
	// One tweet by default
	num = (parseInt(num) == num) ? num : 1;
	var userId = el.text();
	
	$.ajax({  
        url: "http://twitter.com/statuses/user_timeline/" + userId + ".json?count=" + num + "&callback=?",
        dataType: "json",
        timeout: 15000,
  
        success: function(data) {
        	var ul = $('<ul>');
			var li = null;
			
			for (i = 0; i < data.length; ++i) {
				// Create html
				li = document.createElement('li');
				li.innerHTML = '@<a href="http://twitter.com/' + dm3_escape_html(data[i].user.screen_name)
					+ '">' + dm3_escape_html(data[i].user.screen_name) + '</a> ' + dm3_escape_html(data[i].text);
				
				ul.append(li);
			}
			
			el.html(ul);
        }
    });
}

function dm3_scroll_to(elements) {
	elements.click(function(e) {
    	e.preventDefault();
    	var scroll_to = $($(this).attr('href')).offset().top;
    	$('html, body').animate({ scrollTop: scroll_to+'px' }, 600);
    });
}

/**
 * When document loads
 */
$(document).ready(function() {
	
	// scroll top button
	var upperLimit = 100;
    var scrollElem = $('a#scroll_top');
    scrollElem.hide();
    $(window).scroll(function () {
        var scrollTop = $(document).scrollTop();
        if (scrollTop > upperLimit) {
        	$(scrollElem).show();
        } else {
            $(scrollElem).hide();
        }
    });
    // scroll top animation
    scrollElem.click(function(){ 
        $('html, body').animate({ scrollTop: 0 }, 600);
        return false; 
    });
    
    dm3_scroll_to($('a.scroll_to'));
	
	// dm3Slider
	var slider = $('#slider');
	if (slider.hasClass('controls1')) {
		slider.dm3Slider({
			interval: 5, // in seconds, set to 0 to remove the auto rotation
			controlsCallback: function() { return dm3SliderControls1(this); },
			afterCaption: function(caption) { dm3_scroll_to(caption.find('a.scroll_to')); },
			afterChangeSlide: function() { dm3AfterChangeSlide1(this); }
		});
	} else if (slider.hasClass('controls2')) {
		slider.dm3Slider({
			interval: 5, // in seconds, set to 0 to remove the auto rotation
			controlCallback: function(slideIdx, slide) { return dm3SliderControls2(this, slideIdx, slide); },
			afterCaption: function(caption) { dm3_scroll_to(caption.find('a.scroll_to')); }
		});
	} else {
		slider.dm3Slider({
			interval: 5, // in seconds, set to 0 to remove the auto rotation
			afterCaption: function(caption) { dm3_scroll_to(caption.find('a.scroll_to')); }
		});
	}
	
	// Subscribe form
	$('#subscribe').find('input:first').focus(function() {
		var input = $(this);
		if (input.val() == 'enter your email address')
			input.val('');
	});
	
	$('#subscribe').find('input:first').blur(function() {
		var input = $(this);
		if (input.val() == '')
			input.val('enter your email address');
	});
	
	$('#subscribe').submit(function(e) {
		e.preventDefault();
		
		var subscribe_form = $('#subscribe');
		
		var ajax_loader = subscribe_form.find('.ajax_loader:first').fadeIn();
		var button = subscribe_form.find('button:first').fadeOut();
		
		$.ajax({
			url: 'scripts/subscribe/subscribe.php',
			type: 'post',
			data: 'email=' + $('#subscribe_email').val(),
			success: function(response) {
				if (response == 'email_added') {
					subscribe_form.find('.subscribe_error:first').fadeOut();
					subscribe_form.find('.subscribe_success:first').fadeIn();
					setTimeout(function() {
						subscribe_form.find('.subscribe_success:first').fadeOut();
					}, 5000);
				} else {
					switch (response) {
						case 'file_count not writable':
						case 'file_ips not writable':
						case 'file_emails not writable':
							alert(response);
							break;
						
						default:
							subscribe_form.find('.subscribe_success:first').fadeOut();
							subscribe_form.find('.subscribe_error:first').fadeIn();
							setTimeout(function() {
								subscribe_form.find('.subscribe_error:first').fadeOut();
							}, 5000);
					}
				}
				
				ajax_loader.fadeOut();
				button.fadeIn();
			},
			error: function() {
				ajax_loader.fadeOut();
				button.fadeIn();
			}
		});
	});
	
	// tabs
	$('.tabs').dmTabs();
	
	// carousel
	$('#carousel').jcarousel({
    	scroll: 1
    });
    
    // lightbox
	$('a.lightbox_zoom').each(function() {
		var lb = $(this);
		
		// Get the span
		var span = lb.find('span:first');
		
		if (!span.length) {
			span = $('<span></span>');
			lb.append(span);
		}
		
		setTimeout(function() {
			span.css({
				display: 'block',
				opacity: 0,
				width: lb.find('img:first').width() + 'px',
				height: lb.find('img:first').height() + 'px'
			});
		}, 500);
		
		lb.hover(function() {
			span.stop().animate({opacity: 0.8}, {duration: 300});
		}, function() {
			span.stop().animate({opacity: 0}, {duration: 300});
		});
	});
	
	// social icons
	$('.social li').hover(function() {
		$(this).find('a:first span').css({display: 'block', opacity: 0}).animate({opacity: 1}, {duration: 200});
	}, function() {
		$(this).find('a:first span').stop().animate({opacity: 0}, {duration: 200});
	});
	
	// contact form
	$('#contact_form').submit(function(e) {
		e.preventDefault();
		
		var form = $(this);
		
		var ajax_loader = form.find('.ajax_loader:last').fadeIn();
		var button = form.find('#contact_submit:first');
		button.stop().animate({opacity: 0}, {duration: 300});
		
		var first_name = $('#first_name');
		var last_name = $('#last_name');
		var email = $('#contact_email');
		var phone = $('#contact_phone');
		var subject = $('#subject');
		var message = $('#message');
		
		var error = false;
		
		if (first_name.val() == '') {
			first_name.parent().find('.error_message').fadeIn();
			first_name.parent().find('label:first').css('visibility', 'hidden');
			error = true;
		} else {
			first_name.parent().find('.error_message').fadeOut();
			first_name.parent().find('label:first').css('visibility', 'visible');
		}
		
		if (last_name.val() == '') {
			last_name.parent().find('.error_message').fadeIn();
			last_name.parent().find('label:first').css('visibility', 'hidden');
			error = true;
		} else {
			last_name.parent().find('.error_message').fadeOut();
			last_name.parent().find('label:first').css('visibility', 'visible');
		}
		
		if (!(email.val()).match('^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$')) {
			email.parent().find('.error_message').fadeIn();
			email.parent().find('label:first').css('visibility', 'hidden');
			error = true;
		} else {
			email.parent().find('.error_message').fadeOut();
			email.parent().find('label:first').css('visibility', 'visible');
		}
		
		if (error) {
			ajax_loader.fadeOut();
			button.animate({opacity: 1}, {duration: 300});
			return false;
		}
		
		var data = 'first_name='+first_name.val()+'&last_name='+last_name.val()+'&email='+email.val()+
			'&phone=' + phone.val() + '&subject='+subject.val()+'&message='+message.val();
			
		$.ajax({
			url: 'scripts/contact/process.php',
			type: 'post',
			data: data,
			success: function(response) {
				ajax_loader.fadeOut();
				button.stop().animate({opacity: 1}, {duration: 300});
				
				if (response == '1') {
					form.find('.success_message:first').css({
						'opacity': 0,
						'display': 'inline-block'
					}).animate({opacity: 1}, {duration: 300});
					
					subject.val('');
					message.val('');
				} else {
					switch (response) {
						case 'file_count not writable':
						case 'file_ips not writable':
							alert(response);
							break;
							
						default:
							alert('Error occured. Please try again.');
							form.find('.success_message:first').fadeOut();
					}
				}
			}
		});
	});
	
	function dm3_contact_form_focus(input) {
		var parent = input.parent();
		if (parent[0].tagName == 'DIV')
			parent = parent.parent();
		parent.css('background-color', '#FFFCC8');
		input.parent().find('.error_message:first').fadeOut();
		input.parent().find('label:first').css('visibility', 'visible');
	}
	
	function dm3_contact_form_blur(input) {
		var parent = input.parent();
		if (parent[0].tagName == 'DIV')
			parent = parent.parent();
		parent.css('background-color', '#f4f4f4');
	}
	
	$('#contact_form textarea, #contact_form input').focus(function() {
		dm3_contact_form_focus($(this));
	});
	
	$('#contact_form td').click(function() {
		$(this).find('input,textarea').focus();
	});
	
	$('#contact_form textarea, #contact_form input').blur(function() {
		dm3_contact_form_blur($(this));
	});
	
	// prettyPhoto
	$("a.lightbox").prettyPhoto({
		social_tools: ''
	});
	
	// Load latest tweet
	dm3_load_tweets($('#tweet'), 1);
	
	// Toggle Boxes [ver 1.0]
	$('.toggle_box').hide();
	
	$('.toggle_header').each(function() {
		var el = $(this);
		var content = el.next('.toggle_box');
		
		if (!content.length)
			return;
		
		this.toggle_open = false;
		
		// bind onclick event to the toggle header
		el.click(function() {
			if (this.toggle_open == true) {
				el.removeClass('toggle_open');
				this.toggle_open = false;
			} else {
				el.addClass('toggle_open');
				this.toggle_open = true;
			}
			
			content.slideToggle('slow');
		});
	});
	
	// Slides
	$('#slides').slides({
		preload: true,
		generateNextPrev: false,
		autoHeight: true,
		play: 5000,
		hoverPause: true,
		slideSpeed: 500
	});
});

