var Ajax;
if (Ajax && (Ajax != null)) {
	var aux = function(visibility, request) {
		//proceed if:
		//	visibility==true && arc > 0
		//	visibility==false && arc <= 0
		if (visibility ^ Ajax.activeRequestCount > 0) {
			return
		}
		var spinner = $(request.options.spinner)
		if (!spinner) {
			spinner = $('loader')
		}
		if (!spinner) {
			return
		}
		updateSpinnerVisibility(spinner, visibility)
	}
	Ajax.Responders.register({
		onCreate: aux.curry(true),
		onComplete: aux.curry(false)
	});
}


mkTableDomain = function(child_elem) {
    child_elem = $(child_elem)
	var n = child_elem.getAttribute('name')
	if(n && n.startsWith('table_')) {
        n = n.gsub(/_iesuxx/, ''); //iesuxx
		return $(n).down('div[name=table_domain]')
	}
	return child_elem.up('div[name=table_domain]')
}

mkTablecheck = function(table_domain) {
	return table_domain.down().next('table').select('.tablecheck')
}

batchUpdateCheckboxes = function(o) {
	var checked = o.checked
	var table_domain = mkTableDomain(o)
	mkTablecheck(table_domain).each(function(cb) {
		cb.checked = checked;
	})
	updateCount(table_domain);
}

singleUpdateCheckboxes = function(o) {
	updateCount(mkTableDomain(o))
}

updateCount = function(table_domain) {
	var count = mkTablecheck(table_domain).findAll(function(cb) {
		return cb.checked
	}).length
	table_domain.select('.multi').each(function(item) {
		if (count>1){
			$(item.id).style.display='none';
			$('off_'+item.id).style.display='block';
		} else {
			if ($('off_'+item.id)) {
				$('off_'+item.id).style.display='none';
				$(item.id).style.display='block';
			}
		}
	});

	if (count==0) {
		table_domain.select('[name=no-selections]')[0].style.display = 'block';
		table_domain.select('[name=selections]')[0].style.display = 'none';
	} else {
		table_domain.select('[name=no-selections]')[0].style.display = 'none';
		table_domain.select('[name=selections]')[0].style.display = 'block';
	}
    table_domain.select('[name=selection-count]')[0].setCount(count)
}

function mkBatchParameters(o, idName) {
    if (idName == undefined) {
        idName = 'id'
    }
    var idAr = mkTablecheck(mkTableDomain(o)).findAll(function(cb) {
        return cb.checked
    }).collect(function(cb) {
        return cb.getAttribute('value')
    })
    if (idAr.length > 0) {
        var parameters = {}
        parameters[idName] = idAr.join(',')
        return parameters
    } else {
        return false
    }
}

batchSetLocation = function(o, idName, url, params) {
    var parameters = mkBatchParameters(o, idName)
    if(!parameters) {
        return false
    }
    location.href = [location.protocol, '//', location.host, url, '?', Object.toQueryString(Object.extend(parameters, params))].join('')
    return false
}

batchUpdate = function(url, o, container, idName) {
    var parameters = mkBatchParameters(o, idName)
    if(!parameters) {
        return false
    }
    internalUpdate(container, url, parameters)
	return false;
}

singleUpdate = function(url, container, idParam) {
	internalUpdate(container, url, {id: idParam})
	return false
}

noneUpdate = function(url, container) {
	internalUpdate(container, url)
	return false
}

internalUpdate = function(container, url, parameters) {
	new Ajax.Updater(container, url,
	{
		asynchronous:true,
		evalScripts:true,
		parameters: parameters,
		onSuccess:function(e) {
			loader(true)
		},
		onComplete:function(e) {
			interact('open');
			loader(false);
		}
	});
	return false
}

clearInteract = function() {
	if (!$('interact').visible()) {
		$('interact').innerHTML = '';
	}
}

interact = function(action) {
	if ($('success') && $('success').visible()) {
		$('success').hide();
	}
	if ($('failure') && $('failure').visible()) {
		$('failure').hide();
	}
	if (action && $('interact')) {
		if (action=='open') {
			new Effect.Appear('interact');
		} else {
			new Effect.Fade('interact');
		}		
	} else {
		if ($('interact') && !$('interact').visible()) {
			new Effect.Appear('interact');
		}
	}
}

interactHide = function() {
	new Effect.BlindUp('interact');
}

