
document.oncontextmenu = function(e){
	return false;
}


//  UTILITY METHODS //
function encode64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;
   var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}

function activateButton(buttonId){
	if (document.getElementById(buttonId)!=null)
		document.getElementById(buttonId).disabled="";
}

function getFormElementByName(frId,name)
{
	var formC= new Array("select","input","textarea","button");
	for (var i=0; i<formC.length; i++)
	{
		var fields = ShB.Scope.getScope().getElementsByTagName(formC[i]);
		for (var w = 0; w < fields.length; w++)
		{
			if (fields[w].name==name && frId==fields[w].form.id)
				return(fields[w]);	
		}
	}
	return(null);
}

function getFormElements(containerId)
{
	var el = new Array();
	var scope = (containerId==null)?document:document.getElementById(containerId);
		
	formC= new Array("select","input","textarea","button","a","span");
	for (var i=0; i<formC.length; i++)
	{
		var fields = scope.getElementsByTagName(formC[i]);
		for (var w = 0; w < fields.length; w++)
		{
			el[el.length]= fields[w];	
		}
	}
	return el;
}

// used to update field from the same name
function iUF(field)
{
	iCV(field.form.id, field.name, field.value)
}

// used to change the value of a field given the name
function iCV(formId,fName,value)
{
	var fields = getFormElements(ShB.Scope.getScope().id);
	for (var p = 0; p < fields.length; p++)
	{
		if (fields[p].name==fName && fields[p].form!=null && fields[p].form.id==formId)
			fields[p].value=value
		else if (fields[p].id==formId+"_"+fName)
		{
			if (fields[p].firstChild==null)
				fields[p].appendChild(document.createTextNode(value))
			else
				fields[p].firstChild.nodeValue=value
		}
	}
}

// Sets the focus on a field id.
// 
// formId the form id
// the field name
function setFocus(formId,fName) {
	var elem = getFormElementByName(formId,fName);
	if(elem) {
		elem.focus();
		elem.select();
	}
}

function changeAllCheckBoxes(obj)
{
	for (i=0; i<obj.form.length; i++)
	{
		if(obj.form[i].name==obj.value)
			obj.form[i].checked=obj.checked;
	}	
}

//  END UTILITY METHODS //


//--- DATE FUNCTIONS ---- //
var dsObj=null
dsStatus= false;

//run date Stepper
function iRunDP()
{
	if (dsStatus==false)
		return;
		
	var value = dsObj.value;
	
	var date= new Date();
	date.setSeconds(0)
	date.setMinutes(0)
	date.setHours(0)
		
	if (dsObj.df.parse(value)!=null)
	{
		date = dsObj.df.parse(value)
		if (dsObj.period==0)
			date.setDate(date.getDate()+dsObj.opt)
		else if(dsObj.period==1)
			date.setDate(date.getDate()+(dsObj.opt*7))
		else if(dsObj.period==2)
			date.setMonth(date.getMonth()+dsObj.opt)
		
	}
//	iCV(frId, fName, ndf.format(date));
	dsObj.value = dsObj.df.format(date);

	dsObj.vel= (dsObj.vel<30)?30:dsObj.vel-7;

	setTimeout("iRunDP()",dsObj.vel); 

}
// fast edit date
function iDP(obj, frId, fName, df, opt, period)
{
	if (obj==null || obj.name!=fName)
		obj = getFormElementByName(frId, fName)
		
	obj.vel= 200;
	obj.df = new DateFormat(df);
	obj.opt = opt;
	obj.period = period;
	
	dsStatus=true;

	dsObj=obj	
	
	iRunDP()
}

function iDPE(e, obj, df, period)
{
	e= (e) ? e: ((window.event) ? event:null);
	if(e.keyCode == 38)
		iDP(obj, obj.form.id, obj.name, df, 1, period)
	if(e.keyCode == 40)
		iDP(obj, obj.form.id, obj.name, df, -1, period)
		
	dsStatus=false
}


// NUMERIC STEPPER FUNCTIONS -----//

var nsObj=null
nsStatus= false;

