// JavaScript Document

var elementsToGenerate = 0;
var blankMessage = blankMessage;
var emailMessage = emailMessage;
var popup = '';
var loader = '';
var ajaxRunning = 0;
var animationRunning = false;
var sliders = {};
		
window.addEvent('domready', function() { // initializes the application object when the page finished loading
	if(window.ie) new Asset.css('styles/style-ie.css', {id: 'ieStyle'});
	if(window.opera) new Asset.css('styles/style-opera.css', {id: 'operaStyle'});
	new Tips($$('.toolTipElement'), {
        maxTitleChars: 60, 
		hideDelay: 500, 
		showDelay: 500,
		onShow: function(element) {
			if(element.getStyle('visibility') == 'hidden'){
				element.setStyle('visibility', 'visible');
				element.setOpacity(0);
			}
			tipsFx.start({
				'opacity': 0.9
			});
		},
		onHide: function() {
			tipsFx.start({
				'opacity': 0
			});
		}
    });
	var tipsFx = new Fx.Styles($E('.tool-tip'), {duration:500, wait:false});
	var loaderElement = new Element('div', { // initializes the loader animation div
		'id': 'applicationLoader',
		'class': 'applicationLoader'
	});
	loaderElement.injectInside(document.body);	
	if($('cartContentContainer')) updateCart();
});

// DOM PREPROCESSING FUNCTIONS
function processElements(container) { // adds required events to all elements in the given container
	$$(".expandButton").each(function(button){
		var element = button.getParent().getNext();
		var mySlide = new Fx.Slide(element, {
			onComplete: function(){
				if (this.wrapper.offsetHeight != 0)	this.wrapper.setStyle('height', 'auto');
			}	
		});
		button.addEvent("click", function(e){
			new Event(e).stop();
			if(mySlide.element.getStyle('margin-top') != '0px') this.setProperty('src', 'images/minus.gif');
			else this.setProperty('src', 'images/plus.gif');
			mySlide.toggle();				
		});
	});
	container.getElementsBySelector('input[type=text], input[type=radio], input[type=password], select, textarea').each(function(element) {
		if(element.disabled || element.getProperty('disabled') == 'disabled') element.addClass('inputDisabled'); // adds special class to disabled elements.
		element.addEvents({ // adds events to all input elements
			'change': function() { // validates input on any change
				validateField(this); 
			},
			'keyup':  function(keyEvent) { // validates input on any key up
				validateField(this); 
			},
			'keydown': function(keyEvent) {
				validateField(this); // validates input on any key down
			},
			'focus': function() { // changes class of inputs in input lists
				this.addClass('inputSelected');
			},
			'blur': function(){ // changes class of inputs in input lists and saves changes
				this.removeClass('inputSelected');
			}
		});
		if(element.getProperty('clickEvent') != null) {
			element.addEvent('click',function(){eval(element.getProperty('clickEvent'))});
		}
		if(element.getProperty('displaytype') == 'date') { // adds the date validation, input mask and calendar button for all date input fields
			element.setProperty('class', 'inputDate');
			element.addEvents({ 
				'blur': function(){
					if(this.value != '__/__/____' && !dateValidate(this.value)) new Calendar(this);
				}
			});
			
			DateMask = new mooMask();
			DateMask.mask(element, '99/99/9999');
			
			var selectDateButton = new Element('a', {
				'id' : element.getProperty('id')+'DateButton',
				'textIDField' : element.getProperty('id'),
				'href' : 'javascript: ;',
				'class' : 'dateSelectButton',
				'events' : {
					'click' : function(){
						new Calendar(this.getPrevious());
					}
				}
			});
			/*var selectDateImage = new Element('img', {
				'src' : 'images/calendar.jpg'
			});
			selectDateImage.InjectInside(selectDateButton);*/
			selectDateButton.setHTML('<img src="images/calendar.jpg" border="0" vspace="3">');
			selectDateButton.injectAfter(element);
		};
		if($E('input[type=radio]','orderTypes')) $E('input[type=radio]','orderTypes').fireEvent('click');
	});
}

