/*
*	Common Javascript library
*	Must go first in connection map 
*
*	History:
*	1.7		10.07.09/goshi	add utl to regular_str
*	1.6		02.04.09/goshi	add addLoadEvent for multiple onload events
*	1.5		10.02.09/goshi	add oStorage and instance in portal.storage, oPortal into separate files, add elem function, domReady function
*	1.1		24.01.09/goshi	remove bug for opera and portal object exists
*	1.0		17.01.09/goshi	add portal object
*/


// skin images
var skin_img_dir = '/skin/img/';

//var lang_dir = '/languages/';

// user session name
var session_name = 'pphp_session';

// max cookie life - half of the year
var max_cookie_life = 60*60*24*180;

/* regular expressions for form elements */
var regulars = { 
	'email' : /[0-9a-z_\.-]+@[0-9a-z_^\.-]+.[a-z]{2,6}/i,
	'url' : /(http):\/\/([_a-z\d\-]+(\.[_a-z\d\-]+)+)(([_a-z\d\-\\\.\/])+[_a-z\d\-\\\/])/i,
	'date_time' : /\d{4}-\d{2}-\d{2}\s(\d{1,2}):(\d{1,2}):(\d{1,2})/i,
	'date' : /\d{4}-\d{1,2}-\d{1,2}/i
}

var regular_str = {
	'normal_datetime' : '^[0-9]{2}:[0-9]{2}(?::[0-9]{2})? [0-9]{2}\\-[0-9]{2}\\-[0-9]{4}$',
	'time' : '^([0-1][0-9]|2[0-3]):[0-5][0-9]$',
	'email' : '^[0-9a-z_\\.-]+@[0-9a-z_^\\.-]+.[a-z]{2,6}$',
	'url' : '^(http):\/\/([_a-z\d\-]+(\.[_a-z\d\-]+)+)(([_a-z\d\-\\\.\/])+[_a-z\d\-\\\/])$'
}


/* DOM function for creating or removing elements 
*  ver 2.0
*
* History:
*	2.0	20.04.09/goshi	support multilanguage system
*
*/
function elem(name, attrs, style, text, is_multilang) {

	if (typeof is_multilang != "undefined" && is_multilang){
	
		var e = document.createDocumentFragment();
		var new_attrs = attrs;
		// copy object - from reference
		if (new_attrs){
			var old_values = new_attrs['value'];
			var old_name = new_attrs['name'];
		}
		var new_style = style ? style : {};

		for (var i in portal.vars.langs){
			
			new_attrs['lang'] = i;
			new_attrs['name'] = old_name+'['+i+']';
			if (attrs['value'])
				new_attrs['value'] = old_values[i];
			
			new_style['display'] = (typeof LangController != "undefined" && LangController._curr_lang == i ? '' : 'none');
			new_style['backgroundImage'] = 'url('+portal.vars.langs[i]['img']+')';
			new_style['backgroundPosition'] = 'left center';
			new_style['backgroundRepeat'] = 'no-repeat';
			new_style['paddingLeft'] = '20px';
			
			e.appendChild(elem(name,
				new_attrs,
				new_style,
				text
				));
			
		}
		
		return e;
			
	} else {

	    var e = document.createElement(name);
	    if (attrs) {
	        for (key in attrs) {
	            if (key == 'class') {
	                e.className = attrs[key];
	            } else if (key == 'id') {
	                e.id = attrs[key];
	            } else {
	                e.setAttribute(key, attrs[key]);
	            }
	        }
	    }
	    if (style) {
	        for (key in style) {
	             e.style[key] = style[key];
	        }
	    }
	    if (text) {
	        e.appendChild(document.createTextNode(text));
	    }
	    return e;
	}
}

/* function add onload event listener - it is optimize for multiple nload events on page */
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) { oldonload(); }
			func();
		}
	}
}


/* DOM Ready function - if you want to wait until all elemsnts on the page were loaded
* Copyright http://ajaxian.com/ */
function domReady(i) { 		

	var u =navigator.userAgent;
	var e=/*@cc_on!@*/false;
	var st = setTimeout;
	if (/webkit/i.test(u)) {
		st(
			function() {
				var dr=document.readyState;
				if(dr=="loaded"||dr=="complete") i();
				else st(arguments.callee,10);
			},
			10
		);
	} else if ((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))) {
		document.addEventListener("DOMContentLoaded", i, false);
	} else if (e) {(
		function(){
			var t=document.createElement('doc:rdy');
			
			try {
				t.doScroll('left'); i(); t=null;
			} catch(e) {st(arguments.callee,10);}
		})();
	} else addLoadEvent(i);
	
}

/* function syncing events 
*
* @i		function	function, that execute after right condition
* @condition 	variable	while not condition true  - function not execute
*/
function syncEvent(k, condition){

	(function(){	
		try{
			if (eval(condition) == true) {
				k();
			} else {
				setTimeout(arguments.callee,10);
			}
		} catch(e) {
			setTimeout(arguments.callee,10);
		}}
	)();
}