//run numeric Stepper
function iRunNS()
{
	if (nsStatus==false)
		return;
		
	if (isNaN(nsObj.value)) return;

	newValue = Number(nsObj.value)+nsObj.incr;
		
	if(nsObj.value.length==0 || newValue<nsObj.min) 
		newValue =nsObj.min;
	if(newValue>nsObj.max) 
		newValue =nsObj.max;
	
	nsObj.value = newValue
	//	iCV(obj.form.id, obj.name, newValue);

	nsObj.vel= (nsObj.vel<30)?30:nsObj.vel-7;
	
	setTimeout("iRunNS()",nsObj.vel); 

}
//numeric Stepper 
function iNS(obj, frId, fName, incr, min, max)
{
	//obj can be an input field or a link element (click arrow or key event)
	if (obj==null || obj.name!=fName)
		obj = getFormElementByName(frId, fName)
				
	nsObj=obj;
	nsObj.incr=incr;
	nsObj.max=max;
	nsObj.min=min;
	nsObj.vel= 200;
	
	nsStatus=true;
	
	
	iRunNS();
	
}
ss=0;
//numeric Stepper event
function iNSE(e, obj, incr, min, max)
{
	e= (e) ? e: ((window.event) ? event:null);
	if(e.keyCode == 38)
		incr=incr
	else if(e.keyCode == 40)
		incr = -incr
	else
		return;
		
	iNS(obj, obj.form.id, obj.name, incr, min, max)	
	
	nsStatus = false;
	
}

//**** TIME FIELD FUNCTIONS ****//
var tsObj=null
tsStatus= false;

//run time Stepper
function iRTS()
{
	if (tsStatus==false)
		return;
		
	var obj=tsObj	
	var pos = getSelectionStart(obj);
	
	var ndf= new DateFormat(obj.pattern);
	var symbol = obj.pattern.substring(pos,pos+1)
	if(symbol==":")
		symbol = obj.pattern.substring(pos-1,pos)
	if (obj.pattern.length==pos)
		symbol = obj.pattern.substring(obj.pattern.length-1)
		
	date = new Date();
	if (obj.value.length>0 && ndf.parse(obj.value)!=null)	
		date = ndf.parse(obj.value)	
	else
	{
		date.setMinutes(0);
		date.setHours(0);
		date.setSeconds(0);
	}
	if (symbol=="H" || symbol=="h" || symbol=="K" || symbol=="k")
		date.setHours(date.getHours()+obj.incr)
	else if(symbol=="m")
		date.setMinutes(date.getMinutes()+obj.incr)		
	else if(symbol=="s")
		date.setSeconds(date.getSeconds()+obj.incr)		

	obj.value = ndf.format(date)	
	
	obj.iPos=obj.pattern.indexOf(symbol);
	obj.ePos=(obj.iPos+ndf._consume(obj.iPos, symbol));
	setSelectionRange(obj,obj.iPos,obj.ePos)

	obj.vel= (obj.vel<30)?30:obj.vel-7;
	setTimeout("iRTS()",obj.vel); 

}
//time Stepper 
function iTS(obj, frId, fName, pattern, incr)
{
	//obj can be an input field or a link element (click arrow or key event)
	if (obj==null || obj.name!=fName)
		obj = getFormElementByName(frId, fName)
		
	tsObj=obj
	newVal = 0

	obj.incr=incr;
	obj.pattern = pattern;
	obj.vel= 200;
	
	tsStatus=true;
		
	iRTS(); 
}
function iTSEnd()
{
	tsObj.focus()
	iUF(tsObj)	
	setSelectionRange(tsObj,tsObj.iPos,tsObj.ePos)
	
	tsStatus=false;
}

function iUTS(frId,betweenName,fromName,toName, timePattern)
{
	var form = document.getElementById(frId);
	var inputs = getFormElements(ShB.Scope.getScope().id);
	var between = null;
	var from = null;
	var to = null;
	var ndf= new DateFormat(timePattern);
	for (i = 0; i < inputs.length; i++)
	{
		if (inputs[i].form==null || inputs[i].form.id!=frId)
			continue;
			
		if (inputs[i].name==fromName)
			from = inputs[i];
		else if (inputs[i].name==toName)
			to = inputs[i];
	}
	if (to.value.length==0 && from.value.length>0)
	{
		date = new Date();
		date.setMinutes(0);
		date.setHours(0);
		date.setSeconds(0);
		to.value = ndf.format(date)		
	}
	for (i = 0; i < inputs.length; i++)
	{
		if (inputs[i].form==null || inputs[i].form.id!=frId)
			continue;

		if (inputs[i].name==betweenName && from!=null && to!=null)
			inputs[i].value = from.value+' '+to.value;
	}
}

