var set_limiter=0;
var return_check_numeric=0;
function check_numeric(field){
	return_check_numeric=0;
	if(set_limiter==0){
		if(isNaN(eval(FormName+"."+field+".value"))){
			alert("Please enter only numeric values in this field!");
			eval(FormName+"['"+field+"'].value=''");
		}
		else{
			return_check_numeric=1;
		}
		set_limiter=0;
	}
	set_limiter=1;
}

function do_link(module,page,params){
	DaLink=path_index+"?_init="+module+"."+page+"&"+params;

	return DaLink;
}

function show_errors(err_list){

	err_log = err_list.join(" \n ");

	if(err_log.length==0){
		err_log=" No details available ";
	}

	alert(err_log);

}

function check_limit( frm, obj, max, msg){
	ob = eval("document."+frm+"['"+obj+"']");
	if(ob.value.length > max){
		eval("document."+frm+"['"+obj+"'].innerText = ob.value.substring(0,"+max+"-1)");
		alert ("You have reached the maximum number of "+max+" letters for this text box.");
	}
}

function set_select(sel_name,form_name,sel_index){

	sel_length=eval("document."+form_name+"."+sel_name+".length");

	for (optionCounter = 0; optionCounter < sel_length; optionCounter++){

		if (eval("document."+form_name+"."+sel_name+".options[optionCounter].value=='"+sel_index+"'")){

			eval("document."+form_name+"."+sel_name+".selectedIndex=optionCounter");

		}

	}

}

function set_select_multiple(sid, sop){
	var el = document.getElementById(sid);
	
	if (el != undefined && sop && sop.length > 0) {
		for (ii=0; ii < sop.length; ii++) {
			for (i=0; i < el.options.length; i++) {
				if (el.options[i].value == sop[ii]) {
					el.options[i].selected = selected;
				}
			}
		}
	}
}

function set_select_id(elid, val) {
	var el = document.getElementById(elid);
	for(i=0; i < el.options.length; i++){
		if(el.options[i].value == val){
			el.selectedIndex = i;
		}
	}
}

function set_navigation(sel_name,form_name,sel_index){
	eval("document."+form_name+"."+sel_name+".value=sel_index");
}

function upload_win(pkd,max,rst){

	window.open(path_index+'?_init=global.upload&pp=up&PKD='+pkd+'&max='+max+'&rst='+rst,'upload','width=400,height=400,directories=no,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no,resizable=no,left=0,top=0,screenx=50,screeny=50');

}

function set_checked(check_name,form_name,checked_mode){
	if(checked_mode==1){
		eval("document."+form_name+"."+check_name+".checked=true");
	}
}

function url_escape(string){

	out = "/";
	add = "&#47;";
	temp = "" + string;

	while (temp.indexOf(out)>-1) {
		pos= temp.indexOf(out);
		temp = "" + (temp.substring(0, pos) + add +
		temp.substring((pos + out.length), temp.length));
	}
	temp=escape(temp);
	return temp;

}

function check_input(user,pass,pass_retype,email){
	if(user==''){
		alert("Username missing!");
		return false;
	}
	else if(pass==''){
		alert("Password missing!");
		return false;
	}
	else if(pass_retype!=pass){
		alert("Passwords does not match!");
		return false;
	}
	else if(email==''){
		alert("Email address missing!");
		return false;
	}
	else{
		return true;
	}
}

function WinOpen(mypage,myname,w,h,win_position,Scrool){
	var win = null;
	if(win_position=="topright"){
		LeftPosition = (screen.width) ? (screen.width-w-12) : 0;
		TopPosition = 20;
	}
	else if(win_position=="center"){
		LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
		TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
	}

	settings ='height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+Scrool+',resizable=no'
	win = window.open(mypage,myname,settings)
}

