// common JS functions


// set the title of the parent window to be the same as the current page
top.window.document.title = document.title;


win = null;
interval = 60000; // reloaded hidden image to keep page active
baseSrc = "";
var TimeToFade = 450.0; // FADER TIME
warningMsgId = 0;

function reloadImage()
{
	if(baseSrc == "")
	{
		if(! document.images.imgReload)
		{
			return;
		}
		baseSrc = document.images.imgReload.src;
	}

	// add a random number to the end to prevent caching
	rnd = "";
	for(i=0; i<10; i++)
	{
		rnd = rnd + "" + Math.round(Math.random() * 10);
	}

	imgSrc = baseSrc + '?' + rnd;
	document.images.imgReload.src = imgSrc;

	setTimeout("reloadImage()", interval);
}

// auto reload the reload image to keep the users session alive
//setTimeout("reloadImage()", interval);


function help(helpfile)
{
	
	larg=(screen.width-600)/2;
	haut=(screen.height-500)/2;
	
		
	var windowNew = window.open(helpfile,"NewWindowHelp","scrollbars=yes,menubar=no,height=500,width=600,resizable=yes,toolbar=no,location=no,status=no,top="+haut+",left="+larg+"");
	windowNew.focus(); 
}


function getQueryVariable(variable) {
	try {
		var query = window.location.search.substring(1);
		var vars = query.split("&");
		for (var i=0; i < vars.length; i++) {
			var pair = vars[i].split("=");
			if (pair[0] == variable) {
				return unescape(pair[1]);
			}
		}
	} catch (e) {
	}
}


function d2h(d)
{
	var hD="0123456789ABCDEF";
	var h = hD.substr(d&15,1);
	while(d>15)
	{
		d>>=4;
		h=hD.substr(d&15,1)+h;
	}
	if(h.length == 1) h = "0" + h;
	return h;
}


function popUpWin(url,width,height,options)
{
	var leftPos=(screen.availWidth-width)/2;
	var topPos=(screen.availHeight-height)/2;
	options = options+',width='+width+',height='+height+',left='+leftPos+',top='+topPos;

	if(win && win.window)
	{
		win.close();
		win = null;
	}
	return window.open(url,win,options)
}


function getElemById(id)
{
	elem = null;
	if(document.getElementById)
	{
		elem = document.getElementById(id);
	}else if(document.all)
	{
		elem = document.all[id];
	}
	return elem;
}


// generic function to read the value of a form field of
// any type and return the value
function getFieldVal(field)
{
	var fieldValue = "";
	if(typeof(field) != "undefined")
	{
		if(typeof(field.selectedIndex) != "undefined")
		{
			// SELECTION LIST
			fieldValue = field[field.selectedIndex].value;
		}else if(typeof(field[0]) != "undefined")
		{
			// RADIO BUTTONS
			for(var i=0 ; i<field.length ; i++)
			{
				if(field[i].checked) fieldValue = field[i].value;
			}
		}else if(typeof(field.checked) != "undefined"){
			// CHECKBOX
			if(field.checked) fieldValue = field.value;
		}else{
			// SOMETHING ELSE (text box, text area, hidden, etc)
			if(field.value) fieldValue = field.value;
		}
	}
	return fieldValue;
}


/* function createDiv(divName)
get a div, or if it doesn't exist, create it
*/

function createDiv(divName, className, addStyle)
{
	style="";
	if(!className || className.length == 0)
	{
		style = "position:absolute;left:0px;top:0px;text-align:left;background-color:#ffffff;border:1px solid #000000; padding:5px;";
		className = "";
	}
	if(addStyle && addStyle.length > 0) style+= addStyle;
	if(!getElemById(divName)) // check if it exists 
	{
		// write the new div to the document body
		showDiv = document.createElement("div");
		showDiv.setAttribute("id", divName);
		showDiv.setAttribute("style", style);
		showDiv.setAttribute("className", className);
		document.body.appendChild(showDiv);
	}

	target = getElemById(divName);
	return target;
}


