var errors = new Array();

var elementName = "element";
var elements = new Array();
var process = false;
var emailCookie = 'uploadEmail';
var uploadFileNr = 1;

function myGetElementById(elem) {
	if(document.getElementById) {
		return document.getElementById(elem);
	} else if(document.all) {
		if(document.all[elem]) {
			return document.all[elem];
		} else {
			return false;
		}
	} else {
		return false;
	}
}

if(![].pop) {
	Array.prototype.pop = function() {
		var tempItem = this[this.length - 1];
		this.length--;
		return tempItem;
	}
}

if(!window.encodeURI) {
	function encodeURI(string) {
		return escape(string);
	}
}

if(!window.encodeURIComponent) {
	function encodeURIComponent(string) {
		return escape(string);
	}
}

function showError(id) {
	var e;

	switch(id) {
		case 'NoImages':
			e = getString(41010);
			break;
		case 'NoJpeg':
			e = getString(41002);
			break;
		case 'InvalidEmail':
			e = getString(82);
			break;
		default:
			break;
	}

	alert(e);
}

function getEmail() {
	return window.document.forms["emailForm"].email.value;
}

function checkEmail(email) {
	if(email == '') {
		return false;
	}

	var pattern = /^.+@.+\.[^.]{2,4}$/
	if(email.search(pattern) == -1) {
		return false;
	}

	return true;
}

function saveEmail(email) {
	var time = new Date();
	var endTime = time.getTime() + (365 * 24 * 60 * 60 * 1000);
	time.setTime(endTime);

	document.cookie = emailCookie + '=' + email + '; expires=' + time.toGMTString();
	return true;
}

function loadEmail() {
	if(!document.cookie) {
		return '';
	}

	var cookies = document.cookie.split('; ');
	for(var i = 0; i < cookies.length; i++) {
		var parts = cookies[i].split('=', 2);
		if(parts[0] == emailCookie) {
			if(parts[1]) {
				return parts[1];
			} else {
				return '';
			}
		}
	}

	return '';
}

function getInfo(field) {
	form = document.forms["infoForm"];

	for(var i = 0; i < form.elements.length; i++) {
		if(form.elements[i].name == field) {
			return form.elements[i].value;
		}
	}

	return false;
}

function setInfo(field, value) {
	if(window.document.forms["infoForm"].elements[field]) {
		window.document.forms["infoForm"].elements[field].value = value;
	} else {
		return false;
	}
}

function changeElements(count, vendorid) {
	var mother = window.myGetElementById('uploadElements');
	
	if(isNaN(count) || count<1) {
		return false;
	}
	if(count > elements.length) {
		writeElements(mother, count, vendorid);
	} else if(count < elements.length) {
		removeElements(mother, count, vendorid);
	} else {
		return false;
	}
}

function writeElements(mother, count, vendorid) {
	for(var i = elements.length; i < count; i++) {
		elements[i] = new uploadElement(mother, i);
		elements[i].print();
	}
}

function removeElements(mother, count, vendorid) {
	for(var i = elements.length - 1; i >= count; i--) {
		elements[i].remove();
		elements.pop();
	}
}

function setOrderInfo(tan, orderid, vendor, email, successURL, lis) {
	for(var i = 0; i < elements.length; i++) {
		if(elements[i].isset()) {
			elements[i].prepareUpload(tan, orderid, vendor, email, successURL, lis);
		}
	}

	process.tan = tan;
	process.orderid = orderid;

	return true;
}

function getUploadFileCount() {
	var count = 0;
	for(var i = 0; i < elements.length; i++) {
		if(elements[i].isset()) {
			count++;
		}
	}
	return count;
}


