// actions can only be fired when document is ready
// note: don't put global functions between the $(document).ready() function!
$(document).ready(function(){
	var curDate = new Date();
	
	// menu
	$("ul.topnav li a").click(function() {
		var $width = parseInt(($(this).parent().find("ul.subnav").width() - $(this).parent("li").width())/2);
		$(this).parent().find("ul.subnav").css({'left': '-' + $width + 'px', 'z-index' : '10000'}).slideDown('fast').show();
		$(this).parent().hover(
			function() {},
			function(){
			$(this).parent().find("ul.subnav").slideUp('slow');
		});
		}).hover(function() {
			$(this).addClass("subhover");
		}, function(){
			$(this).removeClass("subhover");
	});
	
	// check password onBlur
	$('#reg_password').blur(function(){
		var $pass = $(this).val(), $message = new Array(), $elemID = $(this).attr('id');
		if ($pass.length < 6) { 
			$message.push(1);
		} else {
			if ($pass.match(/[A-Z]/) === null) { $message.push(2); };
			if ($pass.match(/\d+/) === null) { $message.push(3); };
			if ($pass.match(/[^a-zA-Z0-9]/) === null) { $message.push(4); };
		}
		if ($message.length > 0 && $elemID.length > 0) { 
			for (var i = $message.length - 1; i >= 0; i--){
				constructFieldError($elemID, pwdText[$message[i]]);
			};
		};
	});
	
	$('#reg_password').focus(function(){
		var $pwd1 = $('#reg_password').val(), $pwd2 = $('#reg_password2').val(), $elemID = $('#reg_password2').attr('id');
		if ($pwd2.length > 0 && $pwd1 != $pwd2) { constructFieldError($elemID, mm); } else { constructFieldError($elemID, ''); };
	});
	
	$('#reg_password').keyup(function(){
		$(this).trigger('focus');
		return false;
	});
	
	// check second password onKeyUp
	$('#reg_password2').keyup(function(){
		var $elemID = $(this).attr('id'), $pwd1 = $('#reg_password').val(), $pwd2 = $('#reg_password2').val() ;
		if ($pwd1 != '') {
			if ($pwd1 != $pwd2){
				constructFieldError($elemID, mm);
			} else {
				constructFieldError($elemID, '');
			}
		}
	});

	// show lostpassword div
	$('#lostPassword').click(function(){
		$('#divLostPassword').toggle();
		return false;
	});

	// if enter is pressed in lstPwdEmail - input, trigger click action on lostPwdButton
	$('#lostPwdEmail').keypress(function(e) {
		if ((e.keyCode ? e.keyCode : e.which) == 13) {
			$('#lostPwdButton').trigger('click');
			return false;
		}
	});
	
	// fire click event for lost password on logon page
	$('#lostPwdButton').click(function(){
		var lpwdurl = '/ajax.php?module=customers&function=LostPassword', email = $('#lostPwdEmail').val(), rKey = $('#lostPwdRKey').val(), emailPattern =  /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if ($('#divLostPwdError').length > 0) { $('#divLostPwdError').remove(); };
		if (emailPattern.test(email)) {
			$.get(lpwdurl,{email:email,rKey:rKey},function(r) {
				if (r.length > 0) {
					var res = $.parseJSON(r);
						if (res.message) {
						$('#divLostPassword').append('<div id=\'divLostPwdError\' style=\'color:red; font-weight:bold;\'>' + res.message + '</div>');
					}
					if (res.success) {
						$('#lostPwdForm').html(res.success).css({'color' : 'green'});
					}
				}
		
			});
		} else {
			$('#divLostPassword').append('<div id=\'divLostPwdError\' style=\'color:red; font-weight:bold;\'>Invalid email</div>');
		}
		return false;
	});
	
	// hover effects for big order button
	$('.buttonOrderBig').hover(
		function(){ 
			$(this).addClass('buttonOrderBigActive');
		},
		function(){ 
			$(this).removeClass('buttonOrderBigActive');
		}
	);
	
	// if an input field has an error message, provided by this js, remove the error line
	$('input').focus(function(){
		var field = $(this).attr('id');
		if ($('#errMsg_' + field).length > 0) { $('#errMsg_' + field).remove(); };
	});
	
	$('div[id^=slideImg_] > img').click(function(e){
		var elem = $(this), elPar = elem.parent('div'), elParContainer = elPar.parent('div');
		var newElemID = $(this).attr('id');
		var $zoomDiv = $('.zoomWrapper:visible');
		elParContainer.children().each(function(e){
			$(this).removeClass("slideThumbActive");
		});
		elPar.addClass("slideThumbActive");
		
		if ($zoomDiv.length) { $zoomDiv.remove(); $('.overlayImageContainer:visible').append('<img />'); };
		$('.overlayImageContainer:visible > img').attr('src',elem.attr('data-big-src')).attr('data-highres', elem.attr('data-highres')).attr('height', elem.attr('data-big-height')).attr('width', elem.attr('data-big-width')).attr('id', newElemID);
		
		var $parent_height = $('.overlayImageContainer').height(), $newElem = $('.overlayImageContainer:visible > img');
		var $top_margin = ($parent_height - $($newElem).height())/2;
		$($newElem).css( 'margin-top' , $top_margin);
		
		// update info
		var newElemIDSplit = newElemID.split('_');
		var newElemIDNum = newElemIDSplit[1];
		// get overlay element id
		var overlayElemID = $('.overlayContainer:visible').attr('id');
		
		var dataSet = artData[newElemIDNum];
		var artist = (dataSet.artist != null && dataSet.artist != 'null') ? '<h3 class="news">' + dataSet.artist + '</h3>' : '';
		var releaseYear = (dataSet.releaseYear != null && dataSet.releaseYear != 'null' && dataSet.releaseYear.length > 0) ? '<span class="spanSlideDescriptionYear"> ' + dataSet.releaseYear + '</span>' : '';
		var infoTemplate = '<div>' + artist + '</div><div><span class="spanSlideDescrioptionTeaser">' + dataSet.artName + '</span>' + releaseYear + '</div>';
		
		$('#' + overlayElemID + ' > #divOverlayTitle').html(infoTemplate);
		$('#' + overlayElemID).find('#artworkInfoHtml').html(infoTemplate);
		
		$('#' + overlayElemID).find('a').eq(1).click(function(){
			dlf(newElemIDNum); return false;
		});
	});
	
	$('div[id^=slideImg_]').hover(
		function(){
			$(this).addClass("slideThumbHover");
		},
		function(){
			$(this).removeClass("slideThumbHover");
		}
	);
	
	$('#slideControlLeft, #slideControlRight').click(function(){
		var $elem = $(this);
		initSlides($elem.attr('rel'));
		if ($elem.attr('id') == "slideControlLeft") {
			animateSlideRight($elem.attr('rel'));
		} else {
			animateSlideLeft($elem.attr('rel'));
		};
	});
	
	$('.overlayImageContainer:visible > img').live("click", function(){
		$(this).mbZoomify({screen:'self', startLevel:5, sWidth:1004, sHeight:565});
	});
});
// end $(document).ready()

