My = Class.create();
My.extend({
	Locate:window.location.href,
	Domain:'mypasser.net',
	historyKey:'My.loadPage',
	historyStart:false,
	historyDrawBack:false,
	currentRequest:'',
	historyData:new Hash(),
	counter:1
});
My.extend({
	loadPage:function(url){
		$('loading').setStyles({'display':'block','opacity':1});
		var rStat = this.historyData.get(url.replace('.html',''));
		if(rStat && rStat.data){
			My.loadSuccess(rStat.data);
		}else if((!rStat || !rStat.status)){
			var req = new Request.JSON({
				url:url,
				onSuccess: My.loadSuccess,
				onFailure: function() {
					My.historyData = new Hash();
				}
			}).get();
			this.historyData.set(url,{status:true});
		}
		if(!this.historyDrawBack)
			this.history.setValue(0, url);
		this.historyDrawBack = false;
	},
	loadSuccess:function(data) {
		var rep = data.replacer;
		var url = data.current;
		var rStat = My.historyData.get(url);
		My.historyData.set(url,$extend(rStat||{},{status:false,data:data.cache?data:''}));
		for(var i=0;i<rep.length;i++){
			$(rep[i].containerId).set('html',rep[i].data);
			rep[i].data.stripScripts(true);
		}
		if(data.script)
			eval(data.script);
		var myEffects = new Fx.Morph('loading', {duration: 300, transition: Fx.Transitions.linear});
		myEffects.start({
		'opacity': [1, 0]
		});
	},
	clear:function(){
		this.historyData = new Hash();
	},
	toggleWrite:function(id){
		$(id).setStyle('display','block');
		(this.counter-->0)&&$(id).setStyle('height',$(id).getSize().y+20);
		var mySlide = new Fx.Slide(id,{duration: 300,
    		transition: Fx.Transitions.Pow.easeOut}).hide().toggle();
		$(id).getElements('span.closeImg').addEvent('click',function(){
			mySlide.toggle();
			var myFunction = function(){
			    $(id).setStyle('display','none');
			};
			myFunction.delay(100);
		})
	},
	hideWrite:function(id){
		var mySlide = new Fx.Slide(id,{duration: 300,
    		transition: Fx.Transitions.Pow.easeOut}).hide();
		var myFunction = function(){
			$(id).setStyle('display','none');
		};
		myFunction.delay(100);
	},
	
	initHistory:function(){
		this.fireEvent('onHistoryInit');
		this.to = function(val,de){
			this.historyDrawBack = true;
			var href = window.location.href;
			var fun = HistoryManager.getHash();
			if(fun != ''){
				eval('My.loadPage("'+decodeURIComponent(fun)+'")');
			}else{
				if(href.replace('http://'+this.Domain+'','').length>1)
					My.loadPage(href+'/ajax/1');
				else
					My.loadPage('/Index/Main/ajax/1');
			}
		}
		this.history = HistoryManager.register( 
		this.historyKey,
		[1],
		function(values,de) {
			if(this.historyStart)
				this.to(values);
			this.historyStart = true;
		}.bind(this),
		function(values) {
			return values[0];
		}.bind(this),
		this.historyKey + '\\((\\d+)\\)');
		this.fireEvent('onHistoryInited');
	},
	tips:function(){
		var zIndexMax = 100000;
		var zIndexMin = 100000;
		$$('.tipBox').each(function(v,i){
			$('sizer').empty().adopt($(v).getChildren()[1].getChildren().clone());
			$(v).setStyles({
			'width':$('sizer').getSize().x+50,
			'left':$(v).getParent().getPosition('innerbody').x,
			'top':$(v).getParent().getPosition('innerbody').y+diff,
			'z-index':zIndexMax
			});
			var diff = $(v).getParent().getSize().y/2-$(v).getSize().y;
			$(v).setStyle('top',$(v).getParent().getPosition('innerbody').y+diff);
			zIndexMax++;
			var myEffects = new Fx.Morph(v, {duration: 300, transition: Fx.Transitions.linear});
			if(Browser.Engine.trident){
				myEffects.start({
				'opacity': [1, 0.4]
				});
			}
			var myFun = function(){
				myEffects.start({
				'opacity': [1, 0.4]
				});
			}
			var timer = false;
			var close = $(v).getLast()
			$(v).addEvent('mouseover',function(){
				var myEffects = new Fx.Morph(v, {duration: 0, transition: Fx.Transitions.linear});
				$clear(timer);
				var opa = $(v).getStyle('opacity');
				$(v).setStyle('z-Index',zIndexMax++);
				myEffects.start({
				'opacity': [opa, 1]
				});
				close.setStyle('display','block');
			})
			$(v).addEvent('mouseout',function(){
				var myEffects = new Fx.Morph(v, {duration: 0, transition: Fx.Transitions.linear});
				$(v).setStyle('z-Index',zIndexMin--);
				timer = myFun.delay(300);
				close.setStyle('display','none');
			});
			close.addEvent('click',function(){
				$(v).setStyle('display','none');
			})
			
		})
		if(Browser.Engine.trident){
			$$(".png").each(function(v,i) {
				var src = $(v).get('src');
				$(v).set('src','/public/images/blank.gif');
				$(v).setStyle('filter','progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+src+'");');
			});
			$$(".tipTop,.tipBottom").each(function(v,i){
				$(v).setStyle('width',$(v).getParent().getSize().x-50);
				$(v).setStyle('opacity',$(v).getParent().getSize().x-50);
			});
		}
	}
})
$extend(My,Events.prototype);
$extend(My,Options.prototype);
window.addEvent('domready', function() {
	HistoryManager.initialize();
	My.initHistory();
	HistoryManager.start();
	var tipOptions = {
		showDelay: 100,
		hideDelay: 100,
		className: 'tipBox',
		offsets: {x: 16, y: 16},
		fixed: true
	}
	var myTips = new Tips('.calendar .tips',tipOptions);
	
});

function vardump(obj){
	var str=$type(obj)+"\n";
	for(var a in obj) str=str+a+"|values:"+obj[a]+"\n";
	try{window.console.log(str)}catch(e){};
}

