// Debugging
var debugMode = true;

function debug(msg) {
	if ((debugMode) && (window.console))
		console.log(msg);
}

// Determine the environment
var mobileView = ($(window).width() <= 720) ? true : false;
if("onorientationchange" in window) mobileView = true;
if ($(window).width() >= 960) mobileView = false;


// Serve appropriate CSS
$.ajax({ url: '/css/' +(mobileView ? 'handheld' : 'screen')+ '.css' });
$('head').append('<link>');
$('head').children('link:last').attr({
	rel:  'stylesheet',
	type: 'text/css',
	//media: 'screen',
	href: '/css/' +(mobileView ? 'handheld' : 'screen')+ '.css'
});

// Serve appropriate JS
$.getScript('/js/' +(mobileView ? 'mobile' : 'desktop')+ '.js');

// Get query string params function for helper iframe (see desktop.js)
function getParams(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");

    var regexS	= "[\\?&]" +name+ "=([^&#]*)",
    	regex	= new RegExp(regexS),
    	results	= regex.exec(window.location.href);

    if (results == null)	return false;
    else					return results[1];
}

// Load More button callback function
var loadMore = {
	state: false,
	animSpeed: (!mobileView) ? 250 : 0,
	startRow: 0,
	dataPerCall: 20,
	actSection: '?'
};

function processSectionData(data) {
	if (!loadMore.state)
		return;
	
	//debug(data);
	
	// Increase button's start index
	$('.loadMore').attr('data-startFrom', function(idx, val) {
		return Number(val) + loadMore.dataPerCall;
	});
	
	// Decrease button's remaining object count
	$('.loadMore').attr('data-maxAvail', function(idx, val) {
		return Number(val) - loadMore.dataPerCall;
	}).find('em').text($('.loadMore').attr('data-maxAvail'));
	
	// Process JSON into new article data
	$.each(data, function(pIdx) {
		// Load More: STORY #######################################
		if (loadMore.actSection == 'story') {
		
			var pData		= data[pIdx],
				aCount		= pData.articleCount,
				colCount	= (!mobileView) ? 4 : 2;
				wObj;
			
			// Create a wrapper object to hold new article links
			// So we can animate it into view when it's done
			$('<div id="pg' +pData.pId+ '" class="pGroup"></div>').insertBefore('.loadMarker');
			wObj = $('#pg' +pData.pId);
			
			wObj.hide()
				.append('<h1 class="inner">' +pData.product+ '</h1>');
			
			// Create columns
			for (var i = 1; i <= colCount; i++) {
			    wObj.append('<ul class="articles a' +i+ '"></ul>');
			}
				
			// Remove columns that are not needed
			for (var i = (aCount + 1); i <= colCount; i++) {
			    $('ul.a' +i).remove();
			}
			
			var colId = 1;
			$.each(pData.article, function(aIdx) {
				var aData	= pData.article[aIdx];
				
				// Insert articles into the wrapper object
				wObj.find('.a' +colId)
					.append('<li></li>')
					.children('li:last')
					.css('background-image', 'url(/image/' +aData.thumbId+ ')')
					.height(aData.height)
					.append('<div class="type' +aData.type+ '"></div>')
					.append('<div class="overlay"></div>')
					.append('<a href="/article/' +aData.id+ '"></a>')
					.children('a:last')
					.append('<h2>' +pData.product+ '</h2>')
					.append('<p>' +aData.excerpt+ '</p>');
				
				// Assign interaction animations on desktop view
				if (!mobileView) {
					wObj.find('li', '.articles').hover(
						// These functions are in desktop.js
						function() { articleOn($(this)); },
						function() { articleOff($(this)); }
					);
				}
				
				colId++;
				if (colId > colCount)
					colId = 1;
				
			});
		
		// Load More: LATEST #######################################
		} else if (loadMore.actSection == 'latest') {
		
			var aData = data[pIdx],
				wObj;
			
			// Create a wrapper object to hold new article links
			// So we can animate it into view when it's done
			$('<a id="a' +aData.id+ '" href="/article/' +aData.id+ '"></a>').insertBefore('.loadMarker');
			wObj = $('#a' +aData.id);
			
			wObj.hide()
				.append('<h1>' +aData.product+ '</h1>')
				.append('<img class="thumb" src="/image/' +aData.thumbId+ '" alt="' +aData.product+ '" />')
				.append('<p>' +aData.date+ '</p>')
				.append('<p>' +aData.excerpt+ '</p>');
				
		// Load More: ARCHIVE #######################################
		} else if (loadMore.actSection == 'archive') {
		
			var aData = data[pIdx],
				wObj;
			
			// Create a wrapper object to hold new article links
			// So we can animate it into view when it's done
			$('<div id="a' +aData.id+ '"></div>').insertBefore('.loadMarker');
			wObj = $('#a' +aData.id);
			
			wObj.hide()
				.append('<a href="/article/' +aData.id+ '"></a>')
				.children('a:last')
				.append('<h2>' +aData.product+ '</h2>')
				.append('<span style="background-image: url(/image/' +aData.thumbId+ '/196);"></span>')
				.append('<p>' +(aData.excerpt ? aData.excerpt : '')+ '</p>')
				.append('<div class="clearBoth">&nbsp;</div>');

		}
		
		// Ta-da
		wObj.show(loadMore.animSpeed);
	});

	// Hide button if no more data is available
	if ($('.loadMore').attr('data-maxAvail') <= 0) {
		$('.loadMore').slideUp(loadMore.animSpeed);
		
	// Animate button back into view
	} else {
		$('.loadMore').find('img').slideUp(loadMore.animSpeed / 2);
		$('.loadMore').find('p').slideDown(loadMore.animSpeed);
		$('.loadMore').find('span').slideDown(loadMore.animSpeed);
	}
	
	loadMore.state = false;
}



// COOKIE FUNCTIONS

function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function deleteCookie(name) {
    setCookie(name,"",-1);
}



// DOM ready
$(document).ready(function() {

	// Homebox linking
	$('.homeBox').click(function() {
		window.location = $(this).find('a').attr('href');
		return false;
	});

	// Hide load more button if not needed
	if ($('.loadMore').attr('data-maxAvail') > 0) {
		$('.loadMore').css('display', 'block');
	}
	
	// User clicks on the Load More button
	$('.loadMore').click(function(e) {
		e.preventDefault();
		
		if (loadMore.state)
			return;
		
		loadMore.actSection = $('body').attr('class');
		loadMore.startRow = $('.loadMore').attr('data-startFrom');
		
		// Get more posts
		$.ajax({
			type: 'POST',
			url: '/' +loadMore.actSection+ '/load?startFrom=' +loadMore.startRow+ '&returnCount=' +loadMore.dataPerCall,
			dataType: 'JSON',
			success: function(data) { processSectionData(data); }
		});
		
		// Animate button into a loading indicator
		loadMore.state = true;

		$(this).find('p').slideUp(loadMore.animSpeed / 2);
		$(this).find('span').slideUp(loadMore.animSpeed / 2);
		$(this).find('img').slideDown(loadMore.animSpeed);
	});
	
	$('.showCopier').click(function() {
		if ($('.copyUrl').is(':visible'))
			return false;
			
		$('.copyUrl').show(150).focus().select();
		return false;
	});
	
	$('.copyUrl').blur(function() {
		$(this).hide(150);
	});

});


// ### HOME INFO MODAL ###


function showInfoModal() {
	$("#homeInfoModal").fadeIn();
}

function hideInfoModal() {
	$("#homeInfoModal").fadeOut();
}