function getxpos(elem)
{
	pos = elem.offsetLeft;
	while(elem.offsetParent)
	{
		elem = elem.offsetParent;
		pos += elem.offsetLeft;
	}
	return pos;
}


function getypos(elem)
{
	pos = elem.offsetTop;
	while(elem.offsetParent)
	{
		elem = elem.offsetParent;
		pos += elem.offsetTop;
	}
	return pos;
}


// show a div next to the caller object with the speicifed content
function showContentInDiv(caller, divName, content)
{
	x = getxpos(caller)-6;
	y = getypos(caller)-6;

	return showDivInPos(divName, content, x, y);
}


function showDivInPos(divName, content, x, y)
{
	if(getElemById(divName))
	{
		target = getElemById(divName);
	}else{
		target = createDiv(divName);
	}

	target.innerHTML = content;
	target.style.visibility = "visible";
	target.style.left = x + "px";
	target.style.top	= y + "px";
	target.onmouseover = function(){showDivInPos(divName, content, x, y)};

	target.onmouseout = function(){hideDiv(divName)};

	return target;
}


// hide an element
function hideDiv(divName)
{
	if(getElemById(divName))
	{
		target = getElemById(divName);
		target.style.visibility = "hidden";
	}
}


function donothing()
{

}


function _isValidNumber(validate)
{
	var val = parseInt(validate);
	if (isNaN(val) || val < 0 || val > 9999)
	{
		return false;
	}
	return true;
}

function frogshowdiv(pass) {
	var divs = document.getElementsByTagName('div');
	for(i=0;i<divs.length;i++){
		if(divs[i].id.match(pass)){
			if (document.getElementById)
			divs[i].style.visibility="visible";
			else
			if (document.layers) // Netscape 4
			document.layers[divs[i]].display = 'visible';
			else // IE 4
			document.all.hideshow.divs[i].visibility = 'visible';
		}
	}
}

function froghidediv(pass)
{
	var divs = document.getElementsByTagName('div');
	for(i=0;i<divs.length;i++)
	{
		if(divs[i].id.match(pass))
		{
			if (document.getElementById)
			{
				divs[i].style.visibility="hidden";
			}else{
				if (document.layers)
				{
					document.layers[divs[i]].display = 'hidden';
				}else{
					document.all.hideshow.divs[i].visibility = 'hidden';
				}
			}
		}
	}
}


function showHideElement(id, caller)
{
	elem = getElemById(id);
	show = false;

	if(elem)
	{
		// check the caller element to get it's value
		if(caller && caller.type == "radio")
		{
			val = caller.value.toLowerCase();

			if(val == "yes" || val == "true")
			{
				show = true;
			}
		}else{
			// otherwise check the div to get it's current state
			if(elem.style.visibility == "hidden")
			{
				show = true;
			}
		}
		if(show)
		{
			elem.style.visibility = "visible";
			elem.style.display = "block";
		}else{
			elem.style.visibility = "hidden";
			elem.style.display = "none";
		}

	}

	return elem;
}


function textCounter(field,counter,maxlimit,linecounter)
{
	// text width//
	var fieldWidth =	100;
	var charcnt = field.value.length;
	var remain = maxlimit-charcnt;

	var caption = counter+"Caption";
	var holder	= counter+"Caption";
	getElemById(holder).style.width	=	parseInt(fieldWidth)+"px";

	// trim the extra text
	if (charcnt > maxlimit) 
	{
		field.value = field.value.substring(0, maxlimit);
		charcnt = field.value.length;
		remain = maxlimit-charcnt;
	}
	// progress bar percentage
	var percentage = parseInt(100 - (( maxlimit - charcnt) * 100)/maxlimit) ;
	getElemById(counter).style.width =	parseInt((fieldWidth*percentage)/100)+"px";
	getElemById(caption).innerHTML="Remaining: "+remain+"/"+maxlimit
}


