
var current_over_el = false;
var coolMenu = null;
var controlPanel = null;
var editWindowHolder = false;
var loadedJSON = true;
var Hideris = {opened:false};

function rebindAll(){
	
	coolMenu = $('div#tpHolder');
	controlPanel = $('div#userMenu');
	
	jQuery(document).bind('mousemove', function(){});
	jQuery(document).bind('mouseup', function(){});
    
	jQuery('#wrapper').bind('mousemove', function(e) { 
		mouseHandler_v2(e)
	});
	
	jQuery('#wrapper').bind('mouseup', function(e) { 
                
		if (typeof(Drag)!='undefined') {
			Drag.dragObject=null;
		}	
		
		if (typeof(Resizer)!='undefined') {
			Resizer.resizeObject=null;
		}	
		
		loadedJSON = true;
	});
	
	DragStart();
	loadedJSON = true;
}

$(document).ready(function () {
	rebindAll();
	editWindowHolder = $('div#editWindowHolder');
});


function fillup_coolMenu(el_attrs, current_over_el_inner) {
	
	if(el_attrs[1]==undefined)
	{
		return;
	}
	
	var url = cool_menu_url+el_attrs[1]+"/"+el_attrs[2]+"/"+el_attrs.slice(3)+"?site_lang="+lang;
	loadedJSON = false;
	if(Drag!=undefined && Drag.dragObject==null) {
		connectingShow();
	}

	$.ajax({
		url: url,
		dataType: 'json',
	
		success: function (d) {
			connectingHide();
			if(!d) return;
			
			if (Drag == undefined) { 
				return;
			}	
			
			if (Drag.dragObject!= null) {
				return;
			}
			
			var ul = $('ul', coolMenu);
			$(ul).find('li').remove();
			
			var menuEls	= 0;
			var menuLength = d.length;
			
			var dragObjType	= null;
			
			$(coolMenu).find('a').hide();

			for (i in d) {
				if(d[i][2]){ 
					menuEls++				
					if( d[i][2]=='icon_move' ) {
						
						dragObjType = d[i][1];
						
					} else if( d[i][2]=='edit_header' ) {
					
						var a = create_link(d[i][0], d[i][1], ' ');
						jQuery(a)
							.click(function(){
								Hideris = new HiderisClass;
								Hideris._init();
								Hideris.loadTab();
								
								$('#header').css({zIndex: 113});
							})
							.addClass('icon_edit');
							
						var li = jQuery('<li></li>');
						$(li).append(a);
						ul.append(li);
						
					} else if(d[i][2]=='header_css'){
						
						var li = document.createElement('LI');
						$(li).addClass('last').addClass('light-list');
						var act = jQuery('body').attr('class') ? jQuery(body).attr('class').split(' ') : new Array();
						
						for (x=0; x<=d[i][3]; x++){
							
							var a = create_link(d[i][0], d[i][1], ' ');
							var node = jQuery('<div class="page-style-' + x + '"></div>');
							var bg = node.css('background-color'); 
							
							jQuery(a)
								.attr('rel','style-'+x)
								.html(x)
								.css('background-color',bg);
							
							if (in_array('style-'+x, act)) {
								jQuery(a).addClass('active');
							}	
							
							$(li).append(a);
						}
						
						function activateRealActiveBodyStyle(hl,activeClass){
							
							var highlighted = hl.attr('class').split(' ');
							
							for (x in highlighted) {
								
								if (highlighted[x].indexOf('style-') != -1) { 
									
									hl.removeClass(highlighted[x]); 
								}
							}
							
							hl.addClass(activeClass);
						}
						
						ul.append(li);
						var hl = jQuery('body');
						var activeClass = hl.attr('rel');
						
						jQuery('li.light-list a',ul).mouseover(function(){
							activateRealActiveBodyStyle(hl,this.rel);
						}).mouseout(function(){
							activateRealActiveBodyStyle(hl,activeClass); 
						}).click(function(){
							activeClass = this.rel;
							$.ajax({	// saving
								type: "POST",
								url: "/" + ADMIN_LANGS + "/common/_ajax_save_header_options",
								data: "header_color=" + activeClass.replace('style-',''),
								success: function( out ){
									hideAdminHover();
									activateRealActiveBodyStyle(hl,activeClass); 
									hl.attr('rel',activeClass);
									return;
								}
							});	
						});
						
					} else if( d[i][2]=='icon_pallet' ){
					
						var li = document.createElement('LI');
						$(li).addClass('last').addClass('light-list');
						
						var act = jQuery(current_over_el_inner).parents('div[class^=box]').attr('class').split(' ');
						
						function activateRealActiveBlockHightlisght(hl,activeClass){
							var highlighted = hl.attr('class').split(' ');
							for(x in highlighted) {
								if(highlighted[x].indexOf('highligh')!=-1){ hl.removeClass(highlighted[x]); }
							}
							hl.addClass( activeClass );
						}
						
						
						for(x=0; x<=d[i][3]; x++){
							var a = create_link(d[i][0], d[i][1], ' ');
							var node = jQuery('<div><div class="block"><div class="inner"><div class="innerin">&nbsp;</div></div></div></div>')
								.addClass('box1')
								.addClass('highlight'+x);
							var bg = 
								node.children().children('.inner').css('background-color')!='transparent' ? 
									node.children().children('.inner').css('background-color') : (
										node.children('.block').css('background-color')!='transparent' ? 
										node.children('.block').css('background-color') :
										node.children().children().children('.innerin').css('background-color')
									);
									
							jQuery(a)
								.attr('rel','highlight'+x)
								.html(x)
								.css('background-color',bg);
							if(in_array('highlight'+x, act)) jQuery(a).addClass('active');
							$(li).append(a);
						}
						
						ul.append(li);
						var hl = jQuery(current_over_el_inner).parents('div[class^=box]:first');
						var activeClass = hl.attr('rel');
						
						jQuery('li.light-list a',ul).mouseover(function(){
							activateRealActiveBlockHightlisght(hl,this.rel);
						}).mouseout(function(){
							activateRealActiveBlockHightlisght(hl,activeClass); 
						}).click(function(){
							activeClass = this.rel;
							$.ajax({
								type: "POST",
								url: "/" + ADMIN_LANGS + "/common/_ajax_save_block_color",
								data: 
									"matrixId=" + pageBlocks[el_attrs[2]]['matrixId'] + 
									"&highlight=" + this.rel.replace('highlight',''),
								success: function( out ){
									hideAdminHover();
									activateRealActiveBlockHightlisght(hl,activeClass); 
									hl.attr('rel',activeClass);
									return;
								}
							});	
						});
						
					} else {
						var a = create_link(d[i][0], d[i][1], d[i][2]);
						var li = document.createElement('LI');
						if( menuEls==menuLength ) {  // last element corrections
							$(li).addClass('last');
						}
						$(li).append(a);
						ul.append(li);
					}
				}
			}

			$('.adm_hover').removeClass('adm_hover');
			current_over_el = current_over_el_inner;

			var x = jQuery(current_over_el).offset().left - 0;
			var y = jQuery(current_over_el).offset().top - 0;

			$(coolMenu).css('left', x+'px');
			$(coolMenu).css('top', y+'px');
			$(coolMenu).show();

			$(current_over_el).addClass('adm_hover');
			
			if(dragObjType!=undefined && dragObjType)
			{
				Drag._init(current_over_el, 'div.dragContainer', dragObjType);
			}

			loadedJSON = true;
		},
		
		
		error : function(XMLHttpRequest, textStatus){
			
			if (textStatus == 'timeout'){
				hideAdminHover();
				rebindAll();
			}
			
			connectingHide();
		}
	});
}