result = function() {
	if ($('warnings') && $('warnings').visible()) {
		$('warnings').hide();
	}
	new Effect.Appear('result');
}

clearValue = function(elem) {
	if (elem.value.startsWith('e.g')) {
		elem.value='';
	}
	else if (elem.value.startsWith('Search')) {
		elem.value='';
	}
}

toggleStatus = function(on, id) {
	if (on) {
		$('status_'+id).hide();
		$('statuscontrol_'+id).show();
	} else {
		$('statuscontrol_'+id).hide();
		$('status_'+id).show();
	}
}

modal = function() {
	Modalbox.show(this.href, {title: this.title, width: 500}); return false;
}

function updateSpinnerVisibility(spinner, visibility) {
	spinner = $(spinner);
	if(!spinner) {
		return
	}
	Element[visibility ? 'show' : 'hide'](spinner);
}

loader = updateSpinnerVisibility.curry('loader')

function resizeimg(elem) {
	var img = $(elem);
	if (img) {
		if (img.width > 690) {
			img.style.width = .95 * 690 + "px";
			img.style.border = '1px dotted';
			img.onclick = function()
			{
			   var pop = window.open(this.src, 'fullscale');
			   pop.focus();
			}
			img.style.cursor = 'pointer';
			img.title = 'Click here to view image full size';
			if (img.parentNode.nodeName == 'A') {
				img.parentNode.onclick = function() { return false; }
			}
		}
	}
}

function checkDomainSelect(elem, msg, subjectFunc, e) {
	var table_domain = mkTableDomain(elem)
	var anyChecked = mkTablecheck(table_domain).any(function(checkbox) {
		return checkbox.checked
	})
	if(anyChecked) {
		return subjectFunc.call(elem)
	}
	$('preCheckMessage').showMsg(e, msg)
	return false
}

function rewire(elemId, preCheckName, msg) {
	var elem = $(elemId)
	if(typeof window[preCheckName] != 'function') {
		return
	}
	var subjectFunc = elem.onclick
	elem.onclick = ''
	elem.href = 'javascript://nop'
	var preCheckFunc = window[preCheckName]
	Event.observe(elem, 'click', function(e) {
		return preCheckFunc(elem, msg, subjectFunc, e)
	})
}

function addTinyMceSettingsSetup() {
	tinyMCE.settings.setup = (function() {
		var lastEditor = null
		var setupHandler = function() {
			lastEditor = this
		}
		setupHandler.dispatchFormOnSubmitToEditor = function(formId) {
			if (!lastEditor) {
				return
			}
			var form
            if(!formId) {
                form = $(lastEditor.contentAreaContainer).up('form')
            } else {
                form = $(formId)
            }
			if (!form) {
				return
			}
			var usedEditor = lastEditor
			var originalFormOnsubmit = form.onsubmit
			form.onsubmit = function() {
                try {
                    if(usedEditor.getWin().document != null) {
                        usedEditor.onSubmit.dispatch(usedEditor)
                    }
                } catch (err) {// seen in ie: Permission denied
                    //ignore
                }
				return originalFormOnsubmit.apply(form)
			}
		}
		return setupHandler
	})()
}

function dispatchFormOnSubmitToTinyMceEditor(formId) {
	if (tinyMCE) {
		tinyMCE.settings.setup.dispatchFormOnSubmitToEditor(formId);
	}
}

addDate = function() {
	var visibleElemNums = $('interviewDateNums').value.split(",")
	var showElemNum = ["2", "3"].find(function(num) {
		return visibleElemNums.indexOf(num) < 0
	})
	if(!showElemNum) {
		return
	}
	$('interviewDateNums').value += ','+showElemNum
	Effect.BlindDown('date'+showElemNum)
}

removeDate = function(hideElemNum) {
	$('interviewDateNums').value = $('interviewDateNums').value.split(",").findAll(function(num) {
		return num != hideElemNum
	}).join(',')
	$('date'+hideElemNum).hide()
}

hideFromClass = function(class1) {
	$$("div[class='" + class1 +  "']").each(Element.hide);
}

function wopen(url, name, w, h) {
  w += 32;
  h += 96;
  wleft = (screen.width - w) / 2;
  wtop = (screen.height - h) / 2;
  if (wleft < 0) {
    w = screen.width;
    wleft = 0;
  }
  if (wtop < 0) {
    h = screen.height;
    wtop = 0;
  }
  var win = window.open(url,
    name,
    'width=' + w + ', height=' + h + ', ' +
    'left=' + wleft + ', top=' + wtop + ', ' +
    'location=no, menubar=no, ' +
    'status=no, toolbar=no, scrollbars=yes, resizable=no');
  win.resizeTo(w, h);
  win.moveTo(wleft, wtop);
  win.focus();
}

