var imagesPool = new Array();
var languageRegExp = new RegExp(/\/[a-z][a-z]\/([a-z][a-z])\//);
var tmp = languageRegExp.exec(window.location);
var language = 'fr';
if (tmp) {
	language = tmp[1];
}

function Album() {
	// tableau des pages (pas forcément correctement numérotées)
	var pages = new Array();

	// tableau associant le numéro d'une page avec l'index de la page dans le tableau pages
	var pagesIndex = new Array();
	var totalPage = 0;

	this.getPage = getPage;
	this.addPage = addPage;
	this.addCover = addCover;
	this.deletePage = deletePage;
	this.insertPage = insertPage;
	this.swapPages = swapPages;
	this.movePage = movePage;
	this.dump = dump;
	this.dumpTo = dumpTo;
	this.save = save;
	this.toPHP = toPHP;

	this.reset = reset;
	this.make = make;
	this.getTotalPage = getTotalPage;

	this.addPage();

	function getPage(pageNumber) {
		//alert(pages[pagesIndex[pageNumber]]);
		return pages[pagesIndex[pageNumber]];
	}

	function getTotalPage() {
		return totalPage;
	}

	function addPage() {
		var i = 0;
		while (pages[i]) {
			i++;
		}

		pages[i] = new Page();

		totalPage++;
		pagesIndex[totalPage] = i;
	}

	function addCover() {
		var i = 0;
		while (pages[i]) {
			i++;
		}

		pages[i] = new Page();

		pagesIndex[0] = i;
	}

	function deletePage(pageNumber) {
		//alert(pageNumber + ' / ' + totalPage);
		if (pages[pagesIndex[pageNumber]]) {
			delete(pages[pagesIndex[pageNumber]]);
			for (var i = pageNumber; i < totalPage; i++) {
				pagesIndex[i] = pagesIndex[i+1];
			}

			delete(pagesIndex[totalPage]);
			totalPage--;
		}
	}

	function insertPage(page, pageNumber) {
		//alert('insertPage(' + pageNumber + ')');
		addPage(page);
		movePage(totalPage, pageNumber);
	}

	function swapPages(pageNumber1, pageNumber2) {
		var tmp = pagesIndex[pageNumber1];
		pagesIndex[pageNumber1] = pagesIndex[pageNumber2];
		pagesIndex[pageNumber2] = tmp;
	}

	// déplace une page en décalant les autres
	function movePage(pageNumber1, pageNumber2) {
		//alert('movePage(' + pageNumber1 + ', ' + pageNumber2+ ')');

		if (pageNumber2 < 1) {
			return;
		}

		if (pageNumber2 > totalPage) {
			pageNumber2 = totalPage;
		}

		var tmp;
		if (pageNumber1 < pageNumber2) {
			tmp = pagesIndex[pageNumber1];
			for (var i = pageNumber1; i < pageNumber2; i++) {
				pagesIndex[i] = pagesIndex[i + 1];
			}

			pagesIndex[pageNumber2] = tmp;
		} else {
			tmp = pagesIndex[pageNumber1];
			for (var i = pageNumber1; i > pageNumber2; i--) {
				pagesIndex[i] = pagesIndex[i - 1];
			}

			pagesIndex[pageNumber2] = tmp;
		}

	}

	function dump() {
		var s = '';
		s += 'Nombre d\'éléments dans le tableau pagesIndex: ' + pagesIndex.length + "\n";
		s += 'totalPage: ' + totalPage + "\n";
		for (var i = 0; i <= totalPage; i++) {
			s += i + ' -> ' + pagesIndex[i] + "\n";
		}

		r = s;

		s = 'Détail des pages' + "\n";
		for (var i = 0; i <= totalPage; i++) {
			s += i + ' -> ' + pages[pagesIndex[i]].getSrcProperty('id') + "\n";
		}

		return r + "\n" + s;
	}

	function dumpTo(o) {
		var s = '';
		s += 'totalPage: ' + totalPage + "\n";
		s += 'pagesIndex:' + "\n";
		for (var i = 0; i <= totalPage; i++) {
			s += i + ' -> ' + pagesIndex[i] + "\n";
		}

		s += 'pages:' + "\n";
		for (var i in pages) {
			if (typeof(pages[i]) == 'object') {
				s += i + ' -> ' + pages[i].getSrcProperty('id') + "\n";
				s += '	' + pages[i].getAssociatedImg().id + "\n";
			}
		}

		o.value = s;
	}

	function save() {
		s = '';
		for (var i = 0; i <= totalPage; i++) {
			s += pages[pagesIndex[i]].getUrl().replace(base, ''); + "\n";
		}

	}

	function reset() {
		//alert(pageNumber + ' / ' + totalPage);
		for (var i = 1; i <= totalPage; i++) {
			delete(pages[pagesIndex[i]]);
			delete(pagesIndex[i]);
		}

		totalPage = 0;
	}

	function make(a) {
		reset();

		var c = 0;
		for (var i in a) {
			if (typeof(a[i]) != 'number') {
				continue;
			}

			pages[c] = new Page();
			pages[c].setSrcProperty('id', a[i]);

			totalPage++;
			pagesIndex[totalPage] = c;

			c++;

		}

		//alert(totalPage);
	}

	function toPHP() {
		var s = '';

		for (var i = 0; i <= totalPage; i++) {
			var item = 'page' + i;
			s += 's:' + item.length + ':"' + item + '";';
			s += pages[pagesIndex[i]].toPHP();
		}

		s = 'a:' + (totalPage + 1) + ':{' + s + '}';

		return s;
	}
}

function Photo(id) {
	//alert('Photo');
	this.id = '';
	this.rotate = 0;
}

function Text(txt) {
	//alert('Photo');
	this.txt = '';
	this.c = 'cA0A0A0';
	this.f = '0';
	this.s = '10';
//  this.b = 'c000000';
	this.g = 'C';
}

function Page() {
	//alert('Page constructor');
	var associatedImg = null;
	var url;

	var bg = new Object();
	bg.id = 0;
	bg.model = 0;

	var srcs;

	srcs = new Array();
	srcs[0] = new Photo();

	var txts = new Array();
	txts[0] = new Text();

	var finalObject = new Object();

	constructUrl;

	this.associateTo = associateTo;
	this.refresh = refresh;

	this.setBgProperty = setBgProperty;
	this.getBgProperty = getBgProperty;

	this.setSrcProperty = setSrcProperty;
	this.getSrcProperty = getSrcProperty;

	this.setTxtProperty = setTxtProperty;
	this.getTxtProperty = getTxtProperty;

	this.setfinalProperty = setfinalProperty;

	this.clone = clone;
	this.copy = copy;
	this.reset = reset;

	this.getUrl = getUrl;
	this.getAssociatedImg = getAssociatedImg;
	this.toPHP = toPHP;
	this.dump = dump;

	function getAssociatedImg() {
		return associatedImg;
	}

	function getUrl() {
		constructUrl();
		return url;
	}

	function associateTo(o) {
		associatedImg = o;
	}

	function setSrcProperty(property, p) {
		//alert('setSrcProperty(' + property + ', ' + p + ')');
		srcs[0][property] = p;
	}

	function getSrcProperty(property) {
		//alert('getSrcProperty(' + property + ')');
		return srcs[0][property];
	}

	function setTxtProperty(property, p, i) {
		//alert('setTxtProperty(' + property + ', ' + p + ')');
		if (typeof(i) == 'undefined') {
			i = 0;
		}

		if (typeof(txts[i]) == 'undefined') {
			txts[i] = new Array();
		}

		txts[i][property] = p;
	}

	function getTxtProperty(property, i) {
		//alert('getTxtProperty(' + property + ')');
		if (typeof(i) == 'undefined') {
			i = 0;
		}
		return txts[i][property];
	}

	function setBgProperty(property, p) {
		//alert('setBgProperty(' + property + ', ' + p + ')');
		bg[property] = p;

		adaptTextColor();
	}

	function setfinalProperty(property, p) {
		//alert('setfinalProperty(' + property + ', ' + p + ')');
		finalObject[property] = p;
	}

	function getBgProperty(property) {
		//alert('getBgProperty(' + property + ')');
		return bg[property];
	}

	function adaptTextColor() {
		switch (bg['id']) {
			case '1':
			case '2':
				switch (txts[0]['c']) {
					case 'cFFEFFF':
					case 'cFFFFFF':
						txts[0]['c'] = 'c000000';
						break;
				}
				break;

			case '3':
				switch (txts[0]['c']) {
					case 'c000000':
						txts[0]['c'] = 'cFFFFFF';
						break;
				}
				break;
		}
	}

	function reset() {
		for (var p in bg) {
			switch (typeof(bg[p])) {
				case 'string':
				case 'number':
					bg[p] = '';
					break;
				default:
			}
		}

		for (var i = 0; i < srcs.length; i++) {
			s = new Array();
			for (var p in srcs[i]) {
				switch (typeof(srcs[i][p])) {
					case 'string':
					case 'number':
						srcs[i][p] = '';
						break;
					default:
				}
			}
		}

		for (var i = 0; i < txts.length; i++) {
			s = new Array();
			for (var p in txts[i]) {
				switch (typeof(txts[i][p])) {
					case 'string':
					case 'number':
						txts[i][p] = '';
						break;
					default:
				}
			}
		}
	}

	function constructUrl() {
		//alert('constructUrl');
		url = base;
		url += '&d=' + directory;

		s = new Array();
		for (var p in bg) {
			switch (typeof(bg[p])) {
				case 'string':
				case 'number':
					if (p != 'model') {
						if (bg[p] && bg[p] != 0 && bg[p] != '') {
							s.push(p + '(' + bg[p] + ')');
						}
					} else {
							s.push(p + '(' + bg[p] + ')');
					}
					break;
				default:
			}
		}

		url += '&bg=' + s.join('+');

		var ok = false;
		for (var i = 0; i < srcs.length; i++) {
			s = new Array();
			for (var p in srcs[i]) {
				switch (typeof(srcs[i][p])) {
					case 'string':
					case 'number':
						if (srcs[i][p] && srcs[i][p] != 0 && srcs[i][p] != '') {
							switch (p) {
								case 'id':
									if (typeof(srcs[i]['d']) != 'undefined') {
										id = srcs[i]['d'] + '.' + srcs[i]['id'];
									} else {
										id = srcs[i]['id'];
									}

									s.push('id(' + id + ')');

									ok =true;
									break;

								case 'd':
									break;

								default:
												s.push(p + '(' + srcs[i][p] + ')');
							}
						}
						break;
					default:
				}
			}

			if (!ok) {
		  s.push('ex(ex_' + language + ')');
			}

			url += '&src' + i + '=' + s.join('+');
		}

		for (var i = 0; i < txts.length; i++) {
			s = new Array();

			if (txts[i]['txt'] != '') {
				for (var p in txts[i]) {
					switch (typeof(txts[i][p])) {
						case 'string':
						case 'number':
							if (txts[i][p] && txts[i][p] != 0 && txts[i][p] != '') {
								s.push(p + '(' + txts[i][p] + ')');
							}
							break;

						default:
					}
				}
			}

			s.push('b(cFFD0D0)');

			//alert('Joined: ' + s.join('+'));
			url += '&txt' + i + '=' + s.join('+');
		}

		s = new Array();
		for (var p in finalObject) {
			switch (typeof(finalObject[p])) {
				case 'string':
				case 'number':
					if (p != 'model') {
						if (finalObject[p] && finalObject[p] != 0 && finalObject[p] != '') {
							s.push(p + '(' + finalObject[p] + ')');
						}
					} else {
							s.push(p + '(' + finalObject[p] + ')');
					}
					break;
				default:
			}
		}

		if (s.length > 0) {
			url += '&final=' + s.join('+');
		}
	}

	function dump() {
		//alert('constructUrl');
		r = base;
		r += '\nd=' + directory;

		s = new Array();
		for (var p in bg) {
			switch (typeof(bg[p])) {
				case 'string':
				case 'number':
					if (bg[p] && bg[p] != 0 && bg[p] != '') {
						s.push(p + '(' + bg[p] + ')');
					}
					break;
				default:
			}
		}

		r += '\nbg=' + s.join('+');

		for (var i = 0; i < srcs.length; i++) {
			if (src[i]['id'] == '' && src[i]['ex'] == '') {
				continue;
			}

			s = new Array();
			for (var p in srcs[i]) {
				switch (typeof(srcs[i][p])) {
					case 'string':
					case 'number':
						if (srcs[i][p] && srcs[i][p] != 0 && srcs[i][p] != '') {
							s.push(p + '(' + srcs[i][p] + ')');
						}
						break;
					default:
				}
			}

			r += '\nsrc' + i + '=' + s.join('+');

		}

		for (var i = 0; i < txts.length; i++) {
			if (txts[i]['txt'] == '') {
				continue;
			}

			s = new Array();
			for (var p in txts[i]) {
				switch (typeof(txts[i][p])) {
					case 'string':
					case 'number':
						if (txts[i][p] && txts[i][p] != 0 && txts[i][p] != '') {
							s.push(p + '(' + txts[i][p] + ')');
						}
						break;
					default:
				}
			}

			r += '\ntxt' + i + '=' + s.join('+');
		}

		alert(r);
	}

	function toPHP() {
		var s ='';

		var item = 'directory';
		s += 's:' + item.length + ':"' + item + '";';
		s += 's:' + directory.length + ':"' + directory + '";';

		item = 'bg';
		s += 's:' + item.length + ':"' + item + '";';
		s += bg.toPHP();

		item = 'srcs';
		s += 's:' + item.length + ':"' + item + '";';
		s += srcs.toPHP();

		item = 'txts';
		s += 's:' + item.length + ':"' + item + '";';
		s += txts.toPHP();

		s = 'a:4:{' + s + '}';

		return s;
	}

	function clone() {
		//alert('clone');
		var tmp = new Page();

		copy(tmp);

		return tmp;
	}

	function copy(newPage) {
		//alert('copy(' + newPage + ')');
		s = new Array();

		newPage.reset();

		for (var p in bg) {
			if (typeof(bg[p]) != undefined) {
				newPage.setBgProperty(p, bg[p]);
			}
		}

		for (var i = 0; i < srcs.length; i++) {
			//newPage.srcs[i] = new Array();
			for (var p in srcs[i]) {
				if (typeof(srcs[i][p]) != undefined) {
					newPage.setSrcProperty(p, srcs[i][p]);
				}
			}
		}

		for (var i = 0; i < txts.length; i++) {
			//newPage.txts[i] = new Array();
			for (var p in txts[i]) {
				if (typeof(txts[i][p]) != undefined) {
					newPage.setTxtProperty(p, txts[i][p]);
				}
			}
		}

	}

	function refresh() {
		//alert('refresh');
		constructUrl();
		if (associatedImg) {
			if (typeof(imagesPool) != 'undefined') {
				if (typeof(imagesPool[url]) == 'undefined') {
					imagesPool[url] = new Image();
					imagesPool[url].src = url;
				}

				associatedImg.src = imagesPool[url].src;
			} else {
				associatedImg.src = url;
			}
		}
	}
}