function replaceSubstring(inputString, fromString, toString) {
	// Goes through the inputString and replaces every occurrence of fromString with toString
	var temp = inputString;
	if (fromString == "") {
		return inputString;
	}
	if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
	while (temp.indexOf(fromString) != -1) {
		var toTheLeft = temp.substring(0, temp.indexOf(fromString));
		var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
		temp = toTheLeft + toString + toTheRight;
	}
	} else { // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop
	var midStrings = new Array("~", "`", "_", "^", "#");
	var midStringLen = 1;
	var midString = "";
	// Find a string that doesn't exist in the inputString to be used
	// as an "inbetween" string
	while (midString == "") {
		for (var i=0; i < midStrings.length; i++) {
			var tempMidString = "";
			for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
			if (fromString.indexOf(tempMidString) == -1) {
				midString = tempMidString;
				i = midStrings.length + 1;
			}
		}
	} // Keep on going until we build an "inbetween" string that doesn't exist
	// Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string
	while (temp.indexOf(fromString) != -1) {
		var toTheLeft = temp.substring(0, temp.indexOf(fromString));
		var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
		temp = toTheLeft + midString + toTheRight;
	}
	// Next, replace the "inbetween" string with the "toString"
	while (temp.indexOf(midString) != -1) {
		var toTheLeft = temp.substring(0, temp.indexOf(midString));
		var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
		temp = toTheLeft + toString + toTheRight;
	}
	} // Ends the check to see if the string being replaced is part of the replacement string or not
	return temp; // Send the updated string back to the user
} // Ends the "replaceSubstring" function

function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.0
var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
	if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
	if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function TakeAction(action,logins_key,UserName){

	var seed = Math.random();

	if(MY_KEY>0 && MY_ACTIVE=='2'){
		// OK CONTINUE
		if(action=='smile'){

			imgActions.src=do_link('user','relation_set','pp=up&relation=smile&logins_key='+logins_key+"&"+seed);
			msg="Schmooze successfully sent to "+UserName;
			setTimeout("alert(msg)",1000);

		}
		else if(action=='fav'){

			imgActions.src=do_link('user','relation_set','pp=up&relation=fav&logins_key='+logins_key+"&"+seed);
			msg="You have successfully added "+UserName+" to your favorites list.";
			setTimeout("alert(msg)",1000);

		}
		else if(action=='block'){

			imgActions.src=do_link('user','relation_set','pp=up&relation=block&logins_key='+logins_key+"&"+seed);
			msg="User successfully blocked";
			setTimeout("alert(msg)",1000);

		}
	}
	else if(MY_KEY>0 && MY_ACTIVE!='2'){
		msg="You will be able to do this after your profile is approved.";
		setTimeout("alert(msg)",1000);
	}
	else if(MY_COK_USERENAME!=''){
		document.location=do_link('user','myaccount','');
	}
	else{
		document.location=do_link('user','signup','from=relation');
	}

}

//################################################################################ NEW FUNCTIONS

var isNN = (navigator.appName.indexOf("Netscape") != -1);
var isIE = (navigator.appName.indexOf("Microsoft") != -1);
var IEVersion = (isIE ? getIEVersion() : 0);
var NNVersion = (isNN ? getNNVersion() : 0);
var EditableGrid = false;
var disableValidation = false;

function checkDate(dateValue, dateFormat)
{
	var DateMasks = new Array(
	new Array("MMMM", "[a-z]+"),
	new Array("mmmm", "[a-z]+"),
	new Array("yyyy", "[0-9]{4}"),
	new Array("MMM", "[a-z]+"),
	new Array("mmm", "[a-z]+"),
	new Array("HH", "([0-1][0-9]|2[0-4])"),
	new Array("hh", "(0[1-9]|1[0-2])"),
	new Array("dd", "([0-2][0-9]|3[0-1])"),
	new Array("MM", "(0[1-9]|1[0-2])"),
	new Array("mm", "(0[1-9]|1[0-2])"),
	new Array("yy", "[0-9]{2}"),
	new Array("nn", "[0-5][0-9]"),
	new Array("ss", "[0-5][0-9]"),
	new Array("w", "[1-7]"),
	new Array("d", "([1-9]|[1-2][0-9]|3[0-1])"),
	new Array("y", "([1-2][0-9]{0,2}|3([0-5][0-9]|6[0-5]))"),
	new Array("H", "(00|0?[1-9]|1[0-9]|2[0-4])"),
	new Array("h", "(0?[1-9]|1[0-2])"),
	new Array("M", "(0?[1-9]|1[0-2])"),
	new Array("m", "(0?[1-9]|1[0-2])"),
	new Array("n", "[0-5]?[0-9]"),
	new Array("s", "[0-5]?[0-9]"),
	new Array("q", "[1-4]")
	);
	var regExp = "^"+stringToRegExp(dateFormat)+"$";
	for (var i=0; i<DateMasks.length; i++)
	{
		regExp = regExp.replace(DateMasks[i][0], DateMasks[i][1]);
	}
	var regExp = new RegExp(regExp,"i");
	return String(dateValue).search(regExp)!=-1;
}

