/**
	created by lu.hua@opi-corp.com 23:32 2008-6-22
*/
try{
	document.domain='gummy.jp';
}catch(e){}
var XN = {};

function isUndefined(object) {
	return typeof object == "undefined";
}
function isString(object) {
    return typeof object == "string";
}
function isElement(object) {
	return object && object.nodeType == 1;
}
function isFunction(object) { 
	return typeof object == "function";
}
function isObject(object) {
	return typeof object == "object";
}
function isArray(object) {
	return object !== null && typeof object == "object" &&'splice' in object && 'join' in object;
}
function isNumber(object){
	return typeof object == 'number';
}
function isJSON(str){
	if (!isString(str) || str === '') {return false;}
	str = str.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
	return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
}
function getFixedScrollTop(){
	return document.documentElement.scrollTop || document.body.scrollTop;
}

/**
 *  字符串的操作和判断方法
 */
XN.STRING = XN.String = {
	nl2br:function(str){
		return str.replace(/([^>])\n/g, '$1<br />');
	},
	trim : function(str) {
		return str.replace(/^\s+|\s+$/g,"");
	},
	ltrim :function(str) {
		return str.replace(/^\s+/,"");
	},
	rtrim :function(str) {
		return str.replace(/\s+$/,"");
	},
	strip: function(str) {
    	return str.replace(/^\s+/, '').replace(/\s+$/, '');
	},
	stripTags: function(str) {
		return str.replace(/<\/?[^>]+>/gi, '');
	},
	escapeHTML: function(str) {
		return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
	},
	unescapeHTML: function(str) {
		return str.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&nbsp;/g,' ').replace(/&quot;/g,'"');
	},
	include:function(str,key){
		return str.indexOf(key) > -1;
	},
	startsWith:function(str,key){
		return str.indexOf(key) === 0;
	},
	endsWith:function(str,key){
	    var d = str.length - key.length;
	    return d >= 0 && str.lastIndexOf(key) === d;	
	},
	isBlank:function(str){
		return XN.STRING.strip(str) == '';
	},
	isEmail:function(str){
		return /^[A-Z_a-z0-9-\.]+@([A-Z_a-z0-9-]+\.)+[a-z0-9A-Z]{2,4}$/.test(str);
	},
	isPhone:function(str){
		return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/.test(str);
	},
	isMobile:function(str){
		return /^((\(\d{2,3}\))|(\d{3}\-))?((1[35]\d{9})|(18[89]\d{8}))$/.test(str);
	},
	isUrl:function(str){
		return /^(http:|ftp:)\/\/[A-Za-z0-9_\-]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"])*$/.test(str);
	},
	isIp:function(str){
		return /^(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5])$/.test(str);
	},
	isNum:function(str){
		return /^\d+$/.test(str);
	},
	isZip:function(str){
		return /^[1-9]\d{5}$/.test(str);
	},
	isEN:function(str){
		return /^[A-Za-z]+$/.test(str);
	}
};

/**
 *  数组操作的方法
 */

XN.ARRAY = XN.Array = {
	toQueryString:function(a,key){
		var rt = [],t;
		for(var k in a){
			t = a[k];
			if(isFunction(t))continue;
			if(isObject(t)){
				rt.push(XN.ARRAY.toQueryString(t,k));
			}else{
				if(/^\d+$/.test(k)){
					rt.push(encodeURIComponent(key || k) + '=' + encodeURIComponent(t));
				}else{
					rt.push(encodeURIComponent(k) + '=' + encodeURIComponent(t));
				}	
			}
		}
		return rt.join('&');
	},
	each:function(a,func){
		if ( !isUndefined( a.length ) || !isUndefined( a[ 0 ] ) )
		{
			for ( var i = 0 , j = a.length; i < j; i++ )
			{
				if ( func( i , a[ i ] ) === false ) break;
			}
		}
		else
		{
			for ( var key in a )
			{
				if( !isFunction( a[ key ] ) )
				{
					if ( func( key , a[ key ] ) === false ) break;
				}
			}
		}
	},
	include:function(a,value){
		var r = false;
		for(var key in a){
			if(a[key] == value){
				r = true;
				break;
			}
		}
		return r;
	}
};

/**
 *  后面将用于实参的转换,因为用Array.call(null,XX)转换会有莫名的bug
 */
if(isUndefined($A)){
	var $A = function(o){
	  	var rt = [];
		for (var i = 0,j = o.length;i < j;i++){
			rt.push(o[i]);
		}
		return rt;
	}
}

/**
 *  元素获取的基本方法,为了防止被prototype覆盖,当文档加载完成之后还会重新声明此函数
 */

var $;
function _reload$_(){
	xn_getEl = $ = function(id,level) {
		if(!id)return false;
		var el;
		level == level || 1;
		if(isString(id)){
			el = document.getElementById(id);
		}else{
			el = id;
		}
		if(!el){
			return null;
		}
		if(!el._extendLevel)XN.ELEMENT.extend(el,1);
		if(level == 2 && el._extendLevel != 2)XN.ELEMENT.extend(el,2);
		return el;
	}
}
_reload$_();

/**
 * 扩展超级元素的方法 
 */

function $X(id){
	return $(id,2);
}

function $extend(object,src){
	for (var p in src){
		object[p] = src[p];
	}
	return object;
}

function $element(tagName){
	tagName = tagName.toLowerCase();
	if(!XN.DOM._elementsCache[tagName]){
		XN.DOM._elementsCache[tagName] = document.createElement(tagName);
	}
	return $(XN.DOM._elementsCache[tagName].cloneNode(false));
}

function $xElement(tagName){
	return $($element(tagName),2);
}

if(!Function.prototype.bind){
	Function.prototype.bind = function(object) { 
		var method = this; 
		return function() { 
			method.apply(object, arguments); 
		} 
	}
}

XN.DEBUG_MODE = false;
XN.staticPath = "http://static.gummy.jp/";

XN.ENV = XN.Env = {
	domain:'gummy.jp',
	staticRoot:'http://static.gummy.jp/',
	swfRoot:'http://static.gummy.jp/',
	wwwRoot:'http://gummy.jp/'
};

XN.Browser = XN.BROWSER =  {
    IE:     !!(window.attachEvent && !window.opera),
	IE6:navigator.userAgent.indexOf('MSIE 6.0') > -1,
	IE7:navigator.userAgent.indexOf('MSIE 7.0') > -1,
	IE8:navigator.userAgent.indexOf('MSIE 8.0') > -1,
    Opera:  !!window.opera,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
    Safari: navigator.userAgent.indexOf("Safari") > -1 && navigator.userAgent.indexOf("Chrome") == -1,
    Chrome: navigator.userAgent.indexOf("Chrome") > -1,
	copy:function( text ){
		if ( isElement( text ) )
		{
			text = text.value;
		}
		if ( window.clipboardData && clipboardData.setData )
		{
			if ( clipboardData.setData( 'Text' , text ) ) return true;
		}
		else
		{
			XN.DO.showError( 'ブラウザーがJavaScirptを支持していないためコピーできません、手動でコピーしてください。' );
			return false;
		}
		XN.DO.showError( 'ブラウザーがJavaScirptを支持していないためコピーできません、手動でコピーしてください。' );
		return false;		
	},
	addHomePage:function(url){
		if(XN.BROWSER.IE){
			document.body.style.behavior = 'url(#default#homepage)';
			document.body.setHomePage(url);
		}else{
			XN.BROWSER.copy(url);
			XN.DO.showError('アドレスがすでに切り取り板にコピーされています、ブラウザーの選択項目を開いてください、<br/>アドレスをホームページに貼りつけして~');
		}
	},
	addBookMark:function(url,title){
		var ctrl = (navigator.userAgent.toLowerCase()).indexOf('mac') != -1 ? 'Command/Cmd' : 'CTRL';					
		try{
				window.external.addFavorite(url,title || 'グミィ - リアルだから,いい');
		}catch(e){
			try{
				window.sidebar.addPanel(url,title || 'グミィ - リアルだから,いい');
			}catch(e){
				XN.DO.showError('ショートカットキーを試してください' + ctrl + ' + D しおりを追加~');
			}
		}
	}
};
XN.COOKIE = XN.Cookie = {
	get:function(name){
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length,c.length));
		}
		return null;
	},
	set:function(name,value,days,path,domain,secure){
		var expires;
		if(isNumber(days)){
			var date = new Date();
			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
			expires = date.toGMTString();
		}else if(isString(days)){
			expires = days;
		}else{
			expires = false;
		}
		document.cookie = name + '=' + encodeURIComponent(value) +
				(expires ? '; expires=' + expires  : '') +
				(path ? '; path=' + path : '') +
				(domain ? '; domain=' + domain : '') +
				(secure ? '; secure' : '');
	},
	del:function(name,path,domain,secure){
		XN.COOKIE.set(name,'',-1,path,domain,secure);
	}
};

XN.Debug = XN.DEBUG = {
	win	:null,
	log	:null,
	On	:function() {
		XN.DEBUG_MODE = true;
		if(typeof console == 'undefined' || typeof console.log == 'undefined'){
			XN.log = function(){};
		}else{
			XN.log = XN.DEBUG.log = function(s){
				console.log(s);
			}
		}
	},
	Off	:function() {
		XN.DEBUG_MODE = false;
		window.onerror = null;
		XN.log = XN.DEBUG.log = function() {};
	},
	init	:function(){
		XN.DEBUG[(XN.DEBUG_MODE?"On":"Off")]();
	}
};
XN.DEBUG.init();


