// JavaScript Document

function preloadImages()
{
  if(document.images)
  {
    if(!document.imageArray) document.imageArray = new Array();
    var i,j = document.imageArray.length, args = preloadImages.arguments;
    for(i=0; i<args.length; i++)
    {
      if (args[i].indexOf("#")!=0)
      {
        document.imageArray[j] = new Image;
        document.imageArray[j++].src = args[i];
      }
    }
  }
}

//--------------------------------------------------------------------------------------------------------------


//DEBUG FUNCTIONS
var g_bDebug = true;
function dprint(sText){
	//DEBUG PRINT
	if (!g_bDebug)		return;
	
	if (!getById('div_debug')){
		//create new
		div = document.createElement('div');
		div.setAttribute('id', 'div_debug');
		//appearance
			div.style.fontFamily = "Verdana";
			div.style.fontSize = "12px";
			div.style.fontWeight = "bold";
			div.style.backgroundColor = "#DDDF99";
			div.style.border = "solid 1px #676921";
			div.style.color = "#9F0000";
			div.style.margin = "5px";
			div.style.padding = "2px";
		div.innerHTML = "<font size='2' color='#0000FF'>DEBUG:</font>";
		document.body.appendChild(div);
	}
	getById('div_debug').innerHTML = getById('div_debug').innerHTML + '<br>' + sText;
}

function dprintObj(obj){
	dprint("Object:");
	var str = '';
	for(prop in obj){
		dprint("\n  - " + prop + " value :"+ obj[prop]);//Concate prop and its value from object
	}
}

function _bool(b){
	return (b)? "true" : "false";
}

//ACCESS FN

//wrapper for document.getElementByid();
function getById(id_element){
	return document.getElementById(id_element);
}


//FORM/CONTAINER  FUNCTIONS ---------------------------------------------------------------------------------------------------------------
var gac_aChildren;
function getAllChildren(obj){
	gac_aChildren = new Array();
	rs_getChildren(obj); 
	return gac_aChildren;
}
function rs_getChildren(obj){
	//recursive function
	//always use var before a counter in 'for loop'
	for(var i=0; i<obj.childNodes.length; i++){
		gac_aChildren.push(obj.childNodes[i])
		rs_getChildren(obj.childNodes[i]);
	}
}

function getObjectFormElements(id_obj){
	obj = getById(id_obj);
	//dprint('Main object: '+obj);
	var aChildren = new Array();
	
	if (obj){
		//valid object
		var aTmp = getAllChildren(obj);
		for(var i=0; i<aTmp.length; i++){
			//keep only form elements
			if (aTmp[i].tagName)
				if (aTmp[i].tagName == 'INPUT' ||aTmp[i].tagName == 'TEXTAREA' ||aTmp[i].tagName == 'SELECT')
					aChildren.push(aTmp[i]);
		}
	}
	
	return aChildren;
}
function getObjectFormElementsByRef(obj){
	//obj is an object
	//dprint('Main object: '+obj);
	var aChildren = new Array();
	
	var aTmp = getAllChildren(obj);
	for(var i=0; i<aTmp.length; i++){
		//keep only form elements
		if (aTmp[i].tagName)
			if (aTmp[i].tagName == 'INPUT' ||aTmp[i].tagName == 'TEXTAREA' ||aTmp[i].tagName == 'SELECT')
				aChildren.push(aTmp[i]);
	}
	
	return aChildren;
}

function getSubmitUrl(id_obj, sUrl){
	//places all children elements from object with id 'id_obj' as _GET values to sUrl
	//alert('fn getSubmitUrl('+id_form+', '+sUrl+')');
	
	//break url
	aTmp = sUrl.split('?');
	firstChar = (aTmp[1])? '&' : '?';
	
	sLink = '';
	var els = getObjectFormElements(id_obj);
	for(i=0; i<els.length; i++){ 
		if (!els[i].name)
			continue;
		if (sLink)
			sLink += '&';
		//dprint('adaug elementul '+els[i]+' cu tagul: '+els[i].tagName);
		sLink += els[i].name + '=' + els[i].value;
	}
	
	sLink = sUrl + firstChar + sLink;

	return sLink;
}