function getSelectionStart(input) {
	if (ns)
		return input.selectionStart;
	var range = document.selection.createRange();
	var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
	if (!isCollapsed)
		range.collapse(true);
	var b = range.getBookmark();
	return b.charCodeAt(2) - 2;
};

function getSelectionEnd(input) {
	if (ns)
		return input.selectionEnd;
	var range = document.selection.createRange();
	var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
	if (!isCollapsed)
		range.collapse(false);
	var b = range.getBookmark();
	return b.charCodeAt(2) - 2;
};

function setSelectionRange(input, start, end) {
	if (ns) {
	//	input.select();
		input.setSelectionRange(start, end);
	} else {
		// assumed IE
		var range = input.createTextRange();
		range.collapse(true);
		range.moveStart("character", start);
		range.moveEnd("character", end - start);
		range.select();
	}
};
//******** END TIME FIELD FUNCTIONS ********//


//---- FILE FUNCTIONS ----- //

// edit file
function iEF(obj, disabled)
{
	obj.style.display='none';
	obj.previousSibling.style.display='';
	obj.previousSibling.disabled=false;
}

// select file
function iSeF(obj)
{
	fileName = obj.value;
	if (fileName == '')
		return;
				
	obj.style.display='none';
	obj.nextSibling.style.display='';
	if (obj.nextSibling!=null)
	{
		obj.nextSibling.style.display='';
		obj.nextSibling.getElementsByTagName("span")[0].innerHTML= fileName.substring(fileName.lastIndexOf('\\')+1,fileName.length);	
	}
}


//---- END FILE FUNCTIONS ----- //


//---- CHECKBOX FUNCTIONS ----- //

//Update Value Simple CheckBox
function iUCBV(field, fName, selectedValue, deselectedValue)
{
	iCCBV(field.form.id, field.name, fName, (field.checked)?selectedValue:deselectedValue, field.checked)
}

//Change Value Simple Checkbox
function iCCBV(frId, cName, fName, value, checked)
{
	var fields = getFormElements(ShB.Scope.getScope().id);
	
	for (var p = 0; p < fields.length; p++)
	{
		var field = fields[p];
		if (field.name==cName && field.form!=null && field.form.id==frId)
			field.checked= checked;
		if (field.name==fName && field.form!=null && field.form.id==frId)
			field.value= value;
	}
}

//---- END CHECKBOX FUNCTIONS - //

//---- STRING FUNCTIONS ----- //

// function to use cases (caseMode 1 = UPPER, caseMode 2 = lower)
function iCTCase(e,caseMode,obj)
{
	e= (e) ? e: ((window.event) ? event:null);
	if (!e.which && obj==null)
	{ 
		if (caseMode==1)
			e.keyCode = String.fromCharCode(e.keyCode).toUpperCase().charCodeAt(0);
		else
			e.keyCode = String.fromCharCode(e.keyCode).toLowerCase().charCodeAt(0);
		
	}
	if (e.which && obj!=null)
	{
		if (caseMode==1)
			obj.value = obj.value.toUpperCase()
		if (caseMode==2)
			obj.value = obj.value.toLowerCase()
	}
}

//---- END STRING FUNCTIONS - //

//KEY EVENTSkeyli

function clearKeyListeners(id){
	var e = YAHOO.util.Event; 
}

// we are keeping a reference to the KeyListener so that we can disable it 
// in case a new button becomes the default (by means of an ajax call)
var defaultListener = null;

function setDefaultButton(formId, id, eventType){

	// only one can be the default button, and in our case it is the last one added
	if (defaultListener != null)
		defaultListener.disable();

	defaultListener = new YAHOO.util.KeyListener(document.getElementById(formId),{keys:[13]},{fn: 
	function(keyCode, event){
	
		var target= (event[1].target!=null)?event[1].target:event[1].srcElement;
		if (target.tagName!='INPUT')
			return;
		
		document.getElementById(id).onclick();

	}, scope: ShB.Scope.getScopeId(), correctScope:true });
	defaultListener.enable();
}

function attachChoiceHandlers(markupid, callbackscript) {
 	var choiceElement = document.getElementById(markupid).getElementsByTagName('input');
 	for(var x = 0; x < choiceElement.length; x++ ) {
    	Wicket.Event.add(choiceElement[x],'click', callbackscript);
    }
}