function wopen2(url, name) {
  var win = window.open(url,
    name, 'scrollbars=yes, resizable=no, toolbar=yes');
}

batchPostJobs = function(o) {
    var idAr = mkTablecheck(mkTableDomain(o)).findAll(function(cb) {
        return cb.checked
    }).collect(function(cb) {
        return cb.getAttribute('value')
    })
    idAr.each(function(i){
        var url = jQuery("#"+i+"_url").val();
        wopen2(url, url)
    })
	return false;
}
showAddReviewForm = function(o){
    var idAr = mkTablecheck(mkTableDomain(o)).findAll(function(cb) {
        return cb.checked
    }).collect(function(cb) {
        return cb.getAttribute('value')
    })
    var currentId = "#check_"+idAr[0]
    jQuery(currentId).parents('tr').next().children().eq(0).html(jQuery("#addReviewDiv").html());
    jQuery(currentId).parents('tr').next().attr('style', 'display:block-inline;');
    jQuery("#jobBoardId").val(idAr[0]);
    return false;
}

function startProgressBar(idPrefix) {
    $(idPrefix + '_submit_btn').hide();
    $(idPrefix + '_progress_btn').show();
}

function stopProgressBar(idPrefix) {
    $(idPrefix + '_submit_btn').show();
    $(idPrefix + '_progress_btn').hide();
}

function selectFromAuto(id) {
	alert(id);
	$('person' + id).show();
	$('cb' + id).checked = true;
	$('query').value = '';
}

function toggleContact(checkbox, tab, email, name) {
	if (checkbox.checked) {
		addContact(email);
	} else {
		removeContact(email);
	}
}

function toggleAll(tab, allCheck) {
	if (allCheck.checked) {
		$$('.contactcheckbox').each(function(box) {
			box.checked = true;
		});
		$$('.personLi').each(function(li) {
			li.show();
		});
	} else {
		$$('.contactcheckbox').each(function(box) {
			box.checked = false;
		});
		$$('.personLi').each(function(li) {
			li.hide();
		});
	}
}

function removeContact(id) {
	$('person' + id).hide();
	$('cb' + id).checked = false;
}

function addContact(id) {
	$('person' + id).show();
	$('cb' + id).checked = true;
}

function wopen(url, name, w, h)
{
  // Fudge factors for window decoration space.
  // In my tests these work well on all platforms & browsers.
  w += 32;
  h += 96;
  wleft = (screen.width - w) / 2;
  wtop = (screen.height - h) / 2;
  // IE5 and other old browsers might allow a window that is
  // partially offscreen or wider than the screen. Fix that.
  // (Newer browsers fix this for us, but let's be thorough.)
  if (wleft < 0) {
    w = screen.width;
    wleft = 0;
  }
  if (wtop < 0) {
    h = screen.height;
    wtop = 0;
  }
  var win = window.open(url,
    name,
    'width=' + w + ', height=' + h + ', ' +
    'left=' + wleft + ', top=' + wtop + ', ' +
    'location=yes, menubar=no, ' +
    'status=no, toolbar=no, scrollbars=yes, resizable=yes');
  // Just in case width and height are ignored
  win.resizeTo(w, h);
  // Just in case left and top are ignored
  win.moveTo(wleft, wtop);
  win.focus();
  return win;
}

function showLayer(layer, widget) {
	$$('.controlpanel').each(function(e){e.hide()});
	if($(layer + 'Control')) {
		$(layer + 'Control').show();
	}
	$$('.channelItem').each(function(e){e.removeClassName('active')});
	if($(layer + 'Item')) {
		$(layer + 'Item').addClassName('active');
	}
	if ($('jobSelect'+layer)) {
		$('jobSelect'+layer).value = $('jobSelect').value;
	}
	if ($('successblock' + layer)) {
		$('successblock' + layer).hide();
	}
	if ($('errorblock' + layer)) {
		$('errorblock' + layer).hide();
	}
	var nav = $(layer + 'Item');
	if ($('jobSelect'+layer)) {
		enabledForms(layer);
	}	
	if (!widget) {
		enabledForms(layer);
	}
}
