function changeMode(){	
	var mode = YAHOO.util.Cookie.get("mode");
	YAHOO.util.Cookie.set("mode", mode == "edit" ? "view" : "edit", {path: "/"});
	window.location.reload();
}

function wrap(frame){
	var obj = $$(frame + "Wrap");
	obj.style.backgroundPosition = '0 -13px';
	obj.onclick = function(){unwrap(frame)};
	$$(frame + "Content").style.display = "none";
	if(YAHOO.env.ua.opera && !callerEdit) saveFrames();
}

function unwrap(frame){
	var obj = $$(frame + "Wrap");
	obj.style.backgroundPosition = '0 0px';
	obj.onclick = function(){wrap(frame)};
	$$(frame + "Content").style.display = "block";
	if(YAHOO.env.ua.opera && !callerEdit) saveFrames();
}

function closeFrame(frame){
	$$(frame).style.display = 'none';
	if(YAHOO.env.ua.opera && !callerEdit) saveFrames();
}

var saveFrames;
var callerEdit = 0;

function saveSettings(columns){
	var setCookies = function setCookies(){
		var date = new Date();
		date.setTime(date.getTime() + (28*360*24*60*60*1000));
			
		var getNode = function(node){
			return node.id.substring(0, 5) === "Frame" && node.style.display !== "none";
		}
		var createString = function(colId){
			var Dom = YAHOO.util.Dom;
			
			var nodes = Dom.getChildrenBy($$(colId), getNode);
			var list = [];
			for(var i = 0; i < nodes.length; i++){
				list[i] = nodes[i].id + ':' + Dom.getStyle(nodes[i].id + 'Content', "display");
			}
			return list.toString();
		}
			
		for(var i = 0; i < columns.length; i++){	
			YAHOO.util.Cookie.setSub("dashboard", columns[i], createString(columns[i]), {expires: date, path: '/'});
		}
	}
	saveFrames = setCookies;
	YAHOO.util.Event.on(window, "unload", setCookies);
}

function loadSettings(columns){
	if(YAHOO.util.Cookie.get("dashboard")){
		var containerRef = [];
		var subs = [];
		
		for(var i = 0; i < columns.length; i++){
			var tmp = YAHOO.util.Cookie.getSub("dashboard", columns[i]);
			if (window.location.href=='http://turbotehsnab.ru/' || window.location.href=='http://www.turbotehsnab.ru/') {
				if (i==0) tmp +=',Frame7:block'; 
				if (i==1) tmp +=',Frame8:block'; 
			}
			subs[i] = tmp ? tmp.split(',') : [];
			for(var j = 0; j < subs[i].length; j++){
				subs[i][j] = subs[i][j].split(':');
			}
		}
		
		for(var i = 0; i < subs.length; i++){
			for(var j = 0; j < subs[i].length; j++){
				var node = $$(subs[i][j][0]);
				if(node) containerRef[subs[i][j][0]] = node.parentNode.removeChild(node);
			}
		}
		
		for(var i = 0; i < columns.length; i++){
			var childs = YAHOO.util.Dom.getChildrenBy($$(columns[i]), function(node){ return node.className.substring(0, 5) === "Frame" });
			for(var j = 0; j < childs.length; j++){
				var node = childs[j];
				node.parentNode.removeChild(node);
			}
		}
		
		callerEdit = 1;
		for(var i = 0; i < columns.length; i++){
			var col = $$(columns[i]);
			for(var j = 0; j < subs[i].length; j++){
				var node = containerRef[subs[i][j][0]];
				if(node){
					col.appendChild(node);
					if(subs[i][j][1] == "none")	wrap(node.id);
				}
			}
		}
		callerEdit= 0;
	}
}

function resetSettings(){
	YAHOO.util.Cookie.remove('dashboard');
	YAHOO.util.Event.removeListener(window, 'unload', saveFrames);
	window.location.reload();
}