// FORM CHECK FUNCTIONS
function validateField(subject) { // validates live the input of input elements based on the displayType and maxLength properties
	var type = subject.getProperty('displaytype');
	var value = subject.value;
	if(value != '' && type != '') {
		var length = subject.getProperty('maxlength');
		var returnValue = '';
		if(type == 'decimal') { // if displayType = decimal, for a format (2).(3) maxlength will be 8, so the length of the whole number should be maxlength - 6, and the decimals length is always 3
			value = value.replace(/[^.\d]/g, "");
			var length1 = length - 6;
			var length2 = 3;
			if(value.indexOf(".") == 0) {
				value = value.replace(/\./g, "");
				value.substr(0, length1);
				returnValue = '0.'+value;
			}
			else if(value.indexOf(".") > 0) {
				var subjectArray = value.split('.');
				returnValue = subjectArray[0].substr(0, length1) + '.' + subjectArray[1].substr(0, length2);
			}
			else returnValue = value.substr(0, length1);
			subject.value = returnValue;
		}
		else if(type == 'int') { // if displayType = int
			value = value.replace(/[^\d]/g, "");
			returnValue = value.substr(0, length);
			subject.value = returnValue;
		}
	}
}
function echeck(str) { // checks the validity of an email address string
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1) return false
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) return false
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) return false
	if (str.indexOf(at,(lat+1))!=-1) return false
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) return false
	if (str.indexOf(dot,(lat+2))==-1) return false
	if (str.indexOf(" ")!=-1) return false
	return true					
}
function checkForm(container, iswindow) { // checks the input fields inside the given container, if the mandatory property is true the field cannot be empty, if the email property is true the email has to be valid, if the display type is date it has to contain a valid date.
	if(iswindow == null) iswindow = false;
	var ok = true;
	var focused = false;
	var messageString = '';
	var checkBoxArray = new Array();
	var inputs = container.getElementsBySelector('input, textarea, select');
	for(var i=0; i < inputs.length; i++) {
		element = inputs[i];
		if(element.getProperty('mandatory') == 'true' && iswindow == false || (element.getProperty('mandatory') == 'true' && iswindow == true)) {
			if(element.getProperty('value') == '') {
				ok = false;
				element.addClass('formError');
				if(element.getProperty('message') != 'no') { // if error messages should be displayed
					messageString = '';
					if (element.getProperty('displaytype') == 'date') {
						if(element.getNext().getNext() && element.getNext().getNext().getProperty('id') == 'errorMessage') element.getNext().getNext().remove();
					}
					else if(element.getNext() && element.getNext().getProperty('id') == 'errorMessage') element.getNext().remove();
					var errorMessage = new Element('div', {'id': 'errorMessage', 'class': 'errorMessage'});
					if(element.getProperty('message')) messageString = element.getProperty('message');
					else messageString = blankMessage;
					if (element.getProperty('displaytype') == 'date') errorMessage.injectAfter(element.getNext());
					else errorMessage.injectAfter(element);
					errorMessage.appendText(messageString);
				}
				if(!focused) {
					new Fx.Scroll(window).toElement(element);
					element.focus();
					focused = true;
				}
			}
			else {
				element.removeClass('formError');
				if (element.getProperty('displaytype') == 'date') {
					if(element.getNext().getNext() && element.getNext().getNext().getProperty('id') == 'errorMessage') element.getNext().getNext().remove();
				}
				else if(element.getNext() && element.getNext().getProperty('id') == 'errorMessage') element.getNext().remove();
			}
		}
		else{
			if(element.getNext() && element.getNext().getProperty('id') == 'errorMessage') element.getNext().remove();
		}
		if(element.getProperty('displaytype') == 'email' && element.getProperty('value') != '') {
			if(!echeck(element.getProperty('value'))) {
				ok = false;
				element.addClass('formError');
				if(element.getProperty('message') != 'no') { // if error messages should be displayed
					messageString = '';
					if(element.getNext() && element.getNext().getProperty('id') == 'errorMessage') element.getNext().remove();
					var errorMessage = new Element('div', {'id': 'errorMessage', 'class': 'errorMessage'});
					if(element.getProperty('message')) messageString = element.getProperty('message');
					else messageString = emailMessage;
					errorMessage.injectAfter(element);
					errorMessage.appendText(messageString);
				}
				if(!focused) {
					new Fx.Scroll(window).toElement(element);
					element.focus();
					focused = true;
				}
			}
			else {
				element.removeClass('formError');
				if(element.getNext() && element.getNext().getProperty('id') == 'errorMessage') element.getNext().remove();
			}
		};
		if(element.getProperty('displaytype') == 'date' && element.getProperty('value') != '') { // if displayType = date
			if (element.getProperty('value').match(/^(?:(0[1-9]|[12][0-9]|3[01])[\/](0[1-9]|1[012])[\/](19|20)[0-9]{2})$/)) {
				element.removeClass('formError');
				if(element.getNext().getNext() && element.getNext().getNext().getProperty('id') == 'errorMessage') element.getNext().getNext().remove();
			} 
			else {
				ok = false;
				element.addClass('formError');
				if(element.getProperty('message') != 'no') { // if error messages should be displayed
					messageString = '';
					if(element.getNext().getNext() && element.getNext().getNext().getProperty('id') == 'errorMessage') element.getNext().getNext().remove();
					var errorMessage = new Element('div', {'id': 'errorMessage', 'class': 'errorMessage'});
					if(element.getProperty('message')) messageString = element.getProperty('message');
					else messageString = blankMessage;
					errorMessage.injectAfter(element.getNext());
					errorMessage.appendText(messageString);
				}
			}
		};
		if(element.getProperty('displaytype') == 'checkBoxGroup') {
			if (element.checked == true) {
				if (checkBoxArray[element.getProperty('group')]) checkBoxArray[element.getProperty('group')] += 1;
				checkBoxArray[element.getProperty('group')] = 1;
			}
			else if (!checkBoxArray[element.getProperty('group')]) checkBoxArray[element.getProperty('group')] = 0;
		}
		else if (element.getProperty('displaytype') == 'confirmPassword') {
			if (element.value != $E('input[displaytype=newPassword]').value) {
				ok = false;
				element.addClass('formError');
				if(element.getProperty('message') != 'no') { // if error messages should be displayed
					messageString = '';
					if(element.getNext() && element.getNext().getProperty('id') == 'errorMessage') element.getNext().remove();
					var errorMessage = new Element('div', {'id': 'errorMessage', 'class': 'errorMessage'});
					if(element.getProperty('message')) messageString = element.getProperty('message');
					else messageString = blankMessage;
					errorMessage.injectAfter(element);
					errorMessage.appendText(messageString);
				}
				if(!focused) {
					new Fx.Scroll(window).toElement(element);
					element.focus();
					focused = true;
				}
			}
			else {
				element.removeClass('formError');
				if(element.getNext() && element.getNext().getProperty('id') == 'errorMessage') element.getNext().remove();
			}
		}
	};
	for (var group in checkBoxArray) {
		if (checkBoxArray[group] == 0) {
			ok = false;
			$(group).setHTML($E('input[group='+group+']').getProperty('message'));
		}
		else if(checkBoxArray[group] == 1) $(group).setHTML('');
	};
	if(ok) return true
	else return false
}
function clearFormCheck(container) { // removes all form check messages and error formatting within the container
	container.getElementsBySelector('input, textarea, select').each(function(element){
		if(element.getProperty('type') != 'button' && element.getProperty('type') != 'submit' && element.getProperty('type') != 'reset' && element.getProperty('type') != 'hidden')
		{
			element.removeClass('formError');
			if (element.getProperty('displaytype') == 'date') {
				if(element.getNext().getNext() && element.getNext().getNext().getProperty('id') == 'errorMessage') element.getNext().getNext().remove();
			}
			else if(element.getNext() && element.getNext().getProperty('id') == 'errorMessage') element.getNext().remove();
		}
	});
}