XN.Do = XN.DO = {};
XN.DO._alert = null;
XN.DO._alertDefaultButton = null;
XN.DO._alertCallBack = null;
XN.DO.alert = function(message,title,button,type,X,Y,w,h,callBack) {
	var _f,_yes,ops = {},_s = XN.DO, dftHeaderClass = 'popup_title';
	if(isObject(arguments[0])){
		ops = arguments[0];
	}
	_s._alertCallBack = ops.callBack || callBack || XN.FUNC.empty;
	if (!_s._alert) {
		_f = _s._alert = new XN.UI.panel();
	} else {
		_f = _s._alert;
	}
	
	_f.closeHandle.show();
	_f.closeHandle.addEvent('click', function(e){
        XN.EVENT.stop(e);
        XN.DO._alert.hide();
        XN.DO._alertCallBack.call(XN.DO._alert);
    });
	_f.header.show();
	_f.body.show();
	_f.footer.show();
	_f.setHeader(false);
    _f.setHeader(ops.title || title || "");
	_f.setBody(false);
	type = ops.type || type || 'normal';

	var msg=ops.message || ops.msg || message || 'メッセージの未設定表示';
	if(type == 'error'){
		_f.setBody('<div class="warning_icon"></div><p class="popup_content warning">'+msg+'</p>');
        dftHeaderClass = '';
	}else if(type == 'message'){
		_f.setBody('<div class="success_icon"></div><p class="popup_content success">'+msg+'</p>');
        dftHeaderClass = '';
	}else{
        if(typeof(msg)=='object' || /<[^> ]+?\\?>/.test(msg)){
            _f.setBody(msg);
        }else{
           _f.setBody('<p class="popup_content">' + msg + '</p>');
        }
	}
      
    var headClass = ops.headClass || dftHeaderClass;
    _f.header.addClass(headClass);
	
	_f.setWidth(ops.width || w || 370);
	_f.setHeight(ops.height || h || false);
	//_f.setType(type);
	_f.setX(ops.X || X || false);
	_f.setY(ops.Y || Y || false);
    //_f.body.addClass('popup_content_box');
    _f.setFooter(false);
    _f.setFooter('<a href="#nogo" class="small_gray_btn mc">' + (ops.button || button || '閉じる') + '</a>');
    $(_f.footer.firstChild).addEvent('click', function(e) {
        XN.EVENT.stop(e);
        XN.DO._alert.hide();
        XN.DO._alertCallBack.call(XN.DO._alert);
    });
    
	if(ops.noHeader){
		_f.header.hide();
	}
		
	if(ops.noFooter){
		_f.footer.hide();
	}

	_f.show();

	return _f;
};

XN.DO._close = null;
XN.DO._closeDefaultButton = null;
XN.DO._closeCallBack = null;

/*
XN.DO.close = function(message,title,type,X,Y,w,h,callBack) {
	var _f,_yes,ops = {},_s = XN.DO,timer;
	if(isObject(arguments[0])){
		ops = arguments[0];
	}
	_s._alertCallBack = ops.callBack || callBack || XN.FUNC.empty;
	if (!_s._alert) {
		_f = _s._alert = new XN.UI.panel();
		_s._alertDefaultButton = _yes = new XN.UI.button({text:'閉じる',onclick:function(){
			if(!XN.DOM._isable)XN.DOM.enable();
			if(timer !== null) {
				clearTimeout(timer);
				timer = null;
			}
			XN.DO._alert.hide();
			XN.DO._alertCallBack.call(XN.DO._alert);
			}});
		_f.setFooter(_yes);
	} else {
		_f = _s._alert;
	}
	_f.header.show();
	_f.body.show();
	_f.footer.show();
	_f.setHeader(false);
	_f.setBody(false);
	type = ops.type || type || 'normal';
	if(type == 'error'){
		_f.setHeader(ops.title || title || "");
	}else{
		_f.setHeader(ops.title || title || "");
	}
	XN.DO._alertDefaultButton.setText(ops.button || '閉じる');
	_f.setBody('<p class="popup_content">' + (ops.message || ops.msg || message || 'エラーメッセージは指定されていません') + '</p>');
	_f.setWidth(ops.width || w || 370);
	_f.setHeight(ops.height || h || false);
	_f.setType(type);
	_f.setX(ops.X || X || false);
	_f.setY(ops.Y || Y || XN.EVENT.scrollTop() + 200);


	if(ops.noHeader){
		_f.header.hide();
	}
		
	if(ops.noFooter){
		_f.footer.hide();
	}
	
	_f.show();
	
	try{
		XN.DO._alertDefaultButton.focus();
	}catch(e){}
	
	if(ops.autoHide){
		timer = setTimeout(function(){
			_f.hide();
		},(ops.autoHide * 1000));
	}
	return _f;
};
*/
XN.DO.close = function(message, title, type, X, Y, w, h, callBack) {
    var _f;
	if(isObject(arguments[0])){
		_f = XN.DO.alert(arguments[0]);
	}else{
		_f = XN.DO.alert(message, title, '', type, X, Y, w, h, callBack);
	}
	if(XN.DO._alert){
		XN.DO._alert.closeHandle.hide();
	}
    return _f;
};

XN.DO._confirm = null;
//XN.DO._confirmYesButton = null;
//XN.DO._confirmNoButton = null;
XN.DO._confirmCallBack = null;
XN.DO.confirm = function(message, title, callBack, yes, no, X, Y, w, h) {
	var _f,_yes,_no,_s = XN.DO,ops = {}, dftClass = 'small_gray_btn';
	if(isObject(arguments[0])){
		ops = arguments[0];
	}
    var yesClass = ops.yesClass || dftClass;
    var noClass = ops.noClass || dftClass;

    yes = ops.yes || yes || (yesClass==dftClass ? '確　定' : '');
    no = ops.no || no || (noClass==dftClass ? 'キャンセル' : '');
    message = ops.message || ops.msg || message || 'メッセージの未設定表示';
	_s._confirmCallBack = ops.callBack || callBack || XN.FUNC.empty;
	if (!_s._confirm) {
		_f = _s._confirm = new XN.UI.panel();
		/*_s._confirmYesButton = _yes = new XN.UI.button({text:(yes || "OK"),className:'ok btn',onclick:function(){
			if(!XN.DOM._isable)XN.DOM.enable();
			XN.DO._confirm.hide();
			XN.DO._confirmCallBack.call(XN.DO._confirm,true);
			}});
		_s._confirmNoButton = _no = new XN.UI.button({text:(no ||"キャンセル"),className:'cancel btn',onclick:function(){
			if(!XN.DOM._isable)XN.DOM.enable();
			XN.DO._confirm.hide();
			XN.DO._confirmCallBack.call(XN.DO._confirm,false);
			}});
		_f.setFooter(_yes);
		_f.setFooter(_no);
		_f.closeHandle.addEvent("click",function(e){
			XN.EVENT.stop(e);
			XN.DO._confirm.hide();
			//XN.DO._confirmCallBack.call(XN.DO._confirm, false);
		},false);*/
	}else{
		_f = XN.DO._confirm;
	}

    var linkEvent = function(div, type) {
        $(div.getElementsByTagName('a')[0]).addEvent('click', function(e) {
            XN.EVENT.stop(e);
            XN.DO._confirm.hide();
            XN.DO._confirmCallBack.call(XN.DO._confirm, type);
        });
    };

    var btnEvent = function(div, type){
        var input = div.getElementsByTagName('input')[0];
        $(input).addEvent('click', function(e) {
            XN.DO._confirm.hide();
            XN.DO._confirmCallBack.call(XN.DO._confirm, type);
        });
        $(input).addEvent('mouseover', function(e){
            $(input).addClass(yesClass + '_hover');
        });
        $(input).addEvent('mouseout', function(e){
            $(input).delClass(yesClass + '_hover');
        });
    };
    
    _f.setFooter(false);
    var _div1 = $xElement('div');
    _div1.innerHTML = '<ul class="lz_right"><li><input type="button" value="' + yes + '" class="'  + yesClass + '"/></li></ul>';
    btnEvent(_div1, true);
    _f.setFooter(_div1.firstChild);

    var _div2 = $xElement('div');
    _div2.innerHTML = '<ul class="lz_left"><li><a href="" class="' + noClass + '">' + no + '</a></li></ul>';
    linkEvent(_div2, false);
    _f.setFooter(_div2.firstChild);
    
    //是否显示关闭按钮
	if(!ops.hideClose){
		_f.closeHandle.show();
		
		_f.closeHandle.addEvent('click', function(e){
            XN.EVENT.stop(e);
            XN.DO._confirm.hide();
            XN.DO._confirmCallBack.call(XN.DO._confirm, false);
        });
	}
	_f.header.show();
	_f.body.show();
	_f.footer.show();
	_f.setWidth(ops.width || w || 370);
	_f.setHeight(ops.height || h || false);
	_f.setHeader(false);
	_f.setHeader(ops.title || title || "");
	_f.setBody(false);
    if(typeof(message)=='object' || /<[^>]+?\/?>/.test(message)){
        _f.setBody(message);
    }else{
       _f.setBody('<p class="popup_content">' + message + '</p>');
       //_f.body.addClass('popup_content_box');
    }

	//_s._confirmYesButton.setText(ops.yes || yes || 'OK');
	//_s._confirmNoButton.setText(ops.no || no || 'キャンセル');
	_f.setX(ops.X || X || false);
	_f.setY(ops.Y || Y || false);
	_f.show();

	_f.header.addClass(ops.headClass ? 'popup_title ' + ops.headClass : '');

	/*try{
		_s._confirmYesButton.focus();
	}catch(e){}*/
	return _f;	
};
/**
 * example:
 * 	XN.DO.showError(title)
 * 	XN.DO.showError(title,x)
 * 	XN.DO.showError(title,title,time,x)
 *  	
 */