function stringToRegExp(string, arg)
{
	var str = String(string);
	str = str.replace(/\\/g,"\\\\");
	str = str.replace(/\//g,"\\/");
	str = str.replace(/\./g,"\\.");
	str = str.replace(/\(/g,"\\(");
	str = str.replace(/\)/g,"\\)");
	str = str.replace(/\[/g,"\\[");
	str = str.replace(/\]/g,"\\]");
	return str;
}

function GetValue(control) {
	if (typeof(control.value) == "string") {
		return control.value;
	}
	if (typeof(control.tagName) == "undefined" && typeof(control.length) == "number") {
		var j;
		for (j=0; j < control.length; j++) {
			var inner = control[j];
			if (typeof(inner.value) == "string" && (inner.type != "radio" || inner.status == true)) {
				return inner.value;
			}
		}
	}
	else {
		return GetValueRecursive(control);
	}
	return "";
}

function GetValueRecursive(control)
{
	if (typeof(control.value) == "string" && (control.type != "radio" || control.status == true)) {
		return control.value;
	}
	var i, val;
	for (i = 0; i<control.children.length; i++) {
		val = GetValueRecursive(control.children[i]);
		if (val != "") return val;
	}
	return "";
}




function getNNVersion()
{
	var userAgent = window.navigator.userAgent;
	var isMajor = parseInt(window.navigator.appVersion);
	var isMinor = parseFloat(window.navigator.appVersion);
	if (isMajor == 2) return 2;
	if (isMajor == 3) return 3;
	if (isMajor == 4) return 4;
	if (isMajor == 5) return 6;
	return isMajor;
}

function getIEVersion()
{
	var userAgent = window.navigator.userAgent;
	var MSIEPos = userAgent.indexOf("MSIE");
	return (MSIEPos > 0 ? parseInt(userAgent.substring(MSIEPos+5, userAgent.indexOf(".", MSIEPos))) : 0);
}

function inputMasking(evt)
{
	if (isIE && IEVersion > 4)
	{
		if (window.event.altKey) return false;
		if (window.event.ctrlKey) return false;
		if (typeof(this.ccsInputMask) == "string")
		{
			var mask = this.ccsInputMask;
			var keycode = window.event.keyCode;
			this.value = applyMask(keycode, mask, this.value);
		}
		return (window.event.keyCode==13?true:false);
	} else if (isNN && NNVersion<6)
	{
		if (evt.ALT_MASK) return false;
		if (evt.CONTROL_MASK) return false;
		if (typeof(this.ccsInputMask) == "string")
		{
			var mask = this.ccsInputMask;
			var keycode = evt.which;
			this.value = applyMask(keycode, mask, this.value);
		}
		return (evt.which==13?true:false);
	} else if (isNN && NNVersion==6)
	{
		if (evt.altKey) return false;
		if (evt.ctrlKey) return false;
		if (typeof(this.ccsInputMask) == "string")
		{
			var mask = this.ccsInputMask;
			this.value = applyMaskToValue(mask, this.value);
		}
		return (evt.which==13?true:false);
	} else
	return true;
}

function applyMaskToValue(mask, value)
{
	var oldValue = String(value);
	var newValue = "";
	for (var i=0; i<oldValue.length; i++)
	{
		newValue = applyMask(oldValue.charCodeAt(i), mask, newValue);
	}
	return newValue;
}

function applyMask(keycode, mask, value)
{
	var digit = (keycode >= 48 && keycode <= 57);
	var plus = (keycode == 43);
	var dash = (keycode == 45);
	var space = (keycode == 32);
	var uletter = (keycode >= 65 && keycode <= 90);
	var lletter = (keycode >= 97 && keycode <= 122);

	var pos = value.length;
	switch(mask.charAt(pos))
	{
		case "0":
		if (digit)
		value += String.fromCharCode(keycode);
		break;
		case "L":
		if (uletter || lletter)
		value += String.fromCharCode(keycode);
		default:
		var isMatchMask = (String.fromCharCode(keycode) == mask.charAt(pos));
		while (pos < mask.length && mask.charAt(pos) != "0")
		value += mask.charAt(pos++);
		if (!isMatchMask && pos < mask.length)
		value = applyMask(keycode, mask, value);
	}
	return value;
}




function get_element_by_id(id)
{
	var obj;

	if (document.all){
		eval('obj = document.all("' + id + '")');
	}
	else if (document.layers){
		eval('obj = document.layers["' + id + '"]');
	}
	else if (document.getElementById){
		eval ('obj = document.getElementById ("' + id + '")');
	}

	return obj;
}

var EL_VISIB = new Array();
function toggle_element(el, visible){

	visible = (visible != false && visible != true) ? (EL_VISIB[el] ? false : true) : visible;
	var el_handle = get_element_by_id(el);

	if (el_handle) {
		if (!visible) {
			el_handle.style.display = 'none';
		}
		else if (visible) {
			el_handle.style.display = '';
		}

		EL_VISIB[el] = visible;
	}
}

// DOM MENU EFFECT SYSTEM -----------------------------------------------------------------------------------------------

var options_container = null;
var OPT = new Array();
var last_selected = null;
var last_hovered = null;
var last_hovered_class = null;

function bind_menu_effect(container_id, css_default, css_over, css_selected, option_type, onclick_callback_function, selected_option_index){

	// init options index, this will count first option as 1 and last option as options.length this cannot be done thru node index as there are nodes that are skipped between the options
	var options_index = 0;
	
	// set default selected option index
	selected_option_index = selected_option_index ? selected_option_index : null;
	
	// get referrence to options container
	options_container = get_element_by_id(container_id);
	
	// set default option node type if none is given
	option_type = option_type ? option_type : 'TD';
	
	// prepare options
	for(node_index=0; node_index < options_container.childNodes.length; node_index++){
		if(options_container.childNodes[node_index].nodeName == option_type){

			// increment options index
			options_index++;
			
			// if default option is given then mark it as selected
			if(selected_option_index && options_index == selected_option_index){
				last_selected = options_container.childNodes[node_index];
				options_container.childNodes[node_index].className = css_selected;
			}
			else{
				options_container.childNodes[node_index].className = css_default;
			}
			
			// set property on option to store it's order_index
			options_container.childNodes[node_index].option_index = options_index;
			
			// BIND "MOUSE IS OVER OPTION" EVENT -------------------------------------------------
			options_container.childNodes[node_index].onmouseover = function(){
				
				// set last_hovered option's class to it's last class before selection
				if(last_hovered){
					last_hovered.className = last_hovered_class;
				}
				
				// set last_hovered_class to hovered option's current class
				last_hovered_class = this.className;
				
				// set current hovered option to over class
				this.className = css_over;
				
				// set last_hovered to current hovered option
				last_hovered = this;
				
			};
			
			// BIND "MOUSE IS OUT" EVENT -------------------------------------------------
			options_container.childNodes[node_index].onmouseout = function(){
				
				// set last_hovered option's class to it's last class before selection
				if(last_hovered){
					last_hovered.className = last_hovered_class;
				}
				
				// reset all effect variables
				last_hovered = null;
				last_hovered_class = null;
				
			};
			
			// BIND "OPTION CLICK" EVENT -------------------------------------------------
			options_container.childNodes[node_index].onclick = function(){
				
				// set last selected option's class to default
				if(last_selected){
					last_selected.className = css_default;
				}
				
				// set this option's last hovered class to selected class
				last_hovered_class = css_selected;
				
				// set class of hovered option to selected class
				this.className = css_selected;
				
				// set last selected option to current option
				last_selected = this;
				
				// if onclick callback function is defined, run it
				if(onclick_callback_function){
					onclick_callback_function(this);
				}
				
			};
		}
	}
}