
$(window).addEvent('domready', function(){ initShop(); initPlugins(); } );

//GLOBAL VARIABLES (Some of them are used only to reduce calls to '$ function' to improve javascript performance)
var shop = {};
shop.url = location.protocol +'//'+ location.host;
//NO MORE VARIABLES

function initShop()
{
	initBuyForms();
	initLoginForms();
	initAsyncBasket();
	initQuestion();
	initAlert();
	initCheckout();
	initSearchForms();
	if($('userInformationForm'))
	{
		initFormFields("userInformationForm");
		$('userInformationForm').addEvent('submit', function()
				{
					if( Spry.Widget.Form.validate($('userInformationForm')) )
					{
						Spry.Utils.submitForm('userInformationForm', validateAccountNewUser , null , false);
					}
				}
);
	}
}



function initLoginForms()
{
	$$('.loginForm').each(
											function(form)
											{
													initFormFields(form);
													form.addEvent('submit', function()
																													{
																														//overwrite form action
																														this.action = shop.url + '/ajaxTemplates/checkoutActions.cfm?action=login';
																														//autoDragImage(this);
																														if( Spry.Widget.Form.validate(this) )
																														return Spry.Utils.submitForm(this, validateLogin);
																													}
													);
											}
	);
}

function initSearchForms()
{
	var buyForm;
	
	buyForm = $('searchAllForm');
	if(buyForm)
	{
		buyForm.removeEvents();
		buyForm.addEvent('submit', function()
																		{
																			return Spry.Utils.submitForm(this, loadSearchAll );
																		}
		);
	}
	
	buyForm = $('searchProductsForm');
	if(buyForm)
	{
		buyForm.removeEvents();
		buyForm.addEvent('submit', function()
																		{
																			return Spry.Utils.submitForm(this, loadSearchProducts );
																		}
		);
	}
	
	buyForm = $('searchCategoriesForm');
	if(buyForm)
	{
		buyForm.removeEvents();
		buyForm.addEvent('submit', function()
																		{
																			return Spry.Utils.submitForm(this, loadSearchCategories );
																		}
		);
	}
	
	buyForm = $('searchPagesForm');
	if(buyForm)
	{
		buyForm.removeEvents();
		buyForm.addEvent('submit', function()
																		{
																			return Spry.Utils.submitForm(this, loadSearchPages );
																		}
		);
	}
	
	buyForm = $('searchNewsForm');
	if(buyForm)
	{
		buyForm.removeEvents();
		buyForm.addEvent('submit', function()
																		{
																			return Spry.Utils.submitForm(this, loadSearchNews );
																		}
		);
	}
	
}
function loadSearchAll(req)
{
	$('searchAllContainer').innerHTML = req.xhRequest.responseText;
	initBuyForms();
	initSearchForms();

}
function loadSearchProducts(req)
{
	$('searchProductsContainer').innerHTML = req.xhRequest.responseText;
	initBuyForms();
	initSearchForms();
}
function loadSearchCategories(req)
{
	$('searchCategoriesContainer').innerHTML = req.xhRequest.responseText;
	initBuyForms();
	initSearchForms();
}
function loadSearchPages(req)
{
	$('searchPagesContainer').innerHTML = req.xhRequest.responseText;
	initBuyForms();
	initSearchForms();
}
function loadSearchNews(req)
{
	$('searchNewsContainer').innerHTML = req.xhRequest.responseText;
	initBuyForms();
	initSearchForms();
}

function initBuyForms()
{
	$$('.buyForm').each(
	function(form)
	{
			getStockByCombination(form);
			initFormFields(form);
			form.addEvent('submit', function()
					{
						//overwrite form action
						this.action = shop.url + '/ecommerce/basket/asyncBasket.cfm';
						//autoDragImage(this);
						if( Spry.Widget.Form.validate(this) )
						{
							return Spry.Utils.submitForm(this, reloadMiniBaskets );
						}
					}
			);
	}
	);
}

function initLoginForms()
{
	$$('.loginForm').each(
											function(form)
											{
													initFormFields(form);
													form.addEvent('submit', function()
																													{
																														//overwrite form action
																														this.action = shop.url + '/ajaxTemplates/checkoutActions.cfm?action=login';
																														//autoDragImage(this);
																														if( Spry.Widget.Form.validate(this) )
																														{
																															return Spry.Utils.submitForm(this, validateLogin);
																														}
																													}
													);
											}
	);
}

function initAsyncBasket()//init vertical movement, transition... of the minibasket
{
	shop.basketDiv = $('asyncBasketFloater');
	//shop.basketDiv.movement = new Fx.Tween( shop.basketDiv , 'top', {duration:20, transition:new Fx.Transition(Fx.Transitions.linear) } );
	shop.basketDiv.style.top = '180px';
	
	window.addEvent('scroll', function()
										{
												shop.basketDiv.style.top = 180 + document.documentElement.scrollTop + 'px';
												//shop.basketDiv.movement.start('top', parseInt(shop.basketDiv.style.top), 180 + document.documentElement.scrollTop );
										}
	);
	
	shop.asyncBasketBox = $('asyncBasketBox');
	shop.asyncBasketBox.transition = new Fx.Tween( shop.asyncBasketBox , 'opacity', {duration:700, transition:new Fx.Transition(Fx.Transitions.linear) } );
}

