/**
 * askAndGo
 * @param message 
 * @param url
 */
 function askAndGo(message, url) {
 	if(confirm(message))
 		document.location = url;
 }

/**
 * setAction
 * @param formName 
 * @param actionName 
 */
 function doAction(formName, action) {
 	setAction(formName, action);
 	document.forms[formName].submit();
 }
 
 /**
  * setAction
  * @param formName 
  */
  function setAction(formName, action) {
  	var actionBox = document.getElementById('action');
  	if(!actionBox){
  		var form = document.getElementById(formName);
		var hiddenElem = document.createElement("input");
		hiddenElem.type = "hidden";
		hiddenElem.name = "action";
		hiddenElem.value = action;  	
		form.appendChild(hiddenElem);		
  	}else{
 		actionBox.value = action;  	
  	}
  }

function getEventForm(event) {
		var el = Event.element(event);
		var ancestors = $(el).ancestors();
		var form = ancestors.find( 
			function s(n) { 
				return (n.nodeName == 'FORM');
			} 
		);
		return form;
}

function createHiddenInput(type, name, value) {
		var hiddenElem = document.createElement('input');
		hiddenElem.type = type;
		hiddenElem.name = name;
		hiddenElem.value = value;
		return hiddenElem;
}
/**
 * 
 */  
function doCancelForm(form, actionName) {
	if (form) {
	
		var cancelForm = document.createElement("form");
		cancelForm.action = form.action;
		cancelForm.method = form.method;
		cancelForm.enctype = form.enctype;
		cancelForm.name = "cancelForm";
		cancelForm.acceptCharset = form.acceptCharset;		
		
		var hiddenElem = document.createElement("input");
		hiddenElem.type = "hidden";
		if (actionName) {
			hiddenElem.name = actionName;
		} else {
			hiddenElem.name = "_cancel";
		}
		hiddenElem.value = true;
		
		cancelForm.appendChild(hiddenElem);
		
		// Dederer: add field for Chains
		addHiddenField(cancelForm, "_chainId", form["_chainId"]);
		addHiddenField(cancelForm, "_chainOk", form["_chainOk"]);
		addHiddenField(cancelForm, "_chainCancel", form["_chainCancel"]);
		addHiddenField(cancelForm, "_chainMark", form["_chainMark"]);

		document.body.appendChild(cancelForm);

		cancelForm.submit();
		
		return true;
	}
	
	return false;
}

function doCancelForm2(event, name) {
		var form = getEventForm(event);
		form.appendChild(createHiddenInput('hidden', name, ''));
		form.submit();
//		return true;
}

function addHiddenField(form, fieldName, field) {
	if (fieldName) {
		var hiddenElem = document.createElement("input");

		hiddenElem.type = "hidden";
		hiddenElem.name = fieldName;

		if (typeof(field) == "object") {
			hiddenElem.value = field.value;
		} else {
			hiddenElem.value = field;
		}
		
		form.appendChild(hiddenElem);
	}
}

/**
 * First for on page will be submited
 * url - Form action URL
 * action - action name
 */
function doAction2(url, action){
	var form = document.getElementsByTagName("form")[0];
	if(form){
		var hiddenElem = document.createElement("input");
		hiddenElem.type = "hidden";
		hiddenElem.name = "action";
		hiddenElem.value = action;
	
		form.action = url;
		form.appendChild(hiddenElem);
		form.submit();
		return true;
	}
	return false;
}
 
/**
 * First for on page will be submited
 * url - Form action URL
 * action - action name
 * index - item position index
 */
function doAction3(url, action, index){
	var form = document.getElementsByTagName("form")[0];
	if(form){
		form.action = url;
		
		var hiddenAction = document.createElement("input");
		hiddenAction.type = "hidden";
		hiddenAction.name = "action";
		hiddenAction.value = action;
		form.appendChild(hiddenAction);
	
		var hiddenIndex = document.createElement("input");
		hiddenIndex.type = "hidden";
		hiddenIndex.name = "index";
		hiddenIndex.value = index;
		form.appendChild(hiddenIndex);
		
		form.submit();
		return true;
	}
	return false;
}
 

function checkMailAction(event) {
	var e = Event.element(event);

	if (!checkMail(e.value)) {
		alert("E-mail you just entered seems to be invalid.");
		e.focus();
	}
}

function checkMail(mail) {
	return true;
}

function _getOhertBlock(other, block) {
	if (!block) {
		return $(other);
	}

	block = $(block)
	
	return block ? block : $(other);
}

function doSelectChangeOther(select, other, otherValue, otherBlock) {
	select = $(select);
	other = $(other);
	if (!select  || !other) {
		return;
	}

	if (select.value == otherValue &&  select.selectedIndex == select.options.length-1) {
		Element.show(_getOhertBlock(other, otherBlock));
		other.disabled = false;
		other.focus();
	} else {
		Element.hide(_getOhertBlock(other, otherBlock));
		other.disabled = true;
	}
}