XN.DO.showError = function(msg,title,time,x,callBack){
	var offsetTop = getFixedScrollTop() + 200;
	if(isNumber(title)){
		x = title;
		title = undefined;
	}
	return XN.DO.alert({
		msg: msg,
		type: 'error',
		title: (title || ''),
		X: x,
		Y: offsetTop,
		noFooter: false,
		autoHide: (time || 2),
		callBack: callBack
	});
};

XN.DO.showMessage = XN.DO.showMsg = function(msg,title,time,x,callBack){
	var offsetTop = getFixedScrollTop() + 200;
	return XN.DO.alert({
		msg: msg,
		type: 'message',
		title: (title || ''),
		X: x,
        Y: offsetTop,
		noFooter: false,
		autoHide: (time || 2),
		callBack: callBack
	});
    //_p.hide();
    //_p.show();
    //return _p;
};

XN.Dom = XN.DOM = {
	loaded:false,
	_timer:null,
	_shadow:null,
	_elementsCache:[],
	_currentElement:null,
	_isable:true,
	hooks:{onload:[],onunload:[]},
	disable:function(opacity){
		if(!XN.DOM._isable)return;
		if(XN.DOM._shadow === null){
			var s =$element('div');
			s.setStyle('background:#000;position:absolute;width:100%;height:100%;z-index:2000;top:0;left:0;')
			XN.DOM._shadow = s;
			document.body.appendChild(s);
		}
		XN.ELEMENT.setOpacity(XN.DOM._shadow,opacity || 0.3);
		XN.DOM._shadow.show();
		var ph = XN.EVENT.pageHeight();
		var wh = XN.EVENT.winHeight();
		XN.DOM._shadow.style.height = Math.max(ph,wh) + 'px';
		XN.DOM._isable = false;
	},
	enable:function(){
		if(XN.DOM._isable)return;
		XN.DOM._shadow.hide();
		XN.DOM._isable = true;
	},
	insertAfter:function(element, targetElement){
		var parent = targetElement.parentNode;
		if(parent.lastChild == targetElement){
			parent.appendChild(element);
		}else{
			parent.insertBefore(element, targetElement.nextSibling);
		}
	},
	getElementsByClassName : function(className,element) { 
		var children = ($(element) || document).getElementsByTagName('*') || document.all; 
		var elements = []; 
		var _exp = new RegExp('\\b' + className +'\\b');
		for ( var i = 0,child; child = children[i]; i++) { 
			if (_exp.test(child.className)){
				elements.push(child);
			}
		}   
  	return elements; 
	},
	readyDo:function(f){
		XN.DOM.loaded ? f() : XN.DOM.addHook('onload',f);
	},
	unloadDo:function(f){
		XN.DOM.addHook('onunload',f);
	},
	addHook:function(type,f){
		XN.DOM.hooks[type].push(f);
	},
	runHooks:function(type){
		if(XN.DOM.hooks === null){
			return;
		}
		var hooks = XN.DOM.hooks;
		for(var i = 0,f;f = hooks[type][i];i++){
			try{f()}catch(e){
				if(XN.DEBUG_MODE){
					throw e;
				}
			};
		}
		XN.DOM.hooks = null;
	},
	preloadImg:function(src){
		function newImg(src){
			var _img = $element('img');
			_img.style.display = 'none';
			_img.src = src;
			_img.onload = function(){XN.Element.remove(this);};
			document.body.appendChild(_img);
		}
		if(isString(src)){
			newImg(src);
		}else if(isArray(src)){
			XN.ARRAY.each(src,function(i,v){
				newImg(v);
			});
		}
	},
	preloadPage:function(url){
		function newIframe(url){
			var _iframe = $element('iframe');
			XN.DOM.setStyle(_iframe,'position:absolute;width:0;height:0;left:-9999px;');
			_iframe.src = url;
			_iframe.onload = function(){XN.Element.remove(this);};
			document.body.appendChild(_iframe);			
		}
		if(isString(url)){
			newIframe(url);
		}else if(isArray(url)){
			XN.ARRAY.each(url,function(i,v){
				newIframe(v);
			});
		}
	}
};
XN.ELEMENT = XN.Element = {
	extend:function(el,level){
		 if (!el|| !el.tagName || el.nodeType == 3 || el == window) return el;
		var ms;
		if(level == 1)ms = XN.ELEMENT.regularMethods;
		if(level == 2)ms = XN.ELEMENT.methods;
		var cache = XN.ELEMENT.extend.cache;
		 for(var m in ms){
		 	if(!(m in el)){
				el[m] = cache.findOrStore(ms[m]);
			}
		 }
		 el._extendLevel = level;
		 return el;
	}
};
XN.ELEMENT.extend.cache = {
  findOrStore: function(value) {
    return this[value] = this[value] || function() {
      return value.apply(null, [this].concat($A(arguments)));
    }
  }
};

XN.ELEMENT.regularMethods = {
	hover:function(element,className,hover){
		element = $(element);
		hover =  hover ? $(hover) : element;
		XN.EVENT.addEvent(element,'mouseover',function(){
			hover.addClass(className);
		},false);
		XN.EVENT.addEvent(element,'mouseleave',function(){
			hover.delClass(className);
		},false);
	},
	scrollTo: function(element,effect) {
		element = $(element);
		effect = effect || 'normal';
		switch(effect){
			case 'slow':
			XN.EFFECT.scrollTo(element);
			break;
			default:
			window.scrollTo(0,element.realTop());
			break;
		}
		return element;
	},
	visible: function(element) {
		element = $(element);
		return element.style.display != 'none';
	},
	addClass:function(element,className){
		element = $(element);
		if((new RegExp('\\b' + className + '\\b')).test(element.className))return;
		element.className += ' ' + className;
		return element;
	},
	delClass:function(element,className){
		element = $(element);
		element.className = element.className.replace(new RegExp('\\b' + className + '\\b'),'');
		return element;
	},
	show : function (element,effect){
		element = $(element);
		if(element.style.display != 'none')return;
		effect = effect || 'normal';
	 	switch(effect){
			case 'normal':
			element.style.display = '';
			break;
			case 'fade':
			XN.EFFECT.fadeIn(element,function(e){
				e.style.display = '';
			});
			break;
			case 'slide':
			XN.EFFECT.slideOpen(element);
			break;
			case 'delay':
			setTimeout(function(){
				element.style.display = '';
			},2000);
			break;
		}
		return element;
	},
	hide : function (element,effect){
		element = $(element);
		if(element.style.display == 'none')return;
		effect = effect || 'normal';
	 	switch(effect){
			case 'normal':
			element.style.display = 'none';
			break;
			case 'fade':
			XN.EFFECT.fadeOut(element,function(e){
				e.style.display = 'none';
			});
			break;
			case 'slide':
			XN.EFFECT.slideClose(element);
			break;
			case 'delay':
			setTimeout(function(){
				element.style.display = 'none';
			},2000);
			break;
		}
		return element;
	},
	remove:function(element){
		var element = $(element);
		element.parentNode.removeChild(element);
		return element;
	},
	setStyle:function(element,style){
		var element = $(element);
			element.style.cssText += ';' + style;
		return element;
	},
	getStyle: function(element, style) {
		element = $(element);
		style = style == 'float' ? 'cssFloat' : style;
		var value = element.style[style];
		if (!value) {
			var css = document.defaultView.getComputedStyle(element, null);
			value = css ? css[style] : null;
		}
		if (style == 'opacity') return value ? parseFloat(value) : 1.0;
		return value == 'auto' ? null : value;
	},
	addEvent:function(){
		XN.EVENT.addEvent.apply(XN.EVENT,arguments);
		return arguments[0];
	},
	delEvent:function(element,type,func,useCapture){
		XN.EVENT.delEvent.apply(XN.EVENT,arguments);
		return arguments[0];
	}
};

(function(){
	if ( XN.BROWSER.IE ) {
		XN.ELEMENT.regularMethods.getStyle = function( element , style ){
		    element = $(element);
		    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style;
		    var value = element.style[style];
		    if (!value && element.currentStyle) value = element.currentStyle[style];
		
		    if (style == 'opacity') {
		      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
		        if (value[1]) return parseFloat(value[1]) / 100;
		      return 1.0;
		    }
		
		    if (value == 'auto') {
		      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
		        return element['offset'+ ( style == 'width' ? 'Width' : 'Height' )] + 'px';
		      return null;
		    }
		    return value;
		}
	}
})();

