﻿/* ---------------------- functions ----------------------- */

// replace all ocurrences of char 
function replace_all(str, from, to) {
	var idx = str.indexOf(from);
	while (idx > -1) {
		str = str.replace(from,to);
		idx = str.indexOf(from);
	}
	return str;
}

// format as numeric (double) 
function numeric_format(el) {
	var output = '0,00';
	var num = el.value;
	var regexnum = /(^\d+$)|(^\d+\.\d+$)/;
	num = replace_all(num," ","");
	num = replace_all(num,",",".");
	num = replace_all(num,",","");
	if (regexnum.test(num)){
		output = format_number(num);
		output = re_format_number(output);
	}
	el.value = output;
}

// format number 
function format_number(amount) {
	var minus = '';
	var i = parseFloat(amount);
	if(isNaN(i)) 
		i = 0.00; 
	if(i < 0) 
		minus = '-';
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) 
		s += '.00';
	if(s.indexOf('.') == (s.length - 2)) 
		s += '0';
	s = minus + s;
	return s;
}

// re-format number 
function re_format_number(amount) {
	var minus = '';
	var delimiter = " "; 
	var a = amount.split('.',2)
	var d = a[1];
	var i = parseInt(a[0]);
	if(isNaN(i)) 
		return '';
	if(i < 0) 
		minus = '-';
	i = Math.abs(i);
	var n = new String(i);
	var a = [];
	while(n.length > 3) {
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) 
		a.unshift(n); 
	n = a.join(delimiter);
	if(d.length < 1) 
		amount = n;
	else 
		amount = n + ',' + d;
	amount = minus + amount;
	return amount;
}

// sets a safe number 
function clean_currency(val) {
	var num = val;
	num = num.replace("$","");
	num = num.replace("%","");
	num = replace_all(num,",",".");
	num = replace_all(num," ","");
	num = replace_all(num,",","");
	return num;
}


/* remove trailing and leading blanks from a string */
function trim(s) {
	while (s.substring(0,1) == ' ') {
		s = s.substring(1,s.length);
	}
	while (s.substring(s.length-1,s.length) == ' ') {
		s = s.substring(0,s.length-1);
	}
	return s;
}

/* check if object is an array */
function isArray(obj){
	return(typeof(obj.length)=="undefined")?false:true;
}

/* validates an email address */
function check_email(emailStr) {
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
		return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]
	if (user.match(userPat)==null) {
	    return false
	}
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return false
			}
		}
		return true
	}
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		return false
	}
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
		return false
	}
	if (len<2) {
		alert(errStr)
		return false
	}
	return true;
}

/* basic form validation */
function validate_form(poForm){
	for(i=0; i<poForm.elements.length; i++){
		if(poForm.elements[i].lang == "true"){
			switch (poForm.elements[i].type) {
				case "text":
				case "password":
				case "textarea":
				case "file":
					if(trim(poForm.elements[i].title)!=""){
						if(trim(poForm.elements[i].value) == ""){
							alert("Beklager, " + poForm.elements[i].title.toLowerCase() + " må fylles ut før søknaden kan leveres");
							poForm.elements[i].value = "";
							poForm.elements[i].focus();
							return false;
						}
					}
					//custom validations
					if(poForm.elements[i].alt!=null){
						if(trim(poForm.elements[i].alt)!=''){
							//check email address
							if((trim(poForm.elements[i].value) != "")&&(poForm.elements[i].alt=="email")){
								if(!check_email(poForm.elements[i].value)){
									alert("Vennligst oppgi en gyldig e-post");
									poForm.elements[i].focus();
									return false;
								}
							}
						}
					}
					break;
				case "radio":
					elradio = eval("poForm."+poForm.elements[i].name);
					checado = false;
					if(isArray(elradio)){
						for(j=0; j<elradio.length; j++){
							if(elradio[j].checked)
								checado = true;
						}
					} else{
						if(elradio.checked)
							checado = true;
					}
					if(!checado){
						if(isArray(elradio)){
							alert(elradio[0].title);
							elradio[0].focus();
						} else{
							alert(elradio.title);
							elradio.focus();
						}
						return false;
					}
					break;
				case "select-one":
					if(poForm.elements[i].selectedIndex < 1){
						alert("Beklager, " + poForm.elements[i].title.toLowerCase() + " må fylles ut før søknaden kan leveres");
						poForm.elements[i].focus();
						return false;
					}
					break;
				case "select-multiple":
					if(poForm.elements[i].selectedIndex < 1){
						alert(poForm.elements[i].title);
						poForm.elements[i].focus();
						return false;
					}
					break;
			}
		}
	}
	return true;
}


/* ---------------------- events ----------------------- */

