/*****************************************************
	String
******************************************************/
String.prototype.isNumeric = function() {
	try {
		var re_num = /^([0-9])+$/;
		if (!re_num.test(this)) {
			return false;
		}
		return true;
	}
	catch (e) {
		return false;
	}
}

String.prototype.isAlphaNumeric = function() {
	try {
		var re_num = /^([0-9a-zA-Z])+$/;
		if (!re_num.test(this)) {
			return false;
		}
		return true;
	}
	catch (e) {
		return false;
	}
}
			
String.prototype.isEmail = function() {
	try {
		var re_mail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z])+$/;
		if (!re_mail.test(this)) {
			return false;
		}
		return true;
	}
	catch (e) {
		return false;
	}
}

String.prototype.isUrl = function() {
	try {
		var re_url = /^(http|ftp):\/\/(www\.)?.+\.([a-z.]{2,6})+$/;
		if (!re_url.test(this)) {
			return false;
		}
		return true;
	}
	catch (e) {
		return false;
	}
}
	
String.prototype.isLength = function(min, max) {
	try {
		if (min == "undefined") {
			min = 1;
		}
		if (max == "undefined") {
			max = 65535;
		}
		if (!this.length || this.length < min || this.length > max) {
			return false;
		}
		return true;
	}
	catch (e) {
		return false;
	}
}

String.prototype.hasAreaCode = function() {
	try {
		if (this.substring(0,1) != "0") {
			return false;
		}
		return true;
	}
	catch (e) {
		return false;
	}
}

String.prototype.isPhoneNumber = function() {
	try {
		var re_num = /^([0-9\-]{1,})+$/;
		if (!re_num.test(this)) {
			return false;
		}
		return true;
	}
	catch (e) {
		return false;
	}
}

String.prototype.isIdentityNumber = function() {
	try {
		var re_num = /^([0-9]{8})\-([0-9]{4})+$/;
		if (!re_num.test(this)) {
			return false;
		}
		return true;
	}
	catch (e) {
		return false;
	}
}

String.prototype.isPassword = function() {
	try {
		var re_num = /^([a-zA-z0-9_\-])+$/;
		if (!re_num.test(this)) {
			return false;
		}
		return true;
	}
	catch (e) {
		return false;
	}
}

/*****************************************************
	Array
******************************************************/

// To cover IE 5.0's lack of the push method
Array.prototype.push = function(value) {
  this[this.length] = value;
}

/*****************************************************
	Form validation
******************************************************/

//Check fields in Form
function isBlank(s) {
	var len=s.length
	var i
	for(i=0;i<len;++i) {
		if(s.charAt(i)!=" ") return false
	}
	return true
}

//Validate function
function validate(fieldName,fieldValue) {
	if(isBlank(fieldValue)) {
		return false
	}
	return true
}

//Check for numeric values only
function notNumeric(s) {
	nr1=s;
	for (var i=0;i<nr1.length;i++) {
		cmp="0123456789"
		tst=nr1.substring(i,i+1)
		if(cmp.indexOf(tst)<0) return true 
	}
	return false
}

//Check for 0 at first character
function PhoneZero(s) {
	nr1=s;
		if(nr1.indexOf("0") != 0) {return true;
		} else {
		return false;
		}
}

//Check for 7 or 0 at second character
function PhoneSecondChar(s) {
	nr1=s;
	if(nr1.indexOf("7") == 1) {
		return true;
	} else if(nr1.indexOf("00") == 0) {
		return true;
	} else {
		return false;
	}
}
//Check for Character values only
function notCharacter(s) {
	nr1=s;
	for (var i=0;i<nr1.length;i++) {
		cmp="ABCDEFGHIJKLMNOPRQSTUVWXYZÅÄÖabcdefghijklmnopqrstuvwxyzåäö -üÜáéíóúàèìòùÁÉÍÓÚÀÈÌÒÙñÑÿ0123456789";
		tst=nr1.substring(i,i+1);
		if(cmp.indexOf(tst)<0) return true ;
	}
	return false;
}