XN.ELEMENT.methods = {
	addChild:function(father,s){
		father = $(father);
		if (isString(s)) {
		var element = (s.substring(0,1) == '#') ? $(s.substring(1,s.length)) : s;
			if(isString(element)){
				father.innerHTML += s;
			}else {
				if(element.parentNode){
					//father.innerHTML += element.innerHTML;
					father.appendChild(element.cloneNode(true).removeAttribute('id'));
				}else{
					father.appendChild(s);
				}
			}
		} else if(isElement(s)) {
			father.appendChild(s);
		}else if(s.haveFather == false){
			father.appendChild(s.frame);
			s.haveFather = true;
		}else if(s.iAmXmlhttp){
			s.fillTo = father;
			father.startLoading();
		}
		return father;
	},
	setContent:function(element,s){
		element = $(element);
		element.innerHTML = '';
		if(s){
			element.addChild(s);
		}
		return element;
	},
	clean:function(element){
		var node;
		element = $(element);
		node = element.firstChild;
		while(node){
			if(node.nodeType == 3 && !/\S/.test(node.nodeValue)){
				element.removeChild(node);
			}
			node = node.nextSibling;
		}
		return element;
	},
	startLoading:function(element,msg){
		element = $(element);
		element.innerHTML = '<p class="poppup_content"><img src=\"'+XN.ENV.staticRoot+'/wind/img/ajax-loader.gif\" />' + (msg || 'Loading...') + '</p>';
		return element;
	},
	stopLoading:function(element){
		element = $(element);
		return element;
	}
};
(function(){
	//var timer;
	if (document.addEventListener) {
		XN.ELEMENT.regularMethods.setOpacity = function(element,opacity){
			element = $(element);
			element.style.opacity = opacity;
			return element;
		};
		if (XN.BROWSER.WebKit) {
			var timer = setInterval(function(){if(/loaded|complete/.test(document.readyState)){XN.DOM.loaded = true;XN.DOM.runHooks('onload');clearTimeout(timer);}},10); 
		}else{
			document.addEventListener('DOMContentLoaded',function(){XN.DOM.loaded = true;XN.DOM.runHooks('onload');},false);
		}
	}else{
			XN.ELEMENT.regularMethods.setOpacity = function(element,opacity){
				element = $(element);
				element.style.zoom = 1;
				element.style.filter = 'Alpha(opacity=' + Math.ceil(opacity * 100) +')';
				return element;
			};
			
			var n = document.createElement('p');  

            XN.DOM._timer = setInterval(function() {
                try {
                    n.doScroll('left');
                    clearInterval(XN.DOM._timer);
                    XN.DOM._timer = null;
                    XN.DOM.loaded = true;
                    n = null;
					XN.DOM.runHooks('onload');
                } catch (ex) { 
                }
            }, 20); 
	}
})();


XN.Event = XN.EVENT = {
	isCapsLockOn:function(e){
		var c = e.keyCode || e.which;
		var s = e.shiftKey;
//		alert(c);
		if(((c >= 65 && c <= 90) && !s) || ((c >=97 && c <= 122) && s)){
			return true;
		}
		return false;
	},
	element: function(event) {
		var n = event.target || event.srcElement;
		return XN.EVENT.resolveTextNode(n);
	},
	relatedTarget: function(event) {
		var t = event.relatedTarget;
		if (!t) {
		    if (event.type == 'mouseout' || event.type == 'mouseleave') {
		        t = event.toElement;
		    } else if (event.type == 'mouseover') {
		        t = event.fromElement;
		    }
		}	
		return XN.EVENT.resolveTextNode(t);
	},
	resolveTextNode: function(n) {
		try {
		    if (n && 3 == n.nodeType) {
		        return n.parentNode;
		    }
		} catch(e) { }
		
		return n;
	},
	pointerX	:function(event) {
		return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft));
	},
	pointerY	:function(event) {
		return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop));
	},
	pageHeight:function(){
		if(window.innerHeight && window.scrollMaxY){
			return window.innerHeight + window.scrollMaxY;
		}else{
			return document.body.scrollHeight;
		}
	},
	pageWidth:function(){
  		if(window.innerWidth && window.scrollMaxX){
			return window.innerWidth + window.scrollMaxX;
		}else{
			return document.body.scrollWidth;
		}
	},
	winWidth	:function() {
	  return window.innerWidth || document.body.clientWidth;
	},
	winHeight	 :function() {
	  return window.innerHeight || document.body.clientHeight;
	},
	scrollTop	:function(){
		if (document.documentElement){
			return document.documentElement.scrollTop;
		}
		return document.body.scrollTop;
	},
	scrollLeft:function(){
		if (document.documentElement){
			return document.documentElement.scrollLeft;
		}
		return document.body.scrollLeft;
	},
	stop	:null,
	addEvent	:function(){return false;},
	delEvent	:function(){return false;},
	_mouseleave:function(){		
	},
	enableCustomEvent:function(obj){
		$extend(obj,{
			addEvent:function(type,func){
				if(!this._customEventListeners)this._customEventListeners = {};
				var funcs = this._customEventListeners;
				if(isUndefined(funcs[type])){
					funcs[type] = [];
				}
				funcs[type].push(func);
				return this;
			},
			delEvent:function(type,func){
				var funcs = this._customEventListeners[type];
				if(funcs){
					for(var i = funcs.length - 1; i >= 0;i--){
						if(funcs[i] == func){
							funcs[i] = null;
							break;
						}
					}
				}
				return this;
			},
			fireEvent:function(type){
				if( !this._customEventListeners || !this._customEventListeners[type] )return;
				var funcs = this._customEventListeners[type],s = this,ars = $A(arguments);
				ars.shift();
				for(var i = funcs.length - 1; i >= 0; i--){
					if(funcs[i])
						funcs[i].apply(s,ars);
				}
			}
		});
	}
 };
(function(){
	if (XN.BROWSER.IE) {
		XN.EVENT.stop = function(event) {
			event.returnValue = false;
			event.cancelBubble = true;
		};
	}else{
		XN.EVENT.stop = function(event) {
			event.preventDefault();
			event.stopPropagation();
		};
	}
//	if(XN.BROWSER.IE || XN.BROWSER.Opera){
		XN.ELEMENT.regularMethods.realLeft = function(element,parent){
			parent = $(parent) || document.body;
			element = $(element);
			if(!element.offsetParent || element.offsetParent == parent){
				return element.offsetLeft;
			}else{
				var rt = 0;
		    	var p = element;
		    	while (p !=null && p != parent)
		    	{
		        	rt += p.offsetLeft;
					//rt.top += offsetParent.offsetTop;
		        	p=p.offsetParent;
		    	}
				return rt;
			}
		};
		XN.ELEMENT.regularMethods.realTop = function(element,parent){
			parent = $(parent) || document.body;
			element = $(element);
			if(!element.offsetParent || element.offsetParent == parent){
				return element.offsetTop;
			}else{
				var rt = 0;
		    	var p = element;
		    	while (p !=null && p != parent)
		    	{
		        	rt += p.offsetTop;
					//rt.top += offsetParent.offsetTop;
		        	p=p.offsetParent;
		    	}
				return rt;
			}
		};

	if (window.attachEvent && !XN.BROWSER.Opera) {
		XN.EVENT.addEvent = function(element,name,func) {
			 if (name == 'keypress')name = 'keydown';
			 if (name == 'input' )name = 'propertychange';
		    element = $(element);
            element.attachEvent("on" + name,func);
            return element;
		};
		XN.EVENT.delEvent = function(element,name,func) {
			if (name == 'keypress')name = 'keydown';
			if (name == 'input' )name = 'propertychange';
			element = $(element);
            element.detachEvent('on' + name, func);
            return element;
		};
	}else if (window.addEventListener) {
		XN.EVENT._mouseleave = function(event){
			var p = event.relatedTarget;
			while ( p && p != this ) try { p = p.parentNode; } catch(error) { p = this; }
			if(p != this){
				this.onmouseleave(event);
			}
		};
		XN.EVENT.addEvent = function(element,name,func,useCapture) {
			element = $(element);
			if(name == 'mouseleave'){
				element.onmouseleave = func;
				element.addEventListener('mouseout',XN.EVENT._mouseleave,useCapture);
				return element;
			}
			if (name == 'keypress' && XN.BROWSER.WebKit)name = 'keydown';
			element.addEventListener(name,func,useCapture);
			return element;
		};
		XN.EVENT.delEvent = function(element,name,func,useCapture) {
			element = $(element);
			if(name == 'mouseleave'){
				element.onmouseleave = null;
				element.removeEventListener('mouseout',XN.EVENT._mouseleave,useCapture);
				return element;
			}
			if (name == 'keypress' && XN.BROWSER.WebKit)name = 'keydown';
			element.removeEventListener(name,func,useCapture);
			return element;
		};
	}else {
		XN.EVENT.addEvent = function(element,name,func) {
			 if (name == 'keypress')name = 'keydown';
			$(element)["on" + name] = func;
			return element;
		};
		XN.EVENT.delEvent = function(element,name) {
			if (name == 'keypress')name = 'keydown';
			$(element)['on' + name] = null;
			return element;
		};
	}
})();
//XN.ELEMENT.methods.realLeft = XN.EVENT.realLeft;
//XN.ELEMENT.methods.realTop = XN.EVENT.realTop;
$extend(XN.ELEMENT,XN.ELEMENT.regularMethods);
$extend(XN.ELEMENT,XN.ELEMENT.methods);
XN.Func = XN.FUNC = {
	_runOnceFuncs:[],
	empty:function(){},
	runOnce:function(func){
		var fs = XN.FUNC._runOnceFuncs;
		if(fs[func])return null;
		fs[func] = true;
		return func();
	},
	tryDo:function(func){
		try{
			func();
		}catch(e){
		}
	}
};

/*
 *  based on YUI:YAHOO.lang.JSON 
 */
