/*
	JS Extending Library
	Must be loaded before any other JS scripts
	v 2.1.0.5
	build 200806181540
*/

var jsExtLibData = {
	objects: {},
	browser: '',
	version: '',
	debug: true
};

function checkPassStrength(password) {
	var hasDigits = false;
	var hasLowerLetters = false;
	var hasUpperLetters = false;
	var hasOtherSigns = false;

	var digits = "0123456789";
	var lowerLetters = "abcdefghijklmopqrstuvwxyz";
	var upperLetters = "ABCDEFGHIJKLMOPQRSTUVWXYZ";
	var otherSigns = "~`!@#$%^&*+-=_|\\/()[]{}<>,.;:?\"\'";

	var SO = password.length;
	for (var i = 0; i < SO; i++) {
		hasDigits |= digits.indexOf(password.charAt(i)) >= 0;
		hasLowerLetters |= lowerLetters.indexOf(password.charAt(i)) >= 0;
		hasUpperLetters |= upperLetters.indexOf(password.charAt(i)) >= 0;
		hasOtherSigns |= otherSigns.indexOf(password.charAt(i)) >= 0;
	}
	
	return Math.round(Math.log(Math.pow((hasDigits ? 10 : 0) + (hasLowerLetters ? 26 : 0) + (hasUpperLetters ? 26 : 0) + (hasOtherSigns ? 32 : 0), SO)));
}

function uniqid(l) {
	if (! isset(l)) l = 16;

	var digits = "0123456789";
	var letters = "ABCDEFGHIJKLMOPQRSTUVWXYZ"
	var res = "";

	for (var i = 0; i < l; ++i) res += (random(1,2) == 1 ? digits.charAt(random(0, digits.length - 1)) : letters.charAt(random(0, letters.length - 1)));

	return res;
}

function time() {
	return new Date().getTime();
}

function IDgen() {
	return time().toString() + Number.rand(10000, 99999).toString();
}

function isset(v) {
	return (typeof(v) == 'undefined' ? false : true);
}

function empty(v) {
	return (isset(v) ? (v == '0'   ||   v == 0   ||   v == null   ||   v == '' ? true : false) : true);
	//return (isset(v) ? (in_array(v, ['0', 0, null, '']) ? true : false) : true);
}

function $(id) {
	if (typeof jsExtLibData.objects[id] == 'undefined'  &&  jsExtLibData.objects[id]) return jsExtLibData.objects[id];
	return (jsExtLibData.objects[id] = document.getElementById(id));
}

function addEvent(ev, o, func, useCapture) {
	// useCapture required only for compability with older versions
	if (! o) return false;
	
	if (isIE()) o.attachEvent("on"+ ev, (typeof(func) == 'string' ? function(){eval(func)} : func));
	else o.addEventListener(ev, (typeof(func) == 'string' ? function(){eval(func)} : func), false);
}

function removeEvent(ev, o, func) {
	if (! isIE()) o.removeEventListener(ev, function(){}, false);
	else o.detachEvent("on" + ev, function(){});
}
/*
function browser(full) {
	if (!isset(full)) var full = false;

	if (jsExtLibData['browser'] == '') {
		if (navigator.appName == 'Microsoft Internet Explorer') jsExtLibData['browser'] = 'IE';
		else if (navigator.platform == 'MacPPC'   &&   navigator.appName == 'Netscape') jsExtLibData['browser'] = 'SAFARI';
		else if (/Opera/i.test(navigator.userAgent)) jsExtLibData['browser'] = 'OPERA';
		else if (/Firefox/i.test(navigator.userAgent)) jsExtLibData['browser'] = 'FIREFOX';
	}
	if (!full) return jsExtLibData['browser'];
	
	switch (jsExtLibData['browser']) {
		case 'IE': jsExtLibData['version'] = ''; break;
	}
	return {browser: jsExtLibData['browser'], version: jsExtLibData['version']};
}
*/
function isIE() {
	return (navigator.appName == 'Microsoft Internet Explorer');
}