function redirectPost(sUrl) {
	//a _GET url is submited through _POST method
	//dprint('redirectare post:'); dprint(sUrl);
	
	//form
	frm = document.createElement('form');
	frm.setAttribute('id', 'frm_red_post');
	tmp1 = sUrl.split('?');
	frm.action = tmp1[0];
	frm.method = 'POST';
	
	//elements
	tmp2 = tmp1[1].split('&');
	for(var i=0; i<tmp2.length; i++) {
		tmp3 = tmp2[i].split('=');
		input = document.createElement('input');
		input.setAttribute('type', 'hidden');
		input.setAttribute('name', tmp3[0]);
		input.value = '' + tmp3[1];
		frm.appendChild(input);
	}
	
	//append & submit form
	document.body.appendChild(frm);
	/*x = confirm('Submit ?');
	if (x) */frm.submit();
}

function submitContainer(id_obj, sUrl){
	sLink = getSubmitUrl(id_obj, sUrl);
	window.location = sLink;
}
function submitForm(id_form, sUrl){
	submitContainer(id_form, sUrl);
}

function aplyClassObjectFormElements(obj, inputTextClass, textareaClass, selectClass, bRewrite){
	//dprint('fn aplyClassObjectFormElements');
	var aElements = getObjectFormElementsByRef(obj);
	for(i=0; i<aElements.length; i++){ 
		//test type
		if (aElements[i].tagName == 'INPUT'){
			//dprint('aElements[i].type = '+aElements[i].type)
			if (aElements[i].type == 'text'){
				bAply = (bRewrite)? true : (!aElements[i].className);
				//dprint('             bAply '+_bool(bAply))
				if (bAply)
					aElements[i].className = inputTextClass;
			}
		}
				
		if(aElements[i].tagName == 'TEXTAREA'){
			bAply = (bRewrite)? true : (!aElements[i].className);
			//dprint('             bAply '+_bool(bAply))
			if (bAply)
				aElements[i].className = textareaClass;
		}
			
		if(aElements[i].tagName == 'SELECT'){
			//dprint('aElements[i].className = ['+aElements[i].className+']');
			bAply = (bRewrite)? true : (!aElements[i].className);
			//dprint('             bAply '+_bool(bAply))
			if (bAply)
				aElements[i].className = selectClass;
		}
	}
}

function parseUrlString(sParams) {
	var aParams = Array();	
	vTmp = sParams.split('&');
	for (i=0; i<vTmp.length; i++){
		tmp = vTmp[i].split('=');
		aParams[tmp[0]] = tmp[1];
	}
	return aParams;
}
//END FORM/CONTAINER  FUNCTIONS ----------------------------------------------------------------------------------------------------------



//SUPRESS ENTER ---------------------------------------------------------------------------------------
function formElementsSupressEnterKey(id_form){
	//id_form can be now any container (div, td, p, etc...)
	var els = getObjectFormElements(id_form); 
	for(i=0; i<els.length; i++){
		if (els[i].type != 'button' && els[i].type != 'submit' && els[i].tagName != 'TEXTAREA')
			supressEnterKey(els[i]);
	}
}
function supressEnterKey(object){
	func = fn_keyPress;
	var oldFunction = object.onkeypress;
	if (typeof object.onkeypress != 'function') {
		object.onkeypress = func;
	}
	else {
		object.onkeypress = function() {
			oldFunction();
			func();//first the new one and then the old one
		}
	}
}
function fn_keyPress(e){
	objEvent = (navigator.appName == 'Netscape')? e : window.event;
	if (objEvent){
		key = objEvent.keyCode ? objEvent.keyCode : objEvent.which;
		//alert('key pressed | key : '+key);
		if (key == 10 | key == 13)
			return false;
	}
}
//END SUPRESS ENTER -----------------------------------------------------------------------------------