function doSelectCheckOther(select, other, otherValue, otherBlock) {
	select = $(select);
	other = $(other);
	if (!select  || !other) {
		return;
	}

	var last = select.options.length-1;
	
	if (Element.visible(other))	{
		select.selectedIndex = last;
		other.disabled = false;
		Element.show(_getOhertBlock(other, otherBlock));
	}
}

function doChangeDuration(startDate, endDate, duration) {
	try {
		var startDate = ("" + $(startDate).value).strip();
		if (startDate.length > 0) {
			var date = Date.parseDate(startDate, Date.FORMAT);
			date.setDate(date.getDate() + parseInt($(duration).value));
			$(endDate).value = date.print(Date.FORMAT);
		}
	} catch(e) {
	}
}

if (Element.prototype && !Element.prototype.fireEvent) {
	Element.prototype.fireEvent = function(type) {
		type = (type.substring(0,2) == 'on') ? type.substr(2) : type;
		var eventObject;
		switch (type) {
			case 'DOMActivate':
			case 'DOMFocusIn':
			case 'DOMFocusOut':
				// UIEvent
				eventObject = this.ownerDocument.createEvent('UIEvents');
				eventObject.initUIEvent(type, true, true, this.ownerDocument.defaultView, 1);
				break;
	
			case 'click':
			case 'mousedown':
			case 'mousemove':
			case 'mouseout':
			case 'mouseover':
			case 'mouseup':
			case 'contextmenu': // proprietary Gecko event
				// MouseEvent
				eventObject = this.ownerDocument.createEvent('MouseEvents');
				eventObject.initMouseEvent(type, true, true, this.ownerDocument.defaultView, 1, this.ownerDocument.getBoxObjectFor(this.ownerDocument.getElementsByTagName('body').item(0)).screenX, this.ownerDocument.getBoxObjectFor(this.ownerDocument.getElementByTagName('body').item(0)).screenY, 0, 0, false, false, false, false, 0, this);
				break;
			
			case 'keydown':
			case 'keypress':
			case 'keyup':
				// Gecko-only KeyEvent - to be replaced by TextEvent in DOM3 Events
				eventObject = this.ownerDocument.createEvent('KeyEvents');
				eventObject.initKeyEvent(type, true, true, this.ownerDocument.defaultView, false, false, false, false, 0, 0);
				break;
			
			case 'DOMAttrModified':
			case 'DOMCharacterDataModified':
			case 'DOMNodeInserted':
			case 'DOMNodeInsertedIntoDocument':
			case 'DOMNodeRemoved':
			case 'DOMNodeRemovedFromDocument':
			case 'DOMSubtreeModified':
				// MutationEvent
				eventObject = this.ownerDocument.createEvent('MutationEvents');
				eventObject.initMutationEvent(type, true, false, this, null, null, null, MutationEvent.MODIFICATION);
				break;
			
			case 'abort':
			case 'blur':
			case 'change':
			case 'error':
			case 'focus':
			case 'load':
			case 'reset':
			case 'resize':
			case 'select':
			case 'scroll':
			case 'submit':
			case 'unload':
				// HTMLEvent
				eventObject = this.ownerDocument.createEvent('HTMLEvents');
				eventObject.initEvent(type, true, true);
				break;
			
			default:
				// CustomEvent
				eventObject = this.ownerDocument.createEvent('Events');
				eventObject.initEvent(type, true, true);
				break;
		}
		
		this.dispatchEvent(eventObject);
	}
}

Event.fire = function (element, type) {
	$(element).fireEvent((type.substring(0,2) == "on") ? type : "on" + type);
}

function doChangeCheckbox(event) {
	var cb = Event.element(event);
	if (cb) {
		var hd = $(cb.id + "_checkbox");
		if (hd) {
			hd.value = cb.checked;
		}
	}
}

function changeOrCreateHiddenField(form, name, value){
	var hidden = form.getInputs('hidden').find(
		function(el){
			if(el.name == name){
				return true;
			}
			return false;
		}
	);
	if(hidden){
		hidden.value = value;
	}else{
		addHiddenField(form, name, value);
	}
}


function changeSortFilter(curColumn, destColumn, dir) {
	if (curColumn != destColumn || dir == 'D') {
		dir = 'A';
	} else {
		dir = 'D';
	}

	var frm = $('filterForm');
	changeOrCreateHiddenField(frm, 'sort', destColumn);
	changeOrCreateHiddenField(frm, 'sortDir', dir);
	frm.submit();
}

function showPopupWindow(link, windowname, width, height) {
    if (!window.focus) return true;

    var href;
    if (typeof(link) == 'string') {
        href = link;
    } else {
        href = link.href;
    }
    var w = width ? width : 800;
    var h = height ? height : 600;
    
    window.open(href, windowname, 'width=' + w + ',height=' + h + ',scrollbars=yes');
    return false;
}