
var GiftCards = {
	
	maxCards: 8,
	minCards: 2,
	quantity: 2,
	msgMaxLen: 300,
	selectedCard: 1,
	timer: null,
	delay: .5,
	selectedMainImage: 2,    
	crCount: 0,
	
	initCards: function() {
		// Main Design image
		$('designLink-1').observe('click', GiftCards.Events.swapMainImage);
		$('designLink-2').observe('click', GiftCards.Events.swapMainImage);
		$('designLink-3').observe('click', GiftCards.Events.swapMainImage);
		
		// setup observers for different events that user does
		for(var i = 1; i <= GiftCards.maxCards; i++) {
			$('cardIcon-'+i).observe('click', GiftCards.Events.cardClicked);			
		}
		$('quantityInput').observe('change', GiftCards.Events.quantityChanged);
		$('uniqueInput').observe('click', GiftCards.Events.uniqueChanged);
		GiftCards.quantity = GiftCards.minCards;
		GiftCards.toggleUniqueMessages();
		$('giftMessageInput').focus();
		$('giftMessageInput').onkeypress = function(event) {  
			GiftCards.crCount = $('giftMessageInput').value.split(/[\r\n]/g).length - 1;    		
			if(GiftCards.crCount > 7) {
				if(event.keyCode == Event.KEY_RETURN) {
					//$('giftMessageInput').value = $('giftMessageInput').value.substr(0, $('giftMessageInput').value.length-1); 
					return false;
				} 
				//alert("There are " + (GiftCards.crCount) + " cr's in the string"); 
				$('giftMessageInput').value = $('giftMessageInput').value.trim();
				//return false;
			} 			
		}     	
		GiftCards.Events.checkGiftInput();
	},
	
	Events: {
		cardClicked: function(event) {
			$('giftMessageInput').focus();
			var clickedCard = Event.element(event); // the node that was clicked on
			var clickedNum = clickedCard.id.split("-")[1];
			// remove selected from currently selected
			$('card-'+GiftCards.selectedCard).removeClassName('selected');
			// change icon to selected
			$('card-'+clickedNum).addClassName('selected');
			GiftCards.selectedCard = clickedNum;
			// load msg value into lower textarea
			$('giftMessageInput').value = $('msg-'+clickedNum).value;
			if(GiftCards.timer) clearTimeout(GiftCards.timer);
			GiftCards.Events.checkGiftInput();  
			// put cursor at the bottom of input
			GiftCards.setCaretPosition('giftMessageInput', $('giftMessageInput').value.length);
		},	
		quantityChanged: function(event) {
			GiftCards.toggleUniqueMessages();
		},
		uniqueChanged: function(event) {
			GiftCards.toggleCardContainer();
			if($('uniqueInput').checked) {   
				GiftCards.toggleCards();
			}
		},
		checkGiftInput: function() {
			var giftMsg = $('giftMessageInput').value;	  		
			var validatedMsg = giftMsg.substr(0, GiftCards.msgMaxLen);
			$('msg-'+GiftCards.selectedCard).value = validatedMsg;	
			if(giftMsg.length > GiftCards.msgMaxLen) {
				$('giftMessageInput').value = validatedMsg;  
				GiftCards.setCaretPosition('giftMessageInput', validatedMsg.length);				
			}	   
			$('remaining').innerHTML = GiftCards.msgMaxLen - validatedMsg.length;		

			if($('msg-'+GiftCards.selectedCard).value.length > 0) {
				$('cardIcon-'+GiftCards.selectedCard).addClassName('edited');
			} else {
				$('cardIcon-'+GiftCards.selectedCard).removeClassName('edited');
			}
			GiftCards.timer = setTimeout(GiftCards.Events.checkGiftInput, GiftCards.delay * 1000);
		},
		swapMainImage: function(event) {
			var imageNum = parseInt(Event.element(event).id.split("-")[1]);
			var selectedNum = parseInt(GiftCards.selectedMainImage);
			if(selectedNum != imageNum) {			
				new Effect.Opacity('mainDesignImage', { from: 1.0, to: 0.0, duration: .6, afterFinish: function() { 
					$('design-'+selectedNum).removeClassName('selected');
					$('design-'+imageNum).addClassName('selected');
					$('mainDesignImage').src = "/images/gift_cards/designlg-"+imageNum+".png";
					for(var i = 1; i <= GiftCards.maxCards; i++) {	
						if($('cardIcon-'+i).visible()) {
							$('cardIcon-'+i).removeClassName('cardIcon-'+selectedNum);
							$('cardIcon-'+i).addClassName('cardIcon-'+imageNum);
						}									
					}						
					new Effect.Opacity('mainDesignImage', { from: 0.0, to: 1.0, duration: .6 }); 
				}});
				$('card_design').value = imageNum;
				GiftCards.selectedMainImage = imageNum;
			} 
		}				
	},
	
	setCaretPosition: function(elemId, caretPos) {
	    var elem = $(elemId);

	    if(elem != null) {
	        if(elem.createTextRange) {
	            var range = elem.createTextRange();
	            range.move('character', caretPos);
	            range.select(); 
	        } else {
	            if(elem.selectionStart) {
	                elem.focus();
	                elem.setSelectionRange(caretPos, caretPos);
	            } else {
	                elem.focus();
				}
	        } 
			elem.scrollTop = elem.scrollHeight; 
	    }
	},	
	
	toggleCards: function() {
		//if($('uniqueInput').checked && $('quantityInput').value > 1) {
			var formQty = parseInt($('quantityInput').value);
			var curQty = parseInt(GiftCards.quantity);
			//alert('curQty:'+curQty+' <= formQty:'+formQty);
			if(curQty <= formQty) {
				for(var i = 1; i <= formQty; i++) {
					if(!$('card-'+i).visible()) {
						$('card-'+i).appear({ duration: 1.2 });
					}					
				}
			} else {	
				for(var i = GiftCards.maxCards; i > formQty; i--) {
					if($('card-'+i).visible()) {
						$('card-'+i).fade({ duration: 1.2 });
					}					
				}
			}
		//}
	},
	
	toggleUniqueMessages: function() {
		if($('quantityInput').value > 1) {
			$('uniqueMessages').appear({ duration: 1.0 });
			GiftCards.toggleCardContainer();
			GiftCards.toggleCards();
			GiftCards.quantity = $('quantityInput').value;			
		} else {
			$('uniqueMessages').fade({ duration: 1.0 });
			GiftCards.resetCards();
			GiftCards.toggleCardContainer();
		}	
	},
	
	toggleCardContainer: function() {   
		if($('uniqueInput').checked) {
			$('cardcontainer').appear({ duration: 1.0 });
			for(var i = 1; i <= GiftCards.maxCards; i++) {
				$('card-'+i).removeClassName('selected');			
			}	
			$('card-1').addClassName('selected');	
			if(GiftCards.selectedCard) {
				GiftCards.selectedCard = 1;
			}			
		} else {  
			GiftCards.toggleCards();
			$('cardcontainer').fade({ duration: 1.0 });	
			$('giftMessageInput').value = $('msg-1').value;			
		}		
	},
	
	resetCards: function() {
		$('uniqueInput').checked = false;			
		GiftCards.quantity = GiftCards.minCards;
		$('quantityInput').value = 1;
		$('giftMessageInput').value = $('msg-1').value;		
		for(var i = 1; i <= GiftCards.maxCards; i++) {
			$('card-'+i).removeClassName('selected');			
		}	
		$('card-1').addClassName('selected');	
		GiftCards.selectedCard = 1;	  	
	}
		
};