function initAlert()//init vertical movement, transition... of the minibasket
{
	shop.alertDiv = $('alertFloater');
	//shop.basketDiv.movement = new Fx.Tween( shop.basketDiv , 'top', {duration:20, transition:new Fx.Transition(Fx.Transitions.linear) } );
	shop.alertDiv.style.top = '180px';
	
	window.addEvent('scroll', function()
										{
												shop.alertDiv.style.top = 180 + document.documentElement.scrollTop + 'px';
												//shop.basketDiv.movement.start('top', parseInt(shop.basketDiv.style.top), 180 + document.documentElement.scrollTop );
										}
	);
	
	shop.alertBox = $('alertBox');
	shop.alertBox.transition = new Fx.Tween( shop.alertBox , 'opacity', {duration:700, wait:true , transition:new Fx.Transition(Fx.Transitions.linear) } );
	
	shop.cuteAlert = new cuteAlert();
}

function initQuestion(){
	shop.questionBox = $('questionBox');
	shop.questionBox.transition = new Fx.Tween( shop.questionBox , 'opacity', {duration:700, wait:true , transition:new Fx.Transition(Fx.Transitions.linear) } );
	shop.cuteQuestion = new cuteQuestion();
}


function hideAsyncBasket()
{
	
	shop.asyncBasketBox.transition.start('opacity',1,0);
}

var reloadMiniBaskets = function(req)
{
	//reload asyncBasket
	/*$('asyncBasket').innerHTML = req.xhRequest.responseText;
	shop.asyncBasketBox.transition.set('opacity',0);
	shop.asyncBasketBox.transition.start('opacity',0,1);*/
	//reload minibasket
	Shadowbox.open({
        player:     'html',
        content:    req.xhRequest.responseText,
				title: 			languageSheet.lblHeaderTitle,
        width:      500,
				height: 		300
    },
		{
			animate: false
		}
		);
	ajaxLoad(shop.url+ '/ajaxTemplates/basket.cfm', $('minibasket'), '' , '');
	
}

/*****to validate gift code******/
function validateGiftCode(req)
{
	var url = shop.url+'/ajaxTemplates/checkoutActions.cfm?action=giftCode';
	var useGiftCodeCheck = document.getElementById('useGiftCodeCheckbox');
	var giftCode = document.getElementById('giftCodeTextBox').value;
	var useGiftCode = 0;
	if(useGiftCodeCheck && useGiftCodeCheck.checked) useGiftCode = 1;
	
	url += '&useGiftCode='+useGiftCode;
	url += '&giftCode='+giftCode;
	
	var responseText = ajaxLoadSync(url);
	
	var objResponse = eval('(' + responseText + ')');
	
	if( objResponse.ERROR )
	{
		switch (objResponse.ERROR)
		{
			case 'TLG1201':
				shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblCodeNotFound,0,0);
				break;
			case 'TLG1202':
				shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblErrorReadingCodes,0,0);
				break;
			case 'TLG1203':
				shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblCodeInUse,0,0);
				break;
			case 'TLG1204':
				shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblCodeInOtherSession,0,0);
				break;
		}
	}
	else
	{
		shop.cuteAlert.addMessage(languageSheet.lblValidCode, languageSheet.lblValidCode,0,0);
		location.reload();
		/*ajaxLoad(shop.url+'/ajaxTemplates/giftCode.cfm', $('giftCodeBox') );
		if( $('totalBasket') )
			ajaxLoad(shop.url+'/ajaxTemplates/basket/totalsBasket.cfm', $('totalBasket') );*/
	}
}


//checkout initialization
var initCheckout = function()
{
	var titleDivs = $$('.checkoutTitle');
	shop.checkoutAccordion = new Accordion( titleDivs , $$('.checkoutContent'), {opacity:false, hideAll:true, show:100 , onActive:function(){ return; } } );
	titleDivs.each(
								 	function(el){ el.removeEvents('click'); el.addEvent('click', function(el){ var ev = new Event(el); ev.stop(); return false; } ); }
								 );
}

function autoDragImage(form)
{
	var images = form.getElements('img.mainProductImage');
	if(!images.length) return;
	
	var image = images[0]; //get the 1st image from the product
	
	var imageClone = image.clone(false, false);
	
	imageClone.style.position = 'absolute';
		
	imageClone.setStyles(image.getCoordinates());
	document.body.appendChild(imageClone);
	
	imageClone.transition = new Fx.Tween( imageClone , 'top', {duration:'long', fps:10, transition:new Fx.Transition(Fx.Transitions.Sine.easeInOut) } );
	imageClone.transition2 = new Fx.Tween( imageClone , 'left', {duration:'long', fps:10, transition:new Fx.Transition(Fx.Transitions.Sine.easeInOut) } );
	
	imageClone.transition.start('top', parseInt(image.getCoordinates().top) , parseInt($('basketContentModuleC').getCoordinates().top) );
	imageClone.transition2.start('left', parseInt(image.getCoordinates().left) , parseInt($('basketContentModuleC').getCoordinates().left) );
	
}