$(document).ready(function() {
	
	if($('input.date').length) {
		$dateSeparator        = "-";
		$dateYearPosition     = 0;
		$dateMonthPosition    = 1;
		$dateDayPosition      = 2;
		$datePickerDateFormat = "yy"+$dateSeparator+"mm"+$dateSeparator+"dd";
		$dateMonthNamesShort  = $.datepicker.regional['no']['monthNamesShort'];
	}
	
	// enable rich text editor 
	$('.fckeditor').each(function(){
		oFCKeditor = new FCKeditor($(this).attr("id"));
		oFCKeditor.BasePath = "/fckeditor/";
		oFCKeditor.Height = $(this).attr("rows")*10;
		oFCKeditor.ToolbarSet = 'Basic' ;
		oFCKeditor.ReplaceTextarea();
	});
	
	// search 
	$('#sjekk').click(function(){
		$("form[name='search-form']").trigger('submit');
		return false;
	});
	
	// report 
	$('#rapport').click(function(){
		$("form[name='report-form']").trigger('submit');
		return false;
	});
	
	// application 
	$('#submit').click(function(){
		$("input[name='final']").val("0");
		$("form[name='application-form']").trigger('submit');
		$("form[name='payment-form']").trigger('submit');
		$("form[name='reporting-form']").trigger('submit');
		return false;
	});
	
	// validate application
	$("form[name='application-form']").submit(function(){
		if(parseInt($("input[name='final']").val())==1){
			return validate_form(this);
		}
		// check email
		if($.trim($("input[name='email']").val()) == ""){
			alert("Beklager, e-post må fylles ut før søknaden kan leveres");
			$("input[name='email']").val("");
			$("input[name='email']").focus();
			return false;
		}
	});
	
	// validate payment
	$("form[name='payment-form']").submit(function(){
		return validate_form(this);
	});
	
	// validate report
	$("form[name='reporting-form']").submit(function(){
		if(parseInt($("input[name='final']").val())==1){
			// check confirmation
			if($("input[name='is_report_correct']").attr("checked")===false){
				alert("Beklager, du bekrefter med dette at overnevnte opplysninger er korrekte før rapport kan leveres");
				$("input[name='is_report_correct']").focus();
				return false;
			} else {
				return validate_form(this);
			}
		}
		// check email
		if($.trim($("input[name='email']").val()) == ""){
			alert("Beklager, e-post må fylles ut før rapport kan leveres");
			$("input[name='email']").focus();
			return false;
		}
		if(!check_email($("input[name='email']").val())){
			alert("Vennligst oppgi en gyldig e-post");
			$("input[name='email']").focus();
			return false;
		}
	});
	
	// add file
	$('#add-files span a').click(function(){
		var num = parseInt($('#files_count').val()) + 1;
		var html = '';
		html = html + '<li>';
		html = html + '<div class="half left">';
		html = html + '<label class="label">Navn*</label>';
		html = html + '<input type="text" name="name_'+num+'" value="" maxlength="100" class="text" />';
		html = html + '</div>';
		html = html + '<div class="half" id="currid_'+num+'">';
		html = html + '<label class="label">CV* (velg Word eller PDF dokument og trykk på "Last opp")</label>';
		html = html + '<div class="fileup">';
		html = html + '<input type="file" id="curriculum_'+num+'" name="curriculum_'+num+'" class="uploadify" />';
		html = html + '</div>';
		html = html + '<div class="lastopp" id="lastopp_'+num+'"><a href="javascript:startUpl(\'curriculum_'+num+'\');">Last opp</a></div>';
		html = html + '</div>';
		html = html + '</li>';
		$('#files').append(html);
		$('#files_count').val(num);

		$('#curriculum_'+num).fileUpload({
			'uploader'  : '/uploadify/uploader.swf',
			'checkScript': '/uploadify/check.php',
			'script'    : '/uploadify/upload.php',
			'hideButton': false,
			'buttonImg'	: '/images/velg.png',
			'cancelImg' : '/images/cancel.png',
			'auto'      : false,
			'scriptData': {'appID':$('#id_application').attr('value')},
			'folder'    : '/files',
			'displayData': 'percentage',
			'onComplete': function(event, queueID, fileObj, response, data, theinputid){
				var parnt = $('#'+theinputid).parent();
				parnt.html('<input type="hidden" name="'+theinputid+'" value="'+response+'" /><a href="files/'+str_padL($('#id_application').attr('value'), '0', 5)+"_"+response+'" class="filename">'+response+'</a>');
				lopp = theinputid.replace('curriculum_', '');
				$('#lastopp_'+lopp).html('<a href="javascript:remCurr(\'currid_'+lopp+'\');">Fjern</a>');
			}
		});


		return false;
	});
	
	// add income
	$('#add-income span a').click(function(){
		var num = parseInt($('#income_count').val()) + 1;
		var html = '';
		html = html + '<li>';
		html = html + '<input type="text" name="concept_income_'+num+'" value="" maxlength="100" class="text" />';
		html = html + '<input type="text" name="amount_income_'+num+'" value="0,00" maxlength="20" class="text amount" />';
		html = html + '</li>';
		$('#income').append(html);
		$('#income_count').val(num);
		return false;
	});
	
	// add expense
	$('#add-expense span a').click(function(){
		var num = parseInt($('#expense_count').val()) + 1;
		var html = '';
		html = html + '<li>';
		html = html + '<input type="text" name="concept_expense_'+num+'" value="" maxlength="100" class="text" />';
		html = html + '<input type="text" name="amount_expense_'+num+'" value="0,00" maxlength="20" class="text amount" />';
		html = html + '</li>';
		$('#expenses').append(html);
		$('#expense_count').val(num);
		return false;
	});
	
	// autoselect
	$('input.amount').livequery('focus', function(event) {
		this.select();
	});
	
	// format amount
	$('input.amount').livequery('change', function(event) {
		numeric_format(this);
	});
	
	// date picker
	if($('input.date').length) {
		$('input.date').datepicker({ 
			firstDay: 1, 
			dateFormat: $datePickerDateFormat 
		});
		$('img.datepicker').click(function(){
			$(this).prev('input.date').trigger('focus');
		});
	}
	
	// expenses subtotal
	$('#expenses li input.amount').livequery('change', function(event) {
		var subtotal = 0;
		$('#expenses li input.amount').each(function(){
			subtotal = subtotal + parseFloat(clean_currency($(this).val()));
		});
		$("input[name='expenses_amount']").val(subtotal).trigger('change');
	});
	
	// income subtotal
	$('#income li input.amount').livequery('change', function(event) {
		var subtotal = 0;
		$('#income li input.amount').each(function(){
			subtotal = subtotal + parseFloat(clean_currency($(this).val()));
		});
		$("input[name='income_amount']").val(subtotal).trigger('change');
	});
	
	// upload
	$("a.upload").livequery('click', function(event) {
		var button        = $(this);
		var file_field    = $(this).parent().find("input[type='file']");
		var file_field_id = file_field.attr("id");
		$("#loading").ajaxStart(function(){	$(this).show();	}).ajaxComplete(function(){	$(this).hide();	});
		$.ajaxFileUpload({
			url: 'file-upload',
			secureuri: false,
			fileElementId: file_field_id,
			dataType: 'json',
			success: function (data, status) {
				if(typeof(data.error) != 'undefined') {
					if(data.error != '') {
						alert(data.error);
					} else {
						var html = '<input type="hidden" name="'+file_field_id+'" value="'+data.filename+'" /><a href="files/'+data.prefix+'_'+data.filename+'" class="filename">'+data.filename+'</a>';
						button.prev("input[type='file']").remove();
						button.before(html).text('Fjern').addClass('delete').removeClass('upload');
					}
				}
			},
			error: function (data, status, e) {
				alert(e);
			}
		});
		return false;
	});
	
	// delete file
	$('a.delete').livequery('click', function(event) {
		if(window.confirm('Are you sure you want to delete this file?')) {
			if($(this).hasClass('contract')) {
				var html = '<input type="file" id="contract_document" name="contract_document" class="file" />';
				$(this).prev("a").remove();
				$(this).prev("input[type='hidden']").remove();
				$(this).text('Last opp');
				$(this).before(html);
				$(this).addClass('upload').removeClass('delete');
			} else {
				$(this).parent().parent().remove();
			}
		}
		return false;
	});

	// delete file
	$('a.filename').livequery('click', function(event) {
		window.open($(this).attr('href'), 'file');
		return false;
	});
	
	// alert form change
	$('a.alert').click(function(){
		if(window.confirm('Obs! Du vil miste all informasjon')) {
			self.location.href = $(this).attr('href');
		}
		return false;
	});
	
	// set final application
	$("#submit-final").click(function(){
		$("input[name='final']").val("1");
		$("form[name='application-form']").trigger('submit');
		$("form[name='reporting-form']").trigger('submit');
		return false;
	});
	
	// save temporarly
	$("a.temp-save").click(function(){
		// check email
		if($.trim($("input[name='email']").val()) == ""){
			alert("Beklager, e-post må fylles ut før søknaden kan leveres");
			$("input[name='email']").val("");
			$("input[name='email']").focus();
			return false;
		}
		$("#loading").show();
		$.ajax({
			type: "POST",
			url: "send-inn-soknad",
			data: "tempsave=1&"+$("form[name='application-form']").serialize(),
			success: function(msg){
				$("#loading").hide();
			}
		});
		return false;
	});
	
	$('.uploadify').fileUpload({
		'uploader'  : '/uploadify/uploader.swf',
		'checkScript': '/uploadify/check.php',
		'script'    : '/uploadify/upload.php',
		'hideButton': false,
		'cancelImg' : '/images/cancel.png',
		'auto'      : false,
		'buttonImg'	: '/images/velg.png',
		'scriptData': {'appID':$('#id_application').attr('value')},
		'folder'    : '/files',
		'displayData': 'percentage',
		'onComplete': function(event, queueID, fileObj, response, data, theinputid){
			var parnt = $('#'+theinputid).parent();
			parnt.html('<input type="hidden" name="'+theinputid+'" value="'+response+'" /><a href="files/'+str_padL($('#id_application').attr('value'), '0', 5)+"_"+response+'" class="filename">'+response+'</a>');
			lopp = theinputid.replace('curriculum_', '');
			$('#lastopp_'+lopp).html('<a href="javascript:remCurr(\'currid_'+lopp+'\');">Fjern</a>');
		}
	});
	
	$('.upload').fileUpload({
		'uploader'  : '/uploadify/uploader.swf',
		'checkScript': '/uploadify/check.php',
		'script'    : '/uploadify/upload.php',
		'hideButton': false,
		'cancelImg' : '/images/cancel.png',
		'auto'      : false,
		'buttonImg'	: '/images/velg.png',
		'scriptData': {'appID':$('#id_application').attr('value')},
		'folder'    : '/files/reports',
		'displayData': 'percentage',
		'onComplete': function(event, queueID, fileObj, response, data, theinputid){
			var parnt = $('#'+theinputid).parent();
			parnt.html('<input type="hidden" name="'+theinputid+'" value="'+response+'" /><a href="files/reports/'+str_padL($('#id_application').attr('value'), '0', 5)+"_"+response+'" class="filename">'+response+'</a>');
			$('#lastopp').html('');
		}
	});

	$('#contract_document').fileUpload({
		'uploader'  : '/uploadify/uploader.swf',
		'checkScript': '/uploadify/check.php',
		'script'    : '/uploadify/upload.php',
		'hideButton': false,
		'cancelImg' : '/images/cancel.png',
		'auto'      : false,
		'buttonImg'	: '/images/velg.png',
		'folder'    : '/files',
		'displayData': 'percentage',
		'scriptData': {'appID':$('#id_application').attr('value')},
		'onComplete': function(event, queueID, fileObj, response, data, theinputid){
			var html = '<label class="label">Avtale* (velg Word eller PDF dokument og trykk på "Last opp")</label>';
				html += '<div class="fileup">';
				html += '<input type="hidden" name="contract_document" id="contract_document" value="'+response+'" /><a href="files/'+str_padL($('#id_application').attr('value'), '0', 5)+"_"+response+'" class="filename">'+response+'</a>';
				html += '</div>';
				html += '<div class="lastopp"><a href="javascript:remContract();">Fjern</a></div>';
			$('#uploadcontract').html(html);
		}
	});
});