XN.Json = XN.JSON= {
	_ESCAPES : /\\["\\\/bfnrtu]/g,
	_VALUES  : /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
	_BRACKETS : /(?:^|:|,)(?:\s*\[)+/g,
	_INVALID  : /^[\],:{}\s]*$/,
	_SPECIAL_CHARS : /["\\\x00-\x1f\x7f-\x9f]/g,
	_PARSE_DATE : /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/,
	_CHARS : {
        '\b': '\\b',
        '\t': '\\t',
        '\n': '\\n',
        '\f': '\\f',
        '\r': '\\r',
        '"' : '\\"',
        '\\': '\\\\'
    },
    dateToString : function (d) {
        function _zeroPad(v) {
            return v < 10 ? '0' + v : v;
        }

        return '"' + d.getUTCFullYear()   + '-' +
            _zeroPad(d.getUTCMonth() + 1) + '-' +
            _zeroPad(d.getUTCDate())      + 'T' +
            _zeroPad(d.getUTCHours())     + ':' +
            _zeroPad(d.getUTCMinutes())   + ':' +
            _zeroPad(d.getUTCSeconds())   + 'Z"';
    },
    stringToDate : function (str) {
        if (XN.JSON._PARSE_DATE.test(str)) {
            var d = new Date();
            d.setUTCFullYear(RegExp.$1, (RegExp.$2|0)-1, RegExp.$3);
            d.setUTCHours(RegExp.$4, RegExp.$5, RegExp.$6);
            return d;
        }
    },
	parse:function(str){
		return eval('(' + str + ')');
	},
	build:function(o,w,d){
	    var m = XN.JSON._CHARS,str_re = XN.JSON._SPECIAL_CHARS,pstack = [];
		var _char = function (c) {
            if (!m[c]) {
                var a = c.charCodeAt();
                m[c] = '\\u00' + Math.floor(a / 16).toString(16) +
                                           (a % 16).toString(16);
            }
            return m[c];
    	};
		var _string = function (s) {
            return '"' + s.replace(str_re, _char) + '"';
        };
		var _date = XN.JSON.dateToString;
        var _stringify = function (o,w,d) {
            var t = typeof o,
                i,len,j,k,v,vt,a;
            if (t === 'string') {
                return _string(o);
            }
            if (t === 'boolean' || o instanceof Boolean) {
                return String(o);
            }
            if (t === 'number' || o instanceof Number) {
                return isFinite(o) ? String(o) : 'null';
            }
            if (o instanceof Date) {
                return _date(o);
            }
            if (isArray(o)) {
                for (i = pstack.length - 1; i >= 0; --i) {
                    if (pstack[i] === o) {
                        return 'null';
                    }
                }
                pstack[pstack.length] = o;

                a = [];
                if (d > 0) {
                    for (i = o.length - 1; i >= 0; --i) {
                        a[i] = _stringify(o[i],w,d-1) || 'null';
                    }
                }
                pstack.pop();

                return '[' + a.join(',') + ']';
            }

            if (t === 'object') {
                if (!o) {
                    return 'null';
                }
                for (i = pstack.length - 1; i >= 0; --i) {
                    if (pstack[i] === o) {
                        return 'null';
                    }
                }
                pstack[pstack.length] = o;

                a = [];
                if (d > 0) {
                    if (w) {
                        for (i = 0, j = 0, len = w.length; i < len; ++i) {
                            if (typeof w[i] === 'string') {
                                v = _stringify(o[w[i]],w,d-1);
                                if (v) {
                                    a[j++] = _string(w[i]) + ':' + v;
                                }
                            }
                        }
                    } else {
                        j = 0;
                        for (k in o) {
                            if (typeof k === 'string' && typeof o[k] != 'undefined') {
                                v = _stringify(o[k],w,d-1);
                                if (v) {
                                    a[j++] = _string(k) + ':' + v;
                                }
                            }
                        }
                    }
                }
                pstack.pop();
                return '{' + a.join(',') + '}';
            }
            return undefined; 
        };
		d = d >= 0 ? d : 1/0;
		return _stringify(o,w,d);
	}
};


XN.NET = XN.Net = XN.net = {};
XN.net.proxys = {};
XN.net.xmlhttp = function(url,data,onSuccess,parameters){
	
	var This = this;

    if ( !XN.net.cache ){
        XN.net.cache = new XN.UTIL.cache()
    }
	
	if(isObject(url)){
		$extend(this,url);
	}else{
		this.url = url || '';
		this.data = data || '';
		this.onSuccess = onSuccess;
		$extend(this,parameters);
	}
	
	var cache;
    if ( this.useCache && ( cache = XN.net.cache.get( this.url + encodeURIComponent( this.data ) ) ) ) {
        this.transport = {};
        this.transport.responseText = cache;
        setTimeout( function(){
            This._onComplete( );
            This._onSuccess( );
        }, 0 );
        return this;
    }
    
    function getDomain( link ) {
        var a = $element( 'a' );
        a.href = link;
        return a.hostname;
    }
    
    if ( /^http/.test( this.url ) ) {
        var cd = getDomain( window.location.href );
        var nd = getDomain( this.url );
        
        if ( cd != nd ) {
            if ( XN.net.proxys[ nd ] ) {
                This.init( XN.net.proxys[ nd ] );
                return This;
            } else {
                var iframe = $element( 'iframe' ).hide();
                document.body.appendChild( iframe );
                iframe.src = 'http://' + nd + '/ajaxProxy.html';
                XN.EVENT.addEvent( iframe , 'load' , function() {
                    try {
                    	This.init( iframe.contentWindow );
                        XN.net.proxys[ nd ] = iframe.contentWindow;
                    }
                    catch(e){}
                });
                return This;
            }
        } else {
        	This.init( window );
        }
    } else {
        this.init( window );
    }
};
XN.net.xmlhttp.prototype = {
	url:null,
	data:'',
	onSuccess:null,
	onFailure:null,
	onError:null,
	fillTo:null,
	method:'post',
	asynchronous:true,
	transport:null,
	headers:null,
	//getTransport:null,
	iAmXmlhttp:true,
	isRuning:false,
	init:function(w){
		this.transport = this.getTransport( w );
	    if( this.url && this.url !== '' ) {
	    	this.send( this.method );
	    } 
	},
	
	get:function(url,data,onSuccess,parameters){
		if(this.isRuning)return false;
		if(isObject(url)){
			$extend(this,parameters);
			this.send('get');
			return this;
		}
		this.url = url;
		this.data = data || '';
		this.onSuccess = onSuccess;
		$extend(this,parameters);
		this.send('get');
		return this;
	},
	post:function(url,data,onSuccess,parameters){
		if(this.isRuing)return false;
		if(isObject(url)){
			$extend(this,parameters);
			this.send('post');
			return this;
		}
		this.url = url;
		this.data = data || '';
		this.onSuccess = onSuccess;
		$extend(this,parameters);
		this.send('post');
		return this;
	},
	sendForm:function(id,url,onSuccess,parameters){
		if(this.isRuing)return false;
		if(isObject(id)){
			$extend(this,parameters);
			this.data = XN.FORM.serialize(this.id);
			this.send(this.method);
			return this;
		}
		var a = XN.FORM.serialize(id);
		this.data = a || '';
		this.url = url;
		this.onSuccess = onSuccess;
		$extend(this,parameters);
		this.send(this.method);
		return this;
	},
	send:function(method){
		this.isRuning = true;
		var _url;
		if(method == 'get' && this.data !== ''){
			_url = this.url + (/\?/.test(this.url) ? '&' : '?') + this.data;			
		}
		if(this.asynchronous){
			this.transport.onreadystatechange = this.onStateChange.bind(this);
		}
		this.transport.open(method,this.url,this.asynchronous);
		this.transport.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		if (this.headers !== null) {
			for (var i in this.headers){
				this.transport.setRequestHeader(i,this.headers[i]);
			}
		}
		this.transport.send(method == 'post' ? this.data : null);
	},
	
    _onSuccess : function( obj )
    {
        var transport = this.transport;
        if ( this.fillTo !== null )
        {
            try{this.fillTo.stopLoading();}catch(e){}
            this.fillTo.innerHTML = transport.responseText;
        }
        try
        {
            if ( this.onSuccess ) this.onSuccess.call( null , transport );
        }
        catch( e )
        {
            if ( XN.DEBUG_MODE ) throw e;
        }
    },
    
    _onComplete : function( obj )
    {
        var transport = this.transport;
        try
        {
            if ( this.onComplete ) this.onComplete.call( null , transport );
        }
        catch( e )
        {
            if ( XN.DEBUG_MODE ) throw e;
        }
    },

	onStateChange:function(){
		if (this.transport.readyState == 4){
			try{(this.onComplete || XN.FUNC.empty)(this.transport);}catch(e){
				if(XN.DEBUG_MODE){
					throw e;
				}
			}
			if(this.transport.status == undefined || this.transport.status == 0 || (this.transport.status >= 200 && this.transport.status < 300)){
				if (this.fillTo !== null){
					try{this.fillTo.stopLoading();}catch(e){}
					this.fillTo.innerHTML = this.transport.responseText;
				}
				try{(this.onSuccess || XN.FUNC.empty)(this.transport);}catch(e){
					if(XN.DEBUG_MODE){
						throw e;
					}
				}
			}else{
				try{(this.onError || this.onFailure || XN.FUNC.empty)(this.transport);}catch(e){
					if(XN.DEBUG_MODE){
						throw e;
					}						
				}
			}
			this.isRuning = false;
		}
	}
};
(function(){
	if(XN.BROWSER.IE){
		XN.net.xmlhttp.prototype.getTransport = function(w){
			if ( w !== window ){
	            return w.getTransport();
	        }
			
			try{
				return new ActveXObject("Msxml2.XMLHTTP");
			}catch(e){
				return new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
	}else{
		XN.net.xmlhttp.prototype.getTransport = function(w){
			if ( w !== window ){
	            return w.getTransport();
	        }
			return new XMLHttpRequest();
		}
	}
})();
//XN.DEBUG.On();
XN.EFFECT = XN.Effect = {
	fadeIn:function(element,callBack){
		if(element.fadetimer)return;
		callBack = callBack || XN.FUNC.empty;
		var op = 0;
		element.setOpacity(0);
		element.style.display = '';
		element.fadetimer = setInterval(function(){
				XN.Element.setOpacity(element,(op += 0.20));
				if(op >= 1){
					clearInterval(element.fadetimer);
					element.fadetimer = null;
					callBack(element);
				}
		},60);
	},
	fadeOut:function(element,callBack){
		if(element.fadetimer)return;
		callBack = callBack || XN.FUNC.empty;
		var op =1;
		element.setOpacity(1);
		element.fadetimer = setInterval(function(){
				XN.Element.setOpacity(element,(op -= 0.20));
				if(op <= 0){
					clearInterval(element.fadetimer);
					element.fadetimer = null;
					callBack(element);
					element.setOpacity(1);
				}
		},60);		
	},
	gradient:function(element,r,g,b,callBack){
		if(element.gradientTimer)return;
		callBack = callBack || XN.FUNC.empty;
		element.style.backgroundColor = '#fff';
		element.style.backgroundColor = 'rgb(' + r + ',' + g + ',' + b + ')';
		element.gradientTimer = setInterval(function(){
			b += 10;
			element.style.backgroundColor = 'rgb(' + r + ',' + g + ',' + (b >255 ? 255 : b) + ')';
			if(b > 255){
				clearInterval(element.gradientTimer);
				element.gradientTimer = null;
				callBack(element);
			}
		},60);
	},
	slideOpen:function(element){
		if(element.slidetimer)return;
		if(!element.slideHeight){
			element.style.display = '';
			return;
		}
		var eh = element.slideHeight,h = 0;
		var step = parseInt(eh / 10);
		element.style.height = '0px';
		element.style.display = '';
		element.style.overflow = 'hidden';
		element.slidetimer = setInterval(function(){
			element.style.height = (h += step) + 'px';
			if(h >= eh){
				clearInterval(element.slidetimer);
				element.slidetimer = null;
				element.style.height = eh;
				element.style.overflow = element.slideOverflow;
			}
		},50);
	},
	slideClose:function(element){
		if(element.slidetimer)return;
		var eh = element.offsetHeight,h = eh;
		element.slideHeight = eh;
		element.slideOverflow = element.style.overflow;
		element.style.overflow = 'hidden';
		var step = parseInt(eh / 10);
		element.slidetimer = setInterval(function(){
			element.style.height = (h -= step) + 'px';
			if(h <= 0){
				clearInterval(element.slidetimer);
				element.slidetimer = null;
				element.style.display = 'none';
				element.style.height = eh;
				element.style.overflow = element.slideOverflow;
			}
		},50);
	},
	scrollTo:function(element,speed,callBack){
		if(element.scrolltimer)return;
		speed = speed || 10;
		callBack = callBack || XN.FUNC.empty;
		var d = element.realTop();
		var i = XN.EVENT.winHeight();
		var h = document.body.scrollHeight;
		var a = XN.EVENT.scrollTop();
		var offsetTop = null;
		if(d > a){
			if(d + element.offsetHeight < i + a )return;
			element.scrolltimer = setInterval(function(){
				a +=Math.ceil((d-a) / speed) || 1;
				window.scrollTo(0,a);
			  	if(a == d){
					clearInterval(element.scrolltimer);
					element.scrolltimer = null;
				}
			},10);
		}else{
			element.scrolltimer = setInterval(function(){
				a += Math.ceil((d-a) / speed) || -1;
				window.scrollTo(0,a);
			  	if(a == d){
					clearInterval(element.scrolltimer);
					element.scrolltimer = null;
				}
			},10);			
		}
	}
};

var em_401 = function() {
	em_402(this.onTweening, this);
    if (this.current >= this.frames) {
        this.stop();
        em_402(this.onComplete, this);
        this.tweening = false;
        return;
    }
    this.current++;
};
var em_402 = function(func, _404) {
    var args = Array.prototype.slice.call(arguments);
    args = args.slice(2);
    if (typeof func == "function") {
        try {
            return func.apply(_404 || this, args);
        } catch(e) {
            _404.errors = _404.errors || [];
            _404.errors.push(e);
        }
    }
};

XN.Effect.Motion = function(_406, _407) {
	this.duration = _407 || 1000;
    this.tween = _406 || "linear";
	this.init();
};

XN.Effect.Motion.prototype = {
	tweens : {
	    linear: function(t, b, c, d) {
		    return c * t / d + b;
		},
		easeIn: function(t, b, c, d) {
		    return c * (t /= d) * t + b;
		},
		easeOut: function(t, b, c, d) {
		    return - c * (t /= d) * (t - 2) + b;
		}
	},
		
	init: function() {
		em_402(this.onInit, this);
        this.fps = this.fps || 35;
        this.frames = Math.ceil((this.duration / 1000) * this.fps);
        if (this.frames < 1) {
            this.frames = 1;
        }
        var f = ("function" == typeof this.tween) ? this.tween: this.tweens[this.tween] || this.tweens["linear"];
        this.equation = function(from, to) {
            return f((this.current / this.frames) * this.duration, from, to - from, this.duration);
        };
        this.current = this.tweening = 1;
    },
    start: function() {
        this.init();
        em_402(this.onStart, this);
        var _40b = this,
        d = this.duration / this.frames;
        this.timer = setInterval(function() {
        	em_401.call(_40b);
        },
        d);
    },
    stop: function() {
        if (this.timer) {
            clearInterval(this.timer);
        }
        this.tweening = false;
    },
    
    getTweens : function() {
        return this.tweens;
    }
};


/**
 *  常用的html代码模板,用于快速组建代码
 */
XN.TEMPLATE = XN.Template = {
	mediaPlayer:function(o){
		return '<object classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" width="' + (o.width || '352') + '" height="' + (o.height || '70') + '" >\n' +
		'<param name="autostart" value="' + (o.autostart || '1')+'" >\n' +
		'<param name="showstatusbar" value="' + (o.showstatusbar || '1')+ '">\n' +
		'<param name="filename" value="'+ o.filename +'">\n' +
		'<embed type="application/x-oleobject" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" ' +
		'flename="mp"' +
		'autostart="' + (o.autostart || '1') + '" showstatusbar="' + (o.showstatusbar || '1') + '" ' +
		'src="' + o.filename + '" width="' + (o.width || '352') + '" height="' + (o.height || '70') + '"></embed>';
	},
	flashPlayer:function(o){
		return '<embed src="' + XN.ENV.staticRoot + '/swf/player.swf" flashvars="url=' + o.filename + '&Rwid=' + (o.width || '450') + '&Autoplay=' + (o.autostart || '1')+ '" wmode="' + (o.wmode || 'transparent') +'" loop="false" menu="false" quality="high" scale="noscale" salign="lt" bgcolor="#ffffff" width="' + (o.width || '450') + '" height="' + (o.height || '30') + '" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>';
	},
	flash:function(o){
		return '&nbsp;<embed src="' + o.filename + '" type="application/x-shockwave-flash" ' +
		'width="' + (o.width || '320') + '" height="' + (o.height || '240') + '" allowFullScreen="true" wmode="' + (o.wmode || 'transparent') + '" allowScriptAccess="always"></embed>';
	}
};

XN.USER = XN.User = {};
XN.USER.me = function( parameters )
{
};
currentUser = {};

XN.EVENT.enableCustomEvent( currentUser );

XN.USER.addFriendAction = function( p )
{
    this.config = {
        commentLength : 45,
        needComment : true,
        requestURI : 'http://friend.gummy.jp/ajax_request_friend.do'
    };
    $extend( this.config , p );
};

XN.USER.addFriendAction.prototype = {
    getConfig : function( key )
    {
        return this.config[ key ];
    },
    send : function( id , why , from )
    {
        var This = this;
		if ( this.getConfig( 'needComment' ) )
        {
            if ( XN.STRING.isBlank( why ) )
            {
                this.fireEvent( 'checkError' , 'メッセージの内容を入力してください。' );
                return;
            }
        }

		if ( why.length > this.getConfig( 'commentLength' ) )
		{
			this.fireEvent( 'checkError' , 'メッセージを' + this.getConfig( 'commentLength' ) + '文字以内で設定してください。' );
			return;
		}

		var data = 'id=' + id + '&why=' + why +'&from=' + from;
		this.fireEvent( 'beforePost' );
		new XN.NET.xmlhttp(
		{
			url : this.getConfig( 'requestURI' ),
			'data' : data,
			onSuccess : function( r )
			{	
				r = r.responseText;  // 返回的信息

				This.fireEvent( 'success' , id , r , from );
				
				if ( !window.currentUser ) return;
				
				if ( currentUser.fireEvent )
					currentUser.fireEvent( 'addFriendSuccess' , id , r ,from );
	
				if ( currentUser.onaddFriendSuccess )
					currentUser.onaddFriendSuccess( id , r );

			},
			onError : function()
			{
				This.fireEvent( 'error' , id , from );
				
				if ( !window.currentUser ) return;
				currentUser.fireEvent( 'addFriendError' , id , r , from );
			}
		});
    }
};

XN.EVENT.enableCustomEvent( XN.USER.addFriendAction.prototype );


/*
 * patch for old version
 */

XN.DOM.readyDo(function(){

	//对话框引用
    var dialog=null;
		
	//当前操作的用户
	var user=null;
	
	
	//操作进行中提示对话框
	function loadingDialog(){
		dialog=XN.DO.confirm({
			headClass:'addfri_p',
			yesClass:'applyfri_btn',
			msg : '<p class="popup_content"><img  src=\"' + XN.ENV.staticRoot + '/wind/img/ajax-loader.gif\" />Loading...</p>',
			width : 530
		});
		dialog.footer.style.display="none";
	}
	
	//拼接对话框的内容	
	function getMessage(speak,content,isStar,gender,hostname){
		var showSpeak=speak == "" ? "none" : "block";
		var showUpload=isStar ? "none" : "block";
		var showTip=content=="" ? "none" : "block";
		//对话框内部的message(需要根据不同的条件拼接)
		 
		var html=['<p class="cue_info">友達に追加するには、',
				  XN.String.escapeHTML(user.name),
				  'さんの承認が必要です。',
				   '<br/><span style="display:',
				  showSpeak,
				  '">', 
				  
				  XN.String.escapeHTML(user.name),
				  'さんのメッセージ:',
				  speak,
				  '</span></p>',
				   '<div id="addFriendAlert"><p class="attach_exp ms fc9" style="display:',
				  showTip,
				  '">',
				  content,
				  '</p>',
				  '<dl class="input_applyinfo"><dt><img src="',
				  user.head_url,,
				  '" alt="" /></dt>',
				  '<dd><textarea id="addFriendMessage" class="fc9" title="',
					 XN.String.escapeHTML(hostname),
				  'です、あなたと友達になりたいです。よろしくお願いします。" onfocus="if(this.value==this.title)this.value=\'\';" onblur="if(this.value==\'\')this.value=this.title;">',
				    hostname,
				  'です、あなたと友達になりたいです。よろしくお願いします。</textarea></dd><p class="attach_exp ml80 fc9 clearfix">コメントを入力してください(45文字以内)。</p></div>',
				  ];
		return html.join("")
	}
	
	//填写好友申请对话框
	function requestDialog(speak,content,isStar,gender,hostname){
		dialog=XN.DO.confirm({
			headClass:'addfri_p',
			yesClass:'applyfri_btn',
			msg : getMessage(speak,content,isStar,gender,hostname),
			width : 530,
			callBack : function( r ){
				if (r){
					var obj=$('addFriendMessage')
					var why=obj.value;
					//var why=obj.value==obj.title ? "" : obj.value;
					getAction().send( user.id , why , user.from );
				}
			}
		});
		dialog.footer.style.display="";
	}
	
	//发送请求时提示信息
	function beforePost(){
        $( 'addFriendAlert' ).innerHTML = '<p class="popup_content">送信中...</p>';
        dialog.footer.hide();
		dialog.show();
    }
    
	//推荐好友
	function recommendFriend(){
		if(typeof showRecommendedFriendDialog!="undefined"){
			showRecommendedFriendDialog(user.id,user.name,1,true);
		}
		else{
			XN.loadFile( $( 'st_for_r_f' ).getAttribute( 'vhref' ) );
			XN.loadFile( $( 'js_for_r_f' ).getAttribute( 'vsrc' ) ,function(){
				showRecommendedFriendDialog(user.id,user.name,1,true);
			});
		}
	}
	
	//请求成功后放入处理(判定是否需要推荐流程)
    function success(id, message){
        var This = this;
        if (isJSON(message))
            var msg = XN.JSON.parse( message );
        else
            var msg = {code:0,targetfriendcount:100,message:message};
       
        if ( msg.code == 0 || msg.code == 1 ){
        	
			//兼容旧方法	
			if(user.action){
				try{
					eval(user.action);
				}catch(e){}
			}
			//是否有回调
			
			if(user.callback && user.callback !='blog' && user.callback !='status'&& user.callback !='share'&& user.callback !='photo' && user.callback !='ugc')
				user.callback(user.id);
			//推荐好友
			if(user.callback !='blog' && user.callback !='status'&& user.callback !='share'&& user.callback !='photo'&& user.callback !='ugc'&&  msg.targetfriendcount<=12){
				dialog.hide();
				recommendFriend();
			}
			else{
				dialog.hide();
				//dialog.remove();
				//XN.DO.showMessage(msg.message);去掉本信息，因为要显示基本信息
				var url = 'http://friend.gummy.jp/toRequestFriend.do';
				var data = 'name='+user.name+'&reqeustUserId='+user.id;
				new XN.NET.xmlhttp(url,data,function(r) {
					var html = r.responseText;
					if(html.indexOf('error:') == 0){
						 XN.DO.showError(html.substring(6,len));
				
					}else{
						document.getElementById('request_friend_pop_div').innerHTML = html;
						document.getElementById('request_friend_pop_div').style.display='block'  ; 
						document.getElementById('request_friend_pop_div').style.zIndex = 20000 ; 
						scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
						document.getElementById('request_friend_pop_div').style.top = scrollTop() + 200 + 'px' ; 
						//var parentNd = document.getElementById("request_friend_pop_div");
						//var div = document.createElement("div");
						//div.id = 'request_friend';
						//div.innerHTML = html;
						//parentNd.appendChild(div);
						
					}
				});
				
				//$( 'addFriendAlert' ).innerHTML = msg.message;
				//setTimeout(function(){dialog.hide();}, 1500);
			}
			
        }
		else{
			dialog.hide();
			var message ="";
			if(msg.message == undefined){
				message = msg.msg;
			}else{
				message = msg.message;
			}
		//	XN.DO.alert({
		//		title:"エラー",
		//		message:"<p style='margin:10px;'>"+message+"</p>",
		//		button:'OK'
		//	});
			XN.DO.showError(message);
		}
    }
  
	
	//初始化User
	function initUser(args){
		if ( !/^\d+$/.test( args[ 0 ] ))
			user = {id:args[1],name:args[2],head_url:args[3],star:true,from:args[4],action:args[5]};
		else
			user = {id:args[0],name:args[1],head_url:args[2],star:args[3],from:args[4],callback:args[5]};
	}
	
	//返回当前用户对应的Action
	function getAction(){
		var action = new XN.USER.addFriendAction({
			needComment : false
		});
		action.addEvent( 'beforePost' , beforePost );
		action.addEvent( 'success' , success );
		action.addEvent( 'checkError' , function(message){
			dialog.hide();
			XN.DO.showError(message);
			//setTimeout(function(){
			//	dialog.show();
			//},2000);
		});    
		action.addEvent( 'error', function( id , message ){
			dialog.hide();
			XN.DO.showError( message );
		});	
		
		return action;
	}
	window.closeDo = function (){
	    	var x=document.getElementById("request_friend_pop_div");
	    	x.innerHTML="";
	    	x.style.display='none'; 
		}
	//对外的好友申请接口
	window.showRequestFriendDialog = function(uid,name,head,star,from,action,hostname){
		if(dialog!=null)dialog.hide();
		//初始化用户
		initUser(arguments);
		//加载好友提示语
		loadingDialog();
		new XN.NET.xmlhttp({
				url:'http://friend.gummy.jp/getAddFriendCondition.do',
				onSuccess:function(r){
					var html = r.responseText;  // 返回的信息
					var json = XN.JSON.parse(html);
					
					if(json.code == "-1"){
				 		dialog.hide();
				 		//XN.DO.showError(json.msg);
				 		var msg ="<p class=\"attach_exp ms fc9\">友達の数の上限に達しましたので、これ以上追加することができません。どうしても追加したい場合は、お友達を整理して1000人以下にしてから追加してください。</p>";
				 		
				 		var su = eval(json.suggestUsers);
				 		if(su != null && su!="[]" && su!=""){
				 			msg += "<div class=\"addfri_overlimite_ctn\">"
				 			for(var i=0; i<su.length; i++)
							{
						  		msg+="<dl class=\"maybefir_box\">";
						  		msg+="<dt><a href=\"http://gummy.jp/profile.do?id="+su[i].id+"\" target=_blank><img src=\""+su[i].headUrl+"\"></a></dt>";
						  		msg+="<dd><a href=\"http://gummy.jp/profile.do?id="+su[i].id+"\" target=_blank>"+su[i].name+"</a></dd>";
						  		msg+="<dd class=\"fri_fun\"><a href=\"#nogo\" onclick=\"ajaxDelSuggestFriend('"+su[i].id+"','"+su[i].name+"')\">友達から外す</a></dd>";
						  		msg+="</dl>";
							}
							msg += "</div>";
				 		}	
				 		
				 		var d = XN.DO.alert({title: '承認することができません',
    						message: msg, 
    						headClass: 'websys_notice', 
    						width: 720
    						})
    					d.frame.style.zIndex = 3500;
				 		return;
					}
					if(json.completed == "0"){
dialog.hide();
//----------------------------------------------------------------------------------------
window.location.href="http://www.gummy.jp/exciteComplete.do";
//----------------------------------------------------------------------------------------
					} else {
						new XN.NET.xmlhttp({
							url:"http://friend.gummy.jp/GetFriendCue.do?id="+user.id,
							method:"get",
							onSuccess:function(r){
								var result=XN.JSON.parse(r.responseText);
								if(result.code!=null && result.code == "-1"){
									dialog.hide();
									XN.DO.showError(result.msg);
								}else{
									if(result.isExist == "1" || result.isExist == "2"){
										dialog.hide();
										if(user.action){
											try{
												eval(user.action);
											}catch(e){}
										}
										//是否有回调
										if(user.callback && user.callback !='blog' && user.callback !='status'&& user.callback !='share'&& user.callback !='photo' && user.callback !='ugc')
											user.callback(user.id);
										var title ='友達に追加';
										
										var msg = '既に申請済みです！';
										if(result.isExist == "2") {
											msg = '既に友達に追加しました!';
										}
										dialog.hide();
										XN.DO.showError(msg,title);
										//dialog.footer.hide();
										//setTimeout(function(){dialog.hide();}, 1000);
									
									}else {
									    var content="";
										if(result.gross =="1" && result.head =="0"){
											content="まだ顔写真をアップロードしていません。<strong>顔写真をアップロードしたら、お友達があなたを見つけやすくなります。</strong><br>今すぐ<a href='http://head.upload.gummy.jp/Upload.do' target='_blank'>顔写真をアップロード</a>する！！！";
										}if(result.gross =="0" && result.head =="1"){
											content="まだプロフィールが完成していません。<strong>プロフィールの完成度が高ければ高いほど、お友達があなたを見つけやすくなります。</strong><br>今すぐ<a href='http://www.gummy.jp/BasicInfo.do' target='_blank'>プロフィールを完成</a>する！！！";
										}if(result.gross =="0" && result.head =="0"){
											content="まだプロフィールが完成していません。<strong>顔写真をアップロードし、プロフィールの完成度が高ければ高いほど、お友達があなたを見つけやすくなります。</strong><br>今すぐ<a href='http://head.upload.gummy.jp/Upload.do' target='_blank'>顔写真をアップロード</a>し、<a href='http://www.gummy.jp/BasicInfo.do' target='_blank'>プロフィールを完成</a>させる！！！";
										}
										var speak=result.type==0 ? "" : result.content;
										var isStar=result.isTrue ? true: false;
										var gender=result.ta===false ? "彼女" : "彼";
										requestDialog(speak,content,isStar,gender,hostname);
									}
								}
				
							},
							onError:function(r){
								dialog.hide();				
								XN.DO.showError('通信エラー,リトライしてください');
							}
						});
					}
				},
				onError:function(){
					dialog.hide();
					XN.DO.showError('ネットワーク接続に失敗しました、もう一度お試しください');
				},
				onComplete:function(){
					if(dialog!=null)
						dialog.footer.show();
				}
		});
		
	}
});
//在接受好友请求时 删除建议好友
window.ajaxDelSuggestFriend=function( id , name){
	    var pre = 'friend_';
	    var url = '/DelFriend.do';

	    XN.DO.confirm(
	    {
	        title : '削除',
	        message : '<p  class="popup_content">本当に' +  XN.STRING.escapeHTML(name) + 'さんを友達から削除しますか？</p>',
	        callBack : function( r )
	        {
	            if ( r ) del( id );
	        }
	    })

	    function del( id )
	    {
	        new XN.NET.xmlhttp(
	        {
	            url : url + '?id=' + id,
	            method : 'get',
	            onSuccess : function()
	            {
	                XN.DO.showMsg(XN.STRING.escapeHTML(name)+"を削除しました。");
	            },
	            onError : function()
	            {
	                XN.DO.showError( 'エラー' );
	            }
	        })
	    }
	}
XN.UGC = {};
XN.UI = XN.Ui = {};
XN.APP = XN.App = {};
XN.PAGE = XN.Page = {};
XN.CONFIG = XN.Config = {};
XN.UTIL = XN.Util = {};
XN.DOM.readyDo(_reload$_);

XN.UTIL.cache = function(p) {
	$extend( this , p );
	this.init();
};

XN.UTIL.cache.prototype = {
	cacheLength	:	null,
	_cacheData	:	null,
	
	init	:	function(){
		this._cacheData = [];
	},
	
	isExist	:	function( key ){
		return this.get( key );
	},
	
	add	: function( key ,value ){
		
		XN.log( '//----XN.UTIL.cache.add----' );
		XN.log( 'add key:' + key );
		
		if ( !isUndefined( this.isExist( key ) ) ) {
			XN.log( 'key has exist');
			XN.log( '----XN.UTIL.cache.add----//' );
			return;
		}
		
		if ( this.cacheLength && this.cacheLength == this._cacheData.length ) {
			this._cacheData.shift();
			
			XN.log( 'cache out of length' );	
			XN.log( this._cacheData );
			
		}
		this._cacheData.push( {
			'key'	:	key,
			'value':	value
		} );
		
		XN.log ( 'has add key:' + key + 'value:');
		XN.log ( value );
		XN.log ( this._cacheData );
		XN.log( '----XN.UTIL.cache.add----//' );
	},
	
	get	:	function( key ){
		
		XN.log( '//----XN.UTIL.cache.get----' );
		XN.log( 'key:' + key );
		

		for ( var i = this._cacheData.length - 1 ; i >= 0 ; i-- ) {
			if( this._cacheData[i].key == key ) {
				
				XN.log( 'get the value');
				XN.log( '----XN.UTIL.cache.get----//' );
				
				return this._cacheData[i].value;
			}
		}
		
		XN.log( 'find none' );
		XN.log( '----XN.UTIL.cache.get----//' );
		
	},
	
	clear	:	function(){
		this._cacheData = [];
	}
};

/**
 * 动态加载文件
 * @namespace XN
 * @method loadFile
 * @param {String} file
 * @param {Function} callBack
 */

( function() {
	var files = {};

	function hasLoad(file) {
		return !!getFile(file);
	}

	function getFile(file) {
		return files[encodeURIComponent(file)];
	}

	function addFile(file) {
		var obj = {};
		obj.file = file;
		obj.isLoaded = false;
		XN.EVENT.enableCustomEvent(obj);

		obj.addEvent('load', function() {
			this.isLoaded = true;
		});

		files[encodeURIComponent(file)] = obj;

		var el = $element('script');
		el.type = "text/javascript";
		el.src = file;

		obj.element = el;

		if (XN.Browser.IE) {
			el.onreadystatechange = function() {
				if ((this.readyState == 'loaded' || this.readyState == 'complete')
						&& !this.hasLoad) {
					this.hasLoad = true;
					getFile(file).fireEvent('load');
				}
			}
		} else {
			el.onload = function() {
				getFile(file).fireEvent('load');
			};
		}

		document.body.appendChild(el);
	}

	function loadFile(file, callBack) {
		if (/\.js(\?|$)/.test(file)) {
			if (!hasLoad(file)) {
				addFile(file);
			}

			if (!callBack)
				return;

			if (getFile(file).isLoaded) {
				callBack.call(getFile(file));
			} else {
				getFile(file).addEvent('load', callBack);
			}
		} else if (/\.css(\?|$)/.test(file)) {
			var el = $element('link');
			el.rel = 'stylesheet';
			el.type = 'text/css';
			el.href = file;
			document.getElementsByTagName('head')[0].appendChild(el);
		}
	}

	XN.loadFile = function(file, callBack) {
		loadFile(file, callBack);
	};
})();


XN.DOM.readyDo(function(){
	/**针对Safari和Chrome浏览器的样式*/
	if(XN.Browser.Safari){
		if($("SafariCss") && $("ChromeCss")){
			$("SafariCss").disabled=false;
			$("ChromeCss").disabled=true;
		}
	} else{
		if($("SafariCss") && $("ChromeCss")){
			$("SafariCss").disabled=true;
			$("ChromeCss").disabled=false;
		}
	}
	/**站内通知的控制*/
	if(XN.Cookie.get('siteWarning')== null){
		if($('siteWarningDiv')){
			$('siteWarningDiv').style.display='block';
		}
	}
	XN.Event.addEvent($('siteWarning'), 'click', function(e){
            XN.Cookie.set('siteWarning', '0', 10000, '/', XN.Env.domain);
            	if($('siteWarningDiv'))$('siteWarningDiv').hide();
        });
	
});


function isBlocked(id , fowardURL){
	new XN.NET.xmlhttp({
			url:"http://www.gummy.jp//ajax_blocked_judge.do?reciverId="+id,
			method:"get",
			onSuccess:function(r){
				var result=XN.JSON.parse(r.responseText);
				if(result.code!=null && result.code == "-1"){
					XN.DO.showError("プライバシー設定により、メッセージを送信することができません。");
				}else{
					window.location.href=fowardURL;
				}
			},
			onError:function(r){
				dialog.hide();				
				XN.DO.showError('通信エラー,リトライしてください');
			}
			});
	return;
}

/***
 * 简单的模板解析函数
 * add by zhaohuang.wang
 * **/
String.prototype.parseTemplate = function(data) {
    var regExp = new RegExp('%([\\w-]+)%', 'g');
    return this.replace(regExp, function(match){
        return data[match.substring(1, match.length - 1)] || '';
    });
};
/***
 * 在iframe所在的页面设置父页面的<iframe></iframe>的高度值
 * 当height为空时，设置成为当前页面高度
 * add by zhaohuang.wang
 * **/
var ResetIframe = function(options){
    this.options = typeof options=='object' && options!=null ? options : {};
    this.width = this.options.width || 0;
    this.height = this.options.height || 0;
    this.offset = this.options.offset || 4;
    this.proxy = this.options.proxy || 'apps.gummy.jp';
    this.path = 'adjustHeightProxy.html';
    if(window.attachEvent){
        window.attachEvent('onload', this.resetHeight.bind(this));
    }else if(window.addEventListener){
        window.addEventListener('load', this.resetHeight.bind(this), false);
    }
};

ResetIframe.prototype = {
    resetHeight: function(){
        try{
            this.someDomain();
            //console.info('some domain');
            return true;
        }catch(e){}
        //console.info('diff domain');
        //console.info(this.height, XN.Event.pageHeight());
        var iframe = $element('iframe');
        var proxyUrl = (this.proxy.indexOf('http://')==0 ? this.proxy : ('http://' + this.proxy)) + '/' + this.path;
        iframe.setAttribute('src', proxyUrl + '?t=' + (+new Date()) + '#' + (this.height || XN.Event.pageHeight() + this.offset));
        iframe.style.display = 'none';
        document.body.appendChild(iframe);
    },

    someDomain: function(){
        var topFrames = window.parent.document.getElementsByTagName('IFRAME');
        var height = this.height || XN.Event.pageHeight() + this.offset;
        //console.info(this.height, XN.Event.pageHeight());
        for(var i=0, j=topFrames.length; i<j; i++){
            if(window == topFrames[i].contentWindow){
                topFrames[i].style.height = height + 'px';
                if(this.width>0){
                    topFrames[i].style.width = this.width + 'px';
                }
                break;
            }
        }
    }
};