function addToWishList(productId){
	var response;
	response = ajaxLoadSync(shop.url + '/ajaxTemplates/wishlistActions.cfm?id='+productId);
	var objResponse = eval('(' + response + ')');
	if(objResponse.USERID == 0)
		shop.cuteAlert.addMessage(languageSheet.lblWishlist, languageSheet.lblRequiredSignIn, 0, 0);
	else
		shop.cuteAlert.addMessage(languageSheet.lblWishlist, languageSheet.lblAddedToWishlist, 0, 0);
}

function getStockByCombination(form)
{
	var element;
	var formParams = new Array();
	
	for (var i = 0; i < form.elements.length; i++ )
	{
		element = form.elements[i];
		if( element.getAttribute('affectsstock') && element.getAttribute('affectsstock') == 1 )
		{
			formParams.push(encodeURIComponent(element.name) + '=' + encodeURIComponent(element.value));
		}
		else if(element.name.toUpperCase() == 'PRODUCTID')
		{
			formParams.push(encodeURIComponent(element.name) + '=' + encodeURIComponent(element.value));
			el = document.getElementById('addProduct'+element.value );
			el.style.display = 'none';
			var loadingImage = document.createElement('img');
			loadingImage.src = shop.url + '/ecommerce/images/icons/smallLoading.gif';
			loadingImage.id = 'loadingImage' + element.value;
			el.parentNode.appendChild(loadingImage);
		}
	}
	formParams = formParams.join("&");
	
	var frmOpts = {};
	frmOpts.method = 'POST';
	frmOpts.url = shop.url + '/ajaxTemplates/checkStockByCombination.cfm';
	frmOpts.headers = {};
	frmOpts.headers['Content-Type'] = 'application/x-www-form-urlencoded';
	frmOpts.postData = formParams;
	
	Spry.Utils.loadURL('post', frmOpts.url, true, setStockByCombination, frmOpts);
}
function setStockByCombination(response)
{
	var objResponse = eval('(' + response.xhRequest.responseText + ')');
	var productId = parseInt(objResponse.PRODUCTID);
	var buyButton = document.getElementById('addProduct'+productId );
	var stock = parseInt(objResponse.STOCK);
	
	if( stock == 0 )
	{
		//no stock
		if(objResponse.ALLOWRESERVE)
		{
			//allow reserve
			if(buyButton.className != "prodDetailBuyButton")
				buyButton.value = languageSheet.lblReserve;
			buyButton.disabled = false;
		}
		else
		{
			//disallow buy
			if(buyButton.className != "prodDetailBuyButton")
				buyButton.value = languageSheet.lblInexistentCombination;
			buyButton.disabled = true;
		}
	}
	else if( stock == -1 )
	{
		//disallow buy
		if(buyButton.className != "prodDetailBuyButton")
			buyButton.value = languageSheet.lblInexistentCombination;
		buyButton.disabled = true;
	}
	else
	{
		//stock available	
		if(buyButton.className != "prodDetailBuyButton")
			buyButton.value = languageSheet.lblBuy;
		buyButton.disabled = false;
	}
	
	$('loadingImage' + productId).destroy();
	buyButton.style.display = '';
}

/**CHECKOUT FUNCTIONS************************/
function checkoutOptionSelected(field)
{
	field = $(field);
	
	if(field.value && field.value.length && field.value != 0)
		return true;
	else
		return false;
}

function validateAccount(req) //gets the response of the customer form and sends an error message or calls next screen.
{
	var objResponse = eval('(' + req.xhRequest.responseText + ')');
	
	if( objResponse.ERROR )
		{
			switch (objResponse.ERROR)
			{
				case 'TLG1000':
				case 'TLG1001':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblUserNotFound,0,0);
					break;
				case 'TLG1002':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblDifferentPassword,0,0);
					break;
				case 'TLG1003':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblEmailInUse,0,0);
					break;
				case 'TLG1004':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblDifferentEmail,0,0);
					break;
			}
		}
	else
		{
			if( objResponse.ACTION == 'login' )
			{
				location.reload();	
			}
			else
			{
				loadNextCheckoutScreen(1, shop.url+'/ajaxTemplates/paymentMethod.cfm' , $('paymentMethodBox') );
			}
		}
}

function validateAccountNewUser(req) //gets the response of the customer form and sends an error message or calls next screen.
{
	
	var objResponse = eval('(' + req.xhRequest.responseText + ')');
	
	if( objResponse.ERROR )
		{
			switch (objResponse.ERROR)
			{
				case 'TLG1000':
				case 'TLG1001':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblUserNotFound,0,0);
					break;
				case 'TLG1002':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblDifferentPassword,0,0);
					break;
				case 'TLG1003':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblEmailInUse,0,0);
					break;
				case 'TLG1004':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblDifferentEmail,0,0);
					break;
			}
		}
	else{
//			loadNextCheckoutScreen(1, shop.url+'/users/userControlPanel.cfm' , $('shippingMethodBox') );
			window.location = shop.url+'/ecommerce/users/userControlPanel.cfm';
		}
}
/*
function validateAccountNewUser(req)
{
	var objResponse = eval('(' + req.xhRequest.responseText + ')');
	
	if( objResponse.ERROR )
		{
			shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblError,0,0);
		}
	else{
			window.location = shop.url+'/ecommerce/users/userControlPanel.cfm';
		}
}

function validateMKAccountNewUser(req)
{
	var objResponse = eval('(' + req.xhRequest.responseText + ')');
	
	if( objResponse.ERROR )
		{
			shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblError,0,0);
		}
	else{
			window.location = shop.url+'/registerComplete.cfm';
		}
}
*/
function validateLogin(req) //gets the response of the customer form and sends an error message or calls next screen.
{
	var objResponse = eval('(' + req.xhRequest.responseText + ')');
	
	if( objResponse.ERROR )
		{
			switch (objResponse.ERROR)
			{
				case 'TLG1000':
				case 'TLG1001':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblUserNotFound,0,0);
					break;
				case 'TLG1002':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblDifferentPassword,0,0);
					break;
				case 'TLG1003':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblEmailInUse,0,0);
					break;
				case 'TLG1004':
					shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblDifferentEmail,0,0);
					break;
			}
		}
	else
		{
				location.href = shop.url+'/ecommerce/users/userControlPanel.cfm';	
		}
}

