function openWindow(uri, name, width, height, scrollbars) {
	
	if (scrollbars == "")
		scrollbars = "no";
	
	layout =	"width=" + width + ", " +
				"height=" + height + ", " +
				"dependent=yes, " +
				"hotkeys=no, " +
				"location=no, " +
				"menubar=no, " +
				"resizable=no, " +
				"scrollbars=" + scrollbars + ", " +
				"status=no, " +
				"toolbar=no";
	
	window.open(uri, name, layout);
}

function checkEmail (emailStr) {
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) {
		alert("Email address seems incorrect (check @ and .'s)");
		return false;
	}

	var user=matchArray[1];
	var domain=matchArray[2];

	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			alert("Ths username contains invalid characters.");
			return false;
		}
	}

	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			alert("Ths domain name contains invalid characters.");
			return false;
		}
	}

	if (user.match(userPat)==null) {
		alert("The username doesn't seem to be valid.");
		return false;
	}

	var IPArray=domain.match(ipDomainPat);

	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				alert("Destination IP address is invalid!");
				return false;
		   }
		}

		return true;
	}

	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;

	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			alert("The domain name does not seem to be valid.");
			return false;
		}
	}

	if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
		alert("The address must end in a well-known domain or two letter " + "country.");
		return false;
	}

	if (len<2) {
		alert("This address is missing a hostname!");
		return false;
	}

	return true;
}

function resizeWindow(width, height) {
	window.resizeTo(width, height);
}

function measure(field, max, output, output_current) {	
	if (field.value.length > max)	{
		field.value = field.value.substring(0, max);
	}
	
	document.getElementById(output).innerHTML = max-field.value.length;
	
	if (output_current != null)
		document.getElementById(output_current).innerHTML = field.value.length;
}

function addOption(elementId, value, descr) {
		document.getElementById(elementId).options[document.getElementById(elementId).length] = new Option(descr, value, false, false);
}

function deleteOption(elementId) {
	optionsToDelete = getSelectedIndex(elementId);
	optionsToDelete.reverse();
	
	num = optionsToDelete.length;
	
	for (i=0; i<num; i++) {
		document.getElementById(elementId).options[optionsToDelete[i]] = null;
	}
}

function getSelectedIndex(elementId) {
	selectedIndex = new Array();
	var key = 0;
	
	for (i=0; i<document.getElementById(elementId).length; i++) {
		if (document.getElementById(elementId).options[i].selected == true) {
			selectedIndex[key] = i;
			key++;
		}
	}
	
	return selectedIndex;
}

function checkAllBoxesByForm(form, field, value) {
	if (!document.forms[form]) 
		return;
	
	var objCheckBoxes = document.forms[form].elements[field];
	
	if (!objCheckBoxes)
		return;
	
	var numCheckBoxes = objCheckBoxes.length;
	
	if (!numCheckBoxes)
		objCheckBoxes.checked = value;
	else
		for (var i=0; i<numCheckBoxes; i++)
			objCheckBoxes[i].checked = value;
}

function checkAllBoxes(elementName, value) {
	if (!document.getElementsByName(elementName)) 
		return;
	
	var objCheckBoxes = document.getElementsByName(elementName);
	
	if (!objCheckBoxes)
		return;
	
	var numCheckBoxes = objCheckBoxes.length;
	
	if (!numCheckBoxes)
		objCheckBoxes.checked = value;
	else
		for (var i=0; i<numCheckBoxes; i++)
			objCheckBoxes[i].checked = value;
}

function selectAllOptions(elementId, value) {	
	var objSelect = document.getElementById(elementId);
	
	if (!objSelect) 
		return;
	
	var numOptions = document.getElementById(elementId).length;
	
	if (!numOptions)
		return;
	else
		for (var i=0; i<numOptions; i++)
			objSelect.options[i].selected = value;
}

function showPreviewImage(elementId, imageId, altImage) {
	/**
	 * ???
	 *
	if (document.getElementById(elementId).selectedIndex > 0)
		document.getElementById(imageId).src = 'image.php?thumbnail=' + document.getElementById(elementId).options[document.getElementById(elementId).selectedIndex].value;
	else
		document.getElementById(imageId).src = altImage;
		
	alert(document.getElementById(imageId).src);
	*/
}

function getX(obj,relative) {
	var x = 0; 
	
	if (typeof(obj) == "object" && document.getElementById) { 
		x = obj.offsetLeft; 
		
		if (obj.offsetParent && !relative) { 
			x += getX(obj.offsetParent); 
		} 
		
		return x; 
	} 
	else { 
		return false; 
	} 
}

function getY(obj,relative) { 
	var y = 0; 
	
	if (typeof(obj) == "object" && document.getElementById) { 
		y = obj.offsetTop; 
		
		if (obj.offsetParent && !relative) { 
			y += getY(obj.offsetParent); 
		} 
		
		return y; 
	} 
	else  { 
		return false; 
	} 
}

function changeClassName(elementId, className) {
	document.getElementById(elementId).className = className;
}

function checkFormData(fields, lang) {
	var retVal = true;
	
	if (fields && fields != "") {
		var field = fields.split(",");
		
		for (var i=0; i<field.length; i++) {
			if (document.getElementById(field[i]).value == "") {
				alert(document.getElementById('label_' + field[i]).title + getErrorMsg('e_emptyfield', lang));
				document.getElementById(field[i]).focus();
				
				return false;
				break;
			}
		}
	}		
	
	return retVal;
}

function str_replace (search, replace, subject) {
	var result	= "";
	var  oldi	= 0;
	
	for (i=subject.indexOf(search); i>-1; i=subject.indexOf(search, i)) {
		result += subject.substring (oldi, i);
		result += replace;
		i += search.length;
		oldi = i;
	}
	
	return result + subject.substring (oldi, subject.length);
}

function setEmail(fields) {
	if (fields && fields != "") {			
		var field = fields.split(",");
		
		for (var i=0; i<field.length; i++) {
			var emailStr = document.getElementById(field[i]).title;
			
			emailStr	= str_replace(' at ', '@', emailStr);
			emailStr	= str_replace(' dot ', '.', emailStr);
			
			document.getElementById(field[i]).innerHTML	= emailStr;
			document.getElementById(field[i]).title		= 'mailto ' + emailStr;
			document.getElementById(field[i]).href 		= 'mailto:' + emailStr;
		}
	}		
	
}

function image_slider(class_name, fade, appear, timeout) {
	// get img count
	var img_count	=  document.getElementsByClassName(class_name).length;
	
	// switch images
	slide_image(class_name, fade, appear);
	
	//
	fade++;
	appear++;
	
	//
	if(appear > img_count){
		fade   = img_count;
		appear = 1;
	}
	
	if(fade > img_count){
		fade = 1;
	}

	// recall
	setTimeout("image_slider('" + class_name + "', " + fade + ", " + appear + ", " + timeout + ")", timeout);
}

function slide_image(class_name, fade, appear){
	Effect.Fade(class_name + fade);
	Effect.Appear(class_name + appear);
}