function textCounterNotice(field, counter, maxlimit, linecounter)
{
	// text width//
	var fieldWidth =	100;
	var charcnt = field.value.length;
	var remain = maxlimit-charcnt;
	var parts = 1;

	var caption = counter+"Caption";
	var holder	= counter+"Caption";
	getElemById(holder).style.width	=	parseInt(fieldWidth)+"px";

	// trim the extra text
	if (charcnt > maxlimit) 
	{
		parts = Math.ceil(charcnt/maxlimit);
		remain = (parts*maxlimit)-charcnt;
	}
	// progress bar percentage
	var percentage = parseInt((( maxlimit - remain) * 100)/maxlimit) ;

	getElemById(counter).style.width =	parseInt((fieldWidth*percentage)/100)+"px";
	getElemById(caption).innerHTML="Remaining: "+remain+"/"+maxlimit +", Parts: "+parts+", Total: "+charcnt;
}


function textCounterSMS(field, counter, maxlimit, linecounter)
{
	var charcnt = field.value.length;
	if(charcnt > 160) maxlimit=157;
	textCounterNotice(field, counter, maxlimit, linecounter);
}


function check_date_settings(dateField)
{
	//get value of send_date

	dateElem = getElemById(dateField);
	if(dateElem)
	{
		dateValue=dateElem.value;
		// is send_date value empty?
		if(dateValue=='')
		{
			// if Date Value	 empty .... insert todays date automatically
			todaysDate=new Date();
			var month = todaysDate.getMonth() + 1;
			var day	 = todaysDate.getDate();
			var year	= todaysDate.getFullYear();

			if(month<10) month="0"+month;
			if(day<10)	 day="0"+day;
			var insertDate = day + "/" + month + "/" + year;
			//insert into the date field....
			dateElem.value=insertDate;
		}	
	}
}


//assign a function to execute to an event handler (ie: onunload)
function addTargetEvent(target, eventType, functionref)
{
	var eventType=(window.addEventListener)? eventType : "on"+eventType;
	if (target.addEventListener)
	{
		target.addEventListener(eventType, functionref, false);
	}else if (target.attachEvent)
	{
		target.attachEvent(eventType, functionref);
	}
}


// check if the user is using and old version of Safari( < 400 which is Safair 2)
function checkOldSafariVersion()
{
	var os = navigator.platform;
	var ua = navigator.userAgent;
	minSafariVersion = 500;

	if(os.indexOf("Mac") > -1)
	{
		if(ua.indexOf("Safari") > -1)
		{
			// get the version of Safari
			props = ua.match(/Safari\/([0-9\.]+)/);
			version = parseInt(props[1]);

			if(version < minSafariVersion)
			{
				return true;
			}
		}
	}
	return false;
}

// script 
function textKeystroke(e)
{
	// check the form SEARCH exists
	if(document.forms.search)
	{
		var unicode=(e.keyCode? e.keyCode : e.charCode);
		if(unicode == 13)
		{
			//document.forms.search.submit();
		}
	}
}


function RegExpEscape(text)
{
	var specials = ['/', '.', '*', '+', '?', '|','(', ')', '[', ']', '{', '}', '\\'];
	sRE = new RegExp('(\\' + specials.join('|\\') + ')', 'g');
	text = text.replace(sRE, "\\$1");
	return text;
}


function htmlspecialchars(string)
{
	arrFind = new Array("&", "\"", "\'", "<", ">");
	arrRepl = new Array("&amp;", "&quot;", "&#039;", "&lt;", "&gt;");

	for(var i=0; i<arrFind.length; i++)
	{
		nextFind = arrFind[i];
		nextRepl = arrRepl[i];

		var findRegex = new RegExp(nextFind, "g")
		string = string.replace(findRegex, nextRepl);

	}

	return string;
}


function html_entity_decode(string)
{
	arrFind = new Array("&quot;", "&#039;", "&lt;", "&gt;", "&amp;");
	arrRepl = new Array("\"", "\'", "<", ">", "&");

	for(var i=0; i<arrFind.length; i++)
	{
		nextFind = arrFind[i];
		nextRepl = arrRepl[i];

		var findRegex = new RegExp(nextFind, "g")
		string = string.replace(findRegex, nextRepl);

	}

	return string;
}



