/**
 *  Widely used functions on dreamki.com
 *  Usage from any place: dr.method_name(param, param)
 *  jQuery is required for some stuff.
 **/


var dr = dreamki = new dreamki();

function dreamki() {

    var self = this;
    
    this.KEY = window.KEY = {
	LEFT: 37,
	UP: 38,
	RIGHT: 39,
	DOWN: 40,
	DEL: 8,
	TAB: 9,
	RETURN: 13,
	ESC: 27,
	PAGEUP: 33,
	PAGEDOWN: 34,
	SPACE: 32,
	HOME: 36,
	END: 35,
	ENTER: 13,
	DELETE: 46,
	BACKSPACE: 8
    }

    this.isValidEmail = function (email) {
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	return pattern.test(email);
    }

    this.ajaxFormClearErrors = function (form) {
	if (!form.length)
	    return false;
	form.
	    find('.errors').
	    each(function() {
	    if (!$(this).hasClass('hide')) {
		$(this).addClass('hide');
	    }
	});
	form.find('.errorField').removeClass('errorField');
    }

    this.objectSize = function(object) {
	var size = 0, key;
	for (key in object) {
	    if (object.hasOwnProperty(key))
		size++;
	}
	return size;
    }

    this.htmlentities = function(s) {
	var div = document.createElement('div');
	var text = document.createTextNode(s);
	div.appendChild(text);
	return div.innerHTML;
    }

    this.replaceChars = function(text) {
	var res = "";
	var temp = "";
	for (var i =0, length = text.length; i < length; i++) {
	    var c = text.charCodeAt(i);
	    temp += c + ",";
	    if((c > 0x80 && c < 0xC0) || c>0x500){
		res += "&#"+c+";";
	    } else {
		switch(c) {
		    case 0x26:res+="&amp;";break;
		    case 0x3C:res+="&lt;";break;
		    case 0x3E:res+="&gt;";break;
		    case 0x22:res+="&quot;";break;
		    case 0x0D:res+="";break;
		    case 0x0A:res+="<br />";break;
		    case 0x21:res+="&#33;";break;
		    case 0x27:res+="&#39;";break;
		    default:res+=text.charAt(i);break;
		}
	    }
	}
	return res;
    }

    this.stripHTML = function (text) {
	return text ? text.replace(/<(?:.|\s)*?>/g, "") : '';
    }

    var _cookies;

    var _initCookies = function() {
	_cookies = {};
	var ca = document.cookie.split(';');
	var re = /^[\s]*([^\s]+?)$/i;
	for(var i = 0, length = ca.length; i < length; i++) {
	    var c = ca[i].split("=");
	    if (c.length == 2) {
		_cookies[c[0].match(re)[1]] = unescape(c[1].match(re) ? c[1].match(re)[1] : '');
	    }
	}
    }
    
    this.getCookie = function(name) {
	if(!_cookies) _initCookies();
	return _cookies[name];
    }

    this.setCookie = function(name, value, days) {
	if(!_cookies) _initCookies();
	_cookies[name] = value;
	if (days) {
	    var date = new Date();
	    date.setTime(date.getTime()+(days*24*60*60*1000));
	    var expires = "; expires="+date.toGMTString();
	} else {
	    var expires = "";
	}
	var domain = location.host.match(/[^.]+\.[^.]+$/);
	document.cookie = name+"="+escape(value)+expires+"; path=/"+(domain ? '; domain=.'+domain : '');
    }
}