function addEvent(obj, evType, fn) {
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, false);
		return true;
	} else if (obj.attachEvent) {
		var r = obj.attachEvent("on" + evType, fn);
		return r;
	} else {
		return false;
	}
}


function multiSelectValue(obSel, val) {
	//select value 'val' from 'obSel'
	for (var i=0; i<obSel.options.length; i++) {
		//dprint('compare '+obSel.options[i].text+' == '+val);
		if (obSel.options[i].text == val)
			obSel.options[i].selected = true;
	}
}

function multiUnselect(obSel) {
	//select value 'val' from 'obSel'
	for (var i=0; i<obSel.options.length; i++) {
		obSel.options[i].selected = false;
	}
}


//DISPLAY ---------------------------------------------------------------------------------------------
function hasClass(node, className) {
  if (node.className == className) {
    return true;
  }
  var reg = new RegExp('(^| )'+ className +'($| )')
  if (reg.test(node.className)) {
    return true;
  }
  return false;
}

function changeDisplay(id_element, newDisplay){
	if (getById(id_element))
		getById(id_element).style.display = newDisplay;
}

function changeObjClass(obj, newClass){
	if (obj)
		obj.className = newClass;
}

function getRowDisplayStyle(){
	if (navigator.appName == 'Netscape'){
		//NETSCAPE, FIREFOX si altele
		sShowStyle = "table-row";
	}
	else {
		//IE
		sShowStyle = "inline";
	}
	
	return sShowStyle;
}

function getTableDisplayStyle(){
	return (navigator.appName == 'Netscape')? 'table' : 'inline';
}

function getTbodyDisplayStyle(){
	return (navigator.appName == 'Netscape')? 'table-row-group' : 'inline';
}

function getAddOption() {
	return (navigator.appName == 'Netscape')? null : -1;
}

function getEventObject(){
	return (navigator.appName == 'Netscape')? e : event;
}

function getCurrentFormElement(){
	//elementul din formular care a declansat evenimentul
	return (navigator.appName == 'Netscape')? e.target : event.srcElement;
}

function getAbsolutePosition(el) {
	//does same thing as getAbsolutePos(el) but without recursion
	var r = { x: 0, y: 0, h: el.offsetHeight, w: el.offsetWidth };
	bool = true;
	while(bool){
		var SL = 0, ST = 0;
		var is_div = /^div$/i.test(el.tagName);//????
		if (is_div && el.scrollLeft)
			SL = el.scrollLeft;
		if (is_div && el.scrollTop)
			ST = el.scrollTop;		
		var tmp = { x: el.offsetLeft - SL, y: el.offsetTop - ST};
		r.x += tmp.x;
		r.y += tmp.y;		
		
		if (el.offsetParent) 
			el = el.offsetParent;//recursivity
		else
			bool = false;
	}
	return r;//left, top & height
};

function ensureObjectVisible(node) {
	var h = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
	var offset = self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
	var pos = getAbsolutePosition(node);
	if (pos.y + node.scrollHeight > h + offset) {
		if (node.scrollHeight > h) {
			window.scrollTo(0, pos.y);
		} else {
			window.scrollTo(0, pos.y + node.scrollHeight - h);
		}
	}
}

function ensureRowVisibleInDiv(obj_row, obj_div, direction) {
	var pos = getAbsolutePosition(obj_row);
	var pos_div = getAbsolutePosition(obj_div);
	var h = pos_div.h;
	var row_top = pos.y - pos_div.y;
	//dprint('obj_div.id = '+obj_div.id+'| row_top = '+row_top+' | obj_div.scrollTop ='+obj_div.scrollTop);
	/*if (direction > 0){
		//moving down
		if (row_top - obj_div.scrollTop + obj_row.scrollHeight > h) {
			obj_div.scrollTop += direction * obj_row.scrollHeight;
		}
	}
	else {
		//moving up
		if (row_top < obj_div.scrollTop) {
			obj_div.scrollTop += direction * obj_row.scrollHeight;
		}
	}*/
	if (row_top < obj_div.scrollTop)
		obj_div.scrollTop = row_top;
	else
		if (row_top + obj_row.scrollHeight > obj_div.scrollTop + h )
			obj_div.scrollTop = row_top + obj_row.scrollHeight - h;
}