//Check for Characters for Debatten
function debattenCharacter(s) {
	nr1=s;
	for (var i=0;i<nr1.length;i++) {
		cmp="ABCDEFGHIJKLMNOPRQSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
		tst=nr1.substring(i,i+1);
		if(cmp.indexOf(tst)<0) return true; 
	}
	return false;
}

//Check for Character in Email
function notEmailCharacter(s) {
	nr1=s;
	for (var i=0;i<nr1.length;i++) {
		cmp="ABCDEFGHIJKLMNOPRQSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
		tst=nr1.substring(i,i+1);
		if(cmp.indexOf(tst)<0) return true ;
	}
	return false;
}

//Check for Character in Password
function notPasswordCharacter(s) {
	nr1=s;
	for (var i=0;i<nr1.length;i++) {
		cmp="ABCDEFGHIJKLMNOPRQSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
		tst=nr1.substring(i,i+1);
		if(cmp.indexOf(tst)<0) return true ;
	}
	return false;
}

//Check for Persnonummer values only
function PnumChar(s) {
	nr1=s;
	for (var i=0;i<nr1.length;i++) {
		cmp="0123456789- ";
		tst=nr1.substring(i,i+1);
		if(cmp.indexOf(tst)<0) return true;
	}
	return false;
}

//Check for dash values only for Personnummer
function PnumDash(s) {
	nr1=s;
	if(nr1.indexOf("-") != 8) {
		return true;
	} else {
		return false;
	}
}

/*****************************************************
	Helpers
******************************************************/

function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isFunction(a) {
    return typeof a == 'function';
}

function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}

function getRandomNumber() {
	var day = new Date();
	var id = day.getTime();
	return id;
}

function getElementsByClassName(strClass, strTag, objContElm) {
  strTag = strTag || "*";
  objContElm = objContElm || document;
  var objColl = (strTag == '*' && document.all) ? document.all : objContElm.getElementsByTagName(strTag);
  var arr = new Array();
  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
  var arrClass = strClass.split(delim);
  for (var i = 0, j = objColl.length; i < j; i++) {
	  if(typeof objColl[i].className == "undefined") continue;
    var arrObjClass = objColl[i].className.split(' ');
    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
    var c = 0;
    comparisonLoop:
    for (k = 0, l = arrObjClass.length; k < l; k++) {
      for (m = 0, n = arrClass.length; m < n; m++) {
        if (arrClass[m] == arrObjClass[k]) c++;
        if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
          arr.push(objColl[i]);
          break comparisonLoop;
        }
      }
    }
  }
  return arr;
}

/*****************************************************
	Extend Prototype Position  
******************************************************/

Position.getWindowSize = function(w) {
  var width, height;
  w = w ? w : window;
  width = w.innerWidth || (w.document.documentElement.clientWidth || w.document.body.clientWidth);
  height = w.innerHeight || (w.document.documentElement.clientHeight || w.document.body.clientHeight);

  return { width: width, height: height };
}

Position.center = function(element){
  var options = Object.extend({
      zIndex: 999,
      update: false
  }, arguments[1] || {});

  element = $(element)

  if(!element._centered){
      Element.setStyle(element, {position: 'absolute', zIndex: options.zIndex });
      element._centered = true;
  }

  var dims = Element.getDimensions(element);

  Position.prepare();
  var winSize = Position.getWindowSize();
  var winWidth = winSize.width;
  var winHeight = winSize.height;

  var offLeft = (Position.deltaX + Math.floor((winWidth-dims.width)/2));
  var offTop = (Position.deltaY + Math.floor((winHeight-dims.height)/2));
  element.style.top = ((offTop != null && offTop > 0) ? offTop : '0')+ 'px';
  element.style.left = ((offLeft != null && offLeft > 0) ? offLeft :'0') + 'px';

  if (options.update) {
    Event.observe(window, 'resize', function(evt) { Position.center(element); }, false);
    Event.observe(window, 'scroll', function(evt) { Position.center(element); }, false);
  }
}