// Make text fit in the parent container
function fitText(divs, linkTxt, negativLength, link) {
	if (!link) link = false;
	if (!negativLength) negativLength = 6;
	if (!document.getElementsByTagName) return;

    if (divs.length == 0) return;
	for (var j = 0; j < divs.length; j++) {
		var obj=divs[j];
		var i=0;	// to break if it check fails
		var last = obj.innerHTML;
			
		// Loop untill text fits
		while (obj.scrollHeight>obj.offsetHeight){
			// Make sure the script is not slow, stop after 200 loops!
			i++;
			if (i>200) break;
			
			// Save the last
			var last = obj.innerHTML;
			
			// minus ten to speed up
			// Strip 10 chars
			obj.innerHTML=obj.innerHTML.substring(0, obj.innerHTML.length-10);	
		}

		var i=0;	// to break if it check fails

		// Get the last txt (plus ten)
		obj.innerHTML = last;
		
		// Loop untill text fits
		while (obj.scrollHeight>obj.offsetHeight){
			// Make sure the script is not slow, stop after 200 loops!
			i++;
			if (i>10) break;
			
			// Strip 10 char
			obj.innerHTML=obj.innerHTML.substring(0, obj.innerHTML.length-10);
		}

		
		// Add link + ...
		obj.innerHTML=obj.innerHTML.substring(0, (obj.innerHTML.length-linkTxt.length-negativLength));
		if (obj.getAttribute('href') && link) {obj.innerHTML+= ' .. <a href="'+obj.getAttribute('href')+'" class="fixnext">'+linkTxt+'</a>'};
		if (!link && i>0) {obj.innerHTML+=linkTxt};
	}
}