// LOADING ANIMATION FUNCTIONS
function showLoader(element, positionY, positionX, offsetY, offsetX) { // shows the loader positioned relative to the given element object, additional paramaters are positionY:(above, top, center, bottom, below); positionX:(leftOutside, left, center, right, rightOutside); and the optional paramaeters offsetY and offsetX which are added to the positioning.
	if(offsetY==null) offsetY = 0;
	if(offsetX==null) offsetX = 0;
	var loaderWidth = $('applicationLoader').getStyle('width').toInt();
	var loaderHeight = $('applicationLoader').getStyle('height').toInt();
	var elCoordinates = element.getCoordinates();
	var elHeight = elCoordinates['height'];
	var elWidth = elCoordinates['width'];
	var left = elCoordinates['left'];
	var top = elCoordinates['top'];
	if(positionY == "above") top -= loaderHeight;
	else if(positionY == "top") top = top;
	else if(positionY == "center") top += (elHeight/2 - loaderHeight/2).round();
	else if(positionY == "bottom") top += elHeight - loaderHeight;
	else if(positionY == "below") top += elHeight;
	if(positionX == "leftOutside") left -= loaderWidth;
	else if(positionX == "left") left = left;
	else if(positionX == "center") left += (elWidth/2 - loaderWidth/2).round();
	else if(positionX == "right") left += elWidth - loaderWidth;
	else if(positionX == "rightOutside") left += elWidth;
	top += offsetY;
	left += offsetX;
	$('applicationLoader').setStyles({
		'top': top+'px',
		'left': left+'px',
		'display':'block'
	});
}
function hideLoader() {
	$('applicationLoader').setStyles({
		'display':'none',
		'top':'0px',
		'left':'0px'
	});
}