function loadNextCheckoutScreen(index, path, targetDiv, callBack )
{
	ajaxLoading = "<img src='" + shop.url + "/ecommerce/images/icons/smallLoading.gif'>";

	ajaxLoad(shop.url+'/ajaxTemplates/checkoutBasket.cfm', $('checkoutBasketDiv'), '', ajaxLoading);
	
	ajaxLoadSync(path, targetDiv);
	if(callBack)
		eval(callBack);
	shop.checkoutAccordion.display(index);
}

/*function requireSignIn(value)
{
	document.getElementById('userSignInNick').setAttribute('requiredField', value);
	document.getElementById('userSignInPassword').setAttribute('requiredField', value);
	document.getElementById('confirmPassword').setAttribute('requiredField', value);
	if(value == 1)
		document.getElementById('legalConditionsCheck').setAttribute('requiredField', 0);
	else
		document.getElementById('legalConditionsCheck').setAttribute('requiredField', 1);
	
	initFormFields('checkoutUserForm');
}*/

function requireSignIn(value)
{
	if(document.getElementById('userSignInNick'))document.getElementById('userSignInNick').setAttribute('requiredField', value);
	if(document.getElementById('userSignInPassword'))document.getElementById('userSignInPassword').setAttribute('requiredField', value);
	if(document.getElementById('confirmPassword'))document.getElementById('confirmPassword').setAttribute('requiredField', value);
	
	if(value == 0){/*only buy*/
		document.getElementById('userSignIn').style.display='none'; 
		document.getElementById('userLogin').style.display='none'; 
		document.getElementById('subscribeTable').style.display = 'none';
		//document.getElementById('userSignInPassword').style.display = 'none'; 
		//document.getElementById('confirmPassword').style.display = 'none';
		document.getElementById('userInformationTable').style.display = ''; 
		document.getElementById('legalConditionsTable').style.display=''; 
		document.getElementById('userChechoutButtons').style.display=''; 
	}
	else if(value == 1){/*create account*/
		document.getElementById('userSignIn').style.display=''; 
		document.getElementById('userLogin').style.display='none'; 
		document.getElementById('subscribeTable').style.display = '';
		//document.getElementById('userSignInPassword').style.display = ''; 
		//document.getElementById('confirmPassword').style.display = '';
		document.getElementById('userInformationTable').style.display = ''; 
		document.getElementById('legalConditionsTable').style.display='';
		document.getElementById('userChechoutButtons').style.display=''; 		
	}
	else if(value == 2){/*user login*/
		document.getElementById('userSignIn').style.display='none'; 
		document.getElementById('userLogin').style.display=''; 
		document.getElementById('subscribeTable').style.display = 'none';
		//document.getElementById('userSignInPassword').style.display = 'none'; 
		//document.getElementById('confirmPassword').style.display = 'none';
		document.getElementById('userInformationTable').style.display = 'none'; 
		document.getElementById('legalConditionsTable').style.display='none'; 
		document.getElementById('userChechoutButtons').style.display='none'; 
	}
	if($('userInformationForm'))initFormFields('userInformationForm');
	if($('checkoutUserForm'))initFormFields('checkoutUserForm');
	
	
	shop.checkoutAccordion.display(0); 
	
	restartShadowbox();
}


