String.prototype.customTrim = function(x) {
  if (x=='left')
    return this.replace(/^\s*/,'');
  if (x=='right')
    return this.replace(/\s*$/,'');
  if (x=='normalize')
    return this.replace(/\s{2,}/g,' ').trim();
}
String.prototype.leftTrim = function(){
  return this.customTrim('left');
}
String.prototype.rightTrim = function(){
  return this.customTrim('right');
}
String.prototype.normalize = function(){
  return this.customTrim('normalize');
}
String.prototype.trim = function(){
  return this.leftTrim().rightTrim();
}


function clearFrom(formName){
  var form = document.getElementById(formName);
  var elements = form.elements;
  for(var i=0; i < elements.length; i++){
    if(elements[i].tagName == "SELECT"){
      elements[i].selectedIndex = 0;
    }else{
      elements[i].value = "";
    }
  }
}
function validate(formName,alertMsg,msgTextExternal){
  var result = true;
  var form = document.getElementById(formName);
  var elements = form.elements;
  var msgText = "";
  if(msgTextExternal){
    msgText = msgTextExternal;
  }
  for(var i=0; i < elements.length; i++){
    if(elements[i].getAttribute("fvrequired")){
      var fvType = elements[i].getAttribute("fvtype");
      if(alertMsg){
        if(!isValid(fvType,elements[i].value)){
          result = false;
          msgText = msgText + elements[i].getAttribute("fvErrorMsg") + "\n";
        }
      }else{
        var id = formName + "R" + elements[i].name;
        var msg = document.getElementById(id);
        if(!isValid(fvType,elements[i].value)){
          result = false;
          if(!msg){
            var position = getPos(elements[i]);
            position.width = elements[i].offsetWidth;
            document.body.appendChild(getMsg(id, fvType,position));
          }else{
            msg.style.display = "block";
          }
        }else if(msg){
          msg.style.display = "none";
        }
      }
    }
  }
  if(result && msgText == ""){
    form.submit();
  }else if(alertMsg){
    alert(msgText);
  }
}
function isValid(type, value){
  var result = false;
  var emailPattern = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
  var postCodePattern =/[0-9]/;
  var telefon = /^(\+|\(|[0-9])[-\(\) 0-9]*$/
  if(type == "text"){
    if(value.trim()!=""){
      result = true;
    }
  }else if(type == "email"){
    if(emailPattern.test(value)){
      result = true;
    }
  }else if(type=="postCode"){
    value = value.replace(/ /g,'');
    value = value.replace(/-/g,'');
    if(value.length == 5 && postCodePattern.test(value)){
      result = true;
    }
  }else if(type=="telefon"){
    value = value.replace(/ /g,'');
    if(telefon.test(value)){
      result = true;
    }
  }
  return result;
}

function getMsg(id,type, position){
  var msg = document.createElement("span");
  var text = "[обезательно поле]";
  if(type == "email"){
   text = "[неверный e-mail]";
  }
  msg.innerHTML = text;
  msg.setAttribute("id",id);
  msg.setAttribute("style","color:red; position:absolute; left:"+ (position.left + position.width) +"; top:"+position.top+";");
  return msg;
}

function getPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return {left:curleft, top:curtop};
}
