/*
daniel von mitschke and mayolove for candela project
copyright 2011
*/

iPhone = false;
validate = true;
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i)))
	iPhone = true;


$(document).ready(function(){

	candela.formMethods();
	candela.paymentClick();	
	candela.prepareBigBasket();		
	candela.autoLabelClick();
	candela.addToBasket();
	candela.removeFromBasket();
	candela.removeFromBigBasket();
	candela.updateBigBasket();
	candela.artistReadMore();
	candela.artistReadLess();
	candela.radioButtonClick();
	candela.addAndRemoveLightboxClick();
	candela.addToNoticeListClick();
	candela.removeFromNoticeListClick();
	candela.detailpageThumbs();
	candela.imagesHover();
	candela.lightboxSortable();
	candela.formValidation();
	candela.colorboxDef();
	if(!iPhone)
		candela.colorboxIssuu();
	
});

candela =
{
	formMethods: function(){
		$("button.novalidation").click(function(){
			validate = false;
		});
		
		$("button.submitbigform").show();
		$("a.submitbigform, button.submitbigform").click(function(){
			$("form.bigform").submit();		
			return false;
		});
		
			
		$("form.hints input").focus(function(){
			$(this).parent().find("div.hint").show();	
		});
	
		$("form.hints input").blur(function(){
			$(this).parent().find("div.hint").hide();	
		});
		
		$("#shipping_form select").change(function(){
			$("#shipping_form").submit();
		});
		
	},

	paymentClick: function(){
		$("#order_page li.payment ul.payments li.paymentmethod").click(function(){
			$(this).find("input.paymentmethod").attr("checked", true);
		});	
	},
	
	prepareBigBasket: function(){
		$("#basket_page button.removeBtn").hide();
		$("#basket_page input.removeCheckbox").hide();
		$("#basket_page button.removeBtnInline").show();
	},

	colorboxIssuu: function(){
		$("a.colorbox_issuu").colorbox({
			inline: true,
			opacity: 0.4,
			close: "",
			next: false,
			previous: false
		});
	},

	colorboxDef: function(){
		$("a.colorbox").colorbox({
			photo: true,
			opacity: 0.4,
			close: "",
			next: false,
			previous: false
		});
	},


	formValidation: function(){
		$("form.validate").submit(function(){
			$form = $(this);
			var valid = true;
			if(validate)
			{
				$form.find("input.error, select.error, label.error").removeClass("error");
				$form.find("input.req, select.req").each(function(){
					if($(this).val() == "")
					{
						$(this).addClass("error");
						$(this).parent().find("label").addClass("error");
						valid = false;
					}
				});
				$form.find("input.error, select.error").unbind("blur").blur(function(){
					if($(this).hasClass("req") && $(this).val() != "")
					{
						$(this).removeClass("error");
						$(this).parent().find("label").removeClass("error");
					}
						
					$(this).parent().find("div.hint").hide();
				});		
			}
			else
				validate = true;
			
			return valid;
		});

	},
	
	lightboxSortable: function(){
		function goMason()
		{
			$("#lightbox ul").masonry({columnWidth: 1,itemSelector: '.masonry'});
		}
	
		$("#lightbox ul").sortable({
			placeholder: {
		        element: function(currentItem) {
					return $('<li class="masonry placeholder" style="height: ' + (currentItem.height()) + 'px; width: ' + (currentItem.width()) +'px;"></li>')[0];
		        },
		        update: function(container, p) {return;}
		    },
			tolerance: function(currentItem){
				return 'pointer';
			},
			items: 'li',
			opacity: 0.6,
			containment: 'body',
		/* 	handle: '#boxlabel', */
			helper: function(event, element) {
				var clone = $(element).clone();
				clone.removeClass('masonry');
				element.removeClass('masonry');
				return clone;
			},
			stop: function(event,ui){
				ui.item.addClass("masonry");
				goMason();
		/* 		serialize('sortable','serialList'); */
				candela.lightboxSaveSortable();
			},
			change: function() {
		/* 		serialize('sortable','serialList');			 */
		    },
			sort: function(){
				goMason();
			}
		}).disableSelection();	
		goMason();
	},
	
	lightboxSaveSortable: function(){
		var $elements = $("#lightbox ul li.masonry");
		var dataString = "";
		var $form = $("#lightboxform");
		$elements.each(function(){
			dataString += "&lightboxelement[]=" + $(this).attr("id").toString().replace("pid_","");
		});
/* 		alert(dataString); */
		$.ajax({
			type: "get",
			url: $form.attr("action") + $form.serialize() + dataString,
			success: function(){}
		});
	},

	imagesHover: function() {
		$("#list_artists li a img, #artist_page ul.artists_series ul li a img, #artist_page ul.allatonce li a img").hover(function(){
			$(this).animate({opacity: 0.8},300);
		},function(){
			$(this).animate({opacity: 1},300);
		});		
	},

	detailpageThumbs: function() {
		$("#artist_page div.article_detail div.thumbs ul").hoverscroll({
			width: 354,
			height: 46,
			arrows: false
		});
		
		if($("#artist_page div.article_detail div.thumbs").length > 0)
		{
			$parent = $("#artist_page div.article_detail div.thumbs ul").parent();
			$thumbs = $("#artist_page div.article_detail div.thumbs ul li");
			$activeThumb = $("#artist_page div.article_detail div.thumbs ul li.active");
			count = $thumbs.length;
			activeIndex = $thumbs.index($activeThumb) +1;
			$parent.scrollLeft(72*(activeIndex - 3));
		}		
	},

	addToNoticeListClick: function() {
		$("#content a.addtonoticelist").click(function(){
			var $sender = $(this);
			var target = $sender.attr("href");
			$.ajax({
				type: "GET",
				dataType: "json",
				url: target + "&cl=cp_ajax&mode=addtonoticelist",
				beforeSend: function(){
					$sender.parent().parent().find("a.addtonoticelist").toggle();
					$sender.parent().parent().find("a.alreadyinnoticelist").toggle();
				},
				success: function(msg){}
			});
			return false;
		});
	},

	removeFromNoticeListClick: function() {
		$("#content a.removefromnoticelist").click(function(){
			var $sender = $(this);
			var target = $sender.attr("href");
			$.ajax({
				type: "GET",
				dataType: "json",
				url: target + "&cl=cp_ajax&mode=addtonoticelist",
				beforeSend: function(){
					if($sender.hasClass("innoticelist"))
					{
						$sender.parent().parent().parent().parent().parent().fadeOut(500, function(){
							$(this).remove();
						});
					}
					else
					{
						$sender.parent().parent().find("a.addtonoticelist").toggle();
						$sender.parent().parent().find("a.alreadyinnoticelist").toggle();				
					}
				},
				success: function(msg){}
			});
			return false;
		});
	},


	addAndRemoveLightboxClick: function() {
		$("#content a.addtolightbox, #content a.removefromlightbox").click(function(){
			var $sender = $(this);
			var target = $sender.attr("href");
			$.ajax({
				type: "GET",
				dataType: "json",
				url: target + "&cl=cp_ajax&mode=addtolightbox",
				beforeSend: function(){
					if($sender.hasClass("inlightbox"))
					{
						$sender.parent().parent().parent().parent().fadeOut(500,
							function(){
								$(this).remove();
								candela.lightboxSortable();
							});
					}
					else
					{
						$sender.parent().parent().find("a.removefromlightbox").toggle();
						$sender.parent().parent().find("a.addtolightbox").toggle();					
					}
				},
				success: function(msg){
					var dataObj = msg; //eval(' (' + msg + ') ');
					$("#header div.meta div.lightbox").replaceWith(dataObj.msg);
					if($sender.hasClass("addtolightbox"))
					{
						topPos = $(document).scrollTop();
						$hoverbox = $("#header div.meta div.lightbox div.hoverbox");
						if(topPos > 55)
							$hoverbox.css({top: (topPos-20) +"px"});	
						$hoverbox.fadeIn(500, function() {
							//$buttons.removeAttr("disabled");
							setTimeout(function(){$hoverbox.fadeOut(500, function(){$hoverbox.removeAttr("style");});},2000);
						});

					}
	   			}
			});
			return false;
		});
	},

	
	radioButtonClick: function() {
		$("#artist_page form.htmlform input[type=radio]").unbind("change").change(function(){
			$("#artist_page form.htmlform input[type=radio]").attr("checked", false);
			$(this).attr("checked", true);
			
		});
	},
	
	artistReadMore: function() {	
		$("a.readmore").click(function(){
			$(this).hide();
			$(this).parent().parent().find("a.readless").show();
			$(this).parent().parent().find("div.info").slideToggle();
			return false;
		});
	},
	
	artistReadLess: function() {	
		$("a.readless").click(function(){
			$(this).hide();
			$(this).parent().parent().find("a.readmore").show();
			$(this).parent().parent().find("div.info").slideToggle();
			return false;
		});
	},
	
	
	autoLabelClick: function () {
		$("input.autolabel, textarea.autolabel").unbind("focus").focus(function(){
			$(this).removeClass("notvalid");
			if($(this).val() == $(this).attr("title"))
				$(this).val("");
			$(this).next("label.hint").addClass("hintvisible");
		});
		$("input.autolabel, textarea.autolabel").unbind("blur").blur(function(){
			if($(this).val() == "")
				$(this).val($(this).attr("title"));
			else if($(this).hasClass("prename"))
			{
				$salutation = $(this).parent().parent().parent().parent().find("input.salutation");
				if($salutation.length > 0 && $($salutation[0]).val() == $($salutation[0]).attr("title"))
					$($salutation[0]).val( $($salutation[0]).attr("title").replace("...", $(this).val()) );
			}
			$(this).next("label.hint").removeClass("hintvisible");
		});		
	},
	
	basketItemDatePicker: function () {
		$(".basketItem input.date").datepicker({
			minDate: ctNavigation.minDate,
			showOn: "button",
			buttonImage: ctNavigation.dateIcon,
			buttonImageOnly: true
		});
	},
	
	
			
	addToBasket : function() {
		$("#artist_page div.article_detail form.ajaxform").unbind("submit").submit(function(){
			$sender = $(this);
			$buttons = $sender.find("button");
			$htmlforms = $("#artist_page div.article_detail form.htmlform");
			$activeform = false;
			$htmlforms.each(function(){
				if($(this).find("input[type=radio]:checked").length > 0)
				{
					$activeform = $(this);
					return false;
				}
			});
			
			if($activeform !== false)
			{
				$.ajax({
					type: "POST",
					dataType: "json",
					url: $sender.attr("action"),
					data: $activeform.serialize() + "&cl=cp_ajax&mode=addtobasket",
					beforeSend: function(){
						$("#ajaxerror").hide();
						$("#ajaxsuccess").hide();
						$buttons.addClass("loading");
						$buttons.attr("disabled","disabled");
					},
					complete: function(){
						$buttons.removeClass("loading");
						$buttons.removeAttr("disabled");						
					},
					error: function(jqXHR, textStatus, errorThrown){
						$("#ajaxerror").html(textStatus);
						$("#ajaxerror").show();
					},
					success: function(msg){
						var dataObj = msg;//eval('(' + msg + ')');
						//alert(dataObj.toSource());
						//return false;
						if(dataObj.success)
						{
							$("#ajaxsuccess").show();
							$smallbasket = $("#header div.basket");
							topPos = $(document).scrollTop();
							$smallbasket.html(dataObj.msg);
							candela.removeFromBasket();
							if(topPos > 55)
								$smallbasket.find("div.hoverbox").css({top: (topPos-20) +"px"});	
							$smallbasket.find("div.hoverbox").fadeIn(500, function() {
								//$buttons.removeAttr("disabled");
								setTimeout(function(){$smallbasket.find("div.hoverbox").fadeOut(500, function(){$smallbasket.find("div.hoverbox").removeAttr("style");});},2000);
							});
							
						}
						else
						{
							if(typeof(dataObj.msg) == "object" || typeof(dataObj.msg) == "array")
								$("#ajaxerror").html(dataObj.msg.toString());
							else
								$("#ajaxerror").html(dataObj.msg());
							$("#ajaxerror").show();
						}
		   			}
				});




			}
			return false;
		});
		
	},	

	removeFromBigBasket : function() {
		$("#basket_page button.removeBtnInline").unbind("click").click(function(){
			$sender = $(this);
			$form = $("#basketform");
			$parent = $sender.parent().parent();
			$sender.parent().find("input.removeCheckbox").attr("checked", true);
			$smallbasket = $("#header div.basket");	
			$bigbasket = $("#basket_page div.bigbasket");		

			$.ajax({
				type: "POST",
				dataType: "json",
				url: $form.attr("action"),
				data: $form.serialize() + "&cl=cp_ajax&mode=removefrombigbasket&removeBtn=1",
				beforeSend: function(){
					$parent.fadeOut("slow");
				},
				success: function(msg){
					var dataObj = msg; //eval('(' + msg + ')');
					$smallbasket.html(dataObj.smallbasket);
					$bigbasket.html(dataObj.bigbasket);
					if($bigbasket.find("div.msg").length > 0)
					{
						$("#basket_page div.steps button.de, #basket_page div.steps button.de").remove();
						$("#basket_page div.steps button.backtoshop").addClass("empty");	
					}
					candela.prepareBigBasket();
					candela.removeFromBigBasket();
					candela.updateBigBasket();
	   			}
			});
			return false;
		});
	},

	updateBigBasket : function() {
		$("#basket_page #basketform").unbind("submit").submit(function(){
			$sender = $(this);
			$form = $sender;
/*
			alert("xxx");
			return false;
*/
			
			$smallbasket = $("#header div.basket");	
			$bigbasket = $("#basket_page div.bigbasket");		

			$.ajax({
				type: "POST",
				dataType: "json",
				url: $form.attr("action"),
				data: $form.serialize() + "&cl=cp_ajax&mode=updatebigbasket&updateBtn=1",
				beforeSend: function(){
				},
				success: function(msg){
					var dataObj = msg;//eval('(' + msg + ')');
					$smallbasket.html(dataObj.smallbasket);
					$bigbasket.html(dataObj.bigbasket);
					candela.prepareBigBasket();
					candela.removeFromBigBasket();
					candela.updateBigBasket();
	   			}
			});
			return false;
		});
	},

	
	
	removeFromBasket : function() {
		$("#header div.basket div.hoverbox ul li form").unbind("submit").submit(function(){
			$sender = $(this);
			$parent = $sender.parent();
			$body = $sender.parent().parent().parent();
			//$body.remove();
			//return false;


			$.ajax({
				type: "POST",
				dataType: "json",
				url: $sender.attr("action"),
				data: $sender.serialize() + "&cl=cp_ajax&mode=removefrombasket",
				beforeSend: function(){
					$parent.fadeOut("slow");
				},
				success: function(msg){
					var dataObj = msg;//eval('(' + msg + ')');
					$("#header div.basket span.productscount").text(dataObj.productscount);
					$("#header div.basket span.productstotal").text(dataObj.productstotal);						
					$("#header div.basket div.hoverbox div.body").replaceWith(dataObj.basketbody);
					candela.removeFromBasket();
	   			}
			});
			return false;
		});
	},

    showhideblock: function(id,show){
        var _el = document.getElementById(id);
        if (_el) { _el.style.display=show?'block':'none';}
    },

    stateSelector: {

        fillStates: function  (countrySelectId, stateSelectId, divId, allStates, allStateIds, allCountryIds, statePromptString, selectedStateId) {

            var states = allStates[allCountryIds[document.getElementById(countrySelectId).options[document.getElementById(countrySelectId).selectedIndex].value]];
            var ids  = allStateIds[allCountryIds[document.getElementById(countrySelectId).options[document.getElementById(countrySelectId).selectedIndex].value]];

            var stateSelectObject = document.getElementById(stateSelectId);

            if(stateSelectObject == null) {
                return;
            }

            //add event handler to country select (this is important for the first time)
            document.getElementById(countrySelectId).onchange = function() {
                candela.stateSelector.fillStates(countrySelectId, stateSelectId, divId, allStates, allStateIds, allCountryIds, statePromptString, selectedStateId);
            };

            //remove all nodes
            if ( stateSelectObject.hasChildNodes() ) {
                while ( stateSelectObject.childNodes.length >= 1 ) {
                    stateSelectObject.removeChild( stateSelectObject.firstChild );
                }
            }

            //create blank prompt option
            var option = document.createElement('option');
                option.appendChild(document.createTextNode(statePromptString));
                option.setAttribute('value', '');
                stateSelectObject.appendChild(option);

            //fill options with states
            if (states != null) {
             var cCount = 0;
             for(var x = 0; x < states.length; x++) {
                cCount++;
                var option = document.createElement('option');
                option.appendChild(document.createTextNode(states[x]));
                option.setAttribute('value', ids[x]);
                stateSelectObject.appendChild(option);
                if (selectedStateId == ids[x]) {
                  stateSelectObject.selectedIndex = x+1;
                }
             }
            }

            candela.showhideblock(divId, states != null && states.length > 0);
        }
    },
    
    // Forms
    form: {

        // send
        send: function(form) {
            var _form = document.forms[form];
            if(_form) { _form.submit(); }
        },

        // submits form + changes cl, fnc, formReload values
        reload: function(stop,form,cl,fnc) {
            if(stop) { return; }
            var _form = document.forms[form];
            if(_form) {
                _form.elements.cl.value  = cl;
                _form.elements.fnc.value = fnc;
                _form.submit();
            }
        },

        // clears form values using given regex on fileld name
        clear: function(stop,form,pattern) {
            if(stop) { return; }
            var _fields = document.forms[form].elements, i;
            if(_fields) {
                for (i=0;i<_fields.length;i++) {
                    if( pattern.test(_fields[i].name) ) {
                        if( _fields[i].tagName.toUpperCase() === 'INPUT' ){ _fields[i].value = ""; }
                        if( _fields[i].tagName.toUpperCase() === 'SELECT'){ _fields[i].item(0).selected = true;}
                    }
                }
            }
        },

        select: function(id,value) {
            var _el = document.getElementsByName(id);
            if(_el) { _el[value].checked='true'; }
        },

        set: function(id, value, blset) {
            var _el = document.getElementsByName(id);
            if (_el) {
                _el.value = value;
            }
        }

    }
    
    
    
}

jQuery.fn.fadeToggle = function(speed, easing, callback) { 
   return this.animate({opacity: 'toggle'}, speed, easing, callback); 
}; 