function isSAFARI() {
	return (navigator.platform == 'MacPPC'   &&   navigator.appName == 'Netscape');
}

function isIE7() {
	return (navigator.userAgent.indexOf('MSIE 7') != -1 ? true : false);
}

function isOpera() {
	return (/Opera/i.test(navigator.userAgent));
}

function isFF() {
	return (/Firefox/i.test(navigator.userAgent));
}

function dump(data, mode, max_lvls) {
	if (! isset(max_lvls)) max_lvls = 0;
	var res = dump2(data, 0, max_lvls);
	
	switch (mode) {
		default: // popup
			if (typeof windows != 'undefined') {
				if (windows.popup) {
					var html = '<html><body style="font:10pt Arial,Sans-Serif">';
					html += res.replace(/\n/mg, '<br />').replace(/\t/mg, '&nbsp;&nbsp;&nbsp;&nbsp;');
					html += '</body></html>';
					windows.popup('', 'dump', 640, 480, '', '', 'scrollbars,resizable', html);
					return;
					break;
				}
			}
		case 'screen':
			document.body.innerHTML = res.replace(/\n/gm, '<br />').replace(/\t/gm, '&nbsp;&nbsp;&nbsp;&nbsp;');
			return;
		break;
	}

	alert(dump2(data, 0, max_lvls));
}

function dump2(data, lvl, max_lvls) {
	if (! isset(lvl)) lvl = 0;
	if (! isset(max_lvls)) max_lvls = 0;
	if (max_lvls > 0  &&  lvl >= max_lvls) return [];
	var v, k, res = [];

	for (k in data) {
		v = data[k];
		switch (typeof(v)) {
			case 'string':
				res.push(str_repeat('\t', lvl) + k +': "'+ v +'"');
			break;
			case 'number':
				res.push(str_repeat('\t', lvl) + k +': '+ v);
			break;
			case 'object':
				if (v == null) res.push(lvl + k +': NULL');
				else {
					switch (v.constructor) {
						case Array:
							res.push(str_repeat('\t', lvl) + k +': [\n'+ dump2(v, lvl + 1, max_lvls) +'\n'+ str_repeat('\t', lvl) +']');
						break;
						case Object:
							res.push(str_repeat('\t', lvl) + k +': {\n'+ dump2(v, lvl + 1, max_lvls) +'\n'+ str_repeat('\t', lvl) +'}');
						break;
					}
				}
			break;
		}
	}
	
	return res.join(',\n');
}

function moveObj2Event(e, id, offsetX, offsetY) {
	var x, y, o = $(id);
	if (o) {
		if (! e) e = window.event;
		
		if (! isset(offsetX)) offsetX = 0;
		if (! isset(offsetY)) offsetY = 0;
		
		x = parseInt(e.clientX) + parseInt(document.body.scrollLeft) + offsetX;
		y = parseInt(e.clientY) + parseInt(document.body.scrollTop) + offsetY;
		
		if (document.body.clientHeight < o.offsetHeight + y) y = y - o.offsetHeight;
		if (document.body.clientWidth < o.offsetWidth + x) x = x - o.offsetWidth;
		
		o.style.left = x +'px';
		o.style.top = y +'px';
	}
}

function copyright(o, from) {
	var y = new Date();
	y = parseInt(y.getFullYear());
	if (empty(from)) {
		o.innerHTML = y;
		return;
	}
	from = parseInt(from);
	
	o.innerHTML = (y - from > 0 ? from +'-'+ y : y);
}