/*
function requireSignIn(value)
{
	if(document.getElementById('userSignInNick'))document.getElementById('userSignInNick').setAttribute('requiredField', value);
	document.getElementById('userSignInPassword').setAttribute('requiredField', value);
	document.getElementById('confirmPassword').setAttribute('requiredField', value);
	
	if(value == 0){
		document.getElementById('userSignIn').style.display='none'; 
		document.getElementById('userLogin').style.display='none'; 
		document.getElementById('subscribeTable').style.display = 'none';
		document.getElementById('userSignInPassword').style.display = 'none'; 
		document.getElementById('confirmPassword').style.display = 'none';
		document.getElementById('userInformationTable').style.display = ''; 
		document.getElementById('legalConditionsTable').style.display=''; 
		document.getElementById('userChechoutButtons').style.display=''; 
	}
	else if(value == 1){
		document.getElementById('userSignIn').style.display=''; 
		document.getElementById('userLogin').style.display='none'; 
		document.getElementById('subscribeTable').style.display = '';
		document.getElementById('userSignInPassword').style.display = ''; 
		document.getElementById('confirmPassword').style.display = '';
		document.getElementById('userInformationTable').style.display = ''; 
		document.getElementById('legalConditionsTable').style.display='';
		document.getElementById('userChechoutButtons').style.display=''; 		
	}
	else if(value == 2){
		document.getElementById('userSignIn').style.display='none'; 
		document.getElementById('userLogin').style.display=''; 
		document.getElementById('subscribeTable').style.display = 'none';
		document.getElementById('userSignInPassword').style.display = 'none'; 
		document.getElementById('confirmPassword').style.display = 'none';
		document.getElementById('userInformationTable').style.display = 'none'; 
		document.getElementById('legalConditionsTable').style.display='none'; 
		document.getElementById('userChechoutButtons').style.display='none'; 
	}
	if($('userInformationForm'))initFormFields('userInformationForm');
	if($('checkoutUserForm'))initFormFields('checkoutUserForm');
	
	
	shop.checkoutAccordion.display(0); 
}
*/
/*function requireShipTo(value)
{
	document.getElementById('firstNameShippingField').setAttribute('requiredField', value);
	document.getElementById('lastNameShippingField').setAttribute('requiredField', value);
	document.getElementById('addressShippingField').setAttribute('requiredField', value);
	document.getElementById('cityShippingField').setAttribute('requiredField', value);
	document.getElementById('zipShippingField').setAttribute('requiredField', value);
	
	initFormFields('checkoutUserForm');
}*/

function requireShipTo(value)
{
	document.getElementById('firstNameShippingField').setAttribute('requiredField', value);
	document.getElementById('lastNameShippingField').setAttribute('requiredField', value);
	document.getElementById('addressShippingField').setAttribute('requiredField', value);
	document.getElementById('cityShippingField').setAttribute('requiredField', value);
	document.getElementById('zipShippingField').setAttribute('requiredField', value);
	
	if($('checkoutUserForm'))initFormFields('checkoutUserForm');
	if($('userInformation'))initFormFields('userInformation');
	//if($('userInformation'))initFormFields('userInformation');
}

/****************************************/
function initFormFields(form)
{
	var form = $(form);
	Spry.Widget.Form.destroy(form);
		
	for (var i = 0; i < form.elements.length; i++ )
	{
			element = form.elements[i];
			
			fieldType = element.getAttribute('fieldType');
			requiredField = element.getAttribute('requiredField');
			
			if( element.getAttribute('affectsstock') && element.getAttribute('affectsstock') == 1 )
			{
				$(element).removeEvents();
				$(element).addEvent('change', function(){ getStockByCombination(form); } );
			}
			
			if(fieldType)
			{
				try
				{
					if(requiredField == 1)
						required = true;
					else
						required = false;
				}
				catch(err){ required = false }
				
				switch(fieldType)
				{
					case 'natural':
						
						element.validate = new Spry.Widget.ValidationTextField(element, "integer", { isRequired:required, validateOn:['blur'], minValue:0 } );
						break;
						
					case 'integer':
						
						element.validate = new Spry.Widget.ValidationTextField(element, "integer", { isRequired:required, validateOn:['blur'] } );
						break;
					
					case 'float':	
					
						element.validate = new Spry.Widget.ValidationTextField(element, "real", { isRequired:required,validateOn:['blur'] } );
						break;
					
					case 'email':	
					
						element.validate = new Spry.Widget.ValidationTextField(element, "email", { isRequired:required,validateOn:["blur"] });
						break;
					
					case 'time':	
					
						element.validate = new Spry.Widget.ValidationTextField(element, "time", { isRequired:required, validateOn:['blur'] , useCharacterMasking:true , format:formats.timeFormat } );
						break;
					
					case 'date':	
					
						element.validate = new Spry.Widget.ValidationTextField(element, "date", { isRequired:required, useCharacterMasking:true, format:formats.dateFormat, hint:formats.dateFormat, validateOn:["blur"]} );
						Calendar.setup({inputField:element, button:element});
						
						break;
						
					case 'phone':	
					
						//element.validate = new Spry.Widget.ValidationTextField(element, "phone_number", { isRequired:required, validateOn:["blur"],format:"phone_custom" , pattern:"000000000"});
						element.validate = new Spry.Widget.ValidationTextField(element, "integer", { isRequired:required, validateOn:["blur"], allowNegative:false, minValue:10000000 });
						break;
					
					case 'url':	
					
						element.validate = new Spry.Widget.ValidationTextField(element, "url", { isRequired:required, validateOn:["blur"]});
						break;
					
					case 'creditcard':
					
						element.validate = new Spry.Widget.ValidationTextField(element, "zip_code", { isRequired:required, useCharacterMasking:true, pattern:'0000-0000-0000-0000' , validateOn:['blur'] } );
						break;
					
					case 'ip':	
					
						element.validate = new Spry.Widget.ValidationTextField(element, "ip", { isRequired:required, validateOn:['blur'] } );
						break;
					
					case 'shortmemo':	
					
						element.validate = new Spry.Widget.ValidationTextarea(element, { isRequired:required, validateOn:['blur'] } );
						break;
					
					case 'checkbox':
      
						var container = element.getAttribute('fieldContainerId')
						if( container )
						 container = $(container);
						else
						 container = $(element);
						
						new Spry.Widget.ValidationCheckbox(container,{isRequired:required});
						break;
					
					case 'checkboxGroup':
      
						var container = element.getAttribute('fieldContainerId')
						var minSelections = element.getAttribute('minSelections')
						if( container )
						 container = $(container);
						else
						 container = $(element);
						
						new Spry.Widget.ValidationCheckbox(container,{isRequired:required, minSelections:minSelections});
						break;
						
					case 'radio':
      
						var container = element.getAttribute('fieldContainerId')
						if( container )
						 container = $(container);
						else
						 container = $(element);
						
						new Spry.Widget.ValidationRadio(container,{isRequired:required, validateOn:["blur", "change"]});
						break;
					/*case 'longmemo':	
					
						element.validate = new Spry.Widget.ValidationTextarea(element, { isRequired:required, validateOn:['blur'] } );
						break;*/
						
					default:
					
						element.validate = new Spry.Widget.ValidationTextField(element, "none", { isRequired:required, validateOn:['blur'] } );
						break;
					
				}
			}
			
	}
}