var GiftCert = {
	msgMaxLen: 60,
	error: null,
	init: function() {
		$('message').observe('keyup', GiftCert.Events.processMessageBox);
		$('message').observe('blur', GiftCert.Events.processMessageBox);
		$('message').value = $('message').value.substr(0, GiftCert.msgMaxLen);
		$('remaining').innerHTML = GiftCert.msgMaxLen - $('message').value.length; 
		$('message').onkeypress = killEnter;
	},
	Events: {
		processMessageBox: function() {
			var message = $('message').value;
			$('message').value = message.substr(0, GiftCert.msgMaxLen);
			if(message.length <= GiftCert.msgMaxLen) {
				$('remaining').innerHTML = GiftCert.msgMaxLen - message.length;
			} else {
				$('remaining').innerHTML = GiftCert.msgMaxLen - $('message').value.length;		
			}
		}
	}
}; 


var CartGift = {
	
	downDuration: .5,
	upDuration: .2,
	giftTypes: new Array(),
	saveButtonImg: "/images/gift_cards/save_note.png",
	spinnerImg: "/images/gift_cards/spinner.gif",
	
	addGiftType: function(id, type) {
		this.giftTypes[id] = type;
	},
	
	showGiftNoteBox: function(id) {
		if(!$('giftNoteBox'+id).visible()) {			
			Effect.BlindUp('giftNoteText'+id, { duration: this.upDuration });
			//, transition: Effect.Transitions.Bounce
			Effect.BlindDown('giftNoteBox'+id, { duration: this.downDuration, afterFinish: function() {
				CartGift.adjustBoxHeight(id);
			}});			
			$('giftNoteLinkDiv'+id).hide();
			$('giftNoteInput_'+id).observe('keyup', CartGift.Events.checkNote);
			$('giftNoteInput_'+id).observe('blur', CartGift.Events.checkNote);    
			$('giftNoteInput_'+id).onkeypress = function(event) {  
				GiftCards.crCount = $('giftNoteInput_'+id).value.split(/[\r\n]/g).length - 1;    		
				if(GiftCards.crCount > 7) {
					if(event.keyCode == Event.KEY_RETURN) {
						//$('giftMessageInput').value = $('giftMessageInput').value.substr(0, $('giftMessageInput').value.length-1); 
						return false;
					} 
					//alert("There are " + (GiftCards.crCount) + " cr's in the string"); 
					$('giftNoteInput_'+id).value = $('giftNoteInput_'+id).value.trim();
					//return false;
				} 			
			}			
		} else {
			Effect.BlindUp('giftNoteBox'+id, { duration: this.upDuration });
			var showTextBox = false;
			if(CartGift.isGiftCert(id)) {
				if($('giftNoteOld'+id).value != '' || $('giftToOld'+id).value != '' || $('giftFromOld'+id).value != '') {
					showTextBox = true;
				}
			} else if($('giftNoteOld'+id).value != '') {
				showTextBox = true;
			}
			if(showTextBox) { 
				Effect.BlindDown('giftNoteText'+id, { duration: this.upDuration });	
			}
			$('giftNoteLinkDiv'+id).style.display = 'inline';
		}				
	},
	
	Events: {
		checkNote: function(event) {	
			var id = parseInt(Event.element(event).id.split("_")[1]);   		
			CartGift.adjustBoxHeight(id);
			var maxLen = CartGift.noteMaxLen(id);
			Event.element(event).value = Event.element(event).value.substr(0, maxLen+1);		
		}		
	},
	
	adjustBoxHeight: function(id) {
		if(!CartGift.isGiftCert(id)) {
			if(!$('giftNoteInput_'+id).style.height) {
				$('giftNoteInput_'+id).style.height = $('giftNoteInput_'+id).scrollHeight - ((CartGift.isIE())?0:2) + "px";
			}
			//var noteLen = $('giftNoteInput_'+id).value.length;
			if($('giftNoteInput_'+id).style.height != $('giftNoteInput_'+id).scrollHeight) {
				$('giftNoteInput_'+id).style.height = '60px';
				$('giftNoteInput_'+id).style.height = $('giftNoteInput_'+id).scrollHeight - ((CartGift.isIE())?0:0) + "px";
			}
			//$('giftNoteInput_'+id).style.height = '150px';
		} else {
			$('giftNoteInput_'+id).style.height = '60px';  
			$('giftNoteInput_'+id).onkeypress = killEnter;
		}
	},
		
	saveNote: function(id) {		
		$('saveButton'+id).src = CartGift.spinnerImg;
		var isGiftCert = CartGift.isGiftCert(id);
		var certParams = '';
		if(isGiftCert) {
			certParams = '&t='+encodeURIComponent($('giftTo'+id).value)+'&f='+encodeURIComponent($('giftFrom'+id).value);
		}
		new Ajax.Request('/cart/ajax_save_note/'+id+'?m='+encodeURIComponent($('giftNoteInput_'+id).value) + certParams, {
			onComplete: function() {				
				if((!isGiftCert && $('giftNoteInput_'+id).value == '') || (isGiftCert && $('giftNoteInput_'+id).value == '' && $('giftTo'+id).value == '' && $('giftFrom'+id).value == '')) {
					$('giftMsgLink'+id).innerHTML = "Add";	
				} else {
					$('giftMsgLink'+id).innerHTML = "Edit";
				}				
				$('giftNoteText'+id).innerHTML = $('giftNoteInput_'+id).value.nl2br();
				$('giftNoteOld'+id).value = $('giftNoteInput_'+id).value;
				if(CartGift.isGiftCert(id)) {
					$('giftToOld'+id).value = $('giftTo'+id).value;
					$('giftFromOld'+id).value = $('giftFrom'+id).value;
			        var html = "<div style=\"padding-bottom:5px\">";
			            html += "	To: "+$('giftTo'+id).value+"<br>";
			            html += "	From: "+$('giftFrom'+id).value;
						html += "</div>";
			        	html += $('giftNoteInput_'+id).value.nl2br();
					$('giftNoteText'+id).innerHTML = html;
				}
				CartGift.showGiftNoteBox(id);
				$('saveButton'+id).src = CartGift.saveButtonImg;
			}
		});
	},

	cancelNote: function(id) {
		this.showGiftNoteBox(id);
		$('giftNoteInput_'+id).value = $('giftNoteOld'+id).value;
		if(CartGift.isGiftCert(id)) {
			$('giftTo'+id).value = $('giftToOld'+id).value;
			$('giftFrom'+id).value = $('giftFromOld'+id).value;
		}
	},
	
	isGiftCert: function(id) {
		return CartGift.giftTypes[id] == 'cert' ? true : false;
	},
	
	noteMaxLen: function(id) {
		return CartGift.isGiftCert(id) ? GiftCert.msgMaxLen : GiftCards.msgMaxLen;
	},
	
	isIE: function() {
		if((navigator.userAgent.indexOf("IE") == -1) || (navigator.userAgent.indexOf("Windows") == -1)) {
			return false;		
		} else {
			return true;
		}	
	}
	
};