//END DISPLAY ----------------------------------------------------------------------------------------



function isAlpha (sir) {
	//functia verifica dk sir are doar caractere permise:

	caracterePermise = "abcdefghijklmnopqrstuvwxyz";
	sirTest = sir.toLowerCase();
    rez = 0;
    for (var i=0; i<sirTest.length; i++) {
    	x = caracterePermise.indexOf(sirTest.charAt(i));
    	if (x == -1) {
    		return false;//am un caracter din afara multimii mele
    	}
    }
	return true;
}

function isNumeric (sir) {
	//functia verifica dk sir are doar numere:

	caracterePermise = "0123456789";
    rez = 0;
    for (var i=0; i<sir.length; i++) {
    	x = caracterePermise.indexOf(sir.charAt(i));
    	if (x == -1) {
    		return false;//am un caracter din afara multimii mele
    	}
    }
	return true;
}

function jsleep(ms) {
	sFile = '_sleep.php';
	qString = 'ms=' + ms;
	buffer = ajax_openFileSync(sFile, qString);
	return buffer;
}

//Date functions ------------------------------------------------------------------
function getYear(d) {
	return (d < 1000) ? d + 1900 : d;
}
function isDate(year, month, day) {
	// month argument must be in the range 0 - 11
	var tempDate = new Date(year,month,day);
	if ( (getYear(tempDate.getYear()) == year) &&
	    (month == tempDate.getMonth()) &&
	    (day == tempDate.getDate()) )
		return true;
	else
		return false;
}

function isRoDate_salv(sRoDate) {
	//sRoDate is in format 'dd.mm.yyyy'
	tmp = sRoDate.split('.');
	return isDate(tmp[2], tmp[1], tmp[0]);
}
function isRoDate(dtStr){
	var dtCh= ".";
	var minYear=1900;
	var maxYear=2100;
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1){
		strDay=strDay.substring(1);
	}
	if (strMonth.charAt(0)=="0" && strMonth.length>1){
		strMonth=strMonth.substring(1);
	}
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1);
	}
	month=parseInt(strMonth,10);
	day=parseInt(strDay,10);
	year=parseInt(strYr,10);
	if (pos1==-1 || pos2==-1){
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		return false;
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		return false;
	}
	return true;
}
function isInteger(s){
	var i;
	for (i = 0; i < s.length; i++){
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}
	// All characters are numbers.
	return true;
}
function stripCharsInBag(s, bag){
	var i;
	var returnString = "";
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++){
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}
function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
	// EXCEPT for centurial years which are not also divisible by 400.
	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
	}
	return this
}
function dateConvert(mysqlDate){
	//convert a mysql date into js date
	var aTmp = mysqlDate.split('-');
	var sJsDate = parseInt(aTmp[0], 10)+'/'+parseInt(aTmp[1], 10)+'/'+parseInt(aTmp[2], 10)+' 00:00:00 UTC';
	//if (g_bAdmin) dprint('sJsDate = '+sJsDate);
	var ms = Date.parse(sJsDate);
	var d = new Date(ms);
	//dprint('-----------------------------------------');
	//dprint(mysqlDate+' = '+sJsDate+' = '+d);
		//d.setUTCMilliseconds(d.UTC());
		//dprint(d);
		/*d.setUTCFullYear(parseInt(aTmp[0], 10));
		d.setUTCMonth(parseInt(aTmp[1], 10)-1);
		d.setUTCDate(parseInt(aTmp[2], 10));
		d.setUTCHours(0, 0, 0, 0);*/
	//if (1) dprint('luna: '+(parseInt(aTmp[1], 10)-1)+' | month: '+d.getMonth());
	return d;
}