function cuteAlert(){
	
	this.timeOut = null;
	this.showing = false;
	this.messageQueue = new Array();
	this.addMessage = function(title, content, image, timeout)
								{
									this.messageQueue.push( {title:title, content:content, image:image, timeout:timeout} );
									if(!this.showing)
									this.showMessage();
										
								}
	this.showMessage = function()
								{
									
									if(this.messageQueue.length)
									{
										this.showing = true;
										var message = this.messageQueue.shift();
										//document.getElementById('alertTitle').innerHTML = message.title;
										document.getElementById('alertMessage').innerHTML = message.content;
										/*shop.alertBox.transition.start('opacity',0,1);*/
										
										Shadowbox.open({
											player:     'html',
											content:    $('alertBox').innerHTML,
											title: 			message.title,
											width:      350,
											height: 	70	
										},
										{
											animate: false,
											onClose: shop.cuteAlert.closeMessage()
										}
										);
										
										if(message.timeout && message.timeout > 0)
										{
											var self = this;
											this.timeOut = setTimeout(function(){ self.closeMessage()}, message.timeout);
										}
										
									}
									else
									{
										this.showing = false;
									}
								}
	this.clear = function()
								{
									this.messageQueue = new Array();
									clearTimeout(this.timeOut);
								}
	this.closeMessage = function()
								{
									clearTimeout(this.timeOut);
									shop.alertBox.transition.start('opacity',1,0);
									var self = this;
									setTimeout(function(){self.showMessage();},700);
								}
};

/*CATEGORY FUNCTIONS*************************************/
function toggleSubcategories(parentId, level)
{
	var targetElement = document.getElementById('subcategories' + parentId);
	var togglerElement = document.getElementById('categoryToggler' + parentId);
	var mainTargetElement = document.getElementById('subcategoriesViewer');
	
	if(targetElement.style.display == 'none')//open subcategories
	{
		targetElement.style.display = '';
		togglerElement.className = 'categoryTogglerOpen';
	}
	
	else if(targetElement.innerHTML.length < 41)//load subcategories
	{
		targetElement.style.display = '';
		ajaxLoadSync(shop.url + '/ajaxTemplates/categories.cfm?parentId='+parentId+'&deepLevel=1&level='+level, targetElement);
		togglerElement.className = 'categoryTogglerOpen';
	}
	else //close subcategories
	{
		targetElement.style.display = 'none';
		togglerElement.className = 'categoryTogglerClosed';
	}
}

function getSubCountries(divId, countryId, subCountryId)
{
		if(subCountryId != '')
		{
			ajaxLoadSync(shop.url + '/ajaxTemplates/subCountries.cfm?countryId='+countryId+'&subCountryId='+subCountryId , $(divId) );
			shop.checkoutAccordion.display(100);
			shop.checkoutAccordion.display(1);
		}
}

function loadAjaxFile(nameFile, nameDiv, callBack, ajaxLoading) {
	if(ajaxLoading.length == 0)
		ajaxLoading = "<img src='" + shop.url + "/ecommerce/images/icons/loading.gif'>";
	else if(ajaxLoading == "none")
		ajaxLoading = "";
	var div_pointer = $(nameDiv);
	ajaxLoad(nameFile,div_pointer,callBack, ajaxLoading);
}

function submitForm(form, divId, callBack, imageLoading){
	if(imageLoading)
			document.getElementById(divId).innerHTML = "<img src='" + shop.url + "/ecommerce/images/icons/"+imageLoading+"'>";
	Spry.Utils.submitForm(form, function(req){document.getElementById(divId).innerHTML = req.xhRequest.responseText; eval(callBack);} );
}


function initFields(nameForm){
	if($(nameForm))initFormFields(nameForm);
}

/*function changeClass(element, classNom, classNom2){
	$$('.'+classNom).each(function(el){
		el.className =classNom2; 
	});
	$('tab1').className = "tabs1";
	$('tab2').className = "tabs3";
	$('tab3').className = "tabs3";
	$(element).className = classNom;
}*/

function changeClass(obj, nameClass, nameClass2){
	if(obj.className == nameClass) obj.className = nameClass2;
	else obj.className = nameClass;
}