function checkData(s, type) {
	// Data validation
	
	switch (type) {
		
		case 'date':
			if (/^(0|1|2|3)?[0-9]{1}\.(0|1|2)?[0-9]{1}\.(1|2)[0-9]{3}$/gmi.test(s)) return true;
		break;
		
		case 'mail':
		case 'email':
			if (/^[a-z0-9_\-\.\^]+@[a-z0-9_\-\.]+\.[a-z]+$/i.test(s)) return true;
		break;
		
		case 'int':
		case 'integer':
		case 'number':
			if (s == parseInt(s)) return true;
		break;
		
		case 'float':
		case 'double':
			if (/^[0-9]+((.|,)[0-9]{0,2})?$/gmi.test(s)) return true;
		break;
		
		case 'httpLink':
			if (/^http(s)?:\/\/[a-z0-9_\.-]+\.[a-z]{2,5}/gmi.test(s)) return true;
		break;
		
		case 'ftpLink':
			if (/^ftp:\/\/[a-z0-9_\.-]+\.[a-z]{2,5}/gmi.test(s)) return true;
		break;
		
		case 'digitsletters':
		case 'digits-letters':
		case 'dl':
		case 'ld':
			if (/^[0-9a-z]+$/gmi.test(s)) return true;
		break;
		
	}
	
	return false;
}

function validateForm(vData, buttonID, debug) {
	// Automatic form validation
	
	var ok, v, id, el, checkSum = 0, realSum = 0, tmp, alerts = [];
	var fEls = eval(vData);
	if (! isset(debug)) debug = false;
	
	/*
		EXAMPLE of vData to pass
		
		var fEls = {
			'login' : {
				'max' : 16,
				'min' : 1,
				'func' : 'checkData("%value%", "dl")',
				'alert' : 'Invalid data in field Login.'
			},
			'pass' : {
				'max' : 50,
				'min' : 6
			},
			'sex' : {
				'min' : 1
			}
		};

	*/
	
	if (debug) {
		var console = $('console');
		console.innerHTML = '<table>';
	}
	
	for (id in fEls) {
		v = trim($(id).value.toLowerCase());
		for (el in fEls[id]) {
			if (el == 'alert') continue;
			checkSum++;
			ok = false;
			switch (el) {
				case 'max':
					if (v.length <= fEls[id][el]) {
						ok = true;
						realSum++;
						if (debug) console.innerHTML += '<tr onMouseOver="this.style.backgroundColor=\'#efe\'" onMouseOut="this.style.backgroundColor=\'\'"><td>'+ id +'</td><td> : </td><td>MAX</td><td> : </td><td><b>true</b></td></tr>';
					} else {
						if (debug) console.innerHTML += '<tr onMouseOver="this.style.backgroundColor=\'#efe\'" onMouseOut="this.style.backgroundColor=\'\'"><td>'+ id +'</td><td> : MAX : false<br />';
					}
				break;

				case 'min':
					if (v.length >= fEls[id][el]) {
						ok = true;
						realSum++;
						if (debug) console.innerHTML += '<tr onMouseOver="this.style.backgroundColor=\'#efe\'" onMouseOut="this.style.backgroundColor=\'\'"><td>'+ id +'</td><td> : </td><td>MIN</td><td> : </td><td><b>true</b></td></tr>';
					} else {
						if (debug) console.innerHTML += '<tr onMouseOver="this.style.backgroundColor=\'#efe\'" onMouseOut="this.style.backgroundColor=\'\'"><td>'+ id +'</td><td> : </td><td>MIN</td><td> : </td><td>false</td></tr>';
					}
				break;

				case 'func':
					tmp = fEls[id][el].replace(/%value%/gm, v);
					if (eval(tmp)) {
						ok = true;
						realSum++;
						if (debug) console.innerHTML += '<tr onMouseOver="this.style.backgroundColor=\'#efe\'" onMouseOut="this.style.backgroundColor=\'\'"><td>'+ id +'</td><td> : </td><td>FUNC ('+ tmp +')</td><td> : </td><td><b>true</b></td></tr>';
					} else {
						if (debug) console.innerHTML += '<tr onMouseOver="this.style.backgroundColor=\'#efe\'" onMouseOut="this.style.backgroundColor=\'\'"><td>'+ id +'</td><td> : </td><td>FUNC ('+ tmp +')</td><td> : </td><td>false</td></tr>';
					}
				break;
			}
			if (! ok) {
				if (isset(fEls[id]['alert'])) {
					if (fEls[id]['alert'] != '') alerts.push(fEls[id]['alert']);
				}
			}
			if (alerts.length > 0) alert(alerts.join('\n'));
		}
	}
	
	if (debug) {
		console.innerHTML += '</table>';
		console.innerHTML += realSum +' == '+ checkSum;
	}
	
	if (isset(buttonID)) {
		if (buttonID != '') {
			if (realSum == checkSum) $(buttonID).disabled = false;
			else $(buttonID).disabled = true;
		}
	}
	return (realSum == checkSum ? true : false);
}

