	CLCPHandler = function(_hex) {
		$('.'+_whichField).css({backgroundColor:'#'+_hex});
		var span = $('.'+_whichField).next('span');
		var a = $(span).find('a');

		$(span).html('#'+_hex + '&nbsp;');
		$(a).appendTo($(span));

		if (!$(span).is(':visible'))
			$(span).fadeIn('slow');

		_CLCPinitHex = _hex;
		$('input[type=hidden][name=cs]').val(_hex);
	}

	function colorClickWrapper(_hex) {
		var td_orig = $('table').eq(6).find('tr').eq(1).find('td').eq(1);
		var td_new = $('table').eq(6).find('tr').eq(1).find('td').eq(3);
		var old_hex = td_orig.html();
		old_hex = old_hex.substr(2,6);
		$(td_new).html('#'+_hex);
		$(td_new).prev('td').children('div').css('background-color', '#'+_hex);
		colorClick('#' + _hex);
		$('#screenshot').attr('src', '/img/ajax-loader.gif');
		$.get('/ajax.cs.php', {'img':img,'old_hex':old_hex,'hex':_hex}, function(msg) {
			var date = new Date();
			var ms = date.getTime();
			//$(document.body).append(msg+'<br/>');
			$('#screenshot').attr('src', msg + '?t='+ms);
			});
	}

	function uncheckAll(el, name) {
		$(el).parents('table').find('input[type=radio][name='+name+']').each(function(){if(this.checked){this.checked = false; return false}});
		$(el).fadeOut('slow');
		return false;
	}
	
	function displayUncheckAll(el, pos) {
		if ($(el).parents('table').find('a').eq(pos).is(':hidden'))
			$(el).parents('table').find('a').eq(pos).fadeIn('slow');
	}
	
	function switchFrameContent(id, type) {
		var frameset = parent.frames;
		if (type == 'noruler')
			frameset[1].location = '/resources/templates/'+id+'/preview';
		else if (type == 'ruler')
			frameset[1].location = '/cpanel/preview-template/'+id+'/content/ruler';
		else if (type == 'rendur')
			frameset[1].location = '/cpanel/preview-template/'+id+'/content/rendur';
	}
	
	function csUnsetFilter() {
		_CLCPinitHex = 'FFFFFF';
		$('.'+_whichField).css('background-color', '#FFFFFF');
		$('.'+_whichField).next('span').fadeOut('slow');
		$('input[type=hidden][name=cs]').val('');
		$(this).empty();
		return false;
	}
	
	function doSubmit(block) {
		$('.tabcontent').hide('slow');
		$.post('/cpanel.php', $(':input'), function(msg){
			$('.tabcontent').html(msg);
			$('.tabcontent').show('slow');
		});
		return false;
	}
	
	function preserveHexSubmit(rgb) {
		re = /rgb\(([0-9]{1,3}),\s([0-9]{1,3}),\s([0-9]{1,3})\)/;
		var r = rgb.replace(re, '$1');
		var g = rgb.replace(re, '$2');
		var b = rgb.replace(re, '$3');

		var rgb = [r, g, b];
		var hex = CLCPrgb2hex(rgb);
		
		//$('form[name=search_form] input[type=hidden][name=cs]').val(hex);

		return hex;
	}
	
	function updateHexText() {
		$('.'+_whichField).next('span').html('#'+_CLCPinitHex);
	}
	
	 function initTabClick(lng) {
		 $('div.tabs > a[rel]').click(function(){

			//remove selected status from all tabs
			$('div.tabs > a').removeClass('selected');

			//add selected status to current tab
			$(this).addClass('selected');

			//reset status message div
			$('div.message').html('');

			//get block name to be loaded
			var block = $(this).attr('rel');

			//load content for current tab
			return loadTabContent(block, lng);

		});
  }
	
	function loadTabContent(block, lng) {
			//hide tab content
			$('.tabcontent:visible').hide('slow');

			//load tab content
			$('.tabcontent').load('/cpanel.php', {'block' : block, 'lng' : lng.replace(/\//, '')}, function(){
				initCheckInput(lng);
				initTabClick(lng);
				$('.tabcontent').show('slow');
			});

			return false;
	}
	
	function initCheckInput(lng) {

		//bind event triggers to input fields
		$('form td.checkinput > input[name]').each(function(){
			$(this).bind( (this.name == 'username' || this.name == 'email') ? "blur" : "keyup", function() {
				verifyInput($(this), $(this).attr('name'), lng);
			});
		});
		
		//prevent submit by pressing CR
		$('form').keypress(function(e){
			if ( $("form input[type='submit']").is(':disabled') && (e.which == 13) )
				return false;
		});
		
		 //check default required visibility for submit button
    if ( !hasEmptyElements() && !hasErrors() ) {
      $("form input[type='submit']").removeAttr('disabled');
    }
	}
	
	function verifyInput(el, type, lng) {
		var val = $(el).val();
		var msgErr = '';
		switch (type) {
			case 'first_name':
				var re = /^[a-zA-Z]{3,}$/;
				if (! re.test(val)) {
					msgErr = 35;
					showErr(el, msgErr, lng);
				}
				else
					hideErr(el);
				break;
			case 'last_name':
				var re = /^[a-zA-Z]{3,}$/;
				if (! re.test(val)) {
					msgErr = 35;
					showErr(el, msgErr, lng);
				}
				else
					hideErr(el);
				break;
			case 'username':
				var re = /^[a-z0-9_.-]{6,}$/;
				if (! re.test(val)) {
					msgErr = 36;
					showErr(el, msgErr, lng);
				}
				else {
					msgErr = 37;
					verifyDB(el, type, msgErr, lng);
				}
				break;
			case 'email':
				var re = /^([a-z0-9]([a-z0-9_-]*\.?[a-z0-9])*)(\+[a-z0-9]+)?@([a-z0-9]([a-z0-9-]*[a-z0-9])*\.)*([a-z0-9]([a-z0-9-]*[a-z0-9]+)*)\.[a-z]{2,6}$/;
				if (! re.test(val)) {
					msgErr = 64;
					showErr(el, msgErr, lng);
				}
				else {
					msgErr = 65;
					verifyDB(el, type, msgErr, lng);
				}
				break;
			case 'password':
				var re = /^(.+){6,}$/;
				if (! re.test(val)) {
					msgErr = 74;
					showErr(el, msgErr, lng);
				}
				else
					hideErr(el);
				break;
			case 'password_verify':
				var pwd = $('input[name=password]').val();
				var pwd_vrfy = $(el).val();
				msgErr = 75;
				if (pwd !== pwd_vrfy)
					showErr(el, msgErr, lng);
				else
					hideErr(el);
		}
	}
	
	//~ function showErr(el, msgErr) {
		//~ if (! $(el).hasClass('err')) {
			//~ $(el).addClass('err');
			//~ if (!$(el).next().is('span')) {
				//~ var span = document.createElement('span');
				//~ $(el).after(span);
			//~ }
		//~ }
		//~ $(el).next('span').html('');
		//~ $(el).next('span').load('/getSysMsg.php', {'id' : msgErr});
//~ 
		//~ if ($("input[type='submit']").is(':visible'))
			//~ $("input[type='submit']").fadeOut('slow');
	//~ }
	
	//~ function hideErr(el) {
		//~ if ($(el).hasClass('err')) {
			//~ $(el).removeClass('err');
			//~ $(el).next('span').remove();
		//~ }
//~ 
		//~ if ($("form input[type='submit']").is(':hidden')) {
			//~ if ( !hasEmptyElements() && !hasErrors() ) {
				//~ $("form input[type='submit']").fadeIn('slow');
			//~ }
		//~ }
		//~ else if (hasEmptyElements() || hasErrors() )
			//~ $("input[type='submit']").fadeOut('slow');
	//~ }
	//~ 
		//~ function showErr(el, msgErr) {
		//~ if (! $(el).hasClass('err')) {
			//~ $(el).addClass('err');
			//~ if (!$(el).next().is('span')) {
				//~ var span = document.createElement('span');
				//~ $(el).after(span);
			//~ }
		//~ }
		//~ $(el).next('span').html('');
		//~ $(el).next('span').load('/getSysMsg.php', {'id' : msgErr});
//~ 
		//~ if ($("input[type='submit']").is(':visible'))
			//~ //$("input[type='submit']").fadeOut('slow');
			//~ $("input[type='submit']").attr('disabled', 'true');
	//~ }
	
	function hideErr(el) {
		if ($(el).hasClass('err')) {
			$(el).removeClass('err');
			$(el).next('span').remove();
		}

		if ($("form input[type='submit']").is(':disabled')) {
			if ( !hasEmptyElements() && !hasErrors() ) {
				$("input[type='submit']").removeAttr('disabled');
			}
		}
		else if (hasEmptyElements() || hasErrors() )
			$("input[type='submit']").removeAttr('disabled');
	}
	
		function showErr(el, msgErr, lng) {
		if (! $(el).hasClass('err')) {
			$(el).addClass('err');
			if (!$(el).next().is('span')) {
				var span = document.createElement('span');
				$(el).after(span);
			}
		}
		$(el).next('span').html('');
		$(el).next('span').load('/getSysMsg.php', {'id' : msgErr, 'lng' : lng.replace(/\//, '')});

		if ($("input[type='submit']").is(':enabled'))
			$("input[type='submit']").attr('disabled', 'true');
	}
	
	function verifyDB(el, type, msgErr, lng) {
		var url = '/verifyInput.php';
 		var data = {'type' : type, 'val' : $(el).val()};
		if ($(el).attr('rel') == 'noself')
			data.extra = "AND username != '" + $('form input[name=username]').val() + "'";
		var onComplete = function(msg) {
			//$(document.body).append(msg);
			msg = $(el).attr('rel') == 'rev' ? (msg == '0' ? '1' : '0') : msg;
			if (msg == '0') {
				showErr(el, msgErr, lng);
			}
			else {
				hideErr(el);
			}
		}
		$.get(url, data, onComplete, 'script');
	}

	function hasEmptyElements() {
		var ret = false;
		$('form td.checkinput > input[name]').each(function(){
			//$(document.body).append($(this).attr('tagName') + ':' + $(this).val() + "<br>")});
			if ( $(this).val() == '' && ($(this).attr('rel') != 'optional') ) {
				//alert($(this).attr('name') + 'is empty');
				ret = true;
				return;
			}
		});
		return ret;
	}

	function hasErrors() {
		var ret = false;
		$('form td.checkinput > input[name]').each(function(){
			//$(document.body).append($(this).attr('tagName') + ':' + $(this).val() + "<br>")});
			if ( $(this).hasClass('err') ) {
				//alert('has errors');
				ret = true;
			}
		});
		return ret;
	}

	function debug(el, val) {
		$(document.body).append(val + '<br>');
	}
	
	//~ function imgDel(el, id) {
		//~ if (confirm('really?')) {
			//~ var inputHidden = document.createElement('input');
			//~ var inputObj = document.getElementsByTagName('input');
			//~ var inputSubmit = inputObj[inputObj.length - 3];
			//~ var inputSubmitParent = inputSubmit.parentNode;
			//~ var td = el.parentNode;
			//~ var label = document.createElement('label');
			//~ var inputInsert = document.createElement('input');
			//~ 
			//~ inputHidden.setAttribute('type', 'hidden');
			//~ inputHidden.setAttribute('name', 'img_del[]');
			//~ inputHidden.value = id;
			//~ 
			//~ inputSubmitParent.insertBefore(inputHidden, inputSubmit);
//~ 
			//~ td.innerHTML = '';
			//~ inputInsert.name = 'img['+id+']';
			//~ inputInsert.setAttribute('type', 'file');
			//~ inputInsert.onchange = function(){isValidFilename('img', this)};
			//~ label.appendChild(inputInsert);
			//~ td.appendChild(label);
		//~ }
		//~ return false;
	//~ }
		function imgDel(el, id) {
		if (confirm('really?')) {
			var inputHidden = document.createElement('input');
			var inputObj = document.getElementsByTagName('input');
			var inputSubmit = inputObj[inputObj.length - 3];
			var inputSubmitParent = inputSubmit.parentNode;
			var div = el.parentNode.parentNode;
			var label = document.createElement('label');
			var inputInsert = document.createElement('input');
			
			inputHidden.setAttribute('type', 'hidden');
			inputHidden.setAttribute('name', 'img_del[]');
			inputHidden.value = id;
			
			inputSubmitParent.insertBefore(inputHidden, inputSubmit);

			div.innerHTML = '';
			inputInsert.name = 'img['+id+']';
			inputInsert.setAttribute('type', 'file');
			inputInsert.onchange = function(){isValidFilename('img', this)};
			label.appendChild(inputInsert);
			div.appendChild(label);
		}
		return false;
	}
	
	//~ function tplFilesDel(el) {
		//~ if (confirm('really?')) {
			//~ var inputNew = document.createElement('input');
			//~ var inputObj = document.getElementsByTagName('input');
			//~ var inputSubmit = inputObj[inputObj.length - 3];
			//~ var inputSubmitParent = inputSubmit.parentNode;
			//~ var td = el.parentNode;
			//~ var label = document.createElement('label');
			//~ var inputInsert = document.createElement('input');
			//~ 
			//~ inputNew.setAttribute('type', 'hidden');
			//~ inputNew.setAttribute('name', 'tpl_files_del');
			//~ inputNew.value = '1';
			//~ 
			//~ inputSubmitParent.insertBefore(inputNew, inputSubmit);
			//~ 
			//~ td.innerHTML = '';
			//~ inputInsert.name = 'filename';
			//~ inputInsert.setAttribute('type', 'file');
			//~ inputInsert.onchange = function(){isValidFilename('zip', this)};
			//~ label.appendChild(inputInsert);
			//~ td.appendChild(label);
		//~ }
		//~ return false;
	//~ }
		function tplFilesDel(el) {
		if (confirm('really?')) {
			var inputNew = document.createElement('input');
			var inputObj = document.getElementsByTagName('input');
			var inputSubmit = inputObj[inputObj.length - 3];
			var inputSubmitParent = inputSubmit.parentNode;
			var div = el.parentNode;
			var label = document.createElement('label');
			var inputInsert = document.createElement('input');
			
			inputNew.setAttribute('type', 'hidden');
			inputNew.setAttribute('name', 'tpl_files_del');
			inputNew.value = '1';
			
			inputSubmitParent.insertBefore(inputNew, inputSubmit);
			
			div.innerHTML = '';
			inputInsert.name = 'filename';
			inputInsert.setAttribute('type', 'file');
			inputInsert.onchange = function(){isValidFilename('zip', this)};
			label.appendChild(inputInsert);
			div.appendChild(label);
		}
		return false;
	}
	
	function isValidFilename(type, el) {
		if (type == 'img') {
			re = /^.+\.(jpg|jpeg)$/i;
			if (!el.value.match(re)) {
				el.value = '';
				alert('You must upload a valid jpg image');
			}
		}
		else if (type == 'zip') {
			re = /^.+\.zip$/i;
			if (!el.value.match(re)) {
				el.value = '';
				alert('You must upload a valid zip archive');
			}
		}
		
	}
	
	function targetBlank (url) {
  blankWin = window.open(url,'_blank','menubar=yes,toolbar=yes,location=yes,directories=yes,fullscreen=no,titlebar=yes,hotkeys=yes,status=yes,scrollbars=yes,resizable=yes');
}

function checkAll(el, name) {
	var inputs = document.getElementsByName(name);
	var checkit = el.checked ? true : false;

	for (i in inputs) {
		inputs[i].checked = checkit ? true : false;
	}
}

function switchPage(page) {
	var form = document.getElementsByName('search_form')[0];
	form.submit();
	return false;
}

function trimHTTP(url) {
	var re = /http:\/\/([a-z0-9.-]+)/;
	url = url.replace(re, "$1");
	return url;
}

function loadSysMsg(el, idMsg, lng) {
	$(el).load('/getSysMsg.php', {'id' : idMsg, 'lng' : lng.replace(/\//, '')});
}

function freeFontsUpdateFormAction(_f, _v) {

	var act = $('form').attr('action');
	var re = new RegExp('\/'+_f+':[^\/]+');

	if (re.test(act))
		act = act.replace(re, '');
	act = act.replace(/(.+)#down/, "$1");

	$('form').attr('action', act+'/'+_f+':'+_v+'#down');

	return false;
}