function upload() {
	var error = false;
	var files = 0;

	var vendorid   = getInfo('vendorid');
	var successURL = getInfo('successUrl');

	var email      = getEmail();
	var lang       = getInfo('lang');

	if(elements.length) {
		for(var i = 0; i < elements.length; i++) {
			if(elements[i].isset() == false) {
				continue;
			} else {
				files++;
			}
			if(elements[i].check() == false) {
				elements[i].clean();
				showError('NoJpeg');
				error = true;
			}
		}
	}

	if(files == 0) {
		showError('NoImages');
		error = true;
	}

	if(checkEmail(email) == false) {
		showError('InvalidEmail');
		error = true;
	}

	if(error == false) {
		process = new uploadProcess(vendorid, email, lang, successURL, 280, 120);
		process.show();
		swapControlButtons(true);
	}
}

function cancelUpload() {
	swapControlButtons(false);
	try {
		process.stopProcess();
	} catch (e) {}
	
	if(IsPopupUploader()) {
		opener.goTo("images");
		self.close();
	} else if(document.backToCartForm && document.backToCartForm.tan.value != "") {
		document.backToCartForm.submit();
	}	
}

function IsPopupUploader() {
	if(document.completeForm &&
		document.completeForm.popupUploader &&
		document.completeForm.popupUploader.value == 1) {
		return true;
	} else {
		return false;	
	}
}
function swapControlButtons(mode) {
	// Mode true = uplading, false = not uploading (default)
	var cancel = window.myGetElementById("controlButtonCancel");
	var send   = window.myGetElementById("controlButtonUpload");

	if(!cancel || !send) {
		return false;
	}
	if(mode) {
		send.disabled = true;
		disableButton(send);
	} else {
		send.disabled = false;
		deactivateButton(send);
	}

	if(IsPopupUploader() || mode) {
		cancel.disabled = false;
		deactivateButton(cancel);
	} else {
		cancel.disabled = true;
		disableButton(cancel);
	}
}

function uploadNextFile(id) {
	process.adjustProgress(uploadFileNr++, sprintf(getString(10005), (elements[id].lfdnr + 1)));
	elements[id].upload(process.processFrameName);
}

function completeUpload() {
	process.adjustProgress((getUploadFileCount() + 1), getString(4020));
	process.complete();
}

function addLine(line) {
	return line + "\n";
}

function sleep(milisecs) {
	now = new Date();
	while(true) {
		out = new Date();
		if(out.getTime() - now.getTime() >= milisecs) {
			break;
		}
	}
	return true;
}

function getStartLFDNR() {
	if(getInfo('startLFDNR') != false && getInfo('startLFDNR') > 0) {
		return (Number(getInfo('startLFDNR')) - 1);
	} else {
		return -1;
	}
}

function getString(id) {
	return langstrings[id];
}

function sprintf() {
	// Get the String
	var string = sprintf.arguments[0];

	// Get the Argument List
	var args = new Array();
	for(var i = 1; i < sprintf.arguments.length; i++) {
		args[(i - 1)] = sprintf.arguments[i];
	}

	// Find placeholder
	var pattern = /%(s|d|.*f)/g;
	var matches = string.match(pattern);

	// Loop all placeholders
	for(var i = 0; i < matches.length && args[i]; i++) {
		var ident = matches[i].substring(matches[i].length - 1, matches[i].length);
		
		// Modify args
		if(ident == 'd') {
			args[i] = parseInt(args[i]);
		} else if(ident == 'f') {
			var pattern = /%(.*)f/;
			var format = matches[i].match(pattern)[1];
			if(format.length > 0 && args[i].toFixed) {
				args[i] = args[i].toFixed(format.substring(format.lastIndexOf('.') + 1, format.length + 1));
			}
		}
		
		// Replace in string
		string = string.replace(eval("/" + matches[i] + "/"), args[i]);
	}
	
	return string;
}

function doControlledSubmit(form) {
	return false;
	/*if(form.action == '') {
		upload();
		return false;
	} else {
		return true;
	}*/
}

function setErrors() {
	errors['NoImages'] = getString(41010);
	errors['NoJpeg'] = getString(41002);
	errors['InvalidEmail'] = getString(82);
}