function formCounter(id, max, name) {
	var o, c; // Object and Counter
	if (! isset(name)) name = 'counter';
	
	if (typeof(id) == 'string') o = $(id);
	else o = id;
	if (typeof(name) == 'string') c = $(name);
	else c = name;
	
	if (o) {
		var allow = max - o.value.length;
		if (allow < 0) {
	       	allow = 0;
			o.value = o.value.substr(0, max);
		}
	   	if (c) c.innerHTML = allow;
	}
}

function overlay(id, content) {
	var o;
	if (typeof(id) == 'string') o = $(id);
	else o = id;
	
	if (o) {
		o.innerHTML = content;
		toggleOn(o);
	}
}

function elrkjt(x, y, z) {
	// mailto: protection from bots
	document.write('<'+'a hr'+'ef="mai'+'lto:'+ x +'@'+ y +'.'+ z +'">'+ x +'@'+ y +'.'+ z +'</a>');
}

function imgSwap(id, state1, state2) {
	var o;
	if (typeof(id) == 'string') o = $(id);
	else o = id;
	
	if (o) {
		if (o.src.indexOf(state1) > -1) o.src = state2;
		else o.src = state1;
	}
	return true;
}

function classSwap(id, state1, state2) {
	var o;
	if (typeof(id) == 'string') o = $(id);
	else o = id;
	
	if (o) {
		if (o.className == state1) o.className = state2;
		else o.className = state1;
	}
	return true;
}

function changeOpacity(id, v) {
	var o;
	if (typeof(id) == 'string') o = $(id);
	else o = id;
	
	if (isIE()) o.filters.alpha.opacity = (v * 100).toString();
	else o.style.opacity = v;
}

var imgPreloader = {
	images: [],
	loading: [],
	loaded: [],
	onLoad: null,
		
	add: function(url) {
		imgPreloader.images.push(url);
	},
	
	load: function() {	
		var i = 0;
		var SO = imgPreloader.images.length;
		var perc = 0;
		for(i = 0; i < SO; ++i) {			
			imgPreloader.loading[i] = new Image();
			imgPreloader.loading[i].src = imgPreloader.images[i];
			//if (imgPreloader.loading[i].complete) imgPreloader.loaded.push(imgPreloader.images[i]);					
			//else 
			imgPreloader.loading[i].onload = function() {imgPreloader.loaded.push(imgPreloader.images[i]); imgPreloader.onLoadFire();}
			//if(imgPreloader.loaded.length == count(imgPreloader.loading)) imgPreloader.onLoadFire();	
			perc = Math.round(imgPreloader.loaded.length/imgPreloader.loading.length*100);
			if (perc > 99) imgPreloader.onLoadFire();
			if($('step2perc')) $('step2perc').innerHTML = perc+'%'; 				
		}		
	},
		
	onLoadFire: function() {		
		if (typeof(imgPreloader.onLoad) == 'function') {
			for(i = 0; i < count(imgPreloader.loading); ++i) imgPreloader.loading[i].onload = '';
			imgPreloader.onLoad();			
		}
	},
	
	skip: function() {
		if (typeof(imgPreloader.onLoad) == 'function') {
			imgPreloader.onLoad();
			imgPreloader.onLoad= null;
		}
	}
};


if (typeof(setCursor) == 'undefined') {
	function setCursor(type) {
		document.body.style.cursor = type;
	}
}

