/**
	TODO: Megoldani a goals/milestones szummát

*/

var projectSend =
{
	elements		: new HTMLNodeList(new Array()),
	form			: null,
	formName		: 'frmProjectSend',
	attribPrefix	: 'ps_',
	disabledElms	: new Array(),
	container		: null,
	openedTTP		: new Array(),
	
	init: function()
	{
		var obj = null;
		if( !(obj = getByID('project-send-to-valdeal')) )return false;
		this.container	= obj;
		this.elements 	= obj.getElementsByFilter({tagName:['a','div','input','textarea']});
		this.form		= document.forms[this.formName];		
		
		this.initForm();
		this.acceptMaxChar();
		return true;
	},
	
	saveForm: function()
	{
		this.form['function'].value = 'save';
		this.send(true);
	},
	
	sendForm: function()
	{
		this.form['function'].value = 'send';
		this.send(true);
	},
	
	editForm: function()
	{
		this.form['function'].value = 'edit';
		this.send();
	},
	
	cancelEdit: function()
	{
		window.location = _URL_ROOT+'fixed/auxiliarytest/cancel/'+(window.location.hash ? window.location.hash : '');
	},
	
	printForm: function()
	{
		if( !confirm('Amennyiben szeretné az adatlapot kinyomtatni és papíralapon áttanulmányozni, akkor erre is van lehetősége.Felhívjuk a figyelmét azonban, hogy a tényleges projektküldés csak elektronikus formában lehetséges, ezért, kérjük, hogy az elektronikus adatlapot töltse ki és a ValDeal Innovációs Zrt. honlapjáról az „elküld” gomb segítségével juttassa el az adatbázisba. Köszönjük.'))
			return false;		
		
		var form 	= document.getElementsByName(this.formName).item(0);
		var cont 	= create.div(null, null, null, {display:'none'}, document.getElementsByTagName('body').item(0));
		var print 	= copyElement('frmProjectSendContainer', cont);
		var elms	= print.getElementsByFilter({tagName:['div', 'input', 'span']});
		var win		= openPopupPage('about:blank', 'printPreview', 700, screen.availHeight-30, 'location:no;menubar:no;resizable:no;status:no;titlebar:no;toolbar:no;center:yes;scrollbars:yes', true);
		//var win		= openPopupPage('about:blank', 'printPreview', 700, screen.availHeight-30, 'location:no;menubar:yes;resizable:no;status:no;titlebar:no;toolbar:yes;center:yes;scrollbars:yes', true);
		
		win.document.open('text/html', 'replace');
		win.document.write('<div style="padding:5px; text-align:center; margin: 10px; background-color:#416B96; color:#FFFFFF; border: 1px solid #255B92; font-size:12px; font-weight: bold;">Előkészítés...</div>');
		win.document.close();
		
		var links = print.getElementsByFilter({tagName:'a'});
		for(var k=0 ; k<links.length ; k++)
		{
			var c = links.item(k);
			var n = create.span(null, c.innerHTML);
			var p = c.parentNode;
			c.href = '';
			c.name = '';
			p.replaceChild(n, c);			
		}
		
		var help = elms.getElementsByClassName('tooltipp-link');
		for(var k=0 ; k<help.length ; k++)
		{
			help[k].del();
		}
		
		var remove = elms.getElementsByAttribute({removePrint:'yes'});
		while( (e = remove.each()) ) e.del();
		
		/*var oclk = elms.getElementsByFilter({attrib:{onclick:true}});
		while( (e = oclk.each()) )
			e.removeAttribute('onclick');
				 */
		/*var pb = elms.getElementsByAttribute({pageBreak:true});
		while( (e = pb.each()) )
		{
			e.style['pageBreak'+e.getAttribute('pageBreak')] = 'always';
			dump(e.getAttribute('pageBreak'))
		}*/
			
		var inlineTipp = print.getElementsByFilter({tagName:'div', className:'inline-tooltip', attrib:{tippid:true}});
		while( (elm = inlineTipp.each()) )
		{
			var tipp = $(elm.getAttribute('tippid')).getElementsByTagName('span').item(0).innerHTML;
			elm.innerHTML = tipp;
			elm.style.display = 'block';
		}
		
		print.className = 'befektetoknek';
		print.id		= 'project-send-to-valdeal';
		print.setStyle({color:'#3A3A3A', fontSize:'12px', fontFamily:'Tahoma,Arial,sans-serif'});
		
		var src = '<html>';
			src+= '<head>';
			src+= '<title>Print preview</title>';
			src+= '<link rel="stylesheet" href="'+_URL_ROOT+'css/valdeal.css" type="text/css" />';
			src+= '<script type="text/javascript" src="'+_URL_COMMON+'DOMElement.js"></script>';
			src+= '<script type="text/javascript" src="'+_URL_COMMON+'functions.js"></script>';
			src+= '<script type="text/javascript" src="'+_URL_COMMON+'prototype.js"></script>';
			src+= '<script type="text/javascript" src="'+_URL_COMMON+'xb.js"></script>';
			src+= '<script type="text/javascript" src="'+_URL_ROOT+'js/valdeal.js"></script>';
			src+= '<script type="text/javascript" language="javascript" src="'+_URL_ROOT+'js/projectsend.js"></script>';
			src+= '<style>.input-text { background-image:none !important; border:none !important; border-bottom:1px solid #ABABAB !important; padding:0px !important; } .command-line{display:block; padding: 10px 0 5px 10px; margin-bottom:15px; border-bottom:1px solid #333333} @media print{ .command-line{display:none;} } </style>';
			src+= '<!--[if IE]>';
			src+= '<style>.line{margin-bottom: 0px;}</style>';
			src+= '<![endif]-->';
			src+= '<script>';
			src+= 'function printPromt(){ if(confirm("Biztosan ki szeretné nyomtatni az oldalt?")) window.print(); }';
			src+= '</script>';
			src+= '</head>';
			src+= '<body>';
			src+= '<div class="command-line"><a href="javascript:printPromt();" style="color:#9A1225; font-size:12px; text-decoration:underline;">Nyomtatás</a> | <a href="javascript:window.close();" style="color:#9A1225; font-size:12px; text-decoration:underline;">Bezárás</a></div>';
			src+= '<div style="text-align: center;"><span font-size:22px; font-weight: bold;>Application Form</span><br /><br /><span style="font-size:13px;">Kérjük, angol nyelven töltse ki a jelentkezési lapot.</span><br /><br /><br /></div>';
			src+= cont.innerHTML;
			src+= '</body>';
			src+= '</html>';
		
		win.document.open('text/html', 'replace');
		win.document.write(src);
		win.document.close();
		
		return true;
	},
	
	showTooltipp: function(id)
	{
		var obj = null
		
		if( (obj = getByID(id)) )
		{
			
			for(var k=0 ; k<this.openedTTP.length ; k++)
			{
				this.openedTTP[k].style.display = 'none';
			}
			
			this.openedTTP = new Array();
			obj.style.left = 770 + 'px';
			obj.style.width = 330 + 'px';
			obj.style.top = mouse_y - 15 + (navigator.appName != 'Netscape' ? this.getScrollTop() : 0) + 'px';
			obj.style.position = 'absolute';
			obj.style.display = (obj.style.display == 'block' ? 'none' : 'block');
			document.getElementsByTagName('body').item(0).appendChild(obj);;
			this.openedTTP.push(obj);
		}
	},
	
	copy: function(id, to)
	{
		var o_from = null;
		var o_to = null;
		
		if( !(o_from = getByID(id)) )return alert('Error: Not found this id: '+id);
		if( !(o_to = getByID(to)) )return alert('Error: Not found this id: '+to);
		
		var clone = o_from.cloneNode(true);
		clone.id = null;
		o_to.appendChild(clone);
		return clone;
	},
	
	newContributorLine: function()
	{
		var id = 'copyable-contributor-line';
		var to = 'contributor-line-container';
		var obj = this.copy(id, to);
		obj.setAttribute('removePrint', 'yes');
		obj.style.display = 'block';
		var inp = obj.getElementsByTagName('input');
		inp.item(0).name = 'contributor_name[]';
		inp.item(1).name = 'contributor_role[]';
	},
	
	newTimingLine: function(to, name, defName, addValueTo, removePrint, noAssignUpdate)
	{
		var id = 'copyable-x-line';
		var obj = this.copy(id, to);
		if(!isElement(obj)) return false;
		var inputs = obj.getElementsByTagName('input');
		
		if(removePrint && !getBrowser().ie) obj.setAttribute('removePrint', 'yes');
		
		var br = document.createElement('br');
		br.className = 'clear';
		obj.parentNode.appendChild(br);
		obj.br = br;
		var close = obj.getElementsByClassName('close', 'div', true);
		close.onclick = function()
		{
			obj.parentNode.removeChild(obj);
			br.parentNode.removeChild(br);
		}
		
		for(var i=0 ; i<inputs.length ; i++)
		{
			if(i==0 && defName) inputs[i].value = defName;			
			inputs[i].name = name+'_'+i+'[]';
		}
		obj.style.display = 'block';
		
		/*if(!noAssignUpdate)
		{
			this.elements.push(inputs[1], true);
			this.elements.push(inputs[2], true);
			var updateValue = this.elements.getElementsByAttribute({updateValue:true});
			
			updateValue.map(function(obj)
			{
				var func = obj.getAttribute('updateValue').replace(/\)/ig, ',obj)');
				
				eval('projectSend.'+func);			
			});
		}*/
	},	
	
	radioController: function(obj)
	{
		var attrib = this.attribPrefix+obj.name;
		var p		= new Object();
		p[attrib]	= true;
		var l		= this.elements.getElementsByAttribute(p);
		l.map(function(o)
		{
			if( (index = projectSend.disabledElms.indexOf(obj.name)) != -1 && !projectSend.disabledElms[index]) return false;
			if(o.getAttribute('multiValues') != 'yes')
			{
				if(o.getAttribute(attrib) == obj.value)
					projectSend.enableInput(o, true);
				else
					projectSend.enableInput(o, false);
			}
			else
			{
				if(o.getAttribute(attrib).split(';').indexOf(obj.value) != -1)
					projectSend.enableInput(o, true);
				else
					projectSend.enableInput(o, false);
			}
		});		
	},
	
	enableInput: function(obj, state)
	{
		if(isElement(obj))
		{
			obj.style.position = 'relative';
			if(obj.layer)
				var layer = obj.layer;
			else
				var layer = create.div(null, null, null, {position:'absolute', left:'0px', top:'0px', width:obj.offsetWidth+'px', height:obj.offsetHeight+'px', backgroundColor:'#FFFFFF', display:'none'}, obj).alpha(80);
			obj.layer = layer;
			obj.layer.setAttribute('removePrint', 'yes');
			var l = obj.getElementsByFilter({tagName:['input', 'textarea']});
			l.map(function(e)
			{
				e.disabled = !state;
				if(state)
				{
					e.removeAttribute('disable');
					var index = projectSend.disabledElms.indexOf(e.name);
					//if(index != -1)
					//projectSend.form['disabled['+index+']'].value = '';
				}
				else
				{
					var index = projectSend.disabledElms.indexOf(e.name);
					if(index == -1)
					{
						index = projectSend.disabledElms.length;
						create.input.hidden('disabled['+index+']', e.name, projectSend.form);
						projectSend.disabledElms.push(e.name);
					}
					else
					{
						projectSend.form['disabled['+index+']'].value = e.name;
					}
					projectSend.disabledElms[index] = !state;
					e.setAttribute('disable', 'disable');
					
					
				}
			});
			layer.style.display = state ? 'none' : 'block';
			obj.disabled = !state;
		}
	},
	
	getLineByObj: function(obj)
	{
		if(!isElement(obj)) return null;
		var parent = obj.parentNode;
		if(!isElement(parent)) return null;
		do
		{
			parent = parent.parentNode;			
		}
		while(parent && parent.className != 'line')
		return parent;
	},
	
	send: function(validate)
	{
		var error = 0;
		if(validate)
		{
			var check ={
				last_name					: {type:CHK_REQUIRED, 	msg: 'A családi név megadása kötelező!'},
				first_name					: {type:CHK_REQUIRED, 	msg: 'A keresztnév megadása kötelező!'},			
				address						: {type:CHK_REQUIRED, 	msg: 'A postacím mező kitöltése kötelező!'},
				email						: {type:CHK_EMAIL, 		msg: 'Nem valós e-mail cím!'},
				tel							: {type:CHK_REQUIRED, 	msg: 'Kérem adja meg a telefonszámát!'}
				}
			
			for(var key in check)
			{
				var act = check[key];
				if( (o = this.getLineByObj(this.form[key])) )
				if(o.disabled != true && !checkInput(this.form[key], act.type, act.msg))return false;
				
			}
		}
		
		if(!error)
			this.form.submit();
		
	},
	
	initForm: function(obj)
	{
		var list = this.elements.getElementsByTagName('input').getElementsByAttribute({onclick:true});
		var name = new Object();
		while( (input = list.each()) )
		{
			if(input.type == 'radio')
			{
				if(input.checked)
				{
					name[input.name] = input.value;
					continue;
				}
				else if(isUndefined(name[input.name])) name[input.name] = '-1';
			}
		}
		
		for(var k in name)
		{
			if(isFunction(name[k])) continue;
			var p = new Object();
			p.name = k;
			p.value = name[k];
			this.radioController(p);
		}
		
		var updateValue = this.elements.getElementsByAttribute({updateValue:true});
		updateValue.map(function(obj)
		{
			var func = obj.getAttribute('updateValue').replace(/\)/ig, ',obj)');
			
			eval('projectSend.'+func);
		});
	},	
	
	getScrollTop: function ()
	{
		var scrOfX = 0, scrOfY = 0;
		if( typeof( window.pageYOffset ) == 'number' )
		{
			//Netscape compliant
			scrOfY = window.pageYOffset;
		}
		else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
			//DOM compliant
			scrOfY = document.body.scrollTop;
		}
		else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
			//IE6 standards compliant mode
			scrOfY = document.documentElement.scrollTop;
		}
		return scrOfY;
	},
	
	acceptMaxChar: function()
    {
        var textarea = document.getElementsByTagName('textarea');
        
        for(var key in textarea)
        {
            var e = textarea[key];
			DOMElement.proto(e);
            if(isElement(e) && parseInt(e.getAttribute('maxlength')) > 0) 
            {
                e.charDiv = this.createCharNumberShowDiv(e, e.getAttribute('maxlength')+' / 0');
                e.onkeypress = function()
                {
                    return projectSend.checkChar(this, parseInt(this.getAttribute('maxlength')));
                }
                
                e.onkeyup = e.onkeypress;
                //e.onkeydown = e.onkeypress;
                
				projectSend.checkChar(e, parseInt(e.getAttribute('maxlength')));
            }
            
            if(isElement(e) && parseInt(e.getAttribute('maxword')) > 0) 
            {
                e.charDiv = this.createCharNumberShowDiv(e, e.getAttribute('maxword')+' / 0');
                e.onkeypress = function()
                {
                    return projectSend.checkWord(this, parseInt(this.getAttribute('maxword')));
                }
                
                e.onkeyup = e.onkeypress;
                e.onkeydown = e.onkeypress;
                
				projectSend.checkWord(e, parseInt(e.getAttribute('maxword')));
            }
            
        }        
    },
    
    checkChar: function(obj, num)
    {
        var res = obj.checkCharLength(num);
        obj.charDiv.innerHTML = num+' / '+obj.value.length;
		return res;
    },
    
    checkWord: function(obj, num)
    {
        var sct = obj.scrollTop;
        if(obj.value.split(' ').length > num || obj.innerHTML.split(' ').length > num)
        {
            var words = obj.value.split(' ');
            var val = '';            
            
            for(var i=0 ; i<num ; i++)
            {
                var sep = (num-1 == i ? '' : ' ');
				val+= words[i]+sep;
            }
            obj.value = val;
            obj.scrollTop = sct;
            return false;            
        }   
        obj.charDiv.innerHTML = num+' / '+obj.value.split(' ').length;
		return true;
    },
    
    createCharNumberShowDiv: function(obj, def)
    {
        obj.parentNode.style.position = 'relative';
		var bounds = getBounds(obj);
        
        var div = document.createElement('div');
		div.style.left = bounds._x + bounds.width + 10 + 'px';
		div.style.top = bounds._y + 'px';
		div.className = 'char-number';
		div.style.display = 'block';
		div.innerHTML = def;
				
        document.getElementsByTagName('body').item(0).appendChild(div);
        return div;
    },
	
	sum: function(field, obj)
	{
		if(isString(field))
		{
			this.elements.getElementsByAttribute({name:field}).map(function(o)
			{
				o.onchange = function()
				{
					var x = projectSend.sumValues(projectSend.elements.getElementsByAttribute({name:field}).getProperty('value'));
					if(intVal(x) != intVal(obj.value))
					{
						if(obj.getAttribute('noUpdateValue') != 'yes')
							obj.value = x;
						obj.onchange();
						projectSend.formatPrice(obj);
					}
					
				}
			});
		}
		else if(isArray(field))
		{
			var fieldList = new Array();
			for(var k=0 ; k<field.length ; k++)
				fieldList.push({name:field[k]});
				
			this.elements.getElementsByAttribute(fieldList).map(function(o)
			{
				o.onchange = function()
				{
					var x = projectSend.sumValues(projectSend.elements.getElementsByAttribute(fieldList).getProperty('value'));
					if(intVal(x) != intVal(obj.value))
					{
						obj.value = x;
						projectSend.formatPrice(obj);
					}
					
				}
			});
		}
	},
	
	sumValues: function()
	{
		var argv = arguments;
		var argc = arguments.length;
		var sum  = 0;
		
		for(var i=0 ; i<argc ; i++)
		{
			if(isArray(arguments[i]))
			{
				for(var k=0 ; k<arguments[i].length ; k++)
					sum = this.sumValues(sum, arguments[i][k]);
			}
			else if(arguments[i])
					sum+=intVal(arguments[i]);
					
		}
		return sum;
	},
	
	formatPrice: function(obj)
	{
		var o = isElement(obj) ? obj : this.form.elements[obj.name];
		var t = o.value.toString();
			t = t ? t : '';
		var r = t.reverse().replace(/\D/ig, '').split('');
		var g = '';
		for(var i=0 ; i<r.length ; i++)
		{
			g += (i!=0 && i%3 == 0 ? '.' : '') + r[i];
		}
		
		o.value = g.reverse();
	},
	
	sumFields: function(fieldList, name, remove)
	{
		var fields = new Object();
		
		for(var k=0 ; k<this.form.length ; k++)
		{
			if(isObject(this.form[k]) && this.form[k].name)
				if(fieldList.indexOf(this.form[k].name) != -1)
				{
					if(isUndefined(fields[this.form[k].name._replace('[]', '')])) fields[this.form[k].name._replace('[]', '')] = new Array();
					fields[this.form[k].name._replace('[]', '')].push(this.form[k]);
					
				}
		}
		
		for(var k in fields)
		{
			if(!isArray(fields[k])) continue;
			var x = k.split('_');
			var sumElmName = 'pjs_'+name+'_'+x.shift()+'_'+x.shift();
			sumElmName = sumElmName._replace('_milestone', '');
			if(remove) sumElmName = sumElmName._replace(remove, '');
			this.form[sumElmName].value = this.sumValues(new HTMLNodeList(fields[k]).getProperty('value'));
			this.formatPrice(this.form[sumElmName]);
			this.form[sumElmName].onchange();
		}
		
	}
};