function dateConvertFromRo(roDate){
	//convert a date of format 'dd.mm.YYYY' into js date
	var aTmp = roDate.split('.');
	var d = new Date();
		d.setUTCFullYear(parseInt(aTmp[2], 10));
		d.setUTCMonth(parseInt(aTmp[1], 10)-1);
		d.setUTCDate(parseInt(aTmp[0], 10));
		d.setUTCHours(0, 0, 0, 0);
	return d;
}

function dateFromSelect(name){
	//converts a date from 3 selects (an, luna, zi)
	var d = new Date();
		d.setUTCFullYear(parseInt(getById(name+"_an").value, 10));
		d.setUTCMonth(parseInt(getById(name+"_luna").value, 10)-1);
		d.setUTCDate(parseInt(getById(name+"_zi").value, 10));
		d.setUTCHours(0, 0, 0, 0);
	return d;
}

function dateRevert(d){
	//convert a js date into mysql date
	var sDate = '';
	sDate += d.getFullYear();
	sDate += '-';
	sDate += str_pad(d.getMonth() + 1, 2, '0', 'STR_PAD_LEFT');
	sDate += '-';
	sDate += str_pad(d.getDate(), 2, '0', 'STR_PAD_LEFT');
	//dprint('................................');
	//dprint(d+' = '+sDate);
	return sDate;
}

function dateRevertRo(d){
	//convert a js date into mysql date
	var sDate = '';
	sDate += str_pad(d.getDate(), 2, '0', 'STR_PAD_LEFT');
	sDate += '.';
	sDate += str_pad(d.getMonth() + 1, 2, '0', 'STR_PAD_LEFT');
	sDate += '.';
	sDate += d.getFullYear();
	return sDate;
}

function dateIncrement(obDate, days){
	//increment date by one day
	var ms_day = 24 * 60 * 60 * 1000;
	
	if (!days) days = 1;
	var d = new Date();
	var ms_curent = obDate.getTime();
	var ms_next = parseInt(ms_curent, 10) + days * ms_day;
	//dprint('_____________________________');
	d.setTime(ms_next);
	//dprint(obDate+' + '+days+' days = '+d+' | ms_curent = '+ms_curent+', ms_next = '+ms_next);
	return d;
}

function dateDiff(d1, d2){
	//d1 - d2
	var one_day = 1000 * 60 * 60 * 24;

	//Calculate difference between two dates, and convert to days
	return Math.ceil( (d1.getTime() - d2.getTime()) / (one_day) );
}

function dateBetween_old(ad, ad1, ad2){
	//checks if d is between d1 and d2
	var d = ad; var d1 = ad1; var d2 = ad2;
	//ignore H:i:s
	/*d.setHours(0, 0, 0, 0);
	d1.setHours(0, 0, 0, 0);
	d2.setHours(0, 0, 0, 0);*/
	t0 = d.getTime();
	t1 = d1.getTime();
	t2 = d2.getTime();
	if (t1 > t2){
		//swap
		tmp = t1
		t1 = t2;		
		t2 = tmp
	}
	b = (t0 >= t1 && t0 <= t2);
	//if (dateRevert(d) == dateRevert(d2)) dprint('Bool:'+b+' = dateBetween('+dateRevert(d)+'|'+t0+',  '+dateRevert(d1)+'|'+t1+',  '+dateRevert(d2)+'|'+t2+')');
	
	return b;
}
function dateBetween(d, d1, d2){
	//checks if d is between d1 and d2
	id = parseInt(d.getFullYear() +''+  str_pad(d.getMonth(), 2, '0', 'STR_PAD_LEFT') +''+ str_pad(d.getDate(), 2, '0', 'STR_PAD_LEFT'), 10);
	id1 = parseInt(d1.getFullYear() +''+  str_pad(d1.getMonth(), 2, '0', 'STR_PAD_LEFT') +''+ str_pad(d1.getDate(), 2, '0', 'STR_PAD_LEFT'), 10);
	id2 = parseInt(d2.getFullYear() +''+  str_pad(d2.getMonth(), 2, '0', 'STR_PAD_LEFT') +''+ str_pad(d2.getDate(), 2, '0', 'STR_PAD_LEFT'), 10);
	
	/*dprint(id+' = '+d.getFullYear() +''+  str_pad(d.getMonth(), 2, '0', 'STR_PAD_LEFT') +''+ str_pad(d.getDate(), 2, '0', 'STR_PAD_LEFT'));
	dprint(id1);
	dprint(id2);*/

	b = (id >= id1 && id <= id2);
	//if (dateRevert(d) == dateRevert(d2)) dprint('Bool:'+b+' = dateBetween('+dateRevert(d)+'|'+t0+',  '+dateRevert(d1)+'|'+t1+',  '+dateRevert(d2)+'|'+t2+')');
	
	return b;
}