// check a given field
function checkField(val, type, minLength) {
	/*
		TODO 
		uitbreiden
	*/
	var err = "", value = trim(val), valLength = value.length;
	if (valLength > 0) {
		if (valLength < minLength) {
			return "Field must be at least " + minLength + " characters.";
		};
		if (type == "num") {
			if (!is_numeric(val)) {
				err = "Field must be numeric";
			};
		};
	} else {
		err = "Field is empty";
	}
	return err;
}

// construct a styled "next-line" error
function constructFieldError(field, message) {
	if ($('#errMsg_' + field).length > 0) { $('#errMsg_' + field).remove(); };
	if (field.length > 0 && typeof(message) !== 'undefined' && message.length > 0) {
		var html = '<div id="errMsg_' + field + '" class="liErrorImg"><span class="errorText">' + message + '</span></div>';
		$('#' + field).closest('div').after(html);
	};
}

// reload page to given URI, used by language, currency and measurement switcher on top of page
function loadPage(url) {
	if (url.length > 0) {
		this.window.location= url;
	};
}

// handles for addressbook
function addrAction(addrID, rKey, action, lang) {
	var fun = 'DeactAddr';
	switch (action) {
		case 'deact':
			var fun = 'DeactAddr';
			if (lang> 0  && lang == 1) {
				var mess = 'Weet je zeker dat je dit adres op inactief wilt?';
			} else {
				var mess = 'Are you sure you want to de-activate this address?';
			}
		break;
		case 'react':
			var fun = 'ReactAddr';
			if (lang > 0  && lang == 1) {
				var mess = 'Adres terug plaatsen?';
			} else {
				var mess = 'Place address back in addressbook?';
			}	
		break;
		case 'delete':
			var fun = 'DeleteAddr';
			if (lang > 0  && lang == 1) {
				var mess = 'Weet je zeker dat je dit adres wilt verwijdereren? (kan niet ongedaan worden gemaakt)';
			} else {
				var mess = 'Are you sure you want to remove this address? (cannot be undone)';
			}
		break;
	}
	var url = '/ajax.php?module=customers&function=' + fun;
	if (confirm(mess)) {
		$.get(url, { addrID : addrID, rkey : rKey}, function(res){
			if (res != '0') {
				r = $.parseJSON(res);
				$('#addr_' + addrID).hide('fast',function() { $(this).remove(); });
				$elem = r.html;
				if (action == 'deact') {
					$('#divAddressInactive').append($elem);
				}; 
				if (action == 'react') {
					$('#divAddressActive').append($elem);
				};
			};
		});
	};
};