function addProduct(productId, form){
		ajaxLoading = "<img src='" + shop.url + "/ecommerce/images/icons/Loading.gif'>";
		loadContent(shop.url + '/ajaxTemplates/addProductActions.cfm?id='+productId, 'addProductAction'+productId, 'getHeight(\'AsyncBasket\')', ajaxLoading);
		form.action = shop.url + '/ecommerce/basket/asyncBasket.cfm';
		//autoDragImage(form);
		return Spry.Utils.submitForm(form, reloadMiniBaskets );
		//loadContent(shop.url + '/ajaxTemplates/wishlist.cfm', 'wishlistActual', '','');
}

function loadContent(nameFile, nameDiv, callBack, ajaxLoading) {
	if(ajaxLoading.length>0)
		ajaxLoading = "<img src='" + shop.url + "/ecommerce/images/icons/"+ajaxLoading+"'>";
	if(callBack.length == 0)
		callBack = "correctPNG();"
	else
		callBack = callBack + "; correctPNG();"
	if($(nameDiv+'Floater'))$(nameDiv+'Floater').style.top = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + 'px';
	loadAjaxFile(nameFile, nameDiv, callBack, ajaxLoading);
}

var arVersion = navigator.appVersion.split("MSIE");
var version = parseFloat(arVersion[1]);

	function correctPNG() // correctly handle PNG transparency in Win IE 5.5 & 6.
	{
		if ((version >= 5.5)){
			for(var i=0; i<document.images.length; i++)
			{
				 var img = document.images[i]
				 var imgName = img.src.toUpperCase()
				 if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
				 {
						var imgID = (img.id) ? "id='" + img.id + "' " : ""
						var imgClass = (img.className) ? "class='" + img.className + "' " : ""
						var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
						var imgStyle = "display:inline-block;" + img.style.cssText 
						if (img.align == "left") imgStyle = "float:left;" + imgStyle
						if (img.align == "right") imgStyle = "float:right;" + imgStyle
						if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
						var strNewHTML = "<span " + imgID + imgClass + imgTitle
						+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
						+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
						+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
						img.outerHTML = strNewHTML
						i = i-1
				 }
			}
		}
	}
	if ((version >= 5.5)){ $(window).addEvent('domready', function(){correctPNG()});}



/*FUNCTIONS TO CHECK SESSION IN USER CONRTOL PANEL*/
function checkSession()
{
	var xmlObj = createXMLRequest();
	
	xmlObj.open('GET', shop.url + '/ecommerce/users/checkSession.cfm?'+getUniqueId(), false);
	xmlObj.send(null);
	if(xmlObj.responseText.indexOf('0') != -1)return false;
	return true;
}

function loadUserContent(nameFile, nameDiv, callBack, ajaxLoading) {
	if(checkSession() == false){window.location.href = shop.url + '/ecommerce/users/userControlPanel.cfm'; return;}
	else loadContent(nameFile, nameDiv, callBack, ajaxLoading);
}

function checkSessionInUserOrder(){
	if(checkSession() == false){window.location.href = shop.url + '/ecommerce/users/userControlPanel.cfm'; Shadowbox.close(); return false;}
	return true;
}

function checkDeleteAccount(){
	if(checkSession() == false){window.location.href = shop.url + '/ecommerce/users/userControlPanel.cfm'; return false;}
	return true
}
/*END FUNCTIONS TO CHECK SESSION IN USER CONTROL PANEL*/

function restartShadowbox(){
/*	Shadowbox.clearCache(); */
	Shadowbox.setup(); 
}


function cuteQuestion(){
	
	this.timeOut = null;
	this.showing = false;
	this.messageQueue = new Array();
	this.addMessage = function(title, content, actionForm, image, timeout,width,height)
								{
									this.messageQueue.push( {title:title, content:content, actionForm:actionForm, image:image, timeout:timeout} );
									if(!this.showing){
										
										if(width != null && height != null)
											this.showMessage(width,height);
										else
											this.showMessage();
									}
								}
	this.showMessage = function(width,height)
								{
									if(this.messageQueue.length)
									{
										this.showing = true;
										var message = this.messageQueue.shift();
										//document.getElementById('questionTitle').innerHTML = message.title;
										document.getElementById('questionMessage').innerHTML = message.content;
										document.getElementById('questionForm').action = message.actionForm;
										/*shop.questionBox.transition.start('opacity',0,1);*/
										var actualWidth;
										var actualHeight;
										if(width != null && height != null){ 
											actualWidth=width;
											actualHeight=height;
										}else{
											actualWidth=350;
											actualHeight=70;
										}
										
										Shadowbox.open({
											player:     'html',
											content:    $('questionBox').innerHTML,
											title: 			message.title,
											width:      actualWidth,
											height: 	actualHeight
										},
										{
											animate: false,
											onClose: shop.cuteQuestion.closeMessage()
										}
										);
										
										if(message.timeout && message.timeout > 0)
										{
											var self = this;
											this.timeOut = setTimeout(function(){ self.closeMessage()}, message.timeout);
										}
										
									}
									else
									{
										this.showing = false;
									}
								}
	this.clear = function()
								{
									this.messageQueue = new Array();
									clearTimeout(this.timeOut);
								}
	this.closeMessage = function()
								{
									clearTimeout(this.timeOut);
									shop.questionBox.transition.start('opacity',1,0);
									var self = this;
									setTimeout(function(){self.showMessage();},700);
								}
};
function showMessageClearBasket(){
	shop.cuteQuestion.addMessage('', languageSheet.lblClearBasket, shop.url + '/ecommerce/basket/updateBasket.cfm', 0,0);
}
/*END FUNCTIONS IN BASKET*/