function dateMin(d1, d2){
	t1 = d1.getTime();
	t2 = d2.getTime();
	return (t1 < t2)? d1 : d2;
}

function dateMax(d1, d2){
	t1 = d1.getTime();
	t2 = d2.getTime();
	return (t1 > t2)? d1 : d2;
}

function cloneDate(d) {
    newDate = new Date();
	newDate.setTime(d.getTime());
	/*newDate.setFullYear(d.getFullYear());
	newDate.setMonth(d.getMonth());
	newDate.setDate(d.getDate());
	newDate.setHours(d.getHours());
	newDate.setMinutes(d.getMinutes());
	newDate.setSeconds(d.getSeconds());
	newDate.setMilliseconds(d.getMilliseconds());
	*/
	return newDate;
}
// End Date functions -----------------------------------------------------------------


function str_pad( input1, pad_length, pad_string, pad_type ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // + namespaced by: Michael White (http://crestidg.com)
    // *     example 1: str_pad('Kevin van Zonneveld', 30, '-=', 'STR_PAD_LEFT');
    // *     returns 1: '-=-=-=-=-=-Kevin van Zonneveld'
    // *     example 2: str_pad('Kevin van Zonneveld', 30, '-', 'STR_PAD_BOTH');
    // *     returns 2: '------Kevin van Zonneveld-----'
 
    var half = '', pad_to_go;
	input = input1.toString();
 
    var str_pad_repeater = function(s, len){
            var collect = '', i;
 
            while(collect.length < len) collect += s;
            collect = collect.substr(0,len);
 
            return collect;
        };
 
    if (pad_type != 'STR_PAD_LEFT' && pad_type != 'STR_PAD_RIGHT' && pad_type != 'STR_PAD_BOTH') { pad_type = 'STR_PAD_RIGHT'; }
    if ((pad_to_go = pad_length - input.length) > 0) {
        if (pad_type == 'STR_PAD_LEFT') { input = str_pad_repeater(pad_string, pad_to_go) + input; }
        else if (pad_type == 'STR_PAD_RIGHT') { input = input + str_pad_repeater(pad_string, pad_to_go); }
        else if (pad_type == 'STR_PAD_BOTH') {
            half = str_pad_repeater(pad_string, Math.ceil(pad_to_go/2));
            input = half + input + half;
            input = input.substr(0, pad_length);
        }
    }
 
    return input;
}
// End PAD functions -----------------------------------------------------------------


function verifyFieldInterval(idField, val1, val2, msg){
	//tests if a number belongs to interval [val1, val2]
    ctrl = document.getElementById(idField);
	if (!isNumeric(ctrl.value)){
    	alert( msg);
    	ctrl.focus();
    	return false;
    }
		
    if (ctrl.value < val1 || ctrl.value > val2){
    	alert( msg);
    	ctrl.focus();
    	return false;
    }
    return true;
}

function verifyFieldNotEmpty(idField, msg){
	//tests if a field is not empty returns false if empty
	//if (0) alert('idfield = '+idField+', object: '+document.getElementById(idField));
    ctrl = document.getElementById(idField);
    if (ctrl.value == ''){
    	alert( msg);
    	ctrl.focus();
    	return false;
    }
    return true;
}

function verifyFieldNotZero(idField, msg){
	//tests if a field is not zero returns false if zero
    ctrl = document.getElementById(idField);
	fFloat = parseFloat(ctrl.value);
    if (ctrl.value == 0){
    	alert( msg);
    	ctrl.focus();
    	return false;
    }
    return true;
}