var ShipmentGiftMessage = {
    msgMaxLen: 200,
	downDuration: .5,
	upDuration: .2,  
	giftMsgs: new Array(),
	saveButtonImg: "/images/gift_cards/save_note.png",
	spinnerImg: "/images/gift_cards/spinner.gif",

	showGiftNoteBox: function(id) {  
		if(!$('shipment_gift_message_box_'+id).visible()) {			
			Effect.BlindUp('shipment_gift_message_text_'+id, { duration: this.upDuration });
			//, transition: Effect.Transitions.Bounce                                                                 			
			Effect.BlindDown('shipment_gift_message_box_'+id, { duration: this.downDuration, afterFinish: function() {			    
				ShipmentGiftMessage.adjustBoxHeight(id);
			}});  
			$('gift_message_link_div_'+id).hide();   
			$('shipment_gift_message_input_'+id).value = $('shipment_gift_message_text_'+id).innerHTML.trim();		
			$('shipment_gift_message_input_'+id).observe('keyup', ShipmentGiftMessage.Events.checkNote);
			$('shipment_gift_message_input_'+id).observe('blur', ShipmentGiftMessage.Events.checkNote);    
			$('shipment_gift_message_input_'+id).onkeypress = function(event) {  
				ShipmentGiftMessage.crCount = $('shipment_gift_message_input_'+id).value.split(/[\r\n]/g).length - 1;    		
				if(ShipmentGiftMessage.crCount > 7) {
					if(event.keyCode == Event.KEY_RETURN) {
						return false;
					} 
					$('shipment_gift_message_input_'+id).value = $('shipment_gift_message_input_'+id).value.trim();
					//return false;
				} 			
			}			
		} else {
			Effect.BlindUp('shipment_gift_message_box_'+id, { duration: this.upDuration });
			if($('shipment_gift_message_text_'+id).innerHTML != '') {
			    Effect.BlindDown('shipment_gift_message_text_'+id, { duration: this.upDuration });
			} 
			$('gift_message_link_div_'+id).style.display = 'inline';
		}				
	},

	Events: {
		checkNote: function(event) {	
			var id = parseInt(Event.element(event).id.split("shipment_gift_message_input_")[1]); 		
			ShipmentGiftMessage.adjustBoxHeight(id);
			var maxLen = ShipmentGiftMessage.msgMaxLen;
			Event.element(event).value = Event.element(event).value.substr(0, maxLen+1);		
		}		
	},

	adjustBoxHeight: function(id) {
		if($('shipment_gift_message_input_'+id) != null) {  
			if(!$('shipment_gift_message_input_'+id).style.height) {
				$('shipment_gift_message_input_'+id).style.height = $('shipment_gift_message_input_'+id).scrollHeight - ((ShipmentGiftMessage.isIE())?0:2) + "px";
			}
			//var noteLen = $('shipment_gift_message_input_'+id).value.length;
			if($('shipment_gift_message_input_'+id).style.height != $('shipment_gift_message_input_'+id).scrollHeight) {
				$('shipment_gift_message_input_'+id).style.height = '60px';
				$('shipment_gift_message_input_'+id).style.height = $('shipment_gift_message_input_'+id).scrollHeight - ((ShipmentGiftMessage.isIE())?0:0) + "px";
			}
			//$('shipment_gift_message_input_'+id).style.height = '150px';
		} 
	},

	saveNote: function(id) {		
		$('saveButton'+id).src = ShipmentGiftMessage.spinnerImg;  
		ShipmentGiftMessage.giftMsgs[id] = $('shipment_gift_message_input_'+id).value;
		new Ajax.Request('/checkout/confirm/ajax_save_gift_message/'+id+'?m='+encodeURIComponent($('shipment_gift_message_input_'+id).value), {
			onComplete: function(transport) {      
				if($('shipment_gift_message_input_'+id).value == '') {
					$('gift_message_link_'+id).innerHTML = "Add";	
				} else {
					$('gift_message_link_'+id).innerHTML = "Edit";
				}			     			      				
				$('shipment_gift_message_text_'+id).innerHTML = $('shipment_gift_message_input_'+id).value;
				ShipmentGiftMessage.showGiftNoteBox(id);
				$('saveButton'+id).src = ShipmentGiftMessage.saveButtonImg; 
			}
		});
	}, 
   
	cancelNote: function(id) {       
	    ShipmentGiftMessage.showGiftNoteBox(id); 
	},

	isIE: function() {
		if((navigator.userAgent.indexOf("IE") == -1) || (navigator.userAgent.indexOf("Windows") == -1)) {
			return false;		
		} else {
			return true;
		}	
	}

};


function killEnter(e) {
	var pressedKey = e ? e.which : window.event.keyCode;
	return pressedKey != 13;  
}  