/*FUNCTION IN CONTROL PANEL QUESTION*/

function initWishlistTable(){
	if($('listWishlistDetailsId')) $('listWishlistDetailsId').value = "";
	if($('listProductsIdToEmail')) $('listProductsIdToEmail').value = "";
	if($('listProductsId')) $('listProductsId').value = "";
	$$('.checkWishlistDetail').each(function(el){el.checked = false;});
	
}


function showMessageDeleteAccount(){
	if(checkSession() == false){window.location.href = shop.url + '/ecommerce/users/userControlPanel.cfm'; return false;}
	
	shop.cuteQuestion.addMessage('', languageSheet.lblDeleteAccount, shop.url + '/ecommerce/users/deleteAccount.cfm', 0,0,350,100);
}

/*END FUNCTION IN CONTROL PANEL QUESTION*/

/*FUNCTIONS IN WISHLIST USER CONTROL PANEL*/

function addWishList(productId, nameImage){
		loadContent(shop.url + '/ajaxTemplates/wishlistActions.cfm?id='+productId, 'wishlistAction'+productId, "loadContent(shop.url + '/ajaxTemplates/wishlist.cfm', 'wishlistActual', '','')",'');
}


function initWishlistToEmail(obj){
	$('informationBox').style.visibility = 'visible';
	initFormFields("wishlistToEmail");
}

function findInArray(array, stringToSearch){
	for (var i = 0; i < array.length; i++){
		if(array[i] == stringToSearch) return i;
	}
	return -1;
}

function generateListProductsId(productId){
	var content = $('listProductsId').value;

	if(content.length > 0)var arrContent = content.split(',');
	else var arrContent = new Array();
	
	var pos = findInArray(arrContent, productId);
	if(pos >= 0)arrContent.splice(pos, 1);
	else arrContent.push(productId);
	
	content = arrContent.join(",");
	$('listProductsId').value = content;
	$('listProductsIdToEmail').value = content;
}

function emptyListListProductsId(){
	$('listProductsId').value = "";
	$('listProductsIdToEmail').value = "";

}

function generateListWishlistDetailsId(wishlistDetailId){
	var content = $('listWishlistDetailsId').value;

	if(content.length > 0)var arrContent = content.split(',');
	else var arrContent = new Array();
	
	var pos = findInArray(arrContent, wishlistDetailId);
	if(pos >= 0)arrContent.splice(pos, 1);
	else arrContent.push(wishlistDetailId);
	
	content = arrContent.join(",");
	$('listWishlistDetailsId').value = content;
}

function emptyListWishlistDetailsId(){
	$('listWishlistDetailsId').value = "";
}


function addProducts(form){
	$('productList').value = $('listProductsId').value;
//	loadContent(shop.url + '/ajaxTemplates/addProducts.cfm?listProductId='+content, 'wishlistTable', 'reloadMiniBaskets()','');
	return Spry.Utils.submitForm(form, reloadMiniBaskets );
}


function deleteWishList(){
	if(checkSession() == false){window.location.href = shop.url + '/ecommerce/users/userControlPanel.cfm'; return;}
	var content = $('listWishlistDetailsId').value;
	
	var arrContent = content.split(',');
	content = arrContent.join(',');
	if(content.length>0){
		loadContent(shop.url + '/ajaxTemplates/wishlistDelete.cfm?listWishlistDetailsId='+content, 'wishlistTable', "loadContent(shop.url + '/ajaxTemplates/wishlist.cfm', 'wishlistActual'); initWishlistTable()",'');
	}
	else{
		shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblSelectProducts,0,0);
	}

}

function generateEmail(){
	if(checkSession() == false){window.location.href = shop.url + '/ecommerce/users/userControlPanel.cfm'; return;}
	var content = $('listProductsIdToEmail').value;
	
	/*Shadowbox.open({
			player:     'ajax',
			content:    shop.url + '/ajaxTemplates/wishlistToEmail.cfm?listProductsId='+content,
			width:			470,
			height:			375
	}, {onFinish: function() {initWishlistToEmail();}}
	);	*/
	var arrContent = content.split(',');
	content = arrContent.join(',');
	if(content.length>0){
		loadContent(shop.url + '/ajaxTemplates/wishlistToEmail.cfm?listProductsId='+content, 'informationBox', 'initWishlistToEmail();', '');
	}
	else{
			shop.cuteAlert.addMessage(languageSheet.lblError, languageSheet.lblSelectProducts,0,0);
	}
}

function selectAllProductsWishlist(){
	$$('.checkWishlistDetail').each(
																	function(el){
																					 var arrId = el.id.split("_");
																					 if(el.checked == true){
																						 	el.checked = false;
																						 	emptyListWishlistDetailsId();
																							emptyListListProductsId();
																					 }
																					 else{
																						 generateListWishlistDetailsId(arrId[0]); 
																						 generateListProductsId(arrId[1]); 
																						 el.checked = true;
																					 }
																					 changeClass($('divWishlistDetail'+arrId[0]), 'selectRow', 'selectedRow');
																	});
}

/*END FUNCTIONS IN WISHLIST USER CONTROL PANEL*/

function closeContent(){
	$('informationBox').innerHTML = '';
	$('informationBox').style.visibility = 'hidden';
}