function verifyFieldTypeLength(idField, type, iLength, msg){
	//type = {'numeric', 'alpha'}
    ctrl = document.getElementById(idField);
	
	if (type == 'numeric'){
		bOk = isNumeric(ctrl.value);
	}
	else{//alpha
		bOk = isAlpha(ctrl.value);
	}
	sValue = '' + ctrl.value;
	bOk &= sValue.length == iLength;
	
    if (!bOk){
    	alert( msg);
    	ctrl.focus();
    	return false;
    }
    return true;
}

function verifyFieldNumber(idField, msg){
	//tests if a number belongs to interval [val1, val2]
    ctrl = document.getElementById(idField);
	fFloat = parseFloat(ctrl.value);
    if (isNaN(fFloat)){
    	alert( msg);
    	ctrl.focus();
    	return false;
    }
    return true;
}

function veryfyAllowedChars (sir, caracterePermise) {
	//functia verifica dk sir are doar numere:

	//caracterePermise = "0123456789";
    rez = 0;
    for (var i=0; i<sir.length; i++) {
    	x = caracterePermise.indexOf(sir.charAt(i));
    	if (x == -1) {
    		return false;//am un caracter din afara multimii mele
    	}
    }
	return true;
}

function veryfyNotAllowedChars (sir, caractereNepermise) {
	//functia verifica dk sir are vreun caracter nepermis:
	//intoarce 0 dk nu am caracter nepermis, si indexul primului caracter nepermis, indexul incepe de la 1

	//caractereNepermise = "{}[]()\".,'\\+-/*=!@#$%^&";
    rez = 0;
    for (i=0; i<sir.length; i++) {
    	//caut in caractereNepermise fiecare caracter din sir
    	x = caractereNepermise.indexOf(sir.charAt(i));
    	if (x != -1) {
    		rez = i+1;
    		break;
    	}
    }
	return rez;
}

function verifyValidInput(id_input, sMsg){
	//functia verifica anumite caractere nepermise 
	//caracterele ' (apostrof) si - (minus) le las totusi
	if (!getById(id_input))
		return false;
		
	sir = getById(id_input).value;
	caractereNepermise = "`~!@#$%^&*()_+=|\\{}[];:\".,<>/?";//- {', -}
	b = veryfyNotAllowedChars(sir, caractereNepermise);
	if (b > 0){
		sMsg = (sMsg)? sMsg : 'Atentie aveti un caracter nepermis!';
		alert(sMsg);
		getById(id_input).focus();
		return false;
	}
	return true;
}


function verifyEmail(idField, msg){
	//tests if a number belongs to interval [val1, val2]
    ctrl = document.getElementById(idField);
    if (! validateEmail(ctrl.value)){
    	alert( msg);
    	ctrl.focus();
    	return false;
    }
    return true;
}

function promptUser(sMsg){
	return confirm(sMsg);
}


function lostFocusNumericBox(ctrl){
	//inlocuieste ',' cu '.' pentru casete numerice
	var rExp = /,/;
	ctrl.value = ctrl.value.replace(rExp, '.');
	if (isNaN(parseFloat(ctrl.value)))
		ctrl.value = '0';
}
function _lostFocusNumericBox(e){
	//asta este pentru elemente creeate dinamic
	//inlocuieste ',' cu '.' pentru casete numerice
    var ctrl = (navigator.appName == 'Netscape')? e.target : event.srcElement;
	var rExp = /,/;
	ctrl.value = ctrl.value.replace(rExp, '.');
	if (isNaN(parseFloat(ctrl.value)))
		ctrl.value = '0';
}

function promptLinkUser(sMessage, sLink){
	var x = (sMessage != '')? confirm(sMessage) : true;
	if (x) {
	   	window.location = sLink;
	}
}

function enableButton(id_button, bEnable, sClass1, sClass2){
	ctrl = document.getElementById(id_button);
	ctrl.disabled = !bEnable;
	ctrl.className = (bEnable)? sClass1 : sClass2;
}