function startUpl(fileID){
	$('#'+fileID).fileUploadStart();
}
function remCurr(fileID){
	$('#'+fileID).parent().remove();
}
function startUplContract(){
	$('#contract_document').fileUploadStart();
}
function remContract(){
	var html = '<label class="label">Avtale* (velg Word eller PDF dokument og trykk på "Last opp")</label>';
		html += '<div class="fileup">';
		html += '<input type="file" id="contract_document" name="contract_document" value="" />';
		html += '</div>';
		html += '<div class="lastopp"><a href="javascript:startUplContract();">Last opp</a></div>';
	$('#uploadcontract').html(html);
	$('#contract_document').fileUpload({
		'uploader'  : '/uploadify/uploader.swf',
		'checkScript': '/uploadify/check.php',
		'script'    : '/uploadify/upload.php',
		'hideButton': false,
		'cancelImg' : '/images/cancel.png',
		'buttonImg'	: '/images/velg.png',
		'auto'      : false,
		'folder'    : '/files',
		'displayData': 'percentage',
		'scriptData': {'appID':$('#id_application').attr('value')},
		'onComplete': function(event, queueID, fileObj, response, data, theinputid){
			var html = '<label class="label">Avtale* (velg Word eller PDF dokument og trykk på "Last opp")</label>';
				html += '<div class="fileup">';
				html += '<input type="hidden" name="contract_document" id="contract_document" value="'+response+'" /><a href="files/'+str_padL($('#id_application').attr('value'), '0', 5)+"_"+response+'" class="filename">'+response+'</a>';
				html += '</div>';
				html += '<div class="lastopp"><a href="javascript:remContract();">Fjern</a></div>';
			$('#uploadcontract').html(html);
		}
	});
}

function str_padL(str,pL,strLength){
	var p_L = '';
	dif = str.length;
	for(i=0; i<(strLength-dif); i++){
		p_L += pL;
	}
	str = p_L+str;
	return str;
}