function parents(obj, nameStarts) {
	if( !obj ) return false;
	var result;
	if(typeof(obj.getAttribute)!='undefined'){
		var newAttrib = obj.getAttribute('name') + '';
		if( newAttrib ) result = newAttrib.match(nameStarts);
	}
	
	if( !result ) {
		return parents( obj.parentNode, nameStarts);
	} else {
		return obj;
	}
	
}


function mouseHandler_v2(e) {
	
	var ignoreMapping = ['control_hover menu_add 0'];
	
	if(!loadedJSON) return;	// if
	if(Drag==undefined) return;
	if(Drag.dragObject) return; // if dragging something
	if(typeof(Resizer)!='undefined') {
		if(Resizer.resizeObject) return; // if resizing something
	}
	
	var targetNode = findEventOwner(e);
	
	if(jQuery(targetNode).length) {
		if( jQuery(targetNode).parents('*[name^=control_hover]') ) {
			newObj = parents(targetNode, 'control_hover');

			if(!newObj)
			{
				hideAdminHover();
				return;
			}
			if (
				!newObj ||
				jQuery(current_over_el).attr('name') == jQuery(newObj).attr('name')
			) return;

			current_over_el = newObj;
			var el_name = $(current_over_el).attr('name');
			
			if (!el_name) 
			{
				hideAdminHover();
				return;
			}
		
			if (in_array(trim(el_name), ignoreMapping)) {
				hideAdminHover();
				return;
			}
			
			var el_attrs = get_attrs(el_name);
			
			fillup_coolMenu(el_attrs, current_over_el);
			if(typeof(Resizer)!='undefined') {
				ResizerStart( newObj );
			}
			return;
		}
	}
	return ;
}