function myRound(number, nZecimale){
	number = parseFloat(number);//acept si numar de tip String
	var sNumber = "" + number.toFixed(nZecimale);
	var rez = parseFloat(sNumber);
	return rez;
}

if (!ROL)
	var ROL = 1;
if (!EUR)
	var EUR = 2;
if (!USD)
	var USD = 3;
if (!RON)
	var RON = 4;

function ff_convert_ex(pret, moneda1, moneda2, feuro, fdolar, proc_curs) {//NOTA: se aplica rotunjire!
	if (!moneda1 || !moneda2 || moneda1 == moneda2)
		return pret;

	//alert('convert_ex -> euro: '+euro1+', dolar: '+dolar1+', proc_curs: '+proc_curs);
	//fac in RON
	if (moneda1 == EUR)
		pret_lei = pret * feuro;
	else if (moneda1 == USD)
		pret_lei = pret * fdolar;
	else if (moneda1 == ROL)
		pret_lei = pret / 10000;
	else//RON
		pret_lei = pret;
    
	//am calculat in RON si aplic proc_curs daca monedele difera si daca prima mon nu e RON
    if (moneda1 != moneda2 && moneda1 != RON)
		pret_lei *= (1 + proc_curs);


	//acum fac in moneda respectiva
	if (moneda2 == EUR)

		pret_moneda2 = pret_lei / feuro;
	else if (moneda2 == USD)
		pret_moneda2 = pret_lei / fdolar;
	else if (moneda2 == ROL)
		pret_moneda2 = pret_lei * 10000;
	else//RON
		pret_moneda2 = pret_lei;

	//alert('test :'+pret_moneda2+' = convert '+pret+' from '+moneda1+' to '+moneda2+' using EUR= '+euro1+', USD = '+dolar+', extra% '+proc_curs);
	return myRound(pret_moneda2, 2);
}

function validateEmail(sEmail) {
  //Validating the email field
  //dprint('validating email ['+sEmail+']');
  return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(sEmail));
  //var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  //return sEmail.match(re);
}

function is_array( mixed_var ) {
    // Finds whether a variable is an array
    // 
    // +    discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_is_array/
    // +       version: 804.1712
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Legaev Andrey
    // +   bugfixed by: Cord
    // *     example 1: is_array(['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
    // *     example 2: is_array('Kevin van Zonneveld');
    // *     returns 2: false

    return ( mixed_var instanceof Array );
}

/*function str_replace(sWhat, sReplace, sWhere){
	var rExp = new RegExp(sWhat, "g");//scot spatiile
	sResult = sWhere.replace(rExp, sReplace);
	return sResult;
}*/
function str_replace(search, replace, subject) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // -    depends on: is_array
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'    
    
    var f = search, r = replace, s = subject;
    var ra = is_array(r), sa = is_array(s), f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
 
    while (j = 0, i--) {
        while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
    };
     
    return sa ? s : s[0];
}

function str_search(sWhat, sWhere){
	//returns -1 if no match
	var rExp = new RegExp(sWhat, "g");//scot spatiile
	sResult = sWhere.search(rExp);
	return sResult;
}

/**
 * Returns true if 's' is contained in the array 'a'
 * @author Johan Känngård, http://dev.kanngard.net
 */
function array_contains(a, e) {
	for(var j=0;j<a.length;j++)
		//dprint('array_contains: '+a[j]+' == '+e);
		if(a[j]==e)
			return true;
	return false;
}

function array_search(a, e) {
	for(var j=0;j<a.length;j++)
		if(a[j]==e)
			return j;
	return -1;
}

/**
 * Removes duplicates in the array 'a'
 * @author Johan Känngård, http://dev.kanngard.net
 */
function array_unique(a) {
	var tmp = new Array(0);
	for(var i=0;i<a.length;i++){
		if(!array_contains(tmp, a[i])){
			tmp.length+=1;
			tmp[tmp.length-1]=a[i];
		}
	}
	return tmp;
}