function editMode(){
	var zIndex = 0;
    var Dom = YAHOO.util.Dom;
    
    var marker, container;
	var lastRectNode = [];
	marker = document.createElement("div");
	
	// Non-draggable targets
	var columns = ['leftblock', 'rightblock'];
	for(var i = 0; i < columns.length; i++){
		new YAHOO.util.DDTarget(columns[i], "Group1");
	}

	// BEGIN :: Frame class
	YAHOO.Frame = function(id, sGroup, config) {
        this.cont = config.cont;
        YAHOO.Frame.superclass.constructor.apply(this, arguments);
    };
	
	YAHOO.extend(YAHOO.Frame, YAHOO.util.DDProxy, {
		cont: null,
        init: function(){
			YAHOO.Frame.superclass.init.apply(this, arguments);
			this.initConstraints();
			this.setHandleElId(arguments[0] + "Caption");
			
			this.startDrag = function(x, y){
				var el = this.getEl();
				var dragEl = this.getDragEl();
				container = el.parentNode;
				
				dragEl.style.height = el.style.height;
				dragEl.style.width = el.style.width;
				el.style.display = "none";
				dragEl.className = el.className;
				dragEl.style.zIndex = ++zIndex;
				dragEl.innerHTML = el.innerHTML;
				dragEl.style.border = "none";
				var clear_id = function(elm){
					elm.removeAttribute('id');
					$(elm).children().each(function(index, value){
						clear_id(value);
					});
				};
				var children = $(dragEl).children();
				clear_id(children[0]);
				children[1].removeAttribute('id');
				document.vartest = dragEl.cloneNode(true);
				
				marker.style.display = "none";
				marker.style.height = Dom.getStyle(dragEl, "height");	
				marker.style.margin = "5px"; 
				marker.style.marginBottom = "20px"; 
				marker.style.border = "2px dashed #7e7e7e";
				marker.style.display = "block";
				
				container.insertBefore(marker, el);
			}

			this.onDragEnter = function(e, id){
				var el = $$(id);
				if(in_array(id, columns)){
					var dragEl = this.getDragEl();
					var width = parseInt($$(id).offsetWidth);
					Dom.setStyle(marker, 'width', (width - 15) + 'px');					
					el.appendChild(marker);
				}else{
					container = el.parentNode;
					container.insertBefore(marker, el);
				}
			}
			
			this.onDragOut = function(e, id){
				var el = $$(id);
				lastRectNode[container.id] = getLastNode(container.lastChild);
				if(el.id === lastRectNode[container.id].id)	container.appendChild(marker);
			}
			
			this.endDrag = function(e, id){
				var el = this.getEl();
				try{
					marker = container.replaceChild(el, marker);
				}catch(err){
					marker = marker.parentNode.replaceChild(el, marker);
				}
				el.style.display = "block";
				
				$$(this.dragElId).style.left = "0px";
				$$(this.dragElId).style.top = "0px";
				$$(this.dragElId).innerHTML = '';
				
				if(YAHOO.env.ua.opera) saveFrames();
			}	

			YAHOO.util.Event.on(window, 'resize', function(){
				this.initConstraints();
            }, this, true);
        },
        initConstraints: function(){
            var region = Dom.getRegion(this.cont);

            var el = this.getEl();
            var xy = Dom.getXY(el);

            var width = parseInt(Dom.getStyle(el, 'width'), 10);
            var height = parseInt(Dom.getStyle(el, 'height'), 10);

            var left = xy[0] - region.left;
            var right = region.right - xy[0] - width;
            var top = xy[1] - region.top;
            var bottom = region.bottom - xy[1] - height;

            this.setXConstraint(left, right);
            this.setYConstraint(top, bottom);
        }
	});
	// END :: Frame class
	
	// BEGIN :: Objects to drag
	var frames = [];
	for(var i = 0; i < columns.length; i++){
		var collection = $$(columns[i]).childNodes;
		for(var j = 0; j < collection.length; j++){
			var id = collection[j].id;
			if(id && id.substring(0, 5) === "Frame") frames.push(id);
		}
	}
	for(var i = 0; i < frames.length; i++){
		if($$(frames[i])){
			new YAHOO.Frame(frames[i], 'Group1', {cont: 'modules'})
			$$(frames[i] + 'Caption').style.cursor = "move";
			$('.close').css('display', 'inline');
		}
	}
	// END :: Objects to drag
	
	// BEGIN :: Helper methods
	var getLastNode = function(lastChild){
		var id = lastChild.id;
		if(id && id.substring(0, 5) === "Frame") return lastChild;
		return getLastNode(lastChild.previousSibling);
	}
	// END :: Helper methods
}

function init(){
	var columns = ['leftblock', 'rightblock'];
		
	loadSettings(columns);
	saveSettings(columns);
	
	var mode = YAHOO.util.Cookie.get("mode");
	if(mode == "edit"){
		editMode();		
		$$('Settings').innerHTML = 'Выход';
		$$('Settings2').innerHTML = 'Выход';
		$$('SettingsReset').style.display = "inline";
		$$('SettingsReset2').style.display = "inline";
	}else{
		$$('Settings').innerHTML = 'Настройки';
		$$('Settings2').innerHTML = 'Настройки';
		$$('SettingsReset').style.display = "none";
		$$('SettingsReset2').style.display = "none";
	}
}