// searchElementByClass
function getElementsByClass(node,searchClass,tag) {
  var classElements = new Array();
  if (!node) return;
	
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)")
  for (i = 0, j = 0; i < elsLen; i++) {
    if ( pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}

// Form validator function (jQuery required)
// Needs the following attributes in the input fields:
// req: 				Determines if field needs to be checked. (1|0) (required)
// default: 		Default value of input field, if input field has this value it will be considered incorrect (optional)
// err: 				Custom error message for each field (required)
// check: 			Kind of check that needs to be performed. (string|email|int|pwd|date) (required)
// minlength: 	Minimum length of the field (optional)
// 
// Also an 'err' class is expected in the css
// The function returns an array in the following format: err['field name']['custom error message']
// Note: The pwd checks expects 2 fields with the pwd check


function formValidator(form) {

	var err = [];
	var errKey = 0; // needed to fill the error array

	for (var i=0; i < form.length; i++) {
		if ($(form[i]).attr('req') == 1 || ($(form[i]).attr('err') && $(form[i]).attr('default') && $(form[i]).attr('err').length >0 && $(form[i]).val().length >0 && $(form[i]).val() != $(form[i]).attr('default') )) {
			switch ($(form[i]).attr('check')) {
					case 'string':
						var strErr = false;
						if($(form[i]).attr('default')!=''){ // check if value != default
							if($(form[i]).val() == $(form[i]).attr('default')){
								strErr = true;
							}
						}
						
						if($(form[i]).attr('minlength') > 0){ // not required, make sure we have a minlength attribute
							if ($(form[i]).attr('minlength') > $(form[i]).val().length ) { // check length
								strErr = true;
							}
						}
						if($(form[i]).attr('maxlength') > 0){ // not required, make sure we have a maxlength attribute
							if ($(form[i]).attr('maxlength') < $(form[i]).val().length ) { // check length
								strErr = true;
							}
						}
						if (strErr) {
							$(form[i]).addClass('err');
							err[errKey] = [$(form[i]).attr('name'), $(form[i]).attr('err')]; // store error
							errKey++;
						} else {
							$(form[i]).removeClass('err'); // remove error class
						}
						break;
					case 'int':
						var intErr = false;

						var value = $(form[i]).val().replace(',', '.'); // isNan returns true if ther's an ',' in the number
						if(isNaN(value)){ // Check if field value is a number
							intErr = true;
						}
						
						if($(form[i]).attr('default')!=''){ // check if value != default
							if($(form[i]).val() == $(form[i]).attr('default')){
								intErr = true;
							}
						}
						
						
						if($(form[i]).attr('minlength') > 0){ // not required, make sure we have a minlength attribute
							if ($(form[i]).attr('minlength') > $(form[i]).val().length ) { // check length
								intErr = true;
							}
						}
						
						if (intErr) {
							$(form[i]).addClass('err');
							err[errKey] = [$(form[i]).attr('name'), $(form[i]).attr('err')]; // store error
							errKey++;
						} else {
							$(form[i]).removeClass('err'); // remove error class
						}
						break;
					case 'email':
						var emailErr = false;
					
						if($(form[i]).attr('default')!=''){ // check if value != default
							if($(form[i]).val() == $(form[i]).attr('default')){
								emailErr = true;
							}
						}
					
						// just use a reg.ex. to determine if value is correct
						var reg = new RegExp("^[0-9a-zA-Z\-\_\.]+@[0-9a-zA-Z\-]+[\.]{1}[0-9a-zA-Z\-]+[\.]?[0-9a-zA-Z]+$");

						if(!reg.test($(form[i]).val())){
							emailErr = true;
						}
						if (emailErr) {
							$(form[i]).addClass('err');
							err[errKey] = [$(form[i]).attr('name'), $(form[i]).attr('err')]; // store error
							errKey++;
						} else {
							$(form[i]).removeClass('err'); // remove error class
						}
						break;

					case 'pwd': // expects 2 pwd fields
						if(pwdFields)	// second pwd field, already checked the first time. break
							break;

						var pwdFields = [];
						var pwdErr = false;
						for (var y=0; y < form.length; y++) { // get both fields
							if($(form[y]).attr('check') == "pwd"){
								pwdFields[pwdFields.length] = $(form[y]);
							}
						}
						if(pwdFields.length == 2){ // Check if both fields are identical
							if(pwdFields[0].val() != pwdFields[1].val()){
								pwdErr = true;
							}
							if($(pwdFields[0]).attr('default')){ // check if value != default
								if($(pwdFields[0]).val() == $(pwdFields[0]).attr('default')){
									pwdErr = true;
								}
							}
							if($(pwdFields[0]).attr('minlength')){ // not required, make sure we have a minlength attribute
								if ($(pwdFields[0]).attr('minlength') > $(pwdFields[0]).val().length ) { // check length
									pwdErr = true;
								}
							}
							if (pwdErr) {
								$(pwdFields[0]).addClass('err');
								err[errKey] = [$(pwdFields[0]).attr('name'), $(pwdFields[0]).attr('err')]; // store error
								errKey++;							
								$(pwdFields[1]).addClass('err');
								err[errKey] = [$(pwdFields[1]).attr('name'), $(pwdFields[1]).attr('err')]; // store error
								errKey++;							
								break;
							} else { // both are correct, thus far
								$(pwdFields[0]).removeClass('err');
								$(pwdFields[1]).removeClass('err');
							}
							
						}
						break;

					case 'date': // valiDate.. get it? as in validate?
						var dateErr = false;
						if($(form[i]).attr('default')!=''){ // check if value != default
							if($(form[i]).val() == $(form[i]).attr('default')){
								dateErr = true;
							}
						}
						if($(form[i]).attr('minlength') > 0){ // not required, make sure we have a minlength attribute
							if ($(form[i]).attr('minlength') > $(form[i]).val().length ) { // check length
								dateErr = true;			
							}
						}
						if(isNaN($(form[i]).val().substring(0,2)) || $(form[i]).val().substring(2,3) != "-" || isNaN($(form[i]).val().substring(3,5)) || $(form[i]).val().substring(5,6) != "-" || isNaN($(form[i]).val().substring(6)) || $(form[i]).val().substring(6).length > 4){
							dateErr = true;
						}
						if (dateErr) {
							$(form[i]).addClass('err');
							err[errKey] = [$(form[i]).attr('name'), $(form[i]).attr('err')]; // store error
							errKey++;
						} else {
							$(form[i]).removeClass('err'); // remove error class
						}

						break;

						case 'phone': // Then who was phone?!?!
							var phoneErr = false;
							
							valid_chars_regex = /[^0-9]/g;				// Characters allowed in the field (in a Regular Expression format)
							
							if($(form[i]).attr('default')!=''){ // check if value != default
								if($(form[i]).val() == $(form[i]).attr('default')){
									phoneErr = true;
								}
							}
							$(form[i]).val($(form[i]).val().replace(valid_chars_regex, '')); // replace all non valid chars
							
							if($(form[i]).attr('minlength') > 0){ // not required, make sure we have a minlength attribute
								if ($(form[i]).attr('minlength') > $(form[i]).val().length ) { // check length
									phoneErr = true;			
								}
							}
							if(isNaN($(form[i]).val())){ // Check if field value is a number
								phoneErr = true;
							}
							if (phoneErr) {
								$(form[i]).addClass('err');
								err[errKey] = [$(form[i]).attr('name'), $(form[i]).attr('err')]; // store error
								errKey++;
							} else {
								$(form[i]).removeClass('err'); // remove error class
							}

							break;

					default:
					 break;
					
			}
		}
	};
	// err=[];
	return err;
}