function getLang(string)
{
	searchString = html_entity_decode(string);


	if(searchString.length > 0 && searchString.match(/[a-zA-Z]/) && langHeaders)
	{

		testers = new Array(searchString, searchString.toLowerCase, searchString.replace(/ /g, "_"));

		for(i in testers)
		{
			curTest = testers[i];
			if(typeof curTest == "string")
			{
				if(in_array(curTest, langHeaders))
				{
					searchString = curTest;
					break;
				}
			}
		}

		if(searchString.length > 0)
		{
			index = in_array(searchString, langHeaders);
			string = langData[index];
		}

	}

	return string;
}



function confirmLogout()
{
	msg = getLang("confirm_logout");
	if(confirm(msg))
	{
		top.document.location = "./?context=logout&path=logout&logout=true";
	}
}



function in_array(needle, haystack)
{
	index = false;

	for(x in haystack)
	{
		if(haystack[x] == needle)
		{
			index = x;
			break;
		}
	}

	return index;
}


function resetFieldValues(fields)
{
	for(i=0; i<fields.length; i++)
	{
		fld = fields[i];
		if(getElemById(fld))
		{
			elem = getElemById(fld);
			if(elem.selectedIndex)
			{
				elem.selectedIndex = 0;
			}else if(elem.checked)
			{
				elem.checked = false;
			}else{
				elem.value = "";
			}
		}
	}
}

function displayWarningMessage(message)
{
	eid = "ajaxMessage";
	if(getElemById(eid))
	{	
		elem = getElemById(eid);
		elem.style.opacity = 100;
		elem.style.filter = 'alpha(opacity = 100)';
		elem.style.visibility = 'visible';
		elem.style.display = 'block';
		elem.innerHTML = message;
		warningMsgId++;
		setTimeout(function(){hideWarningMessage(warningMsgId, eid)}, 10000);
	}

}

function hideWarningMessage(id, eid)
{
	if(warningMsgId == id)
	{
		fadeOut(eid);
	}
}


function showElem(eid)
{
	if(getElemById(eid))
	{
		target = getElemById(eid);
		target.style.opacity = 100;
		target.style.filter = 'alpha(opacity = 100)';
		target.style.visibility = 'visible';
		target.style.display = 'block';
	}
}


function fadeOut(eid)
{
	fade(eid, -1);
}

function fadeIn(eid)
{
	fade(eid, 1);
}

function fade(eid, dir)
{
	var element = document.getElementById(eid);
	if(element == null) return;

	element.onmouseover = null; // disable mouse over
	element.FadeState = dir;
	element.FadeTimeLeft = TimeToFade;
	element.abortFade=false;
	setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 33);
}

function animateFade(lastTick, eid)
{
	var curTick = new Date().getTime();
	var elapsedTicks = curTick - lastTick;
	var element = document.getElementById(eid);
	if(element.abortFade) return false;
	if(element.FadeTimeLeft <= elapsedTicks)
	{
		element.style.opacity = element.FadeState == 1 ? '1' : '0';
		element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '100' : '0') + ')';
		element.FadeState = element.FadeState == 1 ? 2 : -2;
		element.style.visibility = "hidden";
		element.style.display = 'none';
		return;
	}

	element.FadeTimeLeft -= elapsedTicks;
	var newOpVal = element.FadeTimeLeft/TimeToFade;
	if(element.FadeState == 1) newOpVal = 1 - newOpVal;

	element.style.opacity = newOpVal;
	element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
 
	setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33);
}

function resetSelectListOptions(ID, newValues, removeExisting, defaultVal)
{

	if(!getElemById(ID))
	{
		return;
	}
	if(!defaultVal) defaultVal="";

	elem = getElemById(ID);
	index = elem.options.length;

	if(removeExisting) // remove all current options
	{
		for(i=0; i<index; i++)
		{
			elem.options[i] = null;
		}
		index = 0;
	}

	for(i=index; i<newValues.length; i++)
	{
		val = newValues[i];
		isDefault = false;
		if(val.toLowerCase() == defaultVal.toLowerCase()) isDefault = true;
		//alert(val+"=" + defaultVal + " is " +isDefault);
		elem.options[i] = new Option(val, val, isDefault, isDefault);
	}
}