// UTILITY FUNCTIONS
function getRadioGroupValue(groupName) {//returns the value of the checkbox selected in the group of radio buttons with the name property set to 'groupName'
	var checked = -1;
	$$('input[name='+groupName+']').each(function(element) {
		if (element.checked) checked = element.value;
	});
	return checked;
}
function getNextFormElement(input) { // return the next unhidden, undisabled form element after the given form element
	var index = -1, i = 0, found = false;
	var elements = $ES('input, select, textarea');
	while (i < elements.length && index == -1)
	{
		if(elements[i] == input) index = i;
		else i++;
	}
	index++;
	if(elements[index]) {
		var nextElement = elements[index];
		while(nextElement.getProperty('type') == 'hidden' || nextElement.getProperty('disabled') != '')
		{
			index++;
			nextElement = elements[index];
		}
		return nextElement;
	}
	else return elements[0];
}
function isInteger(s){
	var i;
	for (i = 0; i < s.length; i++){   
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}
	// All characters are numbers.
	return true;
}
function generate_password(length) { // generates a random password with the number of chars set by the 'length' variable
	if(length == null) length = 6;
	var values = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	var pass = "";
	var i = 0;
	while(i < length)
	{
		var char = values.substr(Math.floor(Math.random( ) * (values.length)), 1);
		if(pass.indexOf(char) == -1)
		{
			pass += char;
			i++;
		}
	}
	return pass;
}
function sendEmail(layout, subject, to, cc, bcc, attachments, extra) { // sends an email using the given layout, in case "to" is ommited, the standard values from the current record will be used. Like in the case of an order, "to" will be the email address of the contact (if selected) or of the customer. If "subject" is omitted the standard subject defined in the layout config will be used. If preview is true the email window will show up and the user can send the email himself
	if(subject == null) subject = '';
	if(attachments == null) attachments = '';
	if(to == null) to = '';
	if(cc == null) cc = '';
	if(bcc == null) bcc = '';
	if(extra == null) extra = '';
	ajaxRunning += 1;
	new Ajax('php/send.email.php', {
		method: 'get',
		data: 'layout='+layout+'&to='+to+'&cc='+cc+'&bcc='+bcc+'&subject='+subject+'&MailAttachments='+attachments+extra,
		onComplete: function(result){
			var resultArray = Json.evaluate(result);
			if(resultArray['result']) {
				$('result').setStyle('display','');
				ajaxRunning -= 1;
			}
			else {
				$('result').setStyle('display','');
				$('result').appendText(resultArray['message']);
				ajaxRunning -= 1;
			}
		}
	}).request();
}
function register() {
	$('submit').setProperty('disabled','disabled');
	$('result').setHTML(waitMessage);
	new Ajax("php/ajaxSQLSelect.php", {
		method: 'get', 
		data: "SQL=SHOW TABLE STATUS LIKE 'customers'", 
		onComplete: function(result) {
			var resultQuery = Json.evaluate(result);
			if (!resultQuery['return']) $('result').setHTML(resultQuery['error']);
			else {
				var id = resultQuery['rows'][0]['Auto_increment'].toString();
				if (id.length < 4) {
					for (var i=0; i<=4-id.length; i++) id = '0'+id;
				}
				var date = new Date;
				date = date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate();
				var pass = generate_password();
				var extra = '&Email='+$('Email').value+'&Password='+ hex_md5(pass)+'&PasswordOriginal='+pass;
				new Ajax("php/ajaxSQLUpdate.php", {
					method: 'post', 
					data: $('form1').toQueryString()+"&RegistrationDate="+date+extra+"&appQueryType=insert&appTable=customers",
					onComplete: function(result){
						var resultQuery = Json.evaluate(result);
						if (!resultQuery['return']) {
							$('result').setHTML(resultQuery['error']);
							$('submit').setProperty('disabled',false);
						}
						else {
							sendEmail("layout.email.registration.php","Netsource - register confirmation",$('Email').value,'','','',extra);
							//console.log(extra);
							$('register').setStyle('display', 'none');
							$('result').addClass('confirmMessage');
							$('result').setHTML('<p>'+registrationConfirm+'</p>');
							$('message').setStyle('display','');
						}
					}
				}).request();	
			}
		}
	}).request();
}
function cartStringToArray(cartString) {//function that transforms the cart String from string to array; the functions returns an Array with the cart content in Json format
	var cartContentString = '[';
	var cartArray = new Array;
	cartArray = cartString.split("|");
	cartArray.each(function (item) {
		if(item != ''){
			var cartItem = new Array;
			cartItem = item.split("~");
			cartContentString += '{"ArticleID":'+cartItem[0]+',"Quantity":'+cartItem[1]+',"Options":"'+cartItem[2]+'"},';
		}
	});
	if(cartContentString.substring(cartContentString.length-1, cartContentString.length) == ',') cartContentString = cartContentString.substring(0,cartContentString.length-1);
	cartContentString += ']'; 
	//console.log(cartContentString);
	return Json.evaluate(cartContentString);
}
function cartArrayToString(cartArray) {//function that transforms the cart Array from array to string; the function returns a String reday to be saved in cookie
	var cartString = '';
	cartArray.each ( function (element) {
		cartString += element['ArticleID']+'~'+element['Quantity']+'~'+element['Options']+'|';
	});	
	cartString = cartString.substring(0,cartString.length-1);
	return cartString;
}
function addToCart(articleID, quantity, add, selectedOptions) {// function that adds articles to the cart. the quantity added is the value of "quantity" and the variable "add" tells if the value from quantity will replace or will be added to the extisting quantity - values: true or false\
	if (quantity == null) quantity = 1;
	if (add == null) add = false;
	if (selectedOptions == null){
		selectedOptions = '';
		$ES('select[id^=option'+articleID+'_]').each(function(selectEl){
			selectedOptions += selectEl.value+'^';
		});
		selectedOptions = selectedOptions.substr(0, selectedOptions.length - 1);
	}
	//console.log('articleID = '+articleID+'; quantity = '+quantity+'; selectedOptions = '+selectedOptions);
	if (!isGuest) {
		var articleInCart = false;
		ajaxRunning += 1;
		new Ajax('php/ajaxIncreaseQuantityCart.php', {
			method: 'post',
			data: 'ArticleID='+articleID+'&Quantity='+quantity+'&Options='+selectedOptions+'&Add='+add,
			onComplete: function(result){
				ajaxRunning -= 1;
				var resultArray = Json.evaluate(result);
				if(!resultArray['return']) {
					$('result').setHTML(resultArray['error']);
				}
				else {
					if (resultArray['articleInCart']) articleInCart = true;
					//console.log(articleInCart);
					if (!articleInCart) {
						ajaxRunning += 1;
						new Ajax('php/ajaxAddToDBCart.php', {
							method: 'post',
							data: 'ArticleID='+articleID+'&Quantity='+quantity+'&Options='+selectedOptions+'&Add='+add,
							onComplete: function(result){
								ajaxRunning -= 1;
								var resultArray = Json.evaluate(result);
								if(!resultArray['return']) {
									$('result').setHTML(resultArray['error']);
								}
								else {
									function checkComplete() { // checks to see if all elements have finished generating, if they have then the post processing of the input elements is started
										if(ajaxRunning == 0) {
											$clear(periodicalCheck);
											updateCart();
										}
									}
									var periodicalCheck = checkComplete.periodical(50); // launches the check if the elements have finished generating, every 100 miliseconds
								}
							}
						}).request();
					}
					else {
						function checkComplete() { // checks to see if all elements have finished generating, if they have then the post processing of the input elements is started
							if(ajaxRunning == 0) {
								$clear(periodicalCheck);
								updateCart();
							}
						}
						var periodicalCheck = checkComplete.periodical(50); // launches the check if the elements have finished generating, every 100 miliseconds
					}
				}			
			}
		}).request();
	}
	else {
		articleInCart = false;
		//console.log(Cookie.get('cart')?Cookie.get('cart'):'');
		var cartArray = cartStringToArray(Cookie.get('cart')?Cookie.get('cart'):'');
		//console.log(cartArray);
		cartArray.each(function (element) {
			if (element['ArticleID'] == articleID && element['Options'] == selectedOptions) {
				if (add) {
					element['Quantity'] += quantity;
				}
				else {
					element['Quantity'] = quantity;
				}
				articleInCart = true;
			}
		});
		var cookie = cartArrayToString(cartArray);
		if (!articleInCart) {
			var cartString = (Cookie.get('cart') ? Cookie.get('cart')+'|' : '');
			cartString += articleID+'~1'+'~'+selectedOptions;
			Cookie.set('cart', cartString, {duration: settings['CartLifeTime']});
			//console.log(cartString);
		}
		else {
			Cookie.set('cart', cookie, {duration: settings['CartLifeTime']});
			//console.log(cookie);
		}
		updateCart();
	}
}
function updateCart() {
	if (!isGuest) {
		new Ajax('php/ajaxUpdateDBCart.php', {
			method: 'post',
			data: '',
			onComplete: function(result){
				//console.log('UPDATE CART');
				var resultArray = Json.evaluate(result);
				if(!resultArray['return']) {
					$('result').setHTML(resultArray['error']);
				}
				else {
					if (resultArray['rows'] > 0) {
						var total = 0;
						var cartContent = '<table cellpadding="0" cellspacing="0" border="0" align="center" class="cartTable">';
						resultArray['result'].each(function(item) {
							cartContent += '<tr>';						
							cartContent += '<td class="cartTableQuantity">'+item['Quantity']+'</td>';
							cartContent += '<td class="cartTableMultiply">x</td>';
							cartContent += '<td class="cartTableArticleCode">'+item['ArticleCode']+'</td>';
							cartContent += '<td class="cartTableSeparator">:</td>';
							cartContent += '<td class="cartTableArticlePrice">'+(item['Quantity'] * item['Price']).toFixed(settings['priceDecimals'])+' '+currentCurrency+'</td>';
							total += item['Quantity'] * item['Price'];
						});
						//console.log(table);
						$('cartContentContainer').setHTML(cartContent);
						$('cartTotal').setHTML(total);
					}
					else {
						$('cartContentContainer').setHTML(cartIsEmpty);
						total = 0;
						$('cartTotal').setHTML(total);
					}
				}
			}
		}).request();	
	}
	else {
		if (Cookie.get('cart')) {
			var cartContent = new Array;
			var cookieString = Cookie.get('cart');			
			var cartContentArray = cartStringToArray(cookieString);
			//console.log(cartContent);
						
			var total = 0;
			var cartContent = '<table cellpadding="0" cellspacing="0" border="0" align="center" class="cartTable">';
			cartContentArray.each(function(element) {
				ajaxRunning +=1;
				new Ajax('php/ajaxGetDBPrice.php', {
					method: 'post',
					data: 'ArticleID='+element['ArticleID']+'&Options='+element['Options'],
					onComplete: function(result){
						ajaxRunning -=1;
						var resultArray = Json.evaluate(result);
						cartContent += '<tr>';						
						cartContent += '<td class="cartTableQuantity">'+element['Quantity']+'</td>';
						cartContent += '<td class="cartTableMultiply">x</td>';
						cartContent += '<td class="cartTableArticleCode">'+resultArray['ArticleCode']+'</td>';
						cartContent += '<td class="cartTableSeparator">:</td>';
						cartContent += '<td class="cartTableArticlePrice">'+(element['Quantity'] * resultArray['Price']).toFixed(settings['priceDecimals'])+' '+currentCurrency+'</td>';
						total += element['Quantity'] * resultArray['Price'];
					}
				}).request();
			});
			function checkComplete() { // checks to see if all elements have finished generating, if they have then the post processing of the input elements is started
				if(ajaxRunning == 0) {
					$clear(periodicalCheck);
					$('cartContentContainer').setHTML(cartContent);
					$('cartTotal').setHTML(total);
				}
			}
			var periodicalCheck = checkComplete.periodical(50); // launches the check if the elements have finished generating, every 100 miliseconds
		}
		else {
			$('cartContentContainer').setHTML(cartIsEmpty);
			total = 0;
			$('cartTotal').setHTML(total);
		}
	}
}
function deleteArticleFromCart(articleID, articleOptions) {
	//console.log(articleID+'|'+articleOptions);
	if (!isGuest) {
		new Ajax('php/ajaxDeleteArticleFromCart.php', {
			method: 'post',
			data: 'ArticleID='+articleID+'&Options='+articleOptions,
			onComplete: function(result){
				var resultArray = Json.evaluate(result);
				if (resultArray['return']) {					
					if (resultArray['cartEmpty']) $('viewCartContent').setHTML(cartIsEmpty);
					else $('container'+articleID+'|'+articleOptions).remove();
					updateCart();
				}
			}
		}).request();
	}
	else {
		var articlePosition = 0;
		var cartArray = cartStringToArray(Cookie.get('cart'));
		//console.log(cartArray);
		cartArray.each(function(element, index) {
			if(element['ArticleID'] == articleID && element['Options'] == articleOptions) {
				articlePosition = index;
				//console.log(articlePosition);
			}
		});
		//console.log(articlePosition);
		cartArray.splice(articlePosition,1);
		//console.log(cartArray);
		var cookie = cartArrayToString(cartArray);
		Cookie.set('cart', cookie, {duration: settings['CartLifeTime']});
		if (cookie == '') $('viewCartContent').setHTML(cartIsEmpty);
		else $('container'+articleID+'|'+articleOptions).remove();
		updateCart();
	}
}
function saveCart1(container) {// searches all the inputs in the container which's id starts with "quantity" and articleID and and the adds the new quantity to the cart; in the end the form is submitted and the page for login/order is 
	container.getElements('input[id^=quantity]').each( function(element) {
		var reference = element.id.substr(8);
		var id = element.id.substr(8, element.id.indexOf('|') - 8);
		var selectedOptions = element.id.substr(element.id.indexOf('|') + 1);
		//console.log(element.value);
		$('articleTotal'+reference).setHTML($('quantity'+reference).value * $('pricePerUnit'+reference).innerHTML.toFloat(2));
		addToCart(id, element.value, false, selectedOptions);
	});
}
function showElement(container) {//shows or hides the container with id container
	if ($(container).getStyle('display') == 'none') container.setStyle('display','');
	else container.setStyle('display','none');
}
function importDeliveryAddress() {
}
function updateCustomer() {
}