var maxScroll = 960;
var elemsPerScroll = 6;
var childImgCount = 0;

var elemWidth = 0;
var totalWidth = 0;

var curPage = 0;

var pages = new Array();
var pageSize = 0;

function initSlides(elem) {
	var elem = $('#' + elem), elPar = elem.closest('div');
	var firstImg = elPar.children().first();
	
	pages = new Array();
	
	maxScroll = elPar.parent('div').width();
	elemWidth = firstImg.outerWidth(); // true
	
	childImgCount = elPar.children().length;
	totalWidth = elPar.width();
	
	var slices = Math.floor(childImgCount / elemsPerScroll);
	var remain = childImgCount - (slices * elemsPerScroll);
	for (var i=0; i < slices; i++) {
		pages[i] = elemsPerScroll;
	};
	if (remain != 'undefined' && remain > 0) { pages.push(remain); }; // pages.splice(0,1);

	pageSize = pages.length - 1;
	pages.splice(0,1);
}

function animateSlideLeft(d) {
	var elem = $('#'+d), elPar = elem.closest('div');
	var firstImg = elPar.children().first();
	
	curPage++;
	if (curPage < pageSize) { // =<
		if (!isNaN(pages[curPage])) { //  || curPage >= pageSize
			var scrollLength = pages[curPage] * elemWidth;
			var curElem = $(elem).position();
			var curElLeft = curElem.left;
			if (curElLeft >= parseInt("-" +totalWidth)) {
				$(elem).animate(
					{
						left: '-=' + scrollLength + 'px'
					}, 
					1000,
					'easeInQuad'
				);
			};
		} 
	} else {
		curPage--;
	}; // != NaN
};

function animateSlideRight(d) {
	var elem = $('#'+d), elPar = elem.closest('div');
	var firstImg = elPar.children().first();
	

	curPage--;
	var tmpPages = pages.reverse();
	if (curPage >= 0) {
		if (!isNaN(tmpPages[curPage])) {
			var scrollLength = tmpPages[curPage] * elemWidth;
			var curElem = $(elem).position();
			var curElLeft = curElem.left;
			if (curElLeft < 0) {
				$(elem).animate(
					{
						left: '+=' + scrollLength + 'px'
					}, 
					1000,
					'easeInQuad'
				);
			};
		} 
	} else {
		curPage++;
	}; // != NaN
};

// trim, equal to the php function
function trim (str, charlist) {
    // Strips whitespace from the beginning and end of a string  

    var whitespace, l = 0,
        i = 0;
    str += '';
 
    if (!charlist) {
        // default list
        whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000";
    } else {
        // preg_quote custom list
        charlist += '';
        whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1');
    }
 
    l = str.length;
    for (i = 0; i < l; i++) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(i);
            break;
        }
    }
 
    l = str.length;
    for (i = l - 1; i >= 0; i--) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(0, i + 1);
            break;
        }
    }
 
    return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}

// is_numeric, equal to the php function
function is_numeric (mixed_var) {
	// Returns true if value is a number or a numeric string  
	return (typeof(mixed_var) === 'number' || typeof(mixed_var) === 'string') && mixed_var !== '' && !isNaN(mixed_var);
}