function hideAdminHover() {
	$('.adm_hover').removeClass('adm_hover');
	$(coolMenu).hide();
	current_over_el = false;
}


function create_link(ttl, hrf, clas, targt) {
	
	var a = document.createElement('A');
	
	$(a).addClass(clas);
	$(a).attr('href', hrf);
	$(a).attr('target', 'editor_frame');
	$(a).attr('title', ttl);

	if(hrf!='javascript:void(0);'){
	
		$(a).bind('click', function () {
			$('#editWindowHolder').draggable({
				handle: '#editWindowTop',
				iframeFix: true
			});	
			
			$(document, 'frame#editorFrame').ready(function () {
				showShade();
			});
		});
	}
	
	return a;
}


function extend_with_link(el) {
	
	$(el).bind('click', function () {
		$(document, 'frame#editorFrame').ready(function () {
			showShade();
		});
	});
}

function add_link(el, hrf) {
	$(el).bind('click', function () {
		document.getElementById('editorFrame').src = hrf;
		$(document, 'frame#editorFrame').ready(function () {			
			showShade();
		});
	});
}

function openEditor(url) {
	if (url) {
		$('iframe#editorFrame').attr('src', url);
	}

	$(document, 'iframe#editorFrame').ready(function () {
		showShade();
	});
	
	scroll(0,0);
}

function showShade(p)
{
	shadeFadeToClear();
	
	if(p==undefined) { // editor window
		$('div#editWindowHolder').show();
	}
	$('div#editWindowBg').show();
	try {
		window.scrollBy(0,0); 
		window.scroll(0,0);
		document.body.scrollTop = 0;
		$('#editWindowBg').height( $(document).height() );
	} catch(err) { }
}

function hideShade()
{
	$('#header').css({zIndex: 'auto'});
	
	$('div#editWindowBg').hide();
	$('div#editWindowHolder').hide();
}

function shadeFadeTo()
{
	$('div#editWindowBg').addClass('transparent');
}

function shadeFadeToClear()
{	
	$('div#editWindowBg').removeClass('transparent');
}

function findPosX(obj)
{
var curleft = 0;
if(obj.offsetParent)
	while(1) 
	{
	  curleft += obj.offsetLeft;
	  if(!obj.offsetParent)
		break;
	  obj = obj.offsetParent;
	}
else if(obj.x)
	curleft += obj.x;
return curleft;
}

function findPosY(obj)
{
var curtop = 0;
if(obj.offsetParent)
	while(1)
	{
	  curtop += obj.offsetTop;
	  if(!obj.offsetParent)
		break;
	  obj = obj.offsetParent;
	}
else if(obj.y)
	curtop += obj.y;
return curtop;
}

function reloadSiteContent(){
	$.ajax({
		type: "POST",
		url: window.location.href,
		data: "reloadContent=true",
		success: function( out ){
			$('#content').html(out);
			connectingHide();
		}
	});	
}


/**
	return class names splited by ' '
*/
function get_attrs(n) {
	if (!n) return;
	return n.split(' ');
}


function closeEditor_v2(parent_reload) {

	hideShade();
	
	if (parent_reload) {
		window.location.reload( true );
		window.location = window.location.href;
	}
}



function maximizeEditor()
{
	var h = $(window).height();
	var w = $(window).width();
	
	$('#editWindowHolder').css({
		left: '0px',
		top: '0px',
		margin: '0'
	});
	$('#editWindow').css({
		height: h+'px',
		width: w+'px'
	});
	$('.adm_minimize').show();
	$('.adm_maximize').hide();
}
function minimizeEditor()
{
	$('#editWindow').css({
		height: 'auto',
		width: 'auto'
	});
	$('#editWindowHolder').css({
		margin: '110px 0 0 -260px',
		left: '50%'
	});
	$('.adm_maximize').show();
	$('.adm_minimize').hide();
